From 2ed46109b97b127e31f386b786565b94a2f36df1 Mon Sep 17 00:00:00 2001 From: Danilo Pantani Date: Tue, 1 Oct 2024 00:57:15 -0300 Subject: [PATCH] bump. ignite --- .github/CODEOWNERS | 6 +- .github/CONTRIBUTING.md | 6 +- .github/ISSUE_TEMPLATE/bug-report.md | 18 + ...-feature-request.md => feature-request.md} | 6 +- .github/ISSUE_TEMPLATE/spn-bug-report.md | 20 - .../pull_request_template.md | 12 + .codecov.yml => .github/codecov.yml | 15 +- .github/dependabot.yml | 35 + .github/mergify.yml | 33 + .github/workflows/linkchecker-config.json | 22 + .github/workflows/linkchecker.yml | 21 + .github/workflows/release.yml | 55 + .github/workflows/sims.yml | 75 +- .github/workflows/simulation.yml | 27 +- .github/workflows/test-lint.yml | 29 +- .github/workflows/test-semantic.yml | 4 +- .github/workflows/test.yml | 35 +- .gitignore | 48 +- .golangci.yml | 43 - Makefile | 20 +- api/network/launch/module/v1/module.pulsar.go | 580 + api/network/launch/v1/chain.pulsar.go | 3920 ++ api/network/launch/v1/events.pulsar.go | 7415 ++++ api/network/launch/v1/genesis.pulsar.go | 2258 ++ .../launch/v1/genesis_account.pulsar.go | 797 + .../launch/v1/genesis_validator.pulsar.go | 2765 ++ .../launch/v1/initial_genesis.pulsar.go | 80 + api/network/launch/v1/param_change.pulsar.go | 775 + api/network/launch/v1/params.pulsar.go | 1656 + api/network/launch/v1/query.pulsar.go | 13282 +++++++ api/network/launch/v1/query_grpc.pb.go | 528 + api/network/launch/v1/request.pulsar.go | 3097 ++ .../launch/v1/request_content.pulsar.go | 80 + api/network/launch/v1/tx.pulsar.go | 9277 +++++ api/network/launch/v1/tx_grpc.pb.go | 372 + .../launch/v1/vesting_account.pulsar.go | 2098 ++ .../monitoringc/module/v1/module.pulsar.go | 582 + api/network/monitoringc/v1/genesis.pulsar.go | 1471 + .../v1/launch_id_from_channel_id.pulsar.go | 632 + ...aunch_id_from_verified_client_id.pulsar.go | 633 + .../v1/monitoring_history.pulsar.go | 632 + api/network/monitoringc/v1/packet.pulsar.go | 1048 + api/network/monitoringc/v1/params.pulsar.go | 504 + .../v1/provider_client_id.pulsar.go | 631 + api/network/monitoringc/v1/query.pulsar.go | 7210 ++++ api/network/monitoringc/v1/query_grpc.pb.go | 341 + api/network/monitoringc/v1/tx.pulsar.go | 2412 ++ api/network/monitoringc/v1/tx_grpc.pb.go | 150 + .../v1/verified_client_id.pulsar.go | 691 + .../monitoringp/module/v1/module.pulsar.go | 582 + .../v1/connection_channel_id.pulsar.go | 573 + .../v1/consumer_client_id.pulsar.go | 573 + api/network/monitoringp/v1/genesis.pulsar.go | 970 + .../monitoringp/v1/monitoring_info.pulsar.go | 662 + api/network/monitoringp/v1/packet.pulsar.go | 1048 + api/network/monitoringp/v1/params.pulsar.go | 855 + api/network/monitoringp/v1/query.pulsar.go | 3742 ++ api/network/monitoringp/v1/query_grpc.pb.go | 228 + api/network/monitoringp/v1/tx.pulsar.go | 1096 + api/network/monitoringp/v1/tx_grpc.pb.go | 113 + .../participation/module/v1/module.pulsar.go | 583 + .../v1/auction_used_allocations.pulsar.go | 781 + api/network/participation/v1/events.pulsar.go | 1247 + .../participation/v1/genesis.pulsar.go | 920 + api/network/participation/v1/params.pulsar.go | 2523 ++ api/network/participation/v1/query.pulsar.go | 7361 ++++ api/network/participation/v1/query_grpc.pb.go | 341 + api/network/participation/v1/tx.pulsar.go | 3030 ++ api/network/participation/v1/tx_grpc.pb.go | 187 + .../v1/used_allocations.pulsar.go | 658 + .../profile/module/v1/module.pulsar.go | 580 + api/network/profile/v1/coordinator.pulsar.go | 1941 + api/network/profile/v1/events.pulsar.go | 2921 ++ api/network/profile/v1/genesis.pulsar.go | 1279 + api/network/profile/v1/params.pulsar.go | 502 + api/network/profile/v1/query.pulsar.go | 7210 ++++ api/network/profile/v1/query_grpc.pb.go | 341 + api/network/profile/v1/tx.pulsar.go | 6879 ++++ api/network/profile/v1/tx_grpc.pb.go | 335 + api/network/profile/v1/validator.pulsar.go | 2119 ++ .../project/module/v1/module.pulsar.go | 580 + api/network/project/v1/events.pulsar.go | 7537 ++++ api/network/project/v1/genesis.pulsar.go | 1184 + .../project/v1/mainnet_account.pulsar.go | 1484 + .../v1/mainnet_account_balance.pulsar.go | 81 + api/network/project/v1/params.pulsar.go | 1374 + api/network/project/v1/project.pulsar.go | 1366 + .../project/v1/project_chains.pulsar.go | 744 + api/network/project/v1/query.pulsar.go | 10640 ++++++ api/network/project/v1/query_grpc.pb.go | 458 + .../project/v1/special_allocations.pulsar.go | 822 + api/network/project/v1/tx.pulsar.go | 11230 ++++++ api/network/project/v1/tx_grpc.pb.go | 446 + api/network/project/v1/vesting.pulsar.go | 1471 + api/network/reward/module/v1/module.pulsar.go | 580 + api/network/reward/v1/events.pulsar.go | 1787 + api/network/reward/v1/genesis.pulsar.go | 753 + api/network/reward/v1/params.pulsar.go | 501 + api/network/reward/v1/query.pulsar.go | 3124 ++ api/network/reward/v1/query_grpc.pb.go | 187 + api/network/reward/v1/reward_pool.pulsar.go | 1137 + api/network/reward/v1/tx.pulsar.go | 2681 ++ api/network/reward/v1/tx_grpc.pb.go | 150 + api/network/types/ibc.pulsar.go | 2940 ++ api/network/types/monitoring.pulsar.go | 2761 ++ app/app.go | 1343 +- app/app_config.go | 364 + app/config.go | 19 + app/export.go | 104 +- app/genesis.go | 9 +- app/genesis_account.go | 47 + app/ibc.go | 215 + app/sim_bench_test.go | 150 + app/sim_test.go | 425 + app/simulation_test.go | 520 - app/simutil/app_state.go | 167 - buf.work.yaml | 5 - changelog.md | 7 + cmd/encoding.go | 44 - cmd/genaccounts.go | 193 - cmd/networkd/cmd/commands.go | 187 + cmd/networkd/cmd/config.go | 62 + cmd/networkd/cmd/root.go | 147 + cmd/networkd/main.go | 20 + cmd/prefixes.go | 19 - cmd/root.go | 482 - cmd/spnd/main.go | 26 - config.yml | 207 +- config_2.yml | 59 +- contrib/devtools/Makefile | 2 +- docs/docs.go | 40 +- docs/static/openapi.yml | 30109 +--------------- docs/template/index.tpl | 28 + go.mod | 514 +- go.sum | 1226 +- papers/audit.pdf | Bin 181785 -> 301008 bytes papers/whitepaper.pdf | Bin 3458075 -> 6112269 bytes pkg/airdrop/airdrop_missions.go | 33 - pkg/chainid/chainid_test.go | 4 +- pkg/errors/critical.go | 26 + pkg/errors/critical_test.go | 17 + pkg/errors/errors.go | 166 + pkg/types/bytes_test.go | 2 +- pkg/types/consensus_state.go | 11 +- pkg/types/consensus_state_test.go | 2 +- pkg/types/ibc.pb.go | 76 +- pkg/types/monitoring.pb.go | 84 +- pkg/types/monitoring_packet_test.go | 6 +- pkg/types/signature_counts.go | 8 +- pkg/types/signature_counts_test.go | 6 +- pkg/types/validator_set.go | 5 +- pkg/types/validator_set_test.go | 2 +- proto/buf.gen.pulsar.yaml | 3 +- proto/buf.gen.swagger.yaml | 2 +- proto/buf.lock | 34 +- proto/buf.yaml | 50 +- proto/network/launch/module/v1/module.proto | 16 + .../launch => network/launch/v1}/chain.proto | 42 +- proto/network/launch/v1/events.proto | 102 + proto/network/launch/v1/genesis.proto | 37 + proto/network/launch/v1/genesis_account.proto | 21 + .../network/launch/v1/genesis_validator.proto | 40 + proto/network/launch/v1/param_change.proto | 11 + proto/network/launch/v1/params.proto | 50 + proto/network/launch/v1/query.proto | 185 + proto/network/launch/v1/request.proto | 44 + proto/network/launch/v1/tx.proto | 140 + .../launch/v1}/vesting_account.proto | 30 +- .../monitoringc/module/v1/module.proto | 16 + proto/network/monitoringc/v1/genesis.proto | 29 + .../v1}/launch_id_from_channel_id.proto | 5 +- .../launch_id_from_verified_client_id.proto | 4 +- .../monitoringc/v1/monitoring_history.proto | 9 + proto/network/monitoringc/v1/packet.proto | 13 + proto/network/monitoringc/v1/params.proto | 13 + .../monitoringc/v1}/provider_client_id.proto | 4 +- proto/network/monitoringc/v1/query.proto | 111 + proto/network/monitoringc/v1/tx.proto | 57 + .../monitoringc/v1/verified_client_id.proto | 9 + .../monitoringp/module/v1/module.proto | 16 + .../v1/connection_channel_id.proto | 8 + .../monitoringp/v1/consumer_client_id.proto | 8 + proto/network/monitoringp/v1/genesis.proto | 25 + .../monitoringp/v1/monitoring_info.proto | 12 + proto/network/monitoringp/v1/packet.proto | 12 + proto/network/monitoringp/v1/params.proto | 20 + .../monitoringp/v1}/query.proto | 72 +- proto/network/monitoringp/v1/tx.proto | 40 + .../participation/module/v1/module.proto | 16 + .../v1/auction_used_allocations.proto | 18 + proto/network/participation/v1/events.proto | 22 + proto/network/participation/v1/genesis.proto | 21 + proto/network/participation/v1/params.proto | 58 + proto/network/participation/v1/query.proto | 120 + proto/network/participation/v1/tx.proto | 60 + .../participation/v1/used_allocations.proto | 16 + proto/network/profile/module/v1/module.proto | 16 + proto/network/profile/v1/coordinator.proto | 25 + proto/network/profile/v1/events.proto | 35 + proto/network/profile/v1/genesis.proto | 25 + proto/network/profile/v1/params.proto | 13 + proto/network/profile/v1/query.proto | 110 + proto/network/profile/v1/tx.proto | 98 + proto/network/profile/v1/validator.proto | 26 + proto/network/project/module/v1/module.proto | 12 + proto/network/project/v1/events.proto | 104 + proto/network/project/v1/genesis.proto | 25 + .../network/project/v1/mainnet_account.proto | 33 + proto/network/project/v1/params.proto | 43 + proto/network/project/v1/project.proto | 35 + proto/network/project/v1/project_chains.proto | 9 + proto/network/project/v1/query.proto | 167 + .../project/v1/special_allocations.proto | 26 + proto/network/project/v1/tx.proto | 178 + .../project/v1}/vesting.proto | 28 +- proto/network/reward/module/v1/module.proto | 12 + proto/network/reward/v1/events.proto | 31 + proto/network/reward/v1/genesis.proto | 20 + proto/network/reward/v1/params.proto | 13 + .../reward => network/reward/v1}/query.proto | 50 +- proto/network/reward/v1/reward_pool.proto | 31 + proto/network/reward/v1/tx.proto | 77 + proto/{spn => network}/types/ibc.proto | 16 +- proto/{spn => network}/types/monitoring.proto | 20 +- proto/spn/launch/events.proto | 92 - proto/spn/launch/genesis.proto | 30 - proto/spn/launch/genesis_account.proto | 18 - proto/spn/launch/genesis_validator.proto | 35 - proto/spn/launch/params.proto | 35 - proto/spn/launch/query.proto | 186 - proto/spn/launch/request.proto | 51 - proto/spn/launch/tx.proto | 99 - proto/spn/monitoringc/genesis.proto | 23 - .../spn/monitoringc/monitoring_history.proto | 12 - proto/spn/monitoringc/params.proto | 11 - proto/spn/monitoringc/query.proto | 110 - proto/spn/monitoringc/tx.proto | 26 - .../spn/monitoringc/verified_client_id.proto | 9 - .../monitoringp/connection_channel_id.proto | 8 - .../spn/monitoringp/consumer_client_id.proto | 8 - proto/spn/monitoringp/genesis.proto | 19 - proto/spn/monitoringp/monitoring_info.proto | 12 - proto/spn/monitoringp/params.proto | 18 - proto/spn/monitoringp/tx.proto | 7 - .../auction_used_allocations.proto | 19 - proto/spn/participation/events.proto | 22 - proto/spn/participation/genesis.proto | 16 - proto/spn/participation/params.proto | 49 - proto/spn/participation/query.proto | 120 - proto/spn/participation/tx.proto | 25 - .../spn/participation/used_allocations.proto | 17 - proto/spn/profile/coordinator.proto | 25 - proto/spn/profile/events.proto | 35 - proto/spn/profile/genesis.proto | 17 - proto/spn/profile/query.proto | 94 - proto/spn/profile/tx.proto | 65 - proto/spn/profile/validator.proto | 26 - proto/spn/project/events.proto | 96 - proto/spn/project/genesis.proto | 21 - proto/spn/project/mainnet_account.proto | 28 - proto/spn/project/params.proto | 35 - proto/spn/project/project.proto | 29 - proto/spn/project/project_chains.proto | 9 - proto/spn/project/query.proto | 164 - proto/spn/project/special_allocations.proto | 20 - proto/spn/project/tx.proto | 127 - proto/spn/reward/events.proto | 27 - proto/spn/reward/genesis.proto | 14 - proto/spn/reward/params.proto | 11 - proto/spn/reward/reward_pool.proto | 25 - proto/spn/reward/tx.proto | 38 - readme.md | 20 +- scripts/metadata_sample.yml | 10 - scripts/populate.sh | 73 - testutil/constructor/constructor.go | 26 +- testutil/encoding/encoding.go | 27 - testutil/gen_app.go | 133 - testutil/keeper/bank_test.go | 15 +- testutil/keeper/fundraising.go | 2 +- testutil/keeper/initializer.go | 320 +- testutil/keeper/keeper.go | 170 +- testutil/keeper/launch.go | 54 +- testutil/keeper/mock_ibc.go | 10 +- testutil/keeper/mock_launch_hooks.go | 2 +- testutil/keeper/mocks/mock_launch_hooks.go | 21 +- testutil/keeper/monitoring_provider.go | 67 +- testutil/keeper/monitoringc.go | 76 + testutil/keeper/monitoringp.go | 75 + testutil/keeper/participation.go | 57 + testutil/keeper/profile.go | 52 +- testutil/keeper/profile_test.go | 22 +- testutil/keeper/project.go | 59 +- testutil/keeper/reward.go | 59 + testutil/keeper/staking.go | 23 +- testutil/network/network.go | 106 +- testutil/networksuite/networksuite.go | 87 +- testutil/sample/claim.go | 5 +- testutil/sample/fundraising.go | 6 +- testutil/sample/launch.go | 16 +- testutil/sample/monitoring.go | 6 +- testutil/sample/participation.go | 2 +- testutil/sample/profile.go | 8 +- testutil/sample/project.go | 20 +- testutil/sample/reward.go | 2 +- testutil/sample/sample.go | 55 +- testutil/simulation/util.go | 56 - tools/tools.go | 2 - x/launch/client/cli/query.go | 45 - x/launch/client/cli/query_chain.go | 78 - x/launch/client/cli/query_chain_test.go | 119 - x/launch/client/cli/query_genesis_account.go | 86 - .../client/cli/query_genesis_account_test.go | 131 - .../client/cli/query_genesis_validator.go | 86 - .../cli/query_genesis_validator_test.go | 131 - x/launch/client/cli/query_param_change.go | 51 - .../client/cli/query_param_change_test.go | 74 - x/launch/client/cli/query_params.go | 35 - x/launch/client/cli/query_request.go | 92 - x/launch/client/cli/query_request_test.go | 130 - x/launch/client/cli/query_test.go | 19 - x/launch/client/cli/query_vesting_account.go | 86 - .../client/cli/query_vesting_account_test.go | 131 - x/launch/client/cli/tx.go | 39 - x/launch/client/cli/tx_create_chain.go | 172 - x/launch/client/cli/tx_edit_chain.go | 63 - x/launch/client/cli/tx_request_add_account.go | 63 - .../client/cli/tx_request_add_validator.go | 87 - .../cli/tx_request_add_vesting_account.go | 74 - .../client/cli/tx_request_change_param.go | 50 - .../client/cli/tx_request_remove_account.go | 52 - .../client/cli/tx_request_remove_validator.go | 52 - x/launch/client/cli/tx_revert_launch.go | 41 - x/launch/client/cli/tx_settle_request.go | 65 - x/launch/client/cli/tx_trigger_launch.go | 47 - .../cli/tx_update_launch_information.go | 86 - x/launch/genesis.go | 80 - x/launch/genesis_test.go | 40 - x/launch/keeper/chain.go | 138 +- x/launch/keeper/chain_test.go | 71 +- x/launch/keeper/genesis_account.go | 79 +- x/launch/keeper/genesis_account_test.go | 67 - x/launch/keeper/genesis_validator.go | 84 +- x/launch/keeper/genesis_validator_test.go | 81 +- x/launch/keeper/grpc.go | 7 - x/launch/keeper/grpc_chain.go | 54 - x/launch/keeper/grpc_chain_test.go | 103 - x/launch/keeper/grpc_genesis_account.go | 113 - x/launch/keeper/grpc_genesis_account_test.go | 214 - x/launch/keeper/grpc_genesis_validator.go | 58 - .../keeper/grpc_genesis_validator_test.go | 126 - x/launch/keeper/grpc_param_change.go | 43 - x/launch/keeper/grpc_param_change_test.go | 1 - x/launch/keeper/grpc_params.go | 20 - x/launch/keeper/grpc_params_test.go | 30 - x/launch/keeper/grpc_request.go | 59 - x/launch/keeper/grpc_request_test.go | 112 - x/launch/keeper/grpc_vesting_account.go | 58 - x/launch/keeper/grpc_vesting_account_test.go | 128 - x/launch/keeper/hooks.go | 29 - x/launch/keeper/invariants.go | 37 +- x/launch/keeper/invariants_test.go | 63 +- x/launch/keeper/keeper.go | 143 +- x/launch/keeper/msg_create_chain.go | 67 - x/launch/keeper/msg_edit_chain.go | 88 - x/launch/keeper/msg_revert_launch.go | 60 - x/launch/keeper/msg_send_request.go | 94 - x/launch/keeper/{msg.go => msg_server.go} | 2 +- x/launch/keeper/msg_server_create_chain.go | 74 + ...est.go => msg_server_create_chain_test.go} | 53 +- x/launch/keeper/msg_server_edit_chain.go | 98 + ..._test.go => msg_server_edit_chain_test.go} | 45 +- x/launch/keeper/msg_server_revert_launch.go | 74 + ...st.go => msg_server_revert_launch_test.go} | 71 +- x/launch/keeper/msg_server_send_request.go | 103 + ...est.go => msg_server_send_request_test.go} | 47 +- x/launch/keeper/msg_server_settle_request.go | 82 + ...t.go => msg_server_settle_request_test.go} | 56 +- x/launch/keeper/msg_server_trigger_launch.go | 73 + ...t.go => msg_server_trigger_launch_test.go} | 37 +- .../msg_server_update_launch_information.go | 65 + ..._server_update_launch_information_test.go} | 34 +- x/launch/keeper/msg_settle_request.go | 83 - x/launch/keeper/msg_trigger_launch.go | 61 - .../keeper/msg_update_launch_information.go | 58 - x/launch/keeper/msg_update_params.go | 29 + x/launch/keeper/msg_update_params_test.go | 66 + x/launch/keeper/param_change.go | 53 - x/launch/keeper/param_change_test.go | 49 - x/launch/keeper/params.go | 56 - x/launch/keeper/params_test.go | 25 - x/launch/keeper/query.go | 17 + x/launch/keeper/query_chain.go | 51 + x/launch/keeper/query_chain_test.go | 130 + x/launch/keeper/query_genesis_account.go | 59 + x/launch/keeper/query_genesis_account_test.go | 142 + x/launch/keeper/query_genesis_validator.go | 59 + .../keeper/query_genesis_validator_test.go | 142 + x/launch/keeper/query_param_change.go | 35 + x/launch/keeper/query_param_change_test.go | 91 + x/launch/keeper/query_params.go | 29 + x/launch/keeper/query_params_test.go | 23 + x/launch/keeper/query_request.go | 54 + x/launch/keeper/query_request_test.go | 133 + x/launch/keeper/query_vesting_account.go | 59 + x/launch/keeper/query_vesting_account_test.go | 142 + x/launch/keeper/request.go | 258 +- x/launch/keeper/request_test.go | 195 +- x/launch/keeper/validator_set.go | 24 +- x/launch/keeper/validator_set_test.go | 22 +- x/launch/keeper/vesting_account.go | 65 +- x/launch/keeper/vesting_account_test.go | 68 - x/launch/module.go | 167 - x/launch/module/autocli.go | 146 + x/launch/module/genesis.go | 141 + x/launch/module/genesis_test.go | 99 + x/launch/module/module.go | 258 + x/launch/module/simulation.go | 297 + x/launch/module_simulation.go | 214 - x/launch/simulation/create_chain.go | 72 + x/launch/simulation/edit_chain.go | 82 + x/launch/simulation/{store.go => helpers.go} | 66 +- x/launch/simulation/revert_launch.go | 65 + x/launch/simulation/send_request.go | 398 + x/launch/simulation/settle_request.go | 67 + x/launch/simulation/simulation.go | 611 - x/launch/simulation/store_test.go | 399 - x/launch/simulation/trigger_launch.go | 57 + .../simulation/update_launch_information.go | 63 + x/launch/types/chain.go | 2 +- x/launch/types/chain.pb.go | 126 +- x/launch/types/chain_test.go | 8 +- x/launch/types/codec.go | 33 +- x/launch/types/errors.go | 77 +- x/launch/types/events.pb.go | 173 +- x/launch/types/expected_keepers.go | 53 +- x/launch/types/genesis.go | 55 +- x/launch/types/genesis.pb.go | 337 +- x/launch/types/genesis_account.pb.go | 57 +- x/launch/types/genesis_test.go | 441 +- x/launch/types/genesis_validator.pb.go | 92 +- x/launch/types/hooks.go | 23 +- x/launch/types/initial_genesis.pb.go | 39 + x/launch/types/initial_genesis_test.go | 4 +- x/launch/types/keys.go | 121 +- x/launch/types/msg_create_chain.go | 80 - x/launch/types/msg_create_chain_test.go | 80 - x/launch/types/msg_edit_chain.go | 62 - x/launch/types/msg_edit_chain_test.go | 86 - x/launch/types/msg_revert_launch.go | 49 - x/launch/types/msg_revert_launch_test.go | 41 - x/launch/types/msg_send_request.go | 55 - x/launch/types/msg_send_request_test.go | 57 - x/launch/types/msg_settle_request.go | 51 - x/launch/types/msg_settle_request_test.go | 50 - x/launch/types/msg_trigger_launch.go | 52 - x/launch/types/msg_trigger_launch_test.go | 41 - .../types/msg_update_launch_information.go | 78 - .../msg_update_launch_information_test.go | 146 - x/launch/types/msgs.go | 180 + x/launch/types/msgs_test.go | 325 + x/launch/types/param_change.pb.go | 458 + x/launch/types/params.go | 47 +- x/launch/types/params.pb.go | 138 +- x/launch/types/params_test.go | 224 - x/launch/types/peer_test.go | 4 +- x/launch/types/query.pb.go | 1687 +- x/launch/types/query.pb.gw.go | 440 +- x/launch/types/request.pb.go | 420 +- x/launch/types/request_content.go | 23 - x/launch/types/request_content.pb.go | 39 + x/launch/types/request_content_test.go | 10 +- x/launch/types/tx.pb.go | 632 +- x/launch/types/types.go | 1 + x/launch/types/vesting_account.pb.go | 91 +- x/launch/types/vesting_options_test.go | 10 +- x/monitoringc/client/cli/query.go | 35 - .../cli/query_launch_id_from_channel_id.go | 74 - .../query_launch_id_from_channel_id_test.go | 138 - .../client/cli/query_monitoring_history.go | 45 - .../cli/query_monitoring_history_test.go | 71 - x/monitoringc/client/cli/query_params.go | 35 - .../client/cli/query_provider_client_id.go | 79 - .../cli/query_provider_client_id_test.go | 138 - x/monitoringc/client/cli/query_test.go | 19 - .../client/cli/query_verified_client_ids.go | 43 - .../cli/query_verified_client_ids_test.go | 71 - x/monitoringc/client/cli/tx.go | 15 +- x/monitoringc/client/cli/tx_create_client.go | 70 - x/monitoringc/genesis.go | 62 - x/monitoringc/genesis_test.go | 81 - x/monitoringc/keeper/grpc.go | 7 - .../keeper/grpc_launch_id_from_channel_id.go | 57 - .../keeper/grpc_monitoring_history.go | 28 - .../keeper/grpc_monitoring_history_test.go | 65 - x/monitoringc/keeper/grpc_params.go | 20 - x/monitoringc/keeper/grpc_params_test.go | 28 - .../keeper/grpc_provider_client_id.go | 57 - .../keeper/grpc_verified_client_ids.go | 27 - .../keeper/grpc_verified_client_ids_test.go | 65 - x/monitoringc/keeper/handshake.go | 124 - x/monitoringc/keeper/handshake_test.go | 186 - x/monitoringc/keeper/invariants.go | 15 +- x/monitoringc/keeper/invariants_test.go | 22 +- x/monitoringc/keeper/keeper.go | 245 +- .../keeper/launch_id_from_channel_id.go | 51 - .../keeper/launch_id_from_channel_id_test.go | 53 - .../launch_id_from_verified_client_id.go | 51 - .../launch_id_from_verified_client_id_test.go | 53 - x/monitoringc/keeper/monitoring_history.go | 51 - .../keeper/monitoring_history_test.go | 52 - x/monitoringc/keeper/monitoring_packet.go | 67 - .../keeper/monitoring_packet_test.go | 166 - .../keeper/{msg.go => msg_server.go} | 2 +- ..._client.go => msg_server_create_client.go} | 37 +- ...st.go => msg_server_create_client_test.go} | 34 +- x/monitoringc/keeper/msg_update_params.go | 29 + .../keeper/msg_update_params_test.go | 66 + x/monitoringc/keeper/params.go | 17 - x/monitoringc/keeper/params_test.go | 24 - x/monitoringc/keeper/provider_client_id.go | 48 - .../keeper/provider_client_id_test.go | 52 - x/monitoringc/keeper/query.go | 17 + .../keeper/query_launch_id_from_channel_id.go | 50 + ...> query_launch_id_from_channel_id_test.go} | 89 +- .../keeper/query_monitoring_history.go | 29 + .../keeper/query_monitoring_history_test.go | 81 + x/monitoringc/keeper/query_params.go | 29 + x/monitoringc/keeper/query_params_test.go | 23 + .../keeper/query_provider_client_id.go | 50 + ...st.go => query_provider_client_id_test.go} | 90 +- .../keeper/query_verified_client_id.go | 29 + .../keeper/query_verified_client_id_test.go | 81 + x/monitoringc/keeper/verified_client_id.go | 87 +- .../keeper/verified_client_id_test.go | 126 - x/monitoringc/module.go | 169 - x/monitoringc/module/autocli.go | 84 + x/monitoringc/module/genesis.go | 106 + x/monitoringc/module/genesis_test.go | 79 + x/monitoringc/module/module.go | 244 + x/monitoringc/module/module_ibc.go | 237 + .../simulation.go} | 48 +- x/monitoringc/module_ibc.go | 257 - x/monitoringc/simulation/create_client.go | 8 +- x/monitoringc/simulation/helpers.go | 15 + x/monitoringc/types/codec.go | 19 +- x/monitoringc/types/errors.go | 36 +- x/monitoringc/types/events_ibc.go | 3 +- x/monitoringc/types/expected_ibc_keeper.go | 49 + x/monitoringc/types/expected_keepers.go | 66 +- x/monitoringc/types/genesis.go | 110 +- x/monitoringc/types/genesis.pb.go | 275 +- x/monitoringc/types/genesis_test.go | 171 +- x/monitoringc/types/keys.go | 68 +- .../types/launch_id_from_channel_id.pb.go | 38 +- .../launch_id_from_verified_client_id.pb.go | 39 +- x/monitoringc/types/monitoring_history.pb.go | 84 +- x/monitoringc/types/msg_create_client_test.go | 123 - .../types/{msg_create_client.go => msgs.go} | 40 +- x/monitoringc/types/packet.pb.go | 502 + x/monitoringc/types/params.go | 29 +- x/monitoringc/types/params.pb.go | 63 +- x/monitoringc/types/provider_client_id.pb.go | 36 +- x/monitoringc/types/query.pb.go | 1550 +- x/monitoringc/types/query.pb.gw.go | 332 +- x/monitoringc/types/tx.pb.go | 484 +- x/monitoringc/types/types.go | 1 + x/monitoringc/types/types_test.go | 11 - x/monitoringc/types/verified_client_id.pb.go | 37 +- x/monitoringp/client/cli/query.go | 34 - .../client/cli/query_connection_channel_id.go | 37 - .../client/cli/query_consumer_client_id.go | 37 - .../client/cli/query_monitoring_info.go | 37 - x/monitoringp/client/cli/query_params.go | 35 - x/monitoringp/client/cli/tx.go | 15 +- x/monitoringp/genesis.go | 72 - x/monitoringp/genesis_test.go | 44 - x/monitoringp/keeper/begin_block.go | 107 - x/monitoringp/keeper/begin_block_test.go | 369 - x/monitoringp/keeper/connection_channel_id.go | 28 - .../keeper/connection_channel_id_test.go | 33 - x/monitoringp/keeper/consumer_client.go | 68 - x/monitoringp/keeper/consumer_client_id.go | 28 - .../keeper/consumer_client_id_test.go | 33 - x/monitoringp/keeper/consumer_client_test.go | 53 - x/monitoringp/keeper/grpc.go | 7 - .../keeper/grpc_connection_channel_id.go | 25 - .../keeper/grpc_connection_channel_id_test.go | 59 - .../keeper/grpc_consumer_client_id.go | 25 - .../keeper/grpc_consumer_client_id_test.go | 59 - x/monitoringp/keeper/grpc_monitoring_info.go | 25 - .../keeper/grpc_monitoring_info_test.go | 59 - x/monitoringp/keeper/grpc_params.go | 20 - x/monitoringp/keeper/grpc_params_test.go | 26 - x/monitoringp/keeper/handshake.go | 98 - x/monitoringp/keeper/handshake_test.go | 166 - x/monitoringp/keeper/keeper.go | 212 +- x/monitoringp/keeper/keeper_test.go | 11 - x/monitoringp/keeper/monitoring_info.go | 34 - x/monitoringp/keeper/monitoring_info_test.go | 45 - x/monitoringp/keeper/monitoring_packet.go | 86 - x/monitoringp/keeper/msg_server.go | 17 + x/monitoringp/keeper/msg_update_params.go | 29 + .../keeper/msg_update_params_test.go | 66 + x/monitoringp/keeper/params.go | 54 - x/monitoringp/keeper/params_test.go | 45 - x/monitoringp/keeper/query.go | 17 + .../keeper/query_connection_channel_id.go | 29 + .../query_connection_channel_id_test.go | 53 + .../keeper/query_consumer_client_id.go | 29 + .../keeper/query_consumer_client_id_test.go | 53 + x/monitoringp/keeper/query_monitoring_info.go | 29 + .../keeper/query_monitoring_info_test.go | 53 + x/monitoringp/keeper/query_params.go | 29 + x/monitoringp/keeper/query_params_test.go | 23 + x/monitoringp/module.go | 173 - x/monitoringp/module/autocli.go | 53 + x/monitoringp/module/genesis.go | 76 + x/monitoringp/module/genesis_test.go | 48 + x/monitoringp/module/module.go | 240 + x/monitoringp/module/module_ibc.go | 237 + x/monitoringp/module/simulation.go | 60 + x/monitoringp/module_ibc.go | 259 - x/monitoringp/module_simulation.go | 70 - x/monitoringp/simulation/helpers.go | 15 + x/monitoringp/simulation/simulation.go | 1 - x/monitoringp/types/codec.go | 18 +- .../types/connection_channel_id.pb.go | 35 +- x/monitoringp/types/consumer_client_id.pb.go | 34 +- x/monitoringp/types/errors.go | 17 +- x/monitoringp/types/events_ibc.go | 3 +- x/monitoringp/types/expected_ibc_keeper.go | 50 + x/monitoringp/types/expected_keepers.go | 47 +- x/monitoringp/types/genesis.go | 22 +- x/monitoringp/types/genesis.pb.go | 209 +- x/monitoringp/types/genesis_test.go | 29 +- x/monitoringp/types/keys.go | 38 +- x/monitoringp/types/monitoring_info.pb.go | 44 +- x/monitoringp/types/packet.pb.go | 502 + x/monitoringp/types/params.go | 73 +- x/monitoringp/types/params.pb.go | 100 +- x/monitoringp/types/params_test.go | 147 - x/monitoringp/types/query.pb.go | 655 +- x/monitoringp/types/query.pb.gw.go | 114 +- x/monitoringp/types/tx.pb.go | 551 +- x/monitoringp/types/types.go | 1 + x/participation/client/cli/query.go | 37 - .../cli/query_auction_used_allocations.go | 84 - .../query_auction_used_allocations_test.go | 142 - .../client/cli/query_available_allocations.go | 42 - x/participation/client/cli/query_params.go | 35 - x/participation/client/cli/query_test.go | 19 - .../client/cli/query_total_allocations.go | 42 - .../client/cli/query_used_allocations.go | 74 - .../client/cli/query_used_allocations_test.go | 135 - x/participation/client/cli/tx.go | 30 - x/participation/client/cli/tx_participate.go | 48 - .../client/cli/tx_withdraw_allocations.go | 43 - x/participation/genesis.go | 35 - x/participation/genesis_test.go | 28 - .../keeper/auction_used_allocations.go | 62 - .../keeper/auction_used_allocations_test.go | 80 - .../keeper/available_allocations.go | 13 +- .../keeper/available_allocations_test.go | 89 - x/participation/keeper/grpc.go | 7 - .../keeper/grpc_auction_used_allocations.go | 59 - .../keeper/grpc_available_allocations.go | 28 - .../keeper/grpc_available_allocations_test.go | 70 - x/participation/keeper/grpc_params.go | 20 - x/participation/keeper/grpc_params_test.go | 30 - .../keeper/grpc_total_allocations.go | 26 - .../keeper/grpc_total_allocations_test.go | 70 - .../keeper/grpc_used_allocations.go | 67 - x/participation/keeper/invariants.go | 12 +- x/participation/keeper/invariants_test.go | 29 +- x/participation/keeper/keeper.go | 90 +- .../keeper/{msg.go => msg_server.go} | 2 +- ...rticipate.go => msg_server_participate.go} | 60 +- ...test.go => msg_server_participate_test.go} | 73 +- .../keeper/msg_server_withdraw_allocations.go | 73 + ...> msg_server_withdraw_allocations_test.go} | 83 +- x/participation/keeper/msg_update_params.go | 29 + .../keeper/msg_update_params_test.go | 66 + .../keeper/msg_withdraw_allocations.go | 59 - x/participation/keeper/params.go | 48 - x/participation/keeper/params_test.go | 25 - x/participation/keeper/query.go | 17 + .../keeper/query_auction_used_allocations.go | 59 + ...=> query_auction_used_allocations_test.go} | 93 +- .../keeper/query_available_allocations.go | 20 + x/participation/keeper/query_params.go | 29 + x/participation/keeper/query_params_test.go | 23 + .../keeper/query_total_allocations.go | 20 + .../keeper/query_used_allocations.go | 50 + ...test.go => query_used_allocations_test.go} | 81 +- x/participation/keeper/registration_period.go | 16 +- .../keeper/registration_period_test.go | 10 +- x/participation/keeper/total_allocations.go | 24 +- .../keeper/total_allocations_test.go | 20 +- x/participation/keeper/used_allocations.go | 58 +- .../keeper/used_allocations_test.go | 55 - x/participation/module.go | 172 - x/participation/module/autocli.go | 85 + x/participation/module/genesis.go | 60 + x/participation/module/genesis_test.go | 50 + x/participation/module/module.go | 231 + x/participation/module/simulation.go | 97 + x/participation/module_simulation.go | 96 - .../simulation/{store.go => helpers.go} | 139 +- x/participation/simulation/participate.go | 68 + x/participation/simulation/simulation.go | 159 - x/participation/simulation/store_test.go | 441 - .../simulation/withdraw_allocations.go | 57 + .../types/auction_used_allocations.pb.go | 63 +- x/participation/types/codec.go | 16 +- x/participation/types/errors.go | 30 +- x/participation/types/events.pb.go | 64 +- x/participation/types/expected_keepers.go | 32 +- x/participation/types/genesis.go | 58 +- x/participation/types/genesis.pb.go | 128 +- x/participation/types/genesis_test.go | 130 +- x/participation/types/keys.go | 50 +- x/participation/types/msg_participate.go | 47 - x/participation/types/msg_participate_test.go | 42 - .../types/msg_withdraw_allocations.go | 46 - .../types/msg_withdraw_allocations_test.go | 42 - x/participation/types/msgs.go | 26 + x/participation/types/params.go | 52 +- x/participation/types/params.pb.go | 144 +- x/participation/types/params_test.go | 278 - x/participation/types/query.pb.go | 1695 +- x/participation/types/query.pb.gw.go | 292 +- x/participation/types/tier_test.go | 40 - x/participation/types/tx.pb.go | 483 +- x/participation/types/types.go | 1 + x/participation/types/types_test.go | 11 - x/participation/types/used_allocations.pb.go | 53 +- x/profile/client/cli/query.go | 35 - x/profile/client/cli/query_coordinator.go | 78 - .../cli/query_coordinator_by_address.go | 38 - .../cli/query_coordinator_by_address_test.go | 61 - .../client/cli/query_coordinator_test.go | 119 - x/profile/client/cli/query_test.go | 19 - x/profile/client/cli/query_validator.go | 69 - .../query_validator_by_operator_address.go | 41 - x/profile/client/cli/query_validator_test.go | 127 - x/profile/client/cli/tx.go | 34 - .../cli/tx_add_validator_operator_address.go | 101 - x/profile/client/cli/tx_create_coordinator.go | 63 - .../client/cli/tx_disable_coordinator.go | 34 - .../cli/tx_update_coordinator_address.go | 34 - .../cli/tx_update_coordinator_description.go | 57 - .../cli/tx_update_validator_description.go | 76 - x/profile/genesis.go | 51 - x/profile/genesis_test.go | 36 - x/profile/keeper/coordinator.go | 157 +- x/profile/keeper/coordinator_by_address.go | 92 - .../keeper/coordinator_by_address_test.go | 149 - x/profile/keeper/coordinator_test.go | 65 - x/profile/keeper/grpc.go | 7 - x/profile/keeper/grpc_coordinator.go | 53 - .../keeper/grpc_coordinator_by_address.go | 29 - .../grpc_coordinator_by_address_test.go | 54 - x/profile/keeper/grpc_coordinator_test.go | 102 - x/profile/keeper/grpc_validator.go | 57 - .../grpc_validator_by_operator_address.go | 28 - ...grpc_validator_by_operator_address_test.go | 66 - x/profile/keeper/grpc_validator_test.go | 109 - x/profile/keeper/invariants.go | 14 +- x/profile/keeper/invariants_test.go | 33 +- x/profile/keeper/keeper.go | 82 +- .../msg_add_validator_operator_address.go | 55 - ...msg_add_validator_operator_address_test.go | 76 - x/profile/keeper/msg_create_coordinator.go | 44 - .../keeper/msg_create_coordinator_test.go | 63 - x/profile/keeper/msg_disable_coordinator.go | 52 - .../keeper/msg_disable_coordinator_test.go | 54 - x/profile/keeper/{msg.go => msg_server.go} | 2 +- x/profile/keeper/msg_server_coordinator.go | 209 + .../keeper/msg_server_coordinator_test.go | 130 + x/profile/keeper/msg_server_validator.go | 118 + .../keeper/msg_update_coordinator_address.go | 65 - .../msg_update_coordinator_address_test.go | 88 - .../msg_update_coordinator_description.go | 53 - ...msg_update_coordinator_description_test.go | 92 - x/profile/keeper/msg_update_params.go | 29 + x/profile/keeper/msg_update_params_test.go | 66 + .../msg_update_validator_description.go | 52 - .../msg_update_validator_description_test.go | 91 - x/profile/keeper/query.go | 17 + x/profile/keeper/query_coordinator.go | 82 + x/profile/keeper/query_coordinator_test.go | 191 + x/profile/keeper/query_params.go | 29 + x/profile/keeper/query_params_test.go | 23 + x/profile/keeper/query_validator.go | 76 + x/profile/keeper/query_validator_test.go | 205 + x/profile/keeper/validator.go | 60 +- .../keeper/validator_by_operator_address.go | 54 - .../validator_by_operator_address_test.go | 69 - x/profile/keeper/validator_test.go | 45 - x/profile/module.go | 171 - x/profile/module/autocli.go | 97 + x/profile/module/genesis.go | 104 + x/profile/module/genesis_test.go | 52 + x/profile/module/module.go | 223 + x/profile/module/simulation.go | 175 + x/profile/module_simulation.go | 125 - x/profile/simulation/coordinator.go | 200 + x/profile/simulation/helpers.go | 15 + x/profile/simulation/simulation.go | 278 - x/profile/simulation/store.go | 38 - x/profile/simulation/store_test.go | 62 - x/profile/simulation/validator.go | 139 + x/profile/types/codec.go | 27 +- x/profile/types/coordinator.pb.go | 73 +- x/profile/types/errors.go | 22 +- x/profile/types/events.pb.go | 72 +- x/profile/types/expected_keepers.go | 15 +- x/profile/types/genesis.go | 41 +- x/profile/types/genesis.pb.go | 195 +- x/profile/types/genesis_test.go | 53 +- x/profile/types/keys.go | 52 +- x/profile/types/message_validator.go | 76 + ...ress_test.go => message_validator_test.go} | 54 +- x/profile/types/messages_coordinator.go | 78 + x/profile/types/messages_coordinator_test.go | 107 + .../msg_add_validator_operator_address.go | 62 - x/profile/types/msg_create_coordinator.go | 50 - .../types/msg_create_coordinator_test.go | 42 - x/profile/types/msg_disable_coordinator.go | 45 - .../types/msg_disable_coordinator_test.go | 42 - .../types/msg_update_coordinator_address.go | 54 - .../msg_update_coordinator_address_test.go | 61 - .../msg_update_coordinator_description.go | 55 - ...msg_update_coordinator_description_test.go | 56 - .../types/msg_update_validator_description.go | 66 - .../msg_update_validator_description_test.go | 56 - x/profile/types/params.go | 16 + x/profile/types/params.pb.go | 289 + x/profile/types/query.pb.go | 1723 +- x/profile/types/query.pb.gw.go | 345 +- x/profile/types/tx.pb.go | 596 +- x/profile/types/types.go | 1 + x/profile/types/validator.pb.go | 72 +- x/profile/types/validator_test.go | 4 +- x/project/client/cli/query.go | 39 - x/project/client/cli/query_mainnet_account.go | 163 - .../client/cli/query_mainnet_account_test.go | 131 - x/project/client/cli/query_params.go | 35 - x/project/client/cli/query_project.go | 78 - x/project/client/cli/query_project_chains.go | 45 - .../client/cli/query_project_chains_test.go | 67 - x/project/client/cli/query_project_test.go | 121 - .../cli/query_special_allocations_balance.go | 46 - x/project/client/cli/query_test.go | 19 - x/project/client/cli/query_total_shares.go | 38 - x/project/client/cli/tx.go | 37 - x/project/client/cli/tx_burn_vouchers.go | 50 - x/project/client/cli/tx_create_project.go | 59 - x/project/client/cli/tx_edit_project.go | 61 - x/project/client/cli/tx_initialize_mainnet.go | 46 - x/project/client/cli/tx_mint_vouchers.go | 49 - x/project/client/cli/tx_redeem_vouchers.go | 63 - x/project/client/cli/tx_unredeem_vouchers.go | 49 - .../cli/tx_update_special_allocations.go | 54 - .../client/cli/tx_update_total_supply.go | 50 - x/project/genesis.go | 50 - x/project/genesis_test.go | 39 - x/project/keeper/grpc.go | 7 - x/project/keeper/grpc_mainnet_account.go | 136 - x/project/keeper/grpc_mainnet_account_test.go | 338 - x/project/keeper/grpc_params.go | 20 - x/project/keeper/grpc_params_test.go | 28 - x/project/keeper/grpc_project.go | 54 - x/project/keeper/grpc_project_chains.go | 28 - x/project/keeper/grpc_project_chains_test.go | 53 - x/project/keeper/grpc_project_test.go | 98 - .../grpc_special_allocations_balance.go | 50 - .../grpc_special_allocations_balance_test.go | 93 - x/project/keeper/grpc_total_shares.go | 23 - x/project/keeper/grpc_total_shares_test.go | 48 - x/project/keeper/invariants.go | 22 +- x/project/keeper/invariants_test.go | 80 +- x/project/keeper/keeper.go | 118 +- x/project/keeper/mainnet_account.go | 119 +- x/project/keeper/mainnet_account_test.go | 67 - x/project/keeper/msg_create_project.go | 80 - x/project/keeper/msg_edit_project.go | 63 - x/project/keeper/msg_initialize_mainnet.go | 82 - x/project/keeper/{msg.go => msg_server.go} | 2 +- ...ouchers.go => msg_server_burn_vouchers.go} | 34 +- ...st.go => msg_server_burn_vouchers_test.go} | 36 +- x/project/keeper/msg_server_create_project.go | 90 + ...t.go => msg_server_create_project_test.go} | 58 +- x/project/keeper/msg_server_edit_project.go | 75 + ...est.go => msg_server_edit_project_test.go} | 37 +- .../keeper/msg_server_initialize_mainnet.go | 86 + ... => msg_server_initialize_mainnet_test.go} | 40 +- ...ouchers.go => msg_server_mint_vouchers.go} | 53 +- ...st.go => msg_server_mint_vouchers_test.go} | 36 +- ...chers.go => msg_server_redeem_vouchers.go} | 53 +- ....go => msg_server_redeem_vouchers_test.go} | 54 +- ...ers.go => msg_server_unredeem_vouchers.go} | 50 +- ...o => msg_server_unredeem_vouchers_test.go} | 50 +- ... msg_server_update_special_allocations.go} | 46 +- ...server_update_special_allocations_test.go} | 34 +- .../keeper/msg_server_update_total_supply.go | 71 + ...=> msg_server_update_total_supply_test.go} | 35 +- x/project/keeper/msg_update_params.go | 29 + x/project/keeper/msg_update_params_test.go | 66 + x/project/keeper/msg_update_total_supply.go | 61 - x/project/keeper/params.go | 40 - x/project/keeper/params_test.go | 23 - x/project/keeper/project.go | 110 +- .../keeper/project_auction_event_hooks.go | 102 +- .../project_auction_event_hooks_test.go | 24 +- x/project/keeper/project_chains.go | 66 +- x/project/keeper/project_chains_test.go | 54 +- x/project/keeper/project_mainnet.go | 15 +- x/project/keeper/project_mainnet_test.go | 37 +- x/project/keeper/project_test.go | 63 - x/project/keeper/query.go | 17 + x/project/keeper/query_mainnet_account.go | 56 + .../keeper/query_mainnet_account_balance.go | 30 + .../keeper/query_mainnet_account_test.go | 143 + x/project/keeper/query_params.go | 29 + x/project/keeper/query_params_test.go | 23 + x/project/keeper/query_project.go | 51 + x/project/keeper/query_project_chains.go | 29 + x/project/keeper/query_project_chains_test.go | 81 + x/project/keeper/query_project_test.go | 130 + .../query_special_allocations_balance.go | 20 + x/project/keeper/query_total_shares.go | 20 + x/project/keeper/total_shares.go | 34 - x/project/keeper/total_shares_test.go | 20 - x/project/module.go | 170 - x/project/module/autocli.go | 149 + x/project/module/genesis.go | 86 + x/project/module/genesis_test.go | 61 + x/project/module/module.go | 234 + x/project/module/simulation.go | 244 + x/project/module_simulation.go | 167 - x/project/simulation/burn_vouchers.go | 36 + x/project/simulation/create_project.go | 49 + x/project/simulation/edit_project.go | 57 + x/project/simulation/{store.go => helpers.go} | 79 +- .../{store_test.go => helpers_test.go} | 125 +- x/project/simulation/initialize_mainnet.go | 40 + x/project/simulation/mint_vouchers.go | 42 + x/project/simulation/redeem_vouchers.go | 40 + x/project/simulation/simulation.go | 312 - x/project/simulation/unredeem_vouchers.go | 37 + .../simulation/update_special_allocations.go | 57 + x/project/simulation/update_total_supply.go | 38 + x/project/types/codec.go | 41 +- x/project/types/errors.go | 42 +- x/project/types/events.pb.go | 148 +- x/project/types/expected_keepers.go | 45 +- x/project/types/genesis.go | 66 +- x/project/types/genesis.pb.go | 270 +- x/project/types/genesis_test.go | 262 +- x/project/types/keys.go | 65 +- x/project/types/mainnet_account.pb.go | 66 +- x/project/types/mainnet_account_balance.pb.go | 40 + x/project/types/msg_burn_vouchers.go | 59 - x/project/types/msg_burn_vouchers_test.go | 79 - x/project/types/msg_create_project.go | 64 - x/project/types/msg_create_project_test.go | 73 - x/project/types/msg_edit_project.go | 61 - x/project/types/msg_edit_project_test.go | 87 - x/project/types/msg_initialize_mainnet.go | 69 - .../types/msg_initialize_mainnet_test.go | 84 - x/project/types/msg_mint_vouchers.go | 58 - x/project/types/msg_mint_vouchers_test.go | 69 - x/project/types/msg_redeem_vouchers.go | 65 - x/project/types/msg_redeem_vouchers_test.go | 114 - x/project/types/msg_unredeem_vouchers.go | 56 - x/project/types/msg_unredeem_vouchers_test.go | 68 - .../types/msg_update_special_allocations.go | 55 - .../msg_update_special_allocations_test.go | 60 - x/project/types/msg_update_total_supply.go | 58 - .../types/msg_update_total_supply_test.go | 69 - x/project/types/msgs.go | 234 + x/project/types/params.go | 39 +- x/project/types/params.pb.go | 118 +- x/project/types/params_test.go | 186 - x/project/types/project.pb.go | 75 +- x/project/types/project_chains.pb.go | 36 +- x/project/types/project_test.go | 14 +- x/project/types/query.pb.go | 2285 +- x/project/types/query.pb.gw.go | 406 +- x/project/types/share_vesting_options_test.go | 8 +- x/project/types/shares.go | 2 +- x/project/types/shares_test.go | 22 +- x/project/types/special_allocations.pb.go | 55 +- x/project/types/special_allocations_test.go | 4 +- x/project/types/total_supply.go | 10 + x/project/types/total_supply_test.go | 6 +- x/project/types/tx.pb.go | 647 +- x/project/types/vesting.pb.go | 75 +- x/project/types/voucher_test.go | 4 +- x/reward/client/cli/query.go | 36 - x/reward/client/cli/query_params.go | 35 - x/reward/client/cli/query_reward_pool.go | 78 - x/reward/client/cli/query_reward_pool_test.go | 138 - x/reward/client/cli/query_test.go | 19 - x/reward/client/cli/tx.go | 27 - x/reward/client/cli/tx_set_reward.go | 54 - x/reward/genesis.go | 30 - x/reward/genesis_test.go | 41 - x/reward/keeper/grpc.go | 7 - x/reward/keeper/grpc_params.go | 20 - x/reward/keeper/grpc_params_test.go | 27 - x/reward/keeper/grpc_reward_pool.go | 57 - x/reward/keeper/invariants.go | 9 +- x/reward/keeper/invariants_test.go | 24 +- x/reward/keeper/keeper.go | 86 +- x/reward/keeper/{msg.go => msg_server.go} | 2 +- ...et_reward.go => msg_server_set_rewards.go} | 68 +- x/reward/keeper/msg_set_reward_test.go | 312 - x/reward/keeper/msg_update_params.go | 29 + x/reward/keeper/msg_update_params_test.go | 66 + x/reward/keeper/params.go | 17 - x/reward/keeper/params_test.go | 19 - x/reward/keeper/query.go | 17 + x/reward/keeper/query_params.go | 29 + x/reward/keeper/query_params_test.go | 23 + x/reward/keeper/query_reward_pool.go | 50 + ...pool_test.go => query_reward_pool_test.go} | 62 +- x/reward/keeper/reward_distribution.go | 59 +- x/reward/keeper/reward_distribution_test.go | 92 +- x/reward/keeper/reward_pool.go | 55 +- x/reward/keeper/reward_pool_test.go | 60 - x/reward/module.go | 167 - x/reward/module/autocli.go | 53 + x/reward/module/genesis.go | 44 + x/reward/module/genesis_test.go | 41 + x/reward/module/module.go | 229 + .../simulation.go} | 44 +- x/reward/simulation/{store.go => helpers.go} | 23 +- .../{simulation.go => set_rewards.go} | 33 +- x/reward/simulation/store_test.go | 110 - x/reward/types/codec.go | 15 +- x/reward/types/errors.go | 19 +- x/reward/types/events.pb.go | 76 +- x/reward/types/expected_keepers.go | 37 +- x/reward/types/genesis.go | 16 +- x/reward/types/genesis.pb.go | 108 +- x/reward/types/genesis_test.go | 29 +- x/reward/types/keys.go | 24 +- x/reward/types/msg_set_reward.go | 55 - x/reward/types/msg_set_reward_test.go | 82 - x/reward/types/msgs.go | 30 + x/reward/types/params.go | 29 +- x/reward/types/params.pb.go | 60 +- x/reward/types/query.pb.go | 732 +- x/reward/types/query.pb.gw.go | 108 +- x/reward/types/reward_pool.go | 6 - x/reward/types/reward_pool.pb.go | 66 +- x/reward/types/reward_pool_test.go | 4 +- x/reward/types/tx.pb.go | 484 +- 1060 files changed, 212890 insertions(+), 76075 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug-report.md rename .github/ISSUE_TEMPLATE/{spn-feature-request.md => feature-request.md} (67%) delete mode 100644 .github/ISSUE_TEMPLATE/spn-bug-report.md create mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template.md rename .codecov.yml => .github/codecov.yml (90%) create mode 100644 .github/dependabot.yml create mode 100644 .github/mergify.yml create mode 100644 .github/workflows/linkchecker-config.json create mode 100644 .github/workflows/linkchecker.yml create mode 100644 .github/workflows/release.yml delete mode 100644 .golangci.yml create mode 100644 api/network/launch/module/v1/module.pulsar.go create mode 100644 api/network/launch/v1/chain.pulsar.go create mode 100644 api/network/launch/v1/events.pulsar.go create mode 100644 api/network/launch/v1/genesis.pulsar.go create mode 100644 api/network/launch/v1/genesis_account.pulsar.go create mode 100644 api/network/launch/v1/genesis_validator.pulsar.go create mode 100644 api/network/launch/v1/initial_genesis.pulsar.go create mode 100644 api/network/launch/v1/param_change.pulsar.go create mode 100644 api/network/launch/v1/params.pulsar.go create mode 100644 api/network/launch/v1/query.pulsar.go create mode 100644 api/network/launch/v1/query_grpc.pb.go create mode 100644 api/network/launch/v1/request.pulsar.go create mode 100644 api/network/launch/v1/request_content.pulsar.go create mode 100644 api/network/launch/v1/tx.pulsar.go create mode 100644 api/network/launch/v1/tx_grpc.pb.go create mode 100644 api/network/launch/v1/vesting_account.pulsar.go create mode 100644 api/network/monitoringc/module/v1/module.pulsar.go create mode 100644 api/network/monitoringc/v1/genesis.pulsar.go create mode 100644 api/network/monitoringc/v1/launch_id_from_channel_id.pulsar.go create mode 100644 api/network/monitoringc/v1/launch_id_from_verified_client_id.pulsar.go create mode 100644 api/network/monitoringc/v1/monitoring_history.pulsar.go create mode 100644 api/network/monitoringc/v1/packet.pulsar.go create mode 100644 api/network/monitoringc/v1/params.pulsar.go create mode 100644 api/network/monitoringc/v1/provider_client_id.pulsar.go create mode 100644 api/network/monitoringc/v1/query.pulsar.go create mode 100644 api/network/monitoringc/v1/query_grpc.pb.go create mode 100644 api/network/monitoringc/v1/tx.pulsar.go create mode 100644 api/network/monitoringc/v1/tx_grpc.pb.go create mode 100644 api/network/monitoringc/v1/verified_client_id.pulsar.go create mode 100644 api/network/monitoringp/module/v1/module.pulsar.go create mode 100644 api/network/monitoringp/v1/connection_channel_id.pulsar.go create mode 100644 api/network/monitoringp/v1/consumer_client_id.pulsar.go create mode 100644 api/network/monitoringp/v1/genesis.pulsar.go create mode 100644 api/network/monitoringp/v1/monitoring_info.pulsar.go create mode 100644 api/network/monitoringp/v1/packet.pulsar.go create mode 100644 api/network/monitoringp/v1/params.pulsar.go create mode 100644 api/network/monitoringp/v1/query.pulsar.go create mode 100644 api/network/monitoringp/v1/query_grpc.pb.go create mode 100644 api/network/monitoringp/v1/tx.pulsar.go create mode 100644 api/network/monitoringp/v1/tx_grpc.pb.go create mode 100644 api/network/participation/module/v1/module.pulsar.go create mode 100644 api/network/participation/v1/auction_used_allocations.pulsar.go create mode 100644 api/network/participation/v1/events.pulsar.go create mode 100644 api/network/participation/v1/genesis.pulsar.go create mode 100644 api/network/participation/v1/params.pulsar.go create mode 100644 api/network/participation/v1/query.pulsar.go create mode 100644 api/network/participation/v1/query_grpc.pb.go create mode 100644 api/network/participation/v1/tx.pulsar.go create mode 100644 api/network/participation/v1/tx_grpc.pb.go create mode 100644 api/network/participation/v1/used_allocations.pulsar.go create mode 100644 api/network/profile/module/v1/module.pulsar.go create mode 100644 api/network/profile/v1/coordinator.pulsar.go create mode 100644 api/network/profile/v1/events.pulsar.go create mode 100644 api/network/profile/v1/genesis.pulsar.go create mode 100644 api/network/profile/v1/params.pulsar.go create mode 100644 api/network/profile/v1/query.pulsar.go create mode 100644 api/network/profile/v1/query_grpc.pb.go create mode 100644 api/network/profile/v1/tx.pulsar.go create mode 100644 api/network/profile/v1/tx_grpc.pb.go create mode 100644 api/network/profile/v1/validator.pulsar.go create mode 100644 api/network/project/module/v1/module.pulsar.go create mode 100644 api/network/project/v1/events.pulsar.go create mode 100644 api/network/project/v1/genesis.pulsar.go create mode 100644 api/network/project/v1/mainnet_account.pulsar.go create mode 100644 api/network/project/v1/mainnet_account_balance.pulsar.go create mode 100644 api/network/project/v1/params.pulsar.go create mode 100644 api/network/project/v1/project.pulsar.go create mode 100644 api/network/project/v1/project_chains.pulsar.go create mode 100644 api/network/project/v1/query.pulsar.go create mode 100644 api/network/project/v1/query_grpc.pb.go create mode 100644 api/network/project/v1/special_allocations.pulsar.go create mode 100644 api/network/project/v1/tx.pulsar.go create mode 100644 api/network/project/v1/tx_grpc.pb.go create mode 100644 api/network/project/v1/vesting.pulsar.go create mode 100644 api/network/reward/module/v1/module.pulsar.go create mode 100644 api/network/reward/v1/events.pulsar.go create mode 100644 api/network/reward/v1/genesis.pulsar.go create mode 100644 api/network/reward/v1/params.pulsar.go create mode 100644 api/network/reward/v1/query.pulsar.go create mode 100644 api/network/reward/v1/query_grpc.pb.go create mode 100644 api/network/reward/v1/reward_pool.pulsar.go create mode 100644 api/network/reward/v1/tx.pulsar.go create mode 100644 api/network/reward/v1/tx_grpc.pb.go create mode 100644 api/network/types/ibc.pulsar.go create mode 100644 api/network/types/monitoring.pulsar.go create mode 100644 app/app_config.go create mode 100644 app/config.go create mode 100644 app/genesis_account.go create mode 100644 app/ibc.go create mode 100644 app/sim_bench_test.go create mode 100644 app/sim_test.go delete mode 100644 app/simulation_test.go delete mode 100644 app/simutil/app_state.go create mode 100644 changelog.md delete mode 100644 cmd/encoding.go delete mode 100644 cmd/genaccounts.go create mode 100644 cmd/networkd/cmd/commands.go create mode 100644 cmd/networkd/cmd/config.go create mode 100644 cmd/networkd/cmd/root.go create mode 100644 cmd/networkd/main.go delete mode 100644 cmd/prefixes.go delete mode 100644 cmd/root.go delete mode 100644 cmd/spnd/main.go create mode 100644 docs/template/index.tpl delete mode 100644 pkg/airdrop/airdrop_missions.go create mode 100644 pkg/errors/critical.go create mode 100644 pkg/errors/critical_test.go create mode 100644 pkg/errors/errors.go create mode 100644 proto/network/launch/module/v1/module.proto rename proto/{spn/launch => network/launch/v1}/chain.proto (63%) create mode 100644 proto/network/launch/v1/events.proto create mode 100644 proto/network/launch/v1/genesis.proto create mode 100644 proto/network/launch/v1/genesis_account.proto create mode 100644 proto/network/launch/v1/genesis_validator.proto create mode 100644 proto/network/launch/v1/param_change.proto create mode 100644 proto/network/launch/v1/params.proto create mode 100644 proto/network/launch/v1/query.proto create mode 100644 proto/network/launch/v1/request.proto create mode 100644 proto/network/launch/v1/tx.proto rename proto/{spn/launch => network/launch/v1}/vesting_account.proto (54%) create mode 100644 proto/network/monitoringc/module/v1/module.proto create mode 100644 proto/network/monitoringc/v1/genesis.proto rename proto/{spn/monitoringc => network/monitoringc/v1}/launch_id_from_channel_id.proto (52%) rename proto/{spn/monitoringc => network/monitoringc/v1}/launch_id_from_verified_client_id.proto (54%) create mode 100644 proto/network/monitoringc/v1/monitoring_history.proto create mode 100644 proto/network/monitoringc/v1/packet.proto create mode 100644 proto/network/monitoringc/v1/params.proto rename proto/{spn/monitoringc => network/monitoringc/v1}/provider_client_id.proto (51%) create mode 100644 proto/network/monitoringc/v1/query.proto create mode 100644 proto/network/monitoringc/v1/tx.proto create mode 100644 proto/network/monitoringc/v1/verified_client_id.proto create mode 100644 proto/network/monitoringp/module/v1/module.proto create mode 100644 proto/network/monitoringp/v1/connection_channel_id.proto create mode 100644 proto/network/monitoringp/v1/consumer_client_id.proto create mode 100644 proto/network/monitoringp/v1/genesis.proto create mode 100644 proto/network/monitoringp/v1/monitoring_info.proto create mode 100644 proto/network/monitoringp/v1/packet.proto create mode 100644 proto/network/monitoringp/v1/params.proto rename proto/{spn/monitoringp => network/monitoringp/v1}/query.proto (51%) create mode 100644 proto/network/monitoringp/v1/tx.proto create mode 100644 proto/network/participation/module/v1/module.proto create mode 100644 proto/network/participation/v1/auction_used_allocations.proto create mode 100644 proto/network/participation/v1/events.proto create mode 100644 proto/network/participation/v1/genesis.proto create mode 100644 proto/network/participation/v1/params.proto create mode 100644 proto/network/participation/v1/query.proto create mode 100644 proto/network/participation/v1/tx.proto create mode 100644 proto/network/participation/v1/used_allocations.proto create mode 100644 proto/network/profile/module/v1/module.proto create mode 100644 proto/network/profile/v1/coordinator.proto create mode 100644 proto/network/profile/v1/events.proto create mode 100644 proto/network/profile/v1/genesis.proto create mode 100644 proto/network/profile/v1/params.proto create mode 100644 proto/network/profile/v1/query.proto create mode 100644 proto/network/profile/v1/tx.proto create mode 100644 proto/network/profile/v1/validator.proto create mode 100644 proto/network/project/module/v1/module.proto create mode 100644 proto/network/project/v1/events.proto create mode 100644 proto/network/project/v1/genesis.proto create mode 100644 proto/network/project/v1/mainnet_account.proto create mode 100644 proto/network/project/v1/params.proto create mode 100644 proto/network/project/v1/project.proto create mode 100644 proto/network/project/v1/project_chains.proto create mode 100644 proto/network/project/v1/query.proto create mode 100644 proto/network/project/v1/special_allocations.proto create mode 100644 proto/network/project/v1/tx.proto rename proto/{spn/project => network/project/v1}/vesting.proto (50%) create mode 100644 proto/network/reward/module/v1/module.proto create mode 100644 proto/network/reward/v1/events.proto create mode 100644 proto/network/reward/v1/genesis.proto create mode 100644 proto/network/reward/v1/params.proto rename proto/{spn/reward => network/reward/v1}/query.proto (54%) create mode 100644 proto/network/reward/v1/reward_pool.proto create mode 100644 proto/network/reward/v1/tx.proto rename proto/{spn => network}/types/ibc.proto (68%) rename proto/{spn => network}/types/monitoring.proto (70%) delete mode 100644 proto/spn/launch/events.proto delete mode 100644 proto/spn/launch/genesis.proto delete mode 100644 proto/spn/launch/genesis_account.proto delete mode 100644 proto/spn/launch/genesis_validator.proto delete mode 100644 proto/spn/launch/params.proto delete mode 100644 proto/spn/launch/query.proto delete mode 100644 proto/spn/launch/request.proto delete mode 100644 proto/spn/launch/tx.proto delete mode 100644 proto/spn/monitoringc/genesis.proto delete mode 100644 proto/spn/monitoringc/monitoring_history.proto delete mode 100644 proto/spn/monitoringc/params.proto delete mode 100644 proto/spn/monitoringc/query.proto delete mode 100644 proto/spn/monitoringc/tx.proto delete mode 100644 proto/spn/monitoringc/verified_client_id.proto delete mode 100644 proto/spn/monitoringp/connection_channel_id.proto delete mode 100644 proto/spn/monitoringp/consumer_client_id.proto delete mode 100644 proto/spn/monitoringp/genesis.proto delete mode 100644 proto/spn/monitoringp/monitoring_info.proto delete mode 100644 proto/spn/monitoringp/params.proto delete mode 100644 proto/spn/monitoringp/tx.proto delete mode 100644 proto/spn/participation/auction_used_allocations.proto delete mode 100644 proto/spn/participation/events.proto delete mode 100644 proto/spn/participation/genesis.proto delete mode 100644 proto/spn/participation/params.proto delete mode 100644 proto/spn/participation/query.proto delete mode 100644 proto/spn/participation/tx.proto delete mode 100644 proto/spn/participation/used_allocations.proto delete mode 100644 proto/spn/profile/coordinator.proto delete mode 100644 proto/spn/profile/events.proto delete mode 100644 proto/spn/profile/genesis.proto delete mode 100644 proto/spn/profile/query.proto delete mode 100644 proto/spn/profile/tx.proto delete mode 100644 proto/spn/profile/validator.proto delete mode 100644 proto/spn/project/events.proto delete mode 100644 proto/spn/project/genesis.proto delete mode 100644 proto/spn/project/mainnet_account.proto delete mode 100644 proto/spn/project/params.proto delete mode 100644 proto/spn/project/project.proto delete mode 100644 proto/spn/project/project_chains.proto delete mode 100644 proto/spn/project/query.proto delete mode 100644 proto/spn/project/special_allocations.proto delete mode 100644 proto/spn/project/tx.proto delete mode 100644 proto/spn/reward/events.proto delete mode 100644 proto/spn/reward/genesis.proto delete mode 100644 proto/spn/reward/params.proto delete mode 100644 proto/spn/reward/reward_pool.proto delete mode 100644 proto/spn/reward/tx.proto delete mode 100644 scripts/metadata_sample.yml delete mode 100755 scripts/populate.sh delete mode 100644 testutil/encoding/encoding.go delete mode 100644 testutil/gen_app.go create mode 100644 testutil/keeper/monitoringc.go create mode 100644 testutil/keeper/monitoringp.go create mode 100644 testutil/keeper/participation.go create mode 100644 testutil/keeper/reward.go delete mode 100644 testutil/simulation/util.go delete mode 100644 x/launch/client/cli/query.go delete mode 100644 x/launch/client/cli/query_chain.go delete mode 100644 x/launch/client/cli/query_chain_test.go delete mode 100644 x/launch/client/cli/query_genesis_account.go delete mode 100644 x/launch/client/cli/query_genesis_account_test.go delete mode 100644 x/launch/client/cli/query_genesis_validator.go delete mode 100644 x/launch/client/cli/query_genesis_validator_test.go delete mode 100644 x/launch/client/cli/query_param_change.go delete mode 100644 x/launch/client/cli/query_param_change_test.go delete mode 100644 x/launch/client/cli/query_params.go delete mode 100644 x/launch/client/cli/query_request.go delete mode 100644 x/launch/client/cli/query_request_test.go delete mode 100644 x/launch/client/cli/query_test.go delete mode 100644 x/launch/client/cli/query_vesting_account.go delete mode 100644 x/launch/client/cli/query_vesting_account_test.go delete mode 100644 x/launch/client/cli/tx.go delete mode 100644 x/launch/client/cli/tx_create_chain.go delete mode 100644 x/launch/client/cli/tx_edit_chain.go delete mode 100644 x/launch/client/cli/tx_request_add_account.go delete mode 100644 x/launch/client/cli/tx_request_add_validator.go delete mode 100644 x/launch/client/cli/tx_request_add_vesting_account.go delete mode 100644 x/launch/client/cli/tx_request_change_param.go delete mode 100644 x/launch/client/cli/tx_request_remove_account.go delete mode 100644 x/launch/client/cli/tx_request_remove_validator.go delete mode 100644 x/launch/client/cli/tx_revert_launch.go delete mode 100644 x/launch/client/cli/tx_settle_request.go delete mode 100644 x/launch/client/cli/tx_trigger_launch.go delete mode 100644 x/launch/client/cli/tx_update_launch_information.go delete mode 100644 x/launch/genesis.go delete mode 100644 x/launch/genesis_test.go delete mode 100644 x/launch/keeper/genesis_account_test.go delete mode 100644 x/launch/keeper/grpc.go delete mode 100644 x/launch/keeper/grpc_chain.go delete mode 100644 x/launch/keeper/grpc_chain_test.go delete mode 100644 x/launch/keeper/grpc_genesis_account.go delete mode 100644 x/launch/keeper/grpc_genesis_account_test.go delete mode 100644 x/launch/keeper/grpc_genesis_validator.go delete mode 100644 x/launch/keeper/grpc_genesis_validator_test.go delete mode 100644 x/launch/keeper/grpc_param_change.go delete mode 100644 x/launch/keeper/grpc_param_change_test.go delete mode 100644 x/launch/keeper/grpc_params.go delete mode 100644 x/launch/keeper/grpc_params_test.go delete mode 100644 x/launch/keeper/grpc_request.go delete mode 100644 x/launch/keeper/grpc_request_test.go delete mode 100644 x/launch/keeper/grpc_vesting_account.go delete mode 100644 x/launch/keeper/grpc_vesting_account_test.go delete mode 100644 x/launch/keeper/hooks.go delete mode 100644 x/launch/keeper/msg_create_chain.go delete mode 100644 x/launch/keeper/msg_edit_chain.go delete mode 100644 x/launch/keeper/msg_revert_launch.go delete mode 100644 x/launch/keeper/msg_send_request.go rename x/launch/keeper/{msg.go => msg_server.go} (86%) create mode 100644 x/launch/keeper/msg_server_create_chain.go rename x/launch/keeper/{msg_create_chain_test.go => msg_server_create_chain_test.go} (78%) create mode 100644 x/launch/keeper/msg_server_edit_chain.go rename x/launch/keeper/{msg_edit_chain_test.go => msg_server_edit_chain_test.go} (80%) create mode 100644 x/launch/keeper/msg_server_revert_launch.go rename x/launch/keeper/{msg_revert_launch_test.go => msg_server_revert_launch_test.go} (70%) create mode 100644 x/launch/keeper/msg_server_send_request.go rename x/launch/keeper/{msg_send_request_test.go => msg_server_send_request_test.go} (84%) create mode 100644 x/launch/keeper/msg_server_settle_request.go rename x/launch/keeper/{msg_settle_request_test.go => msg_server_settle_request_test.go} (75%) create mode 100644 x/launch/keeper/msg_server_trigger_launch.go rename x/launch/keeper/{msg_trigger_launch_test.go => msg_server_trigger_launch_test.go} (82%) create mode 100644 x/launch/keeper/msg_server_update_launch_information.go rename x/launch/keeper/{msg_update_launch_information_test.go => msg_server_update_launch_information_test.go} (83%) delete mode 100644 x/launch/keeper/msg_settle_request.go delete mode 100644 x/launch/keeper/msg_trigger_launch.go delete mode 100644 x/launch/keeper/msg_update_launch_information.go create mode 100644 x/launch/keeper/msg_update_params.go create mode 100644 x/launch/keeper/msg_update_params_test.go delete mode 100644 x/launch/keeper/param_change.go delete mode 100644 x/launch/keeper/param_change_test.go delete mode 100644 x/launch/keeper/params.go delete mode 100644 x/launch/keeper/params_test.go create mode 100644 x/launch/keeper/query.go create mode 100644 x/launch/keeper/query_chain.go create mode 100644 x/launch/keeper/query_chain_test.go create mode 100644 x/launch/keeper/query_genesis_account.go create mode 100644 x/launch/keeper/query_genesis_account_test.go create mode 100644 x/launch/keeper/query_genesis_validator.go create mode 100644 x/launch/keeper/query_genesis_validator_test.go create mode 100644 x/launch/keeper/query_param_change.go create mode 100644 x/launch/keeper/query_param_change_test.go create mode 100644 x/launch/keeper/query_params.go create mode 100644 x/launch/keeper/query_params_test.go create mode 100644 x/launch/keeper/query_request.go create mode 100644 x/launch/keeper/query_request_test.go create mode 100644 x/launch/keeper/query_vesting_account.go create mode 100644 x/launch/keeper/query_vesting_account_test.go delete mode 100644 x/launch/keeper/vesting_account_test.go delete mode 100644 x/launch/module.go create mode 100644 x/launch/module/autocli.go create mode 100644 x/launch/module/genesis.go create mode 100644 x/launch/module/genesis_test.go create mode 100644 x/launch/module/module.go create mode 100644 x/launch/module/simulation.go delete mode 100644 x/launch/module_simulation.go create mode 100644 x/launch/simulation/create_chain.go create mode 100644 x/launch/simulation/edit_chain.go rename x/launch/simulation/{store.go => helpers.go} (79%) create mode 100644 x/launch/simulation/revert_launch.go create mode 100644 x/launch/simulation/send_request.go create mode 100644 x/launch/simulation/settle_request.go delete mode 100644 x/launch/simulation/simulation.go delete mode 100644 x/launch/simulation/store_test.go create mode 100644 x/launch/simulation/trigger_launch.go create mode 100644 x/launch/simulation/update_launch_information.go create mode 100644 x/launch/types/initial_genesis.pb.go delete mode 100644 x/launch/types/msg_create_chain.go delete mode 100644 x/launch/types/msg_create_chain_test.go delete mode 100644 x/launch/types/msg_edit_chain.go delete mode 100644 x/launch/types/msg_edit_chain_test.go delete mode 100644 x/launch/types/msg_revert_launch.go delete mode 100644 x/launch/types/msg_revert_launch_test.go delete mode 100644 x/launch/types/msg_send_request.go delete mode 100644 x/launch/types/msg_send_request_test.go delete mode 100644 x/launch/types/msg_settle_request.go delete mode 100644 x/launch/types/msg_settle_request_test.go delete mode 100644 x/launch/types/msg_trigger_launch.go delete mode 100644 x/launch/types/msg_trigger_launch_test.go delete mode 100644 x/launch/types/msg_update_launch_information.go delete mode 100644 x/launch/types/msg_update_launch_information_test.go create mode 100644 x/launch/types/msgs.go create mode 100644 x/launch/types/msgs_test.go create mode 100644 x/launch/types/param_change.pb.go delete mode 100644 x/launch/types/params_test.go create mode 100644 x/launch/types/request_content.pb.go create mode 100644 x/launch/types/types.go delete mode 100644 x/monitoringc/client/cli/query.go delete mode 100644 x/monitoringc/client/cli/query_launch_id_from_channel_id.go delete mode 100644 x/monitoringc/client/cli/query_launch_id_from_channel_id_test.go delete mode 100644 x/monitoringc/client/cli/query_monitoring_history.go delete mode 100644 x/monitoringc/client/cli/query_monitoring_history_test.go delete mode 100644 x/monitoringc/client/cli/query_params.go delete mode 100644 x/monitoringc/client/cli/query_provider_client_id.go delete mode 100644 x/monitoringc/client/cli/query_provider_client_id_test.go delete mode 100644 x/monitoringc/client/cli/query_test.go delete mode 100644 x/monitoringc/client/cli/query_verified_client_ids.go delete mode 100644 x/monitoringc/client/cli/query_verified_client_ids_test.go delete mode 100644 x/monitoringc/client/cli/tx_create_client.go delete mode 100644 x/monitoringc/genesis.go delete mode 100644 x/monitoringc/genesis_test.go delete mode 100644 x/monitoringc/keeper/grpc.go delete mode 100644 x/monitoringc/keeper/grpc_launch_id_from_channel_id.go delete mode 100644 x/monitoringc/keeper/grpc_monitoring_history.go delete mode 100644 x/monitoringc/keeper/grpc_monitoring_history_test.go delete mode 100644 x/monitoringc/keeper/grpc_params.go delete mode 100644 x/monitoringc/keeper/grpc_params_test.go delete mode 100644 x/monitoringc/keeper/grpc_provider_client_id.go delete mode 100644 x/monitoringc/keeper/grpc_verified_client_ids.go delete mode 100644 x/monitoringc/keeper/grpc_verified_client_ids_test.go delete mode 100644 x/monitoringc/keeper/handshake.go delete mode 100644 x/monitoringc/keeper/handshake_test.go delete mode 100644 x/monitoringc/keeper/launch_id_from_channel_id.go delete mode 100644 x/monitoringc/keeper/launch_id_from_channel_id_test.go delete mode 100644 x/monitoringc/keeper/launch_id_from_verified_client_id.go delete mode 100644 x/monitoringc/keeper/launch_id_from_verified_client_id_test.go delete mode 100644 x/monitoringc/keeper/monitoring_history.go delete mode 100644 x/monitoringc/keeper/monitoring_history_test.go delete mode 100644 x/monitoringc/keeper/monitoring_packet.go delete mode 100644 x/monitoringc/keeper/monitoring_packet_test.go rename x/monitoringc/keeper/{msg.go => msg_server.go} (85%) rename x/monitoringc/keeper/{msg_create_client.go => msg_server_create_client.go} (67%) rename x/monitoringc/keeper/{msg_create_client_test.go => msg_server_create_client_test.go} (82%) create mode 100644 x/monitoringc/keeper/msg_update_params.go create mode 100644 x/monitoringc/keeper/msg_update_params_test.go delete mode 100644 x/monitoringc/keeper/params.go delete mode 100644 x/monitoringc/keeper/params_test.go delete mode 100644 x/monitoringc/keeper/provider_client_id.go delete mode 100644 x/monitoringc/keeper/provider_client_id_test.go create mode 100644 x/monitoringc/keeper/query.go create mode 100644 x/monitoringc/keeper/query_launch_id_from_channel_id.go rename x/monitoringc/keeper/{grpc_launch_id_from_channel_id_test.go => query_launch_id_from_channel_id_test.go} (52%) create mode 100644 x/monitoringc/keeper/query_monitoring_history.go create mode 100644 x/monitoringc/keeper/query_monitoring_history_test.go create mode 100644 x/monitoringc/keeper/query_params.go create mode 100644 x/monitoringc/keeper/query_params_test.go create mode 100644 x/monitoringc/keeper/query_provider_client_id.go rename x/monitoringc/keeper/{grpc_provider_client_id_test.go => query_provider_client_id_test.go} (51%) create mode 100644 x/monitoringc/keeper/query_verified_client_id.go create mode 100644 x/monitoringc/keeper/query_verified_client_id_test.go delete mode 100644 x/monitoringc/keeper/verified_client_id_test.go delete mode 100644 x/monitoringc/module.go create mode 100644 x/monitoringc/module/autocli.go create mode 100644 x/monitoringc/module/genesis.go create mode 100644 x/monitoringc/module/genesis_test.go create mode 100644 x/monitoringc/module/module.go create mode 100644 x/monitoringc/module/module_ibc.go rename x/monitoringc/{module_simulation.go => module/simulation.go} (57%) delete mode 100644 x/monitoringc/module_ibc.go create mode 100644 x/monitoringc/simulation/helpers.go create mode 100644 x/monitoringc/types/expected_ibc_keeper.go delete mode 100644 x/monitoringc/types/msg_create_client_test.go rename x/monitoringc/types/{msg_create_client.go => msgs.go} (64%) create mode 100644 x/monitoringc/types/packet.pb.go create mode 100644 x/monitoringc/types/types.go delete mode 100644 x/monitoringc/types/types_test.go delete mode 100644 x/monitoringp/client/cli/query.go delete mode 100644 x/monitoringp/client/cli/query_connection_channel_id.go delete mode 100644 x/monitoringp/client/cli/query_consumer_client_id.go delete mode 100644 x/monitoringp/client/cli/query_monitoring_info.go delete mode 100644 x/monitoringp/client/cli/query_params.go delete mode 100644 x/monitoringp/genesis.go delete mode 100644 x/monitoringp/genesis_test.go delete mode 100644 x/monitoringp/keeper/begin_block.go delete mode 100644 x/monitoringp/keeper/begin_block_test.go delete mode 100644 x/monitoringp/keeper/connection_channel_id.go delete mode 100644 x/monitoringp/keeper/connection_channel_id_test.go delete mode 100644 x/monitoringp/keeper/consumer_client.go delete mode 100644 x/monitoringp/keeper/consumer_client_id.go delete mode 100644 x/monitoringp/keeper/consumer_client_id_test.go delete mode 100644 x/monitoringp/keeper/consumer_client_test.go delete mode 100644 x/monitoringp/keeper/grpc.go delete mode 100644 x/monitoringp/keeper/grpc_connection_channel_id.go delete mode 100644 x/monitoringp/keeper/grpc_connection_channel_id_test.go delete mode 100644 x/monitoringp/keeper/grpc_consumer_client_id.go delete mode 100644 x/monitoringp/keeper/grpc_consumer_client_id_test.go delete mode 100644 x/monitoringp/keeper/grpc_monitoring_info.go delete mode 100644 x/monitoringp/keeper/grpc_monitoring_info_test.go delete mode 100644 x/monitoringp/keeper/grpc_params.go delete mode 100644 x/monitoringp/keeper/grpc_params_test.go delete mode 100644 x/monitoringp/keeper/handshake.go delete mode 100644 x/monitoringp/keeper/handshake_test.go delete mode 100644 x/monitoringp/keeper/keeper_test.go delete mode 100644 x/monitoringp/keeper/monitoring_info.go delete mode 100644 x/monitoringp/keeper/monitoring_info_test.go delete mode 100644 x/monitoringp/keeper/monitoring_packet.go create mode 100644 x/monitoringp/keeper/msg_server.go create mode 100644 x/monitoringp/keeper/msg_update_params.go create mode 100644 x/monitoringp/keeper/msg_update_params_test.go delete mode 100644 x/monitoringp/keeper/params.go delete mode 100644 x/monitoringp/keeper/params_test.go create mode 100644 x/monitoringp/keeper/query.go create mode 100644 x/monitoringp/keeper/query_connection_channel_id.go create mode 100644 x/monitoringp/keeper/query_connection_channel_id_test.go create mode 100644 x/monitoringp/keeper/query_consumer_client_id.go create mode 100644 x/monitoringp/keeper/query_consumer_client_id_test.go create mode 100644 x/monitoringp/keeper/query_monitoring_info.go create mode 100644 x/monitoringp/keeper/query_monitoring_info_test.go create mode 100644 x/monitoringp/keeper/query_params.go create mode 100644 x/monitoringp/keeper/query_params_test.go delete mode 100644 x/monitoringp/module.go create mode 100644 x/monitoringp/module/autocli.go create mode 100644 x/monitoringp/module/genesis.go create mode 100644 x/monitoringp/module/genesis_test.go create mode 100644 x/monitoringp/module/module.go create mode 100644 x/monitoringp/module/module_ibc.go create mode 100644 x/monitoringp/module/simulation.go delete mode 100644 x/monitoringp/module_ibc.go delete mode 100644 x/monitoringp/module_simulation.go create mode 100644 x/monitoringp/simulation/helpers.go delete mode 100644 x/monitoringp/simulation/simulation.go create mode 100644 x/monitoringp/types/expected_ibc_keeper.go create mode 100644 x/monitoringp/types/packet.pb.go delete mode 100644 x/monitoringp/types/params_test.go create mode 100644 x/monitoringp/types/types.go delete mode 100644 x/participation/client/cli/query.go delete mode 100644 x/participation/client/cli/query_auction_used_allocations.go delete mode 100644 x/participation/client/cli/query_auction_used_allocations_test.go delete mode 100644 x/participation/client/cli/query_available_allocations.go delete mode 100644 x/participation/client/cli/query_params.go delete mode 100644 x/participation/client/cli/query_test.go delete mode 100644 x/participation/client/cli/query_total_allocations.go delete mode 100644 x/participation/client/cli/query_used_allocations.go delete mode 100644 x/participation/client/cli/query_used_allocations_test.go delete mode 100644 x/participation/client/cli/tx.go delete mode 100644 x/participation/client/cli/tx_participate.go delete mode 100644 x/participation/client/cli/tx_withdraw_allocations.go delete mode 100644 x/participation/genesis.go delete mode 100644 x/participation/genesis_test.go delete mode 100644 x/participation/keeper/auction_used_allocations.go delete mode 100644 x/participation/keeper/auction_used_allocations_test.go delete mode 100644 x/participation/keeper/available_allocations_test.go delete mode 100644 x/participation/keeper/grpc.go delete mode 100644 x/participation/keeper/grpc_auction_used_allocations.go delete mode 100644 x/participation/keeper/grpc_available_allocations.go delete mode 100644 x/participation/keeper/grpc_available_allocations_test.go delete mode 100644 x/participation/keeper/grpc_params.go delete mode 100644 x/participation/keeper/grpc_params_test.go delete mode 100644 x/participation/keeper/grpc_total_allocations.go delete mode 100644 x/participation/keeper/grpc_total_allocations_test.go delete mode 100644 x/participation/keeper/grpc_used_allocations.go rename x/participation/keeper/{msg.go => msg_server.go} (85%) rename x/participation/keeper/{msg_participate.go => msg_server_participate.go} (50%) rename x/participation/keeper/{msg_participate_test.go => msg_server_participate_test.go} (74%) create mode 100644 x/participation/keeper/msg_server_withdraw_allocations.go rename x/participation/keeper/{msg_withdraw_allocations_test.go => msg_server_withdraw_allocations_test.go} (59%) create mode 100644 x/participation/keeper/msg_update_params.go create mode 100644 x/participation/keeper/msg_update_params_test.go delete mode 100644 x/participation/keeper/msg_withdraw_allocations.go delete mode 100644 x/participation/keeper/params.go delete mode 100644 x/participation/keeper/params_test.go create mode 100644 x/participation/keeper/query.go create mode 100644 x/participation/keeper/query_auction_used_allocations.go rename x/participation/keeper/{grpc_auction_used_allocations_test.go => query_auction_used_allocations_test.go} (50%) create mode 100644 x/participation/keeper/query_available_allocations.go create mode 100644 x/participation/keeper/query_params.go create mode 100644 x/participation/keeper/query_params_test.go create mode 100644 x/participation/keeper/query_total_allocations.go create mode 100644 x/participation/keeper/query_used_allocations.go rename x/participation/keeper/{grpc_used_allocations_test.go => query_used_allocations_test.go} (54%) delete mode 100644 x/participation/keeper/used_allocations_test.go delete mode 100644 x/participation/module.go create mode 100644 x/participation/module/autocli.go create mode 100644 x/participation/module/genesis.go create mode 100644 x/participation/module/genesis_test.go create mode 100644 x/participation/module/module.go create mode 100644 x/participation/module/simulation.go delete mode 100644 x/participation/module_simulation.go rename x/participation/simulation/{store.go => helpers.go} (56%) create mode 100644 x/participation/simulation/participate.go delete mode 100644 x/participation/simulation/simulation.go delete mode 100644 x/participation/simulation/store_test.go create mode 100644 x/participation/simulation/withdraw_allocations.go delete mode 100644 x/participation/types/msg_participate.go delete mode 100644 x/participation/types/msg_participate_test.go delete mode 100644 x/participation/types/msg_withdraw_allocations.go delete mode 100644 x/participation/types/msg_withdraw_allocations_test.go create mode 100644 x/participation/types/msgs.go delete mode 100644 x/participation/types/params_test.go delete mode 100644 x/participation/types/tier_test.go create mode 100644 x/participation/types/types.go delete mode 100644 x/participation/types/types_test.go delete mode 100644 x/profile/client/cli/query.go delete mode 100644 x/profile/client/cli/query_coordinator.go delete mode 100644 x/profile/client/cli/query_coordinator_by_address.go delete mode 100644 x/profile/client/cli/query_coordinator_by_address_test.go delete mode 100644 x/profile/client/cli/query_coordinator_test.go delete mode 100644 x/profile/client/cli/query_test.go delete mode 100644 x/profile/client/cli/query_validator.go delete mode 100644 x/profile/client/cli/query_validator_by_operator_address.go delete mode 100644 x/profile/client/cli/query_validator_test.go delete mode 100644 x/profile/client/cli/tx.go delete mode 100644 x/profile/client/cli/tx_add_validator_operator_address.go delete mode 100644 x/profile/client/cli/tx_create_coordinator.go delete mode 100644 x/profile/client/cli/tx_disable_coordinator.go delete mode 100644 x/profile/client/cli/tx_update_coordinator_address.go delete mode 100644 x/profile/client/cli/tx_update_coordinator_description.go delete mode 100644 x/profile/client/cli/tx_update_validator_description.go delete mode 100644 x/profile/genesis.go delete mode 100644 x/profile/genesis_test.go delete mode 100644 x/profile/keeper/coordinator_by_address.go delete mode 100644 x/profile/keeper/coordinator_by_address_test.go delete mode 100644 x/profile/keeper/coordinator_test.go delete mode 100644 x/profile/keeper/grpc.go delete mode 100644 x/profile/keeper/grpc_coordinator.go delete mode 100644 x/profile/keeper/grpc_coordinator_by_address.go delete mode 100644 x/profile/keeper/grpc_coordinator_by_address_test.go delete mode 100644 x/profile/keeper/grpc_coordinator_test.go delete mode 100644 x/profile/keeper/grpc_validator.go delete mode 100644 x/profile/keeper/grpc_validator_by_operator_address.go delete mode 100644 x/profile/keeper/grpc_validator_by_operator_address_test.go delete mode 100644 x/profile/keeper/grpc_validator_test.go delete mode 100644 x/profile/keeper/msg_add_validator_operator_address.go delete mode 100644 x/profile/keeper/msg_add_validator_operator_address_test.go delete mode 100644 x/profile/keeper/msg_create_coordinator.go delete mode 100644 x/profile/keeper/msg_create_coordinator_test.go delete mode 100644 x/profile/keeper/msg_disable_coordinator.go delete mode 100644 x/profile/keeper/msg_disable_coordinator_test.go rename x/profile/keeper/{msg.go => msg_server.go} (86%) create mode 100644 x/profile/keeper/msg_server_coordinator.go create mode 100644 x/profile/keeper/msg_server_coordinator_test.go create mode 100644 x/profile/keeper/msg_server_validator.go delete mode 100644 x/profile/keeper/msg_update_coordinator_address.go delete mode 100644 x/profile/keeper/msg_update_coordinator_address_test.go delete mode 100644 x/profile/keeper/msg_update_coordinator_description.go delete mode 100644 x/profile/keeper/msg_update_coordinator_description_test.go create mode 100644 x/profile/keeper/msg_update_params.go create mode 100644 x/profile/keeper/msg_update_params_test.go delete mode 100644 x/profile/keeper/msg_update_validator_description.go delete mode 100644 x/profile/keeper/msg_update_validator_description_test.go create mode 100644 x/profile/keeper/query.go create mode 100644 x/profile/keeper/query_coordinator.go create mode 100644 x/profile/keeper/query_coordinator_test.go create mode 100644 x/profile/keeper/query_params.go create mode 100644 x/profile/keeper/query_params_test.go create mode 100644 x/profile/keeper/query_validator.go create mode 100644 x/profile/keeper/query_validator_test.go delete mode 100644 x/profile/keeper/validator_by_operator_address.go delete mode 100644 x/profile/keeper/validator_by_operator_address_test.go delete mode 100644 x/profile/keeper/validator_test.go delete mode 100644 x/profile/module.go create mode 100644 x/profile/module/autocli.go create mode 100644 x/profile/module/genesis.go create mode 100644 x/profile/module/genesis_test.go create mode 100644 x/profile/module/module.go create mode 100644 x/profile/module/simulation.go delete mode 100644 x/profile/module_simulation.go create mode 100644 x/profile/simulation/coordinator.go create mode 100644 x/profile/simulation/helpers.go delete mode 100644 x/profile/simulation/simulation.go delete mode 100644 x/profile/simulation/store.go delete mode 100644 x/profile/simulation/store_test.go create mode 100644 x/profile/simulation/validator.go create mode 100644 x/profile/types/message_validator.go rename x/profile/types/{msg_add_validator_operator_address_test.go => message_validator_test.go} (57%) create mode 100644 x/profile/types/messages_coordinator.go create mode 100644 x/profile/types/messages_coordinator_test.go delete mode 100644 x/profile/types/msg_add_validator_operator_address.go delete mode 100644 x/profile/types/msg_create_coordinator.go delete mode 100644 x/profile/types/msg_create_coordinator_test.go delete mode 100644 x/profile/types/msg_disable_coordinator.go delete mode 100644 x/profile/types/msg_disable_coordinator_test.go delete mode 100644 x/profile/types/msg_update_coordinator_address.go delete mode 100644 x/profile/types/msg_update_coordinator_address_test.go delete mode 100644 x/profile/types/msg_update_coordinator_description.go delete mode 100644 x/profile/types/msg_update_coordinator_description_test.go delete mode 100644 x/profile/types/msg_update_validator_description.go delete mode 100644 x/profile/types/msg_update_validator_description_test.go create mode 100644 x/profile/types/params.go create mode 100644 x/profile/types/params.pb.go create mode 100644 x/profile/types/types.go delete mode 100644 x/project/client/cli/query.go delete mode 100644 x/project/client/cli/query_mainnet_account.go delete mode 100644 x/project/client/cli/query_mainnet_account_test.go delete mode 100644 x/project/client/cli/query_params.go delete mode 100644 x/project/client/cli/query_project.go delete mode 100644 x/project/client/cli/query_project_chains.go delete mode 100644 x/project/client/cli/query_project_chains_test.go delete mode 100644 x/project/client/cli/query_project_test.go delete mode 100644 x/project/client/cli/query_special_allocations_balance.go delete mode 100644 x/project/client/cli/query_test.go delete mode 100644 x/project/client/cli/query_total_shares.go delete mode 100644 x/project/client/cli/tx.go delete mode 100644 x/project/client/cli/tx_burn_vouchers.go delete mode 100644 x/project/client/cli/tx_create_project.go delete mode 100644 x/project/client/cli/tx_edit_project.go delete mode 100644 x/project/client/cli/tx_initialize_mainnet.go delete mode 100644 x/project/client/cli/tx_mint_vouchers.go delete mode 100644 x/project/client/cli/tx_redeem_vouchers.go delete mode 100644 x/project/client/cli/tx_unredeem_vouchers.go delete mode 100644 x/project/client/cli/tx_update_special_allocations.go delete mode 100644 x/project/client/cli/tx_update_total_supply.go delete mode 100644 x/project/genesis.go delete mode 100644 x/project/genesis_test.go delete mode 100644 x/project/keeper/grpc.go delete mode 100644 x/project/keeper/grpc_mainnet_account.go delete mode 100644 x/project/keeper/grpc_mainnet_account_test.go delete mode 100644 x/project/keeper/grpc_params.go delete mode 100644 x/project/keeper/grpc_params_test.go delete mode 100644 x/project/keeper/grpc_project.go delete mode 100644 x/project/keeper/grpc_project_chains.go delete mode 100644 x/project/keeper/grpc_project_chains_test.go delete mode 100644 x/project/keeper/grpc_project_test.go delete mode 100644 x/project/keeper/grpc_special_allocations_balance.go delete mode 100644 x/project/keeper/grpc_special_allocations_balance_test.go delete mode 100644 x/project/keeper/grpc_total_shares.go delete mode 100644 x/project/keeper/grpc_total_shares_test.go delete mode 100644 x/project/keeper/mainnet_account_test.go delete mode 100644 x/project/keeper/msg_create_project.go delete mode 100644 x/project/keeper/msg_edit_project.go delete mode 100644 x/project/keeper/msg_initialize_mainnet.go rename x/project/keeper/{msg.go => msg_server.go} (86%) rename x/project/keeper/{msg_burn_vouchers.go => msg_server_burn_vouchers.go} (56%) rename x/project/keeper/{msg_burn_vouchers_test.go => msg_server_burn_vouchers_test.go} (80%) create mode 100644 x/project/keeper/msg_server_create_project.go rename x/project/keeper/{msg_create_project_test.go => msg_server_create_project_test.go} (72%) create mode 100644 x/project/keeper/msg_server_edit_project.go rename x/project/keeper/{msg_edit_project_test.go => msg_server_edit_project_test.go} (77%) create mode 100644 x/project/keeper/msg_server_initialize_mainnet.go rename x/project/keeper/{msg_initialize_mainnet_test.go => msg_server_initialize_mainnet_test.go} (79%) rename x/project/keeper/{msg_mint_vouchers.go => msg_server_mint_vouchers.go} (52%) rename x/project/keeper/{msg_mint_vouchers_test.go => msg_server_mint_vouchers_test.go} (77%) rename x/project/keeper/{msg_redeem_vouchers.go => msg_server_redeem_vouchers.go} (53%) rename x/project/keeper/{msg_redeem_vouchers_test.go => msg_server_redeem_vouchers_test.go} (76%) rename x/project/keeper/{msg_unredeem_vouchers.go => msg_server_unredeem_vouchers.go} (53%) rename x/project/keeper/{msg_unredeem_vouchers_test.go => msg_server_unredeem_vouchers_test.go} (69%) rename x/project/keeper/{msg_update_special_allocations.go => msg_server_update_special_allocations.go} (56%) rename x/project/keeper/{msg_update_special_allocations_test.go => msg_server_update_special_allocations_test.go} (92%) create mode 100644 x/project/keeper/msg_server_update_total_supply.go rename x/project/keeper/{msg_update_total_supply_test.go => msg_server_update_total_supply_test.go} (78%) create mode 100644 x/project/keeper/msg_update_params.go create mode 100644 x/project/keeper/msg_update_params_test.go delete mode 100644 x/project/keeper/msg_update_total_supply.go delete mode 100644 x/project/keeper/params.go delete mode 100644 x/project/keeper/params_test.go delete mode 100644 x/project/keeper/project_test.go create mode 100644 x/project/keeper/query.go create mode 100644 x/project/keeper/query_mainnet_account.go create mode 100644 x/project/keeper/query_mainnet_account_balance.go create mode 100644 x/project/keeper/query_mainnet_account_test.go create mode 100644 x/project/keeper/query_params.go create mode 100644 x/project/keeper/query_params_test.go create mode 100644 x/project/keeper/query_project.go create mode 100644 x/project/keeper/query_project_chains.go create mode 100644 x/project/keeper/query_project_chains_test.go create mode 100644 x/project/keeper/query_project_test.go create mode 100644 x/project/keeper/query_special_allocations_balance.go create mode 100644 x/project/keeper/query_total_shares.go delete mode 100644 x/project/keeper/total_shares.go delete mode 100644 x/project/keeper/total_shares_test.go delete mode 100644 x/project/module.go create mode 100644 x/project/module/autocli.go create mode 100644 x/project/module/genesis.go create mode 100644 x/project/module/genesis_test.go create mode 100644 x/project/module/module.go create mode 100644 x/project/module/simulation.go delete mode 100644 x/project/module_simulation.go create mode 100644 x/project/simulation/burn_vouchers.go create mode 100644 x/project/simulation/create_project.go create mode 100644 x/project/simulation/edit_project.go rename x/project/simulation/{store.go => helpers.go} (77%) rename x/project/simulation/{store_test.go => helpers_test.go} (67%) create mode 100644 x/project/simulation/initialize_mainnet.go create mode 100644 x/project/simulation/mint_vouchers.go create mode 100644 x/project/simulation/redeem_vouchers.go delete mode 100644 x/project/simulation/simulation.go create mode 100644 x/project/simulation/unredeem_vouchers.go create mode 100644 x/project/simulation/update_special_allocations.go create mode 100644 x/project/simulation/update_total_supply.go create mode 100644 x/project/types/mainnet_account_balance.pb.go delete mode 100644 x/project/types/msg_burn_vouchers.go delete mode 100644 x/project/types/msg_burn_vouchers_test.go delete mode 100644 x/project/types/msg_create_project.go delete mode 100644 x/project/types/msg_create_project_test.go delete mode 100644 x/project/types/msg_edit_project.go delete mode 100644 x/project/types/msg_edit_project_test.go delete mode 100644 x/project/types/msg_initialize_mainnet.go delete mode 100644 x/project/types/msg_initialize_mainnet_test.go delete mode 100644 x/project/types/msg_mint_vouchers.go delete mode 100644 x/project/types/msg_mint_vouchers_test.go delete mode 100644 x/project/types/msg_redeem_vouchers.go delete mode 100644 x/project/types/msg_redeem_vouchers_test.go delete mode 100644 x/project/types/msg_unredeem_vouchers.go delete mode 100644 x/project/types/msg_unredeem_vouchers_test.go delete mode 100644 x/project/types/msg_update_special_allocations.go delete mode 100644 x/project/types/msg_update_special_allocations_test.go delete mode 100644 x/project/types/msg_update_total_supply.go delete mode 100644 x/project/types/msg_update_total_supply_test.go create mode 100644 x/project/types/msgs.go delete mode 100644 x/project/types/params_test.go delete mode 100644 x/reward/client/cli/query.go delete mode 100644 x/reward/client/cli/query_params.go delete mode 100644 x/reward/client/cli/query_reward_pool.go delete mode 100644 x/reward/client/cli/query_reward_pool_test.go delete mode 100644 x/reward/client/cli/query_test.go delete mode 100644 x/reward/client/cli/tx.go delete mode 100644 x/reward/client/cli/tx_set_reward.go delete mode 100644 x/reward/genesis.go delete mode 100644 x/reward/genesis_test.go delete mode 100644 x/reward/keeper/grpc.go delete mode 100644 x/reward/keeper/grpc_params.go delete mode 100644 x/reward/keeper/grpc_params_test.go delete mode 100644 x/reward/keeper/grpc_reward_pool.go rename x/reward/keeper/{msg.go => msg_server.go} (86%) rename x/reward/keeper/{msg_set_reward.go => msg_server_set_rewards.go} (62%) delete mode 100644 x/reward/keeper/msg_set_reward_test.go create mode 100644 x/reward/keeper/msg_update_params.go create mode 100644 x/reward/keeper/msg_update_params_test.go delete mode 100644 x/reward/keeper/params.go delete mode 100644 x/reward/keeper/params_test.go create mode 100644 x/reward/keeper/query.go create mode 100644 x/reward/keeper/query_params.go create mode 100644 x/reward/keeper/query_params_test.go create mode 100644 x/reward/keeper/query_reward_pool.go rename x/reward/keeper/{grpc_reward_pool_test.go => query_reward_pool_test.go} (64%) delete mode 100644 x/reward/keeper/reward_pool_test.go delete mode 100644 x/reward/module.go create mode 100644 x/reward/module/autocli.go create mode 100644 x/reward/module/genesis.go create mode 100644 x/reward/module/genesis_test.go create mode 100644 x/reward/module/module.go rename x/reward/{module_simulation.go => module/simulation.go} (58%) rename x/reward/simulation/{store.go => helpers.go} (59%) rename x/reward/simulation/{simulation.go => set_rewards.go} (75%) delete mode 100644 x/reward/simulation/store_test.go delete mode 100644 x/reward/types/msg_set_reward.go delete mode 100644 x/reward/types/msg_set_reward_test.go create mode 100644 x/reward/types/msgs.go diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d1b0df20..cf65d62a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,7 +1,9 @@ # CODEOWNERS: https://help.github.com/articles/about-codeowners/ # Primary repo maintainers -* @ilgooz @jeronimoalbi @Pantani +* @ilgooz @jeronimoalbi @Pantani @julienrbrt # Docs -*.md @ilgooz +*.md @salmad3 @toschdev @ilgooz +docs/* @salmad3 @toschdev @ilgooz +changelog.md @ilgooz @salmad3 @toschdev @jeronimoalbi @Pantani @julienrbrt diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 7d6c05fe..1b721570 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -2,14 +2,14 @@ If you're willing to create a new PR on Starport Network, make sure that you read and comply with this document. -Start a new [Discussion](https://github.com/tendermint/spn/discussions/new) if you want to propose changes to this document. +Start a new [Discussion](https://github.com/ignite/network/discussions/new) if you want to propose changes to this document. Thank you for your contribution! ## Providing Feedback -* Before you open an issue, do a web search, and check for [existing open and closed GitHub Issues](https://github.com/tendermint/spn/issues) to see if your question has already been asked and answered. If you find a relevant topic, you can comment on that issue. -* To provide feedback or ask a question, create a [GitHub issue](https://github.com/tendermint/spn/issues/new/choose). Be sure to provide the relevant information, case study, or informative links as suggested by the Pull Request template. +* Before you open an issue, do a web search, and check for [existing open and closed GitHub Issues](https://github.com/ignite/network/issues) to see if your question has already been asked and answered. If you find a relevant topic, you can comment on that issue. +* To provide feedback or ask a question, create a [GitHub issue](https://github.com/ignite/network/issues/new/choose). Be sure to provide the relevant information, case study, or informative links as suggested by the Pull Request template. * We recommend using GitHub issues for issues and feedback. However, you can ask quick questions on the [#🔨cosmos-sdk-starport](https://discord.com/channels/669268347736686612/737461683588431924) channel in Discord. ## Opening pull requests diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 00000000..2eeae7a9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,18 @@ +--- +name: Ignite Network bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' +--- + +**Describe the bug** +Tell us what you were doing and provide a clear and concise description of issue you encountered. + +**To reproduce** +Steps to reproduce the behavior: +1. + +**What version are you using?** + +Provide the output of the `ignite version` command. diff --git a/.github/ISSUE_TEMPLATE/spn-feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md similarity index 67% rename from .github/ISSUE_TEMPLATE/spn-feature-request.md rename to .github/ISSUE_TEMPLATE/feature-request.md index 9e8ee0c3..2cf12554 100644 --- a/.github/ISSUE_TEMPLATE/spn-feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -1,5 +1,5 @@ --- -name: Starport Network feature request +name: Ignite Network feature request about: Suggest an idea for this project title: '' labels: request @@ -7,7 +7,7 @@ assignees: '' --- -**Is your feature request related to a problem? Please describe.** +**Is your feature request related to a problem or issue you encountered? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** @@ -15,3 +15,5 @@ A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. + +Include other useful information that helps us understand your request. diff --git a/.github/ISSUE_TEMPLATE/spn-bug-report.md b/.github/ISSUE_TEMPLATE/spn-bug-report.md deleted file mode 100644 index 1d86fbb3..00000000 --- a/.github/ISSUE_TEMPLATE/spn-bug-report.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Starport Network bug report -about: Create a report to help us improve -title: '' -labels: report -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. - -**Please provide output of commands** - - `spn version` - - `go version` - - `uname -a` diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 00000000..56999212 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1,12 @@ +Please make sure to check the following for your PR: + +- [ ] This PR complies with the [contributing](../../contributing.md) guidelines. +- [ ] Reviewed "Files changed" and left comments if necessary +- [ ] Included relevant documentation changes. + +Ignite Network team only: + +- [ ] I have updated the _Unreleased_ section in the changelog.md for my changes. +- [ ] If the templates in `ignite/templates/files` have been changed, make + sure that the change doesn't need to be reflected in the + `ignite/templates/files-*` folders. diff --git a/.codecov.yml b/.github/codecov.yml similarity index 90% rename from .codecov.yml rename to .github/codecov.yml index 791b8345..31b0edab 100644 --- a/.codecov.yml +++ b/.github/codecov.yml @@ -1,13 +1,15 @@ coverage: - range: 70...100 - round: down precision: 2 + round: down + range: 70...100 status: patch: off changes: false project: default: - threshold: 1% # allow this much decrease on project + target: auto + threshold: 10% + informational: true modules: if_ci_failed: error target: 70% @@ -24,6 +26,10 @@ comment: behavior: default require_changes: false +codecov: + notify: + wait_for_ci: false + flags: modules: carryforward: true @@ -57,14 +63,13 @@ ignore: - "*.yml" - "*.yaml" - "*.pb.go" + - "*.pb.gw.go" - ".github/" - "app/" - "cmd/" - "docs/" - - "pkg/errors/" - "proto/" - "scripts/" - - "tests/" - "testutil/" - "dart/" - "vue/" diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..28f425f8 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,35 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "gomod" + directory: "/" # Location of package manifests + schedule: + interval: "daily" + time: "10:00" + labels: + - "dependencies" + - "component:go" + - "skip-changelog" + open-pull-requests-limit: 0 + + - package-ecosystem: "npm" + directory: "/docs" # Location of package manifests + schedule: + interval: "daily" + time: "10:00" + labels: + - "dependencies" + - "component:js" + - "skip-changelog" + open-pull-requests-limit: 0 + + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily + time: "10:00" + open-pull-requests-limit: 0 diff --git a/.github/mergify.yml b/.github/mergify.yml new file mode 100644 index 00000000..15d82166 --- /dev/null +++ b/.github/mergify.yml @@ -0,0 +1,33 @@ +queue_rules: + - name: default + conditions: + - "#approved-reviews-by>1" + +pull_request_rules: + - name: automerge to main with label automerge and branch protection passing + conditions: + - "#approved-reviews-by>1" + - base=main + actions: + queue: + name: default + method: squash + commit_message_template: | + {{ title }} (#{{ number }}) + {{ body }} + - name: backport patches to v28.x.y branch + conditions: + - base=main + - label=backport/v28.x.y + actions: + backport: + branches: + - release/v28.x.y + - name: backport patches to v29.x.y branch + conditions: + - base=main + - label=backport/v29.x.y + actions: + backport: + branches: + - release/v29.x.y diff --git a/.github/workflows/linkchecker-config.json b/.github/workflows/linkchecker-config.json new file mode 100644 index 00000000..8a1c4cda --- /dev/null +++ b/.github/workflows/linkchecker-config.json @@ -0,0 +1,22 @@ +{ + "ignorePatterns": [ + { + "pattern": "^https://render.githubusercontent.com/render/" + }, + { + "pattern": "^http://localhost" + }, + { + "pattern": "^index.md" + }, + { + "pattern": "^#" + } + ], + "replacementPatterns": [ + ], + "timeout": "20s", + "retryOn429": true, + "retryCount": 5, + "fallbackRetryDelay": "30s" +} diff --git a/.github/workflows/linkchecker.yml b/.github/workflows/linkchecker.yml new file mode 100644 index 00000000..241c4c16 --- /dev/null +++ b/.github/workflows/linkchecker.yml @@ -0,0 +1,21 @@ +name: Check Markdown links + +on: + pull_request: + push: + branches: + - main + - develop + schedule: + - cron: '* */24 * * *' + +jobs: + markdown-link-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: gaurav-nelson/github-action-markdown-link-check@1.0.15 + with: + folder-path: "." + use-verbose-mode: 'yes' + config-file: '.github/workflows/linkchecker-config.json' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..2ceabd4d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,55 @@ +# This workflow is useful if you want to automate the process of: +# +# a) Creating a new prelease when you push a new tag with a "v" prefix (version). +# +# This type of prerelease is meant to be used for production: alpha, beta, rc, etc. types of releases. +# After the prerelease is created, you need to make your changes on the release page at the relevant +# Github page and publish your release. +# +# b) Creating/updating the "latest" prerelease when you push to your default branch. +# +# This type of prelease is useful to make your bleeding-edge binaries available to advanced users. +# +# The workflow will not run if there is no tag pushed with a "v" prefix and no change pushed to your +# default branch. +on: push + +jobs: + might_release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Prepare Release Variables + id: vars + uses: ignite/cli/actions/release/vars@main + + - name: Issue Release Assets + uses: ignite/cli/actions/cli@main + if: ${{ steps.vars.outputs.should_release == 'true' }} + with: + args: chain build --release --release.prefix ${{ steps.vars.outputs.tarball_prefix }} -t linux:amd64 -t darwin:amd64 -t darwin:arm64 -y + env: + DO_NOT_TRACK: 1 + + - name: Delete the "latest" Release + uses: dev-drprasad/delete-tag-and-release@v0.2.1 + if: ${{ steps.vars.outputs.is_release_type_latest == 'true' }} + with: + tag_name: ${{ steps.vars.outputs.tag_name }} + delete_release: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Publish the Release + uses: softprops/action-gh-release@v1 + if: ${{ steps.vars.outputs.should_release == 'true' }} + with: + tag_name: ${{ steps.vars.outputs.tag_name }} + files: release/* + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/sims.yml b/.github/workflows/sims.yml index 17015bbc..145a465f 100644 --- a/.github/workflows/sims.yml +++ b/.github/workflows/sims.yml @@ -6,16 +6,24 @@ on: push: branches: - main + - release/* + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true jobs: build: runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, 'skip-sims')" steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + if: env.GIT_DIFF with: - go-version: 1.19 + go-version: "stable" + cache: true + cache-dependency-path: go.sum - name: Display go version run: go version - run: make build @@ -24,9 +32,12 @@ jobs: runs-on: ubuntu-latest needs: build steps: - - uses: actions/setup-go@v4 + - uses: actions/setup-go@v5 + if: env.GIT_DIFF with: - go-version: 1.19 + go-version: "stable" + cache: true + cache-dependency-path: go.sum - name: Display go version run: go version - name: Install runsim @@ -38,25 +49,23 @@ jobs: test-sim-nondeterminism: runs-on: ubuntu-latest - needs: [build, install-runsim] + needs: [ build, install-runsim ] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + if: env.GIT_DIFF with: - go-version: 1.19 + go-version: "stable" + cache: true + cache-dependency-path: go.sum - name: Display go version run: go version - - uses: technote-space/get-diff-action@v4 + - uses: technote-space/get-diff-action@v6 with: PATTERNS: | **/**.go go.mod go.sum - - uses: actions/cache@v2 - with: - path: ~/go/bin - key: ${{ runner.os }}-go-runsim-binary - if: env.GIT_DIFF - name: test-sim-nondeterminism run: | make test-sim-nondeterminism @@ -64,15 +73,18 @@ jobs: test-sim-import-export: runs-on: ubuntu-latest - needs: [build, install-runsim] + needs: [ build, install-runsim ] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + if: env.GIT_DIFF with: - go-version: 1.19 + go-version: "stable" + cache: true + cache-dependency-path: go.sum - name: Display go version run: go version - - uses: technote-space/get-diff-action@v4 + - uses: technote-space/get-diff-action@v6 with: SUFFIX_FILTER: | **/**.go @@ -80,11 +92,6 @@ jobs: go.sum SET_ENV_NAME_INSERTIONS: 1 SET_ENV_NAME_LINES: 1 - - uses: actions/cache@v2 - with: - path: ~/go/bin - key: ${{ runner.os }}-go-runsim-binary - if: env.GIT_DIFF - name: test-sim-import-export run: | make test-sim-import-export @@ -92,15 +99,18 @@ jobs: test-sim-after-import: runs-on: ubuntu-latest - needs: [build, install-runsim] + needs: [ build, install-runsim ] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + if: env.GIT_DIFF with: - go-version: 1.19 + go-version: "stable" + cache: true + cache-dependency-path: go.sum - name: Display go version run: go version - - uses: technote-space/get-diff-action@v4 + - uses: technote-space/get-diff-action@v6 with: SUFFIX_FILTER: | **/**.go @@ -108,11 +118,6 @@ jobs: go.sum SET_ENV_NAME_INSERTIONS: 1 SET_ENV_NAME_LINES: 1 - - uses: actions/cache@v2 - with: - path: ~/go/bin - key: ${{ runner.os }}-go-runsim-binary - if: env.GIT_DIFF - name: test-sim-after-import run: | make test-sim-after-import diff --git a/.github/workflows/simulation.yml b/.github/workflows/simulation.yml index e5a7e787..e3a06357 100644 --- a/.github/workflows/simulation.yml +++ b/.github/workflows/simulation.yml @@ -6,26 +6,25 @@ on: paths-ignore: - '*.md' branches: - - master - - develop + - main + - release/* + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - - uses: actions/cache@v2 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go- + - uses: actions/checkout@v4 - - uses: actions/setup-go@v4 + - uses: actions/setup-go@v5 + if: env.GIT_DIFF with: - go-version: 1.19 + go-version: "stable" + cache: true + cache-dependency-path: go.sum - name: Run simulation tests run: make test-sim-ci diff --git a/.github/workflows/test-lint.yml b/.github/workflows/test-lint.yml index aa2eaefe..4adf6817 100644 --- a/.github/workflows/test-lint.yml +++ b/.github/workflows/test-lint.yml @@ -3,29 +3,38 @@ on: pull_request: push: branches: - - master - - develop + - main + - release/* + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + jobs: lint: name: golangci-lint runs-on: ubuntu-latest timeout-minutes: 6 steps: - - name: Set up Go - uses: actions/setup-go@v4 + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + if: env.GIT_DIFF with: - go-version: 1.19 - - uses: actions/checkout@v3 - - uses: technote-space/get-diff-action@v4 + go-version: "stable" + cache: true + cache-dependency-path: go.sum + + - uses: technote-space/get-diff-action@v6 with: PATTERNS: | **/**.go go.mod go.sum - - uses: golangci/golangci-lint-action@v3 + + - uses: golangci/golangci-lint-action@v6 with: - # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. - version: v1.52 + version: v1.61.0 args: --issues-exit-code=0 -e SA1019 --timeout 10m github-token: ${{ secrets.github_token }} if: env.GIT_DIFF diff --git a/.github/workflows/test-semantic.yml b/.github/workflows/test-semantic.yml index c6b9ec30..5d00d201 100644 --- a/.github/workflows/test-semantic.yml +++ b/.github/workflows/test-semantic.yml @@ -11,6 +11,6 @@ jobs: semantic_pr: runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request@v1.2.0 + - uses: amannn/action-semantic-pull-request@v5 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 86bc1b84..f815f778 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,33 +2,29 @@ name: Unit Tests on: pull_request: - paths-ignore: - - "*.md" push: paths-ignore: - '*.md' branches: - main - - develop + - release/* + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - - uses: actions/cache@v2 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go- + - uses: actions/checkout@v4 - - uses: actions/setup-go@v4 + - uses: actions/setup-go@v5 + if: env.GIT_DIFF with: - go-version: 1.19 + go-version: "stable" + cache: true + cache-dependency-path: go.sum - name: Run unit tests run: | @@ -41,10 +37,9 @@ jobs: excludelist+=" $(find ./ -type f -name '*.pb.gw.go')" excludelist+=" $(find ./app -type d)" excludelist+=" $(find ./cmd -type d)" - excludelist+=" $(find ./docs -type d)" - excludelist+=" $(find ./localnet -type d)" excludelist+=" $(find ./proto -type d)" - excludelist+=" $(find ./scripts -type d)" + excludelist+=" $(find ./testutil -type d)" + excludelist+=" $(find ./tools -type d)" for filename in ${excludelist}; do filename=${filename#".//"} echo "Excluding ${filename} from coverage report..." @@ -53,8 +48,8 @@ jobs: done - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3.1.1 + uses: codecov/codecov-action@v4 with: file: ./coverage.txt - fail_ci_if_error: true + fail_ci_if_error: false verbose: true diff --git a/.gitignore b/.gitignore index d72f25e7..737e614e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,12 @@ release/ # OS .DS_Store +*.swp +*.swo +*.swl +*.swm +*.swn +*.pyc # Localnet localnet/*/node?/data/*.db @@ -31,4 +37,44 @@ localnet/vs.yaml cover.html # Frontend -ignite-ui \ No newline at end of file +ignite-ui + +# Build +vendor +build +tools/bin/* +examples/build/* +docs/_build +docs/tutorial +docs/node_modules +docs/modules +dist +tools-stamp +proto-tools-stamp +buf-stamp +*.dot +*.ign + +# Data - ideally these don't exist +app/data/* +x/farming/client/lcd/keys/* +mytestnet + +# Testing +coverage.out +profile.out +sim_log_file + +# Vagrant +.vagrant/ +*.box +*.log +vagrant + +# IDE +.vscode/ +.idea/ +*.iml + +# Localnet +data/ diff --git a/.golangci.yml b/.golangci.yml deleted file mode 100644 index b3c0da84..00000000 --- a/.golangci.yml +++ /dev/null @@ -1,43 +0,0 @@ -run: - tests: false -# # timeout for analysis, e.g. 30s, 5m, default is 1m - timeout: 5m - -linters: - disable-all: true - enable: - - bodyclose - - depguard - - dogsled - - errcheck - - goconst - - gocritic - - gofumpt - - goimports - - revive - - gosec - - gosimple - - govet - - ineffassign - # - interfacer - # - maligned - - misspell - - nakedret - - prealloc - # - scopelint - - staticcheck - - stylecheck - - typecheck - - unconvert - - unused - - unparam - - misspell - # - wsl - - nolintlint - -issues: - exclude: - - G404 - - G101 - max-issues-per-linter: 10000 - max-same-issues: 10000 diff --git a/Makefile b/Makefile index 44ef7ae0..c534f800 100644 --- a/Makefile +++ b/Makefile @@ -53,8 +53,8 @@ build_tags_comma_sep := $(subst $(whitespace),$(comma),$(build_tags)) # process linker flags -ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=spnd \ - -X github.com/cosmos/cosmos-sdk/version.AppName=spnd \ +ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=modulesd \ + -X github.com/cosmos/cosmos-sdk/version.AppName=modulesd \ -X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \ -X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \ -X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)" \ @@ -84,7 +84,7 @@ govulncheck: @echo Running govulncheck... @go run golang.org/x/vuln/cmd/govulncheck ./... -FIND_ARGS := -name '*.go' -type f -not -name '*.pb.go' -not -name '*.pb.gw.go' +FIND_ARGS := -name '*.go' -type f -not -name '*.pb.go' -not -name '*.pb.gw.go' -not -path './api/*' ## format: Run gofumpt and goimports. format: @@ -92,7 +92,7 @@ format: @go install mvdan.cc/gofumpt @go install golang.org/x/tools/cmd/goimports @find . $(FIND_ARGS) | xargs gofumpt -w . - @find . $(FIND_ARGS) | xargs goimports -w -local github.com/ignite/modules + @find . $(FIND_ARGS) | xargs goimports -w -local github.com/ignite/network ## lint: Run Golang CI Lint. lint: @@ -115,22 +115,22 @@ help: Makefile build: go.sum ifeq ($(OS),Windows_NT) - go build $(BUILD_FLAGS) -o build/spnd.exe ./cmd/spnd + go build $(BUILD_FLAGS) -o build/modulesd.exe ./cmd/modulesd else - go build $(BUILD_FLAGS) -o build/spnd ./cmd/spnd + go build $(BUILD_FLAGS) -o build/modulesd ./cmd/modulesd endif build-linux: go.sum LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 $(MAKE) build install: go.sum - go install $(BUILD_FLAGS) ./cmd/spnd + go install $(BUILD_FLAGS) ./cmd/modulesd build-reproducible: go.sum $(DOCKER) rm latest-build || true $(DOCKER) run --volume=$(CURDIR):/sources:ro \ --env TARGET_PLATFORMS='linux/amd64 darwin/amd64 linux/arm64' \ - --env APP=spnd \ + --env APP=modulesd \ --env VERSION=$(VERSION) \ --env COMMIT=$(COMMIT) \ --name latest-build cosmossdk/rbuilder:latest @@ -181,7 +181,7 @@ bench: @VERSION=$(VERSION) go test -mod=readonly -v -timeout 30m -bench=. $(PACKAGES) ## test: Run unit and integration tests. -test: govet test-unit +test: govet govulncheck test-unit .PHONY: test test-unit test-race test-cover bench @@ -194,7 +194,7 @@ proto-all: proto-format proto-lint proto-gen-gogo proto-gen-gogo: @echo "Generating Protobuf Files" @buf generate --template $(CURDIR)/proto/buf.gen.gogo.yaml --output $(CURDIR)/gen/go - @cp -r gen/go/github.com/ignite/modules/x ./ + @cp -r gen/go/github.com/ignite/network/x ./ @rm -R gen/go proto-gen-swagger: diff --git a/api/network/launch/module/v1/module.pulsar.go b/api/network/launch/module/v1/module.pulsar.go new file mode 100644 index 00000000..212546fc --- /dev/null +++ b/api/network/launch/module/v1/module.pulsar.go @@ -0,0 +1,580 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package modulev1 + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Module protoreflect.MessageDescriptor + fd_Module_authority protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_module_v1_module_proto_init() + md_Module = File_network_launch_module_v1_module_proto.Messages().ByName("Module") + fd_Module_authority = md_Module.Fields().ByName("authority") +} + +var _ protoreflect.Message = (*fastReflection_Module)(nil) + +type fastReflection_Module Module + +func (x *Module) ProtoReflect() protoreflect.Message { + return (*fastReflection_Module)(x) +} + +func (x *Module) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_module_v1_module_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) +} + +var _fastReflection_Module_messageType fastReflection_Module_messageType +var _ protoreflect.MessageType = fastReflection_Module_messageType{} + +type fastReflection_Module_messageType struct{} + +func (x fastReflection_Module_messageType) Zero() protoreflect.Message { + return (*fastReflection_Module)(nil) +} +func (x fastReflection_Module_messageType) New() protoreflect.Message { + return new(fastReflection_Module) +} +func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Module) Type() protoreflect.MessageType { + return _fastReflection_Module_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Module) New() protoreflect.Message { + return new(fastReflection_Module) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage { + return (*Module)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_Module_authority, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.module.v1.Module.authority": + return x.Authority != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.module.v1.Module")) + } + panic(fmt.Errorf("message network.launch.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.module.v1.Module.authority": + x.Authority = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.module.v1.Module")) + } + panic(fmt.Errorf("message network.launch.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.module.v1.Module.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.module.v1.Module")) + } + panic(fmt.Errorf("message network.launch.module.v1.Module does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.module.v1.Module.authority": + x.Authority = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.module.v1.Module")) + } + panic(fmt.Errorf("message network.launch.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.module.v1.Module.authority": + panic(fmt.Errorf("field authority of message network.launch.module.v1.Module is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.module.v1.Module")) + } + panic(fmt.Errorf("message network.launch.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.module.v1.Module.authority": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.module.v1.Module")) + } + panic(fmt.Errorf("message network.launch.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.module.v1.Module", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Module) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/module/v1/module.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Module is the config object for the module. +type Module struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (x *Module) Reset() { + *x = Module{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_module_v1_module_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Module) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Module) ProtoMessage() {} + +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { + return file_network_launch_module_v1_module_proto_rawDescGZIP(), []int{0} +} + +func (x *Module) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +var File_network_launch_module_v1_module_proto protoreflect.FileDescriptor + +var file_network_launch_module_v1_module_proto_rawDesc = []byte{ + 0x0a, 0x25, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x52, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x2a, 0xba, 0xc0, 0x96, + 0xda, 0x01, 0x24, 0x0a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, + 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x42, 0xef, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x4d, 0xaa, 0x02, + 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x24, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1b, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_launch_module_v1_module_proto_rawDescOnce sync.Once + file_network_launch_module_v1_module_proto_rawDescData = file_network_launch_module_v1_module_proto_rawDesc +) + +func file_network_launch_module_v1_module_proto_rawDescGZIP() []byte { + file_network_launch_module_v1_module_proto_rawDescOnce.Do(func() { + file_network_launch_module_v1_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_module_v1_module_proto_rawDescData) + }) + return file_network_launch_module_v1_module_proto_rawDescData +} + +var file_network_launch_module_v1_module_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_launch_module_v1_module_proto_goTypes = []interface{}{ + (*Module)(nil), // 0: network.launch.module.v1.Module +} +var file_network_launch_module_v1_module_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 +} + +func init() { file_network_launch_module_v1_module_proto_init() } +func file_network_launch_module_v1_module_proto_init() { + if File_network_launch_module_v1_module_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_launch_module_v1_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Module); 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_network_launch_module_v1_module_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_module_v1_module_proto_goTypes, + DependencyIndexes: file_network_launch_module_v1_module_proto_depIdxs, + MessageInfos: file_network_launch_module_v1_module_proto_msgTypes, + }.Build() + File_network_launch_module_v1_module_proto = out.File + file_network_launch_module_v1_module_proto_rawDesc = nil + file_network_launch_module_v1_module_proto_goTypes = nil + file_network_launch_module_v1_module_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/chain.pulsar.go b/api/network/launch/v1/chain.pulsar.go new file mode 100644 index 00000000..c1ffa918 --- /dev/null +++ b/api/network/launch/v1/chain.pulsar.go @@ -0,0 +1,3920 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_Chain_15_list)(nil) + +type _Chain_15_list struct { + list *[]*v1beta1.Coin +} + +func (x *_Chain_15_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Chain_15_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Chain_15_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_Chain_15_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Chain_15_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Chain_15_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Chain_15_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Chain_15_list) IsValid() bool { + return x.list != nil +} + +var ( + md_Chain protoreflect.MessageDescriptor + fd_Chain_launchID protoreflect.FieldDescriptor + fd_Chain_coordinatorID protoreflect.FieldDescriptor + fd_Chain_genesisChainID protoreflect.FieldDescriptor + fd_Chain_createdAt protoreflect.FieldDescriptor + fd_Chain_sourceURL protoreflect.FieldDescriptor + fd_Chain_sourceHash protoreflect.FieldDescriptor + fd_Chain_initialGenesis protoreflect.FieldDescriptor + fd_Chain_hasProject protoreflect.FieldDescriptor + fd_Chain_projectID protoreflect.FieldDescriptor + fd_Chain_isMainnet protoreflect.FieldDescriptor + fd_Chain_launchTriggered protoreflect.FieldDescriptor + fd_Chain_launchTime protoreflect.FieldDescriptor + fd_Chain_consumerRevisionHeight protoreflect.FieldDescriptor + fd_Chain_monitoringConnected protoreflect.FieldDescriptor + fd_Chain_accountBalance protoreflect.FieldDescriptor + fd_Chain_metadata protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_chain_proto_init() + md_Chain = File_network_launch_v1_chain_proto.Messages().ByName("Chain") + fd_Chain_launchID = md_Chain.Fields().ByName("launchID") + fd_Chain_coordinatorID = md_Chain.Fields().ByName("coordinatorID") + fd_Chain_genesisChainID = md_Chain.Fields().ByName("genesisChainID") + fd_Chain_createdAt = md_Chain.Fields().ByName("createdAt") + fd_Chain_sourceURL = md_Chain.Fields().ByName("sourceURL") + fd_Chain_sourceHash = md_Chain.Fields().ByName("sourceHash") + fd_Chain_initialGenesis = md_Chain.Fields().ByName("initialGenesis") + fd_Chain_hasProject = md_Chain.Fields().ByName("hasProject") + fd_Chain_projectID = md_Chain.Fields().ByName("projectID") + fd_Chain_isMainnet = md_Chain.Fields().ByName("isMainnet") + fd_Chain_launchTriggered = md_Chain.Fields().ByName("launchTriggered") + fd_Chain_launchTime = md_Chain.Fields().ByName("launchTime") + fd_Chain_consumerRevisionHeight = md_Chain.Fields().ByName("consumerRevisionHeight") + fd_Chain_monitoringConnected = md_Chain.Fields().ByName("monitoringConnected") + fd_Chain_accountBalance = md_Chain.Fields().ByName("accountBalance") + fd_Chain_metadata = md_Chain.Fields().ByName("metadata") +} + +var _ protoreflect.Message = (*fastReflection_Chain)(nil) + +type fastReflection_Chain Chain + +func (x *Chain) ProtoReflect() protoreflect.Message { + return (*fastReflection_Chain)(x) +} + +func (x *Chain) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_chain_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) +} + +var _fastReflection_Chain_messageType fastReflection_Chain_messageType +var _ protoreflect.MessageType = fastReflection_Chain_messageType{} + +type fastReflection_Chain_messageType struct{} + +func (x fastReflection_Chain_messageType) Zero() protoreflect.Message { + return (*fastReflection_Chain)(nil) +} +func (x fastReflection_Chain_messageType) New() protoreflect.Message { + return new(fastReflection_Chain) +} +func (x fastReflection_Chain_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Chain +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Chain) Descriptor() protoreflect.MessageDescriptor { + return md_Chain +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Chain) Type() protoreflect.MessageType { + return _fastReflection_Chain_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Chain) New() protoreflect.Message { + return new(fastReflection_Chain) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Chain) Interface() protoreflect.ProtoMessage { + return (*Chain)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Chain) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_Chain_launchID, value) { + return + } + } + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_Chain_coordinatorID, value) { + return + } + } + if x.GenesisChainID != "" { + value := protoreflect.ValueOfString(x.GenesisChainID) + if !f(fd_Chain_genesisChainID, value) { + return + } + } + if x.CreatedAt != int64(0) { + value := protoreflect.ValueOfInt64(x.CreatedAt) + if !f(fd_Chain_createdAt, value) { + return + } + } + if x.SourceURL != "" { + value := protoreflect.ValueOfString(x.SourceURL) + if !f(fd_Chain_sourceURL, value) { + return + } + } + if x.SourceHash != "" { + value := protoreflect.ValueOfString(x.SourceHash) + if !f(fd_Chain_sourceHash, value) { + return + } + } + if x.InitialGenesis != nil { + value := protoreflect.ValueOfMessage(x.InitialGenesis.ProtoReflect()) + if !f(fd_Chain_initialGenesis, value) { + return + } + } + if x.HasProject != false { + value := protoreflect.ValueOfBool(x.HasProject) + if !f(fd_Chain_hasProject, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_Chain_projectID, value) { + return + } + } + if x.IsMainnet != false { + value := protoreflect.ValueOfBool(x.IsMainnet) + if !f(fd_Chain_isMainnet, value) { + return + } + } + if x.LaunchTriggered != false { + value := protoreflect.ValueOfBool(x.LaunchTriggered) + if !f(fd_Chain_launchTriggered, value) { + return + } + } + if x.LaunchTime != nil { + value := protoreflect.ValueOfMessage(x.LaunchTime.ProtoReflect()) + if !f(fd_Chain_launchTime, value) { + return + } + } + if x.ConsumerRevisionHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.ConsumerRevisionHeight) + if !f(fd_Chain_consumerRevisionHeight, value) { + return + } + } + if x.MonitoringConnected != false { + value := protoreflect.ValueOfBool(x.MonitoringConnected) + if !f(fd_Chain_monitoringConnected, value) { + return + } + } + if len(x.AccountBalance) != 0 { + value := protoreflect.ValueOfList(&_Chain_15_list{list: &x.AccountBalance}) + if !f(fd_Chain_accountBalance, value) { + return + } + } + if len(x.Metadata) != 0 { + value := protoreflect.ValueOfBytes(x.Metadata) + if !f(fd_Chain_metadata, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Chain) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.Chain.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.Chain.coordinatorID": + return x.CoordinatorID != uint64(0) + case "network.launch.v1.Chain.genesisChainID": + return x.GenesisChainID != "" + case "network.launch.v1.Chain.createdAt": + return x.CreatedAt != int64(0) + case "network.launch.v1.Chain.sourceURL": + return x.SourceURL != "" + case "network.launch.v1.Chain.sourceHash": + return x.SourceHash != "" + case "network.launch.v1.Chain.initialGenesis": + return x.InitialGenesis != nil + case "network.launch.v1.Chain.hasProject": + return x.HasProject != false + case "network.launch.v1.Chain.projectID": + return x.ProjectID != uint64(0) + case "network.launch.v1.Chain.isMainnet": + return x.IsMainnet != false + case "network.launch.v1.Chain.launchTriggered": + return x.LaunchTriggered != false + case "network.launch.v1.Chain.launchTime": + return x.LaunchTime != nil + case "network.launch.v1.Chain.consumerRevisionHeight": + return x.ConsumerRevisionHeight != int64(0) + case "network.launch.v1.Chain.monitoringConnected": + return x.MonitoringConnected != false + case "network.launch.v1.Chain.accountBalance": + return len(x.AccountBalance) != 0 + case "network.launch.v1.Chain.metadata": + return len(x.Metadata) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Chain")) + } + panic(fmt.Errorf("message network.launch.v1.Chain does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Chain) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.Chain.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.Chain.coordinatorID": + x.CoordinatorID = uint64(0) + case "network.launch.v1.Chain.genesisChainID": + x.GenesisChainID = "" + case "network.launch.v1.Chain.createdAt": + x.CreatedAt = int64(0) + case "network.launch.v1.Chain.sourceURL": + x.SourceURL = "" + case "network.launch.v1.Chain.sourceHash": + x.SourceHash = "" + case "network.launch.v1.Chain.initialGenesis": + x.InitialGenesis = nil + case "network.launch.v1.Chain.hasProject": + x.HasProject = false + case "network.launch.v1.Chain.projectID": + x.ProjectID = uint64(0) + case "network.launch.v1.Chain.isMainnet": + x.IsMainnet = false + case "network.launch.v1.Chain.launchTriggered": + x.LaunchTriggered = false + case "network.launch.v1.Chain.launchTime": + x.LaunchTime = nil + case "network.launch.v1.Chain.consumerRevisionHeight": + x.ConsumerRevisionHeight = int64(0) + case "network.launch.v1.Chain.monitoringConnected": + x.MonitoringConnected = false + case "network.launch.v1.Chain.accountBalance": + x.AccountBalance = nil + case "network.launch.v1.Chain.metadata": + x.Metadata = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Chain")) + } + panic(fmt.Errorf("message network.launch.v1.Chain does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Chain) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.Chain.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.Chain.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.Chain.genesisChainID": + value := x.GenesisChainID + return protoreflect.ValueOfString(value) + case "network.launch.v1.Chain.createdAt": + value := x.CreatedAt + return protoreflect.ValueOfInt64(value) + case "network.launch.v1.Chain.sourceURL": + value := x.SourceURL + return protoreflect.ValueOfString(value) + case "network.launch.v1.Chain.sourceHash": + value := x.SourceHash + return protoreflect.ValueOfString(value) + case "network.launch.v1.Chain.initialGenesis": + value := x.InitialGenesis + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.Chain.hasProject": + value := x.HasProject + return protoreflect.ValueOfBool(value) + case "network.launch.v1.Chain.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.Chain.isMainnet": + value := x.IsMainnet + return protoreflect.ValueOfBool(value) + case "network.launch.v1.Chain.launchTriggered": + value := x.LaunchTriggered + return protoreflect.ValueOfBool(value) + case "network.launch.v1.Chain.launchTime": + value := x.LaunchTime + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.Chain.consumerRevisionHeight": + value := x.ConsumerRevisionHeight + return protoreflect.ValueOfInt64(value) + case "network.launch.v1.Chain.monitoringConnected": + value := x.MonitoringConnected + return protoreflect.ValueOfBool(value) + case "network.launch.v1.Chain.accountBalance": + if len(x.AccountBalance) == 0 { + return protoreflect.ValueOfList(&_Chain_15_list{}) + } + listValue := &_Chain_15_list{list: &x.AccountBalance} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.Chain.metadata": + value := x.Metadata + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Chain")) + } + panic(fmt.Errorf("message network.launch.v1.Chain does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Chain) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.Chain.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.Chain.coordinatorID": + x.CoordinatorID = value.Uint() + case "network.launch.v1.Chain.genesisChainID": + x.GenesisChainID = value.Interface().(string) + case "network.launch.v1.Chain.createdAt": + x.CreatedAt = value.Int() + case "network.launch.v1.Chain.sourceURL": + x.SourceURL = value.Interface().(string) + case "network.launch.v1.Chain.sourceHash": + x.SourceHash = value.Interface().(string) + case "network.launch.v1.Chain.initialGenesis": + x.InitialGenesis = value.Message().Interface().(*InitialGenesis) + case "network.launch.v1.Chain.hasProject": + x.HasProject = value.Bool() + case "network.launch.v1.Chain.projectID": + x.ProjectID = value.Uint() + case "network.launch.v1.Chain.isMainnet": + x.IsMainnet = value.Bool() + case "network.launch.v1.Chain.launchTriggered": + x.LaunchTriggered = value.Bool() + case "network.launch.v1.Chain.launchTime": + x.LaunchTime = value.Message().Interface().(*timestamppb.Timestamp) + case "network.launch.v1.Chain.consumerRevisionHeight": + x.ConsumerRevisionHeight = value.Int() + case "network.launch.v1.Chain.monitoringConnected": + x.MonitoringConnected = value.Bool() + case "network.launch.v1.Chain.accountBalance": + lv := value.List() + clv := lv.(*_Chain_15_list) + x.AccountBalance = *clv.list + case "network.launch.v1.Chain.metadata": + x.Metadata = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Chain")) + } + panic(fmt.Errorf("message network.launch.v1.Chain does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Chain) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Chain.initialGenesis": + if x.InitialGenesis == nil { + x.InitialGenesis = new(InitialGenesis) + } + return protoreflect.ValueOfMessage(x.InitialGenesis.ProtoReflect()) + case "network.launch.v1.Chain.launchTime": + if x.LaunchTime == nil { + x.LaunchTime = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.LaunchTime.ProtoReflect()) + case "network.launch.v1.Chain.accountBalance": + if x.AccountBalance == nil { + x.AccountBalance = []*v1beta1.Coin{} + } + value := &_Chain_15_list{list: &x.AccountBalance} + return protoreflect.ValueOfList(value) + case "network.launch.v1.Chain.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.genesisChainID": + panic(fmt.Errorf("field genesisChainID of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.createdAt": + panic(fmt.Errorf("field createdAt of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.sourceURL": + panic(fmt.Errorf("field sourceURL of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.sourceHash": + panic(fmt.Errorf("field sourceHash of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.hasProject": + panic(fmt.Errorf("field hasProject of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.projectID": + panic(fmt.Errorf("field projectID of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.isMainnet": + panic(fmt.Errorf("field isMainnet of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.launchTriggered": + panic(fmt.Errorf("field launchTriggered of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.consumerRevisionHeight": + panic(fmt.Errorf("field consumerRevisionHeight of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.monitoringConnected": + panic(fmt.Errorf("field monitoringConnected of message network.launch.v1.Chain is not mutable")) + case "network.launch.v1.Chain.metadata": + panic(fmt.Errorf("field metadata of message network.launch.v1.Chain is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Chain")) + } + panic(fmt.Errorf("message network.launch.v1.Chain does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Chain) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Chain.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.Chain.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.Chain.genesisChainID": + return protoreflect.ValueOfString("") + case "network.launch.v1.Chain.createdAt": + return protoreflect.ValueOfInt64(int64(0)) + case "network.launch.v1.Chain.sourceURL": + return protoreflect.ValueOfString("") + case "network.launch.v1.Chain.sourceHash": + return protoreflect.ValueOfString("") + case "network.launch.v1.Chain.initialGenesis": + m := new(InitialGenesis) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.Chain.hasProject": + return protoreflect.ValueOfBool(false) + case "network.launch.v1.Chain.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.Chain.isMainnet": + return protoreflect.ValueOfBool(false) + case "network.launch.v1.Chain.launchTriggered": + return protoreflect.ValueOfBool(false) + case "network.launch.v1.Chain.launchTime": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.Chain.consumerRevisionHeight": + return protoreflect.ValueOfInt64(int64(0)) + case "network.launch.v1.Chain.monitoringConnected": + return protoreflect.ValueOfBool(false) + case "network.launch.v1.Chain.accountBalance": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_Chain_15_list{list: &list}) + case "network.launch.v1.Chain.metadata": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Chain")) + } + panic(fmt.Errorf("message network.launch.v1.Chain does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Chain) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.Chain", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Chain) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Chain) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Chain) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Chain) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Chain) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + l = len(x.GenesisChainID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.CreatedAt != 0 { + n += 1 + runtime.Sov(uint64(x.CreatedAt)) + } + l = len(x.SourceURL) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.SourceHash) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.InitialGenesis != nil { + l = options.Size(x.InitialGenesis) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.HasProject { + n += 2 + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.IsMainnet { + n += 2 + } + if x.LaunchTriggered { + n += 2 + } + if x.LaunchTime != nil { + l = options.Size(x.LaunchTime) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ConsumerRevisionHeight != 0 { + n += 1 + runtime.Sov(uint64(x.ConsumerRevisionHeight)) + } + if x.MonitoringConnected { + n += 2 + } + if len(x.AccountBalance) > 0 { + for _, e := range x.AccountBalance { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + l = len(x.Metadata) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Chain) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Metadata) > 0 { + i -= len(x.Metadata) + copy(dAtA[i:], x.Metadata) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Metadata))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } + if len(x.AccountBalance) > 0 { + for iNdEx := len(x.AccountBalance) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.AccountBalance[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x7a + } + } + if x.MonitoringConnected { + i-- + if x.MonitoringConnected { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x70 + } + if x.ConsumerRevisionHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ConsumerRevisionHeight)) + i-- + dAtA[i] = 0x68 + } + if x.LaunchTime != nil { + encoded, err := options.Marshal(x.LaunchTime) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x62 + } + if x.LaunchTriggered { + i-- + if x.LaunchTriggered { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x58 + } + if x.IsMainnet { + i-- + if x.IsMainnet { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x48 + } + if x.HasProject { + i-- + if x.HasProject { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } + if x.InitialGenesis != nil { + encoded, err := options.Marshal(x.InitialGenesis) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x3a + } + if len(x.SourceHash) > 0 { + i -= len(x.SourceHash) + copy(dAtA[i:], x.SourceHash) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SourceHash))) + i-- + dAtA[i] = 0x32 + } + if len(x.SourceURL) > 0 { + i -= len(x.SourceURL) + copy(dAtA[i:], x.SourceURL) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SourceURL))) + i-- + dAtA[i] = 0x2a + } + if x.CreatedAt != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CreatedAt)) + i-- + dAtA[i] = 0x20 + } + if len(x.GenesisChainID) > 0 { + i -= len(x.GenesisChainID) + copy(dAtA[i:], x.GenesisChainID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GenesisChainID))) + i-- + dAtA[i] = 0x1a + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x10 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Chain) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Chain: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Chain: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisChainID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisChainID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) + } + x.CreatedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CreatedAt |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SourceURL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SourceURL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SourceHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SourceHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field InitialGenesis", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.InitialGenesis == nil { + x.InitialGenesis = &InitialGenesis{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.InitialGenesis); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field HasProject", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.HasProject = bool(v != 0) + case 9: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 10: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field IsMainnet", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.IsMainnet = bool(v != 0) + case 11: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchTriggered", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.LaunchTriggered = bool(v != 0) + case 12: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.LaunchTime == nil { + x.LaunchTime = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.LaunchTime); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 13: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsumerRevisionHeight", wireType) + } + x.ConsumerRevisionHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ConsumerRevisionHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 14: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MonitoringConnected", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.MonitoringConnected = bool(v != 0) + case 15: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AccountBalance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.AccountBalance = append(x.AccountBalance, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AccountBalance[len(x.AccountBalance)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Metadata = append(x.Metadata[:0], dAtA[iNdEx:postIndex]...) + if x.Metadata == nil { + x.Metadata = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_InitialGenesis protoreflect.MessageDescriptor + fd_InitialGenesis_defaultInitialGenesis protoreflect.FieldDescriptor + fd_InitialGenesis_genesisURL protoreflect.FieldDescriptor + fd_InitialGenesis_genesisConfig protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_chain_proto_init() + md_InitialGenesis = File_network_launch_v1_chain_proto.Messages().ByName("InitialGenesis") + fd_InitialGenesis_defaultInitialGenesis = md_InitialGenesis.Fields().ByName("defaultInitialGenesis") + fd_InitialGenesis_genesisURL = md_InitialGenesis.Fields().ByName("genesisURL") + fd_InitialGenesis_genesisConfig = md_InitialGenesis.Fields().ByName("genesisConfig") +} + +var _ protoreflect.Message = (*fastReflection_InitialGenesis)(nil) + +type fastReflection_InitialGenesis InitialGenesis + +func (x *InitialGenesis) ProtoReflect() protoreflect.Message { + return (*fastReflection_InitialGenesis)(x) +} + +func (x *InitialGenesis) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_chain_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) +} + +var _fastReflection_InitialGenesis_messageType fastReflection_InitialGenesis_messageType +var _ protoreflect.MessageType = fastReflection_InitialGenesis_messageType{} + +type fastReflection_InitialGenesis_messageType struct{} + +func (x fastReflection_InitialGenesis_messageType) Zero() protoreflect.Message { + return (*fastReflection_InitialGenesis)(nil) +} +func (x fastReflection_InitialGenesis_messageType) New() protoreflect.Message { + return new(fastReflection_InitialGenesis) +} +func (x fastReflection_InitialGenesis_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_InitialGenesis +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_InitialGenesis) Descriptor() protoreflect.MessageDescriptor { + return md_InitialGenesis +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_InitialGenesis) Type() protoreflect.MessageType { + return _fastReflection_InitialGenesis_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_InitialGenesis) New() protoreflect.Message { + return new(fastReflection_InitialGenesis) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_InitialGenesis) Interface() protoreflect.ProtoMessage { + return (*InitialGenesis)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_InitialGenesis) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Source != nil { + switch o := x.Source.(type) { + case *InitialGenesis_DefaultInitialGenesis: + v := o.DefaultInitialGenesis + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_InitialGenesis_defaultInitialGenesis, value) { + return + } + case *InitialGenesis_GenesisURL: + v := o.GenesisURL + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_InitialGenesis_genesisURL, value) { + return + } + case *InitialGenesis_GenesisConfig: + v := o.GenesisConfig + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_InitialGenesis_genesisConfig, value) { + return + } + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_InitialGenesis) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.InitialGenesis.defaultInitialGenesis": + if x.Source == nil { + return false + } else if _, ok := x.Source.(*InitialGenesis_DefaultInitialGenesis); ok { + return true + } else { + return false + } + case "network.launch.v1.InitialGenesis.genesisURL": + if x.Source == nil { + return false + } else if _, ok := x.Source.(*InitialGenesis_GenesisURL); ok { + return true + } else { + return false + } + case "network.launch.v1.InitialGenesis.genesisConfig": + if x.Source == nil { + return false + } else if _, ok := x.Source.(*InitialGenesis_GenesisConfig); ok { + return true + } else { + return false + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.InitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.InitialGenesis does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_InitialGenesis) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.InitialGenesis.defaultInitialGenesis": + x.Source = nil + case "network.launch.v1.InitialGenesis.genesisURL": + x.Source = nil + case "network.launch.v1.InitialGenesis.genesisConfig": + x.Source = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.InitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.InitialGenesis does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_InitialGenesis) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.InitialGenesis.defaultInitialGenesis": + if x.Source == nil { + return protoreflect.ValueOfMessage((*DefaultInitialGenesis)(nil).ProtoReflect()) + } else if v, ok := x.Source.(*InitialGenesis_DefaultInitialGenesis); ok { + return protoreflect.ValueOfMessage(v.DefaultInitialGenesis.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*DefaultInitialGenesis)(nil).ProtoReflect()) + } + case "network.launch.v1.InitialGenesis.genesisURL": + if x.Source == nil { + return protoreflect.ValueOfMessage((*GenesisURL)(nil).ProtoReflect()) + } else if v, ok := x.Source.(*InitialGenesis_GenesisURL); ok { + return protoreflect.ValueOfMessage(v.GenesisURL.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*GenesisURL)(nil).ProtoReflect()) + } + case "network.launch.v1.InitialGenesis.genesisConfig": + if x.Source == nil { + return protoreflect.ValueOfMessage((*GenesisConfig)(nil).ProtoReflect()) + } else if v, ok := x.Source.(*InitialGenesis_GenesisConfig); ok { + return protoreflect.ValueOfMessage(v.GenesisConfig.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*GenesisConfig)(nil).ProtoReflect()) + } + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.InitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.InitialGenesis does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_InitialGenesis) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.InitialGenesis.defaultInitialGenesis": + cv := value.Message().Interface().(*DefaultInitialGenesis) + x.Source = &InitialGenesis_DefaultInitialGenesis{DefaultInitialGenesis: cv} + case "network.launch.v1.InitialGenesis.genesisURL": + cv := value.Message().Interface().(*GenesisURL) + x.Source = &InitialGenesis_GenesisURL{GenesisURL: cv} + case "network.launch.v1.InitialGenesis.genesisConfig": + cv := value.Message().Interface().(*GenesisConfig) + x.Source = &InitialGenesis_GenesisConfig{GenesisConfig: cv} + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.InitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.InitialGenesis does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_InitialGenesis) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.InitialGenesis.defaultInitialGenesis": + if x.Source == nil { + value := &DefaultInitialGenesis{} + oneofValue := &InitialGenesis_DefaultInitialGenesis{DefaultInitialGenesis: value} + x.Source = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Source.(type) { + case *InitialGenesis_DefaultInitialGenesis: + return protoreflect.ValueOfMessage(m.DefaultInitialGenesis.ProtoReflect()) + default: + value := &DefaultInitialGenesis{} + oneofValue := &InitialGenesis_DefaultInitialGenesis{DefaultInitialGenesis: value} + x.Source = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.InitialGenesis.genesisURL": + if x.Source == nil { + value := &GenesisURL{} + oneofValue := &InitialGenesis_GenesisURL{GenesisURL: value} + x.Source = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Source.(type) { + case *InitialGenesis_GenesisURL: + return protoreflect.ValueOfMessage(m.GenesisURL.ProtoReflect()) + default: + value := &GenesisURL{} + oneofValue := &InitialGenesis_GenesisURL{GenesisURL: value} + x.Source = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.InitialGenesis.genesisConfig": + if x.Source == nil { + value := &GenesisConfig{} + oneofValue := &InitialGenesis_GenesisConfig{GenesisConfig: value} + x.Source = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Source.(type) { + case *InitialGenesis_GenesisConfig: + return protoreflect.ValueOfMessage(m.GenesisConfig.ProtoReflect()) + default: + value := &GenesisConfig{} + oneofValue := &InitialGenesis_GenesisConfig{GenesisConfig: value} + x.Source = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.InitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.InitialGenesis does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_InitialGenesis) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.InitialGenesis.defaultInitialGenesis": + value := &DefaultInitialGenesis{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.InitialGenesis.genesisURL": + value := &GenesisURL{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.InitialGenesis.genesisConfig": + value := &GenesisConfig{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.InitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.InitialGenesis does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_InitialGenesis) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + case "network.launch.v1.InitialGenesis.source": + if x.Source == nil { + return nil + } + switch x.Source.(type) { + case *InitialGenesis_DefaultInitialGenesis: + return x.Descriptor().Fields().ByName("defaultInitialGenesis") + case *InitialGenesis_GenesisURL: + return x.Descriptor().Fields().ByName("genesisURL") + case *InitialGenesis_GenesisConfig: + return x.Descriptor().Fields().ByName("genesisConfig") + } + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.InitialGenesis", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_InitialGenesis) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_InitialGenesis) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_InitialGenesis) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_InitialGenesis) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*InitialGenesis) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + switch x := x.Source.(type) { + case *InitialGenesis_DefaultInitialGenesis: + if x == nil { + break + } + l = options.Size(x.DefaultInitialGenesis) + n += 1 + l + runtime.Sov(uint64(l)) + case *InitialGenesis_GenesisURL: + if x == nil { + break + } + l = options.Size(x.GenesisURL) + n += 1 + l + runtime.Sov(uint64(l)) + case *InitialGenesis_GenesisConfig: + if x == nil { + break + } + l = options.Size(x.GenesisConfig) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*InitialGenesis) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + switch x := x.Source.(type) { + case *InitialGenesis_DefaultInitialGenesis: + encoded, err := options.Marshal(x.DefaultInitialGenesis) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + case *InitialGenesis_GenesisURL: + encoded, err := options.Marshal(x.GenesisURL) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + case *InitialGenesis_GenesisConfig: + encoded, err := options.Marshal(x.GenesisConfig) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*InitialGenesis) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: InitialGenesis: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: InitialGenesis: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DefaultInitialGenesis", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &DefaultInitialGenesis{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Source = &InitialGenesis_DefaultInitialGenesis{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisURL", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &GenesisURL{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Source = &InitialGenesis_GenesisURL{v} + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &GenesisConfig{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Source = &InitialGenesis_GenesisConfig{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_DefaultInitialGenesis protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_chain_proto_init() + md_DefaultInitialGenesis = File_network_launch_v1_chain_proto.Messages().ByName("DefaultInitialGenesis") +} + +var _ protoreflect.Message = (*fastReflection_DefaultInitialGenesis)(nil) + +type fastReflection_DefaultInitialGenesis DefaultInitialGenesis + +func (x *DefaultInitialGenesis) ProtoReflect() protoreflect.Message { + return (*fastReflection_DefaultInitialGenesis)(x) +} + +func (x *DefaultInitialGenesis) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_chain_proto_msgTypes[2] + 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) +} + +var _fastReflection_DefaultInitialGenesis_messageType fastReflection_DefaultInitialGenesis_messageType +var _ protoreflect.MessageType = fastReflection_DefaultInitialGenesis_messageType{} + +type fastReflection_DefaultInitialGenesis_messageType struct{} + +func (x fastReflection_DefaultInitialGenesis_messageType) Zero() protoreflect.Message { + return (*fastReflection_DefaultInitialGenesis)(nil) +} +func (x fastReflection_DefaultInitialGenesis_messageType) New() protoreflect.Message { + return new(fastReflection_DefaultInitialGenesis) +} +func (x fastReflection_DefaultInitialGenesis_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_DefaultInitialGenesis +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_DefaultInitialGenesis) Descriptor() protoreflect.MessageDescriptor { + return md_DefaultInitialGenesis +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_DefaultInitialGenesis) Type() protoreflect.MessageType { + return _fastReflection_DefaultInitialGenesis_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_DefaultInitialGenesis) New() protoreflect.Message { + return new(fastReflection_DefaultInitialGenesis) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_DefaultInitialGenesis) Interface() protoreflect.ProtoMessage { + return (*DefaultInitialGenesis)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_DefaultInitialGenesis) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_DefaultInitialGenesis) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DefaultInitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.DefaultInitialGenesis does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_DefaultInitialGenesis) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DefaultInitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.DefaultInitialGenesis does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_DefaultInitialGenesis) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DefaultInitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.DefaultInitialGenesis does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_DefaultInitialGenesis) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DefaultInitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.DefaultInitialGenesis does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_DefaultInitialGenesis) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DefaultInitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.DefaultInitialGenesis does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_DefaultInitialGenesis) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DefaultInitialGenesis")) + } + panic(fmt.Errorf("message network.launch.v1.DefaultInitialGenesis does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_DefaultInitialGenesis) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.DefaultInitialGenesis", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_DefaultInitialGenesis) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_DefaultInitialGenesis) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_DefaultInitialGenesis) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_DefaultInitialGenesis) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*DefaultInitialGenesis) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*DefaultInitialGenesis) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*DefaultInitialGenesis) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: DefaultInitialGenesis: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: DefaultInitialGenesis: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_GenesisURL protoreflect.MessageDescriptor + fd_GenesisURL_url protoreflect.FieldDescriptor + fd_GenesisURL_hash protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_chain_proto_init() + md_GenesisURL = File_network_launch_v1_chain_proto.Messages().ByName("GenesisURL") + fd_GenesisURL_url = md_GenesisURL.Fields().ByName("url") + fd_GenesisURL_hash = md_GenesisURL.Fields().ByName("hash") +} + +var _ protoreflect.Message = (*fastReflection_GenesisURL)(nil) + +type fastReflection_GenesisURL GenesisURL + +func (x *GenesisURL) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisURL)(x) +} + +func (x *GenesisURL) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_chain_proto_msgTypes[3] + 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) +} + +var _fastReflection_GenesisURL_messageType fastReflection_GenesisURL_messageType +var _ protoreflect.MessageType = fastReflection_GenesisURL_messageType{} + +type fastReflection_GenesisURL_messageType struct{} + +func (x fastReflection_GenesisURL_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisURL)(nil) +} +func (x fastReflection_GenesisURL_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisURL) +} +func (x fastReflection_GenesisURL_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisURL +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisURL) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisURL +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisURL) Type() protoreflect.MessageType { + return _fastReflection_GenesisURL_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisURL) New() protoreflect.Message { + return new(fastReflection_GenesisURL) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisURL) Interface() protoreflect.ProtoMessage { + return (*GenesisURL)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisURL) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Url != "" { + value := protoreflect.ValueOfString(x.Url) + if !f(fd_GenesisURL_url, value) { + return + } + } + if x.Hash != "" { + value := protoreflect.ValueOfString(x.Hash) + if !f(fd_GenesisURL_hash, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisURL) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.GenesisURL.url": + return x.Url != "" + case "network.launch.v1.GenesisURL.hash": + return x.Hash != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisURL")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisURL does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisURL) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.GenesisURL.url": + x.Url = "" + case "network.launch.v1.GenesisURL.hash": + x.Hash = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisURL")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisURL does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisURL) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.GenesisURL.url": + value := x.Url + return protoreflect.ValueOfString(value) + case "network.launch.v1.GenesisURL.hash": + value := x.Hash + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisURL")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisURL does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisURL) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.GenesisURL.url": + x.Url = value.Interface().(string) + case "network.launch.v1.GenesisURL.hash": + x.Hash = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisURL")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisURL does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisURL) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisURL.url": + panic(fmt.Errorf("field url of message network.launch.v1.GenesisURL is not mutable")) + case "network.launch.v1.GenesisURL.hash": + panic(fmt.Errorf("field hash of message network.launch.v1.GenesisURL is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisURL")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisURL does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisURL) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisURL.url": + return protoreflect.ValueOfString("") + case "network.launch.v1.GenesisURL.hash": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisURL")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisURL does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisURL) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.GenesisURL", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisURL) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisURL) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisURL) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisURL) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisURL) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Url) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Hash) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisURL) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Hash) > 0 { + i -= len(x.Hash) + copy(dAtA[i:], x.Hash) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Hash))) + i-- + dAtA[i] = 0x12 + } + if len(x.Url) > 0 { + i -= len(x.Url) + copy(dAtA[i:], x.Url) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Url))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisURL) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisURL: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisURL: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Url", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Url = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Hash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_GenesisConfig protoreflect.MessageDescriptor + fd_GenesisConfig_file protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_chain_proto_init() + md_GenesisConfig = File_network_launch_v1_chain_proto.Messages().ByName("GenesisConfig") + fd_GenesisConfig_file = md_GenesisConfig.Fields().ByName("file") +} + +var _ protoreflect.Message = (*fastReflection_GenesisConfig)(nil) + +type fastReflection_GenesisConfig GenesisConfig + +func (x *GenesisConfig) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisConfig)(x) +} + +func (x *GenesisConfig) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_chain_proto_msgTypes[4] + 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) +} + +var _fastReflection_GenesisConfig_messageType fastReflection_GenesisConfig_messageType +var _ protoreflect.MessageType = fastReflection_GenesisConfig_messageType{} + +type fastReflection_GenesisConfig_messageType struct{} + +func (x fastReflection_GenesisConfig_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisConfig)(nil) +} +func (x fastReflection_GenesisConfig_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisConfig) +} +func (x fastReflection_GenesisConfig_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisConfig +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisConfig) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisConfig +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisConfig) Type() protoreflect.MessageType { + return _fastReflection_GenesisConfig_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisConfig) New() protoreflect.Message { + return new(fastReflection_GenesisConfig) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisConfig) Interface() protoreflect.ProtoMessage { + return (*GenesisConfig)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisConfig) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.File != "" { + value := protoreflect.ValueOfString(x.File) + if !f(fd_GenesisConfig_file, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisConfig) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.GenesisConfig.file": + return x.File != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisConfig")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisConfig does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisConfig) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.GenesisConfig.file": + x.File = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisConfig")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisConfig does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisConfig) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.GenesisConfig.file": + value := x.File + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisConfig")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisConfig does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisConfig) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.GenesisConfig.file": + x.File = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisConfig")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisConfig does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisConfig) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisConfig.file": + panic(fmt.Errorf("field file of message network.launch.v1.GenesisConfig is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisConfig")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisConfig does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisConfig) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisConfig.file": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisConfig")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisConfig does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisConfig) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.GenesisConfig", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisConfig) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisConfig) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisConfig) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisConfig) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisConfig) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.File) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisConfig) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.File) > 0 { + i -= len(x.File) + copy(dAtA[i:], x.File) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.File))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisConfig) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field File", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.File = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/chain.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Chain struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + CoordinatorID uint64 `protobuf:"varint,2,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` + GenesisChainID string `protobuf:"bytes,3,opt,name=genesisChainID,proto3" json:"genesisChainID,omitempty"` + CreatedAt int64 `protobuf:"varint,4,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + SourceURL string `protobuf:"bytes,5,opt,name=sourceURL,proto3" json:"sourceURL,omitempty"` + SourceHash string `protobuf:"bytes,6,opt,name=sourceHash,proto3" json:"sourceHash,omitempty"` + InitialGenesis *InitialGenesis `protobuf:"bytes,7,opt,name=initialGenesis,proto3" json:"initialGenesis,omitempty"` + HasProject bool `protobuf:"varint,8,opt,name=hasProject,proto3" json:"hasProject,omitempty"` + ProjectID uint64 `protobuf:"varint,9,opt,name=projectID,proto3" json:"projectID,omitempty"` + IsMainnet bool `protobuf:"varint,10,opt,name=isMainnet,proto3" json:"isMainnet,omitempty"` + LaunchTriggered bool `protobuf:"varint,11,opt,name=launchTriggered,proto3" json:"launchTriggered,omitempty"` + LaunchTime *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=launchTime,proto3" json:"launchTime,omitempty"` + ConsumerRevisionHeight int64 `protobuf:"varint,13,opt,name=consumerRevisionHeight,proto3" json:"consumerRevisionHeight,omitempty"` + MonitoringConnected bool `protobuf:"varint,14,opt,name=monitoringConnected,proto3" json:"monitoringConnected,omitempty"` + // account balance is the balance given to approved accounts + // for this chain. If not set, the balances used will be those + // contained in the requests + AccountBalance []*v1beta1.Coin `protobuf:"bytes,15,rep,name=accountBalance,proto3" json:"accountBalance,omitempty"` + Metadata []byte `protobuf:"bytes,16,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *Chain) Reset() { + *x = Chain{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_chain_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Chain) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Chain) ProtoMessage() {} + +// Deprecated: Use Chain.ProtoReflect.Descriptor instead. +func (*Chain) Descriptor() ([]byte, []int) { + return file_network_launch_v1_chain_proto_rawDescGZIP(), []int{0} +} + +func (x *Chain) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *Chain) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +func (x *Chain) GetGenesisChainID() string { + if x != nil { + return x.GenesisChainID + } + return "" +} + +func (x *Chain) GetCreatedAt() int64 { + if x != nil { + return x.CreatedAt + } + return 0 +} + +func (x *Chain) GetSourceURL() string { + if x != nil { + return x.SourceURL + } + return "" +} + +func (x *Chain) GetSourceHash() string { + if x != nil { + return x.SourceHash + } + return "" +} + +func (x *Chain) GetInitialGenesis() *InitialGenesis { + if x != nil { + return x.InitialGenesis + } + return nil +} + +func (x *Chain) GetHasProject() bool { + if x != nil { + return x.HasProject + } + return false +} + +func (x *Chain) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *Chain) GetIsMainnet() bool { + if x != nil { + return x.IsMainnet + } + return false +} + +func (x *Chain) GetLaunchTriggered() bool { + if x != nil { + return x.LaunchTriggered + } + return false +} + +func (x *Chain) GetLaunchTime() *timestamppb.Timestamp { + if x != nil { + return x.LaunchTime + } + return nil +} + +func (x *Chain) GetConsumerRevisionHeight() int64 { + if x != nil { + return x.ConsumerRevisionHeight + } + return 0 +} + +func (x *Chain) GetMonitoringConnected() bool { + if x != nil { + return x.MonitoringConnected + } + return false +} + +func (x *Chain) GetAccountBalance() []*v1beta1.Coin { + if x != nil { + return x.AccountBalance + } + return nil +} + +func (x *Chain) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +type InitialGenesis struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Source: + // + // *InitialGenesis_DefaultInitialGenesis + // *InitialGenesis_GenesisURL + // *InitialGenesis_GenesisConfig + Source isInitialGenesis_Source `protobuf_oneof:"source"` +} + +func (x *InitialGenesis) Reset() { + *x = InitialGenesis{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_chain_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InitialGenesis) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitialGenesis) ProtoMessage() {} + +// Deprecated: Use InitialGenesis.ProtoReflect.Descriptor instead. +func (*InitialGenesis) Descriptor() ([]byte, []int) { + return file_network_launch_v1_chain_proto_rawDescGZIP(), []int{1} +} + +func (x *InitialGenesis) GetSource() isInitialGenesis_Source { + if x != nil { + return x.Source + } + return nil +} + +func (x *InitialGenesis) GetDefaultInitialGenesis() *DefaultInitialGenesis { + if x, ok := x.GetSource().(*InitialGenesis_DefaultInitialGenesis); ok { + return x.DefaultInitialGenesis + } + return nil +} + +func (x *InitialGenesis) GetGenesisURL() *GenesisURL { + if x, ok := x.GetSource().(*InitialGenesis_GenesisURL); ok { + return x.GenesisURL + } + return nil +} + +func (x *InitialGenesis) GetGenesisConfig() *GenesisConfig { + if x, ok := x.GetSource().(*InitialGenesis_GenesisConfig); ok { + return x.GenesisConfig + } + return nil +} + +type isInitialGenesis_Source interface { + isInitialGenesis_Source() +} + +type InitialGenesis_DefaultInitialGenesis struct { + DefaultInitialGenesis *DefaultInitialGenesis `protobuf:"bytes,1,opt,name=defaultInitialGenesis,proto3,oneof"` +} + +type InitialGenesis_GenesisURL struct { + GenesisURL *GenesisURL `protobuf:"bytes,2,opt,name=genesisURL,proto3,oneof"` +} + +type InitialGenesis_GenesisConfig struct { + GenesisConfig *GenesisConfig `protobuf:"bytes,3,opt,name=genesisConfig,proto3,oneof"` +} + +func (*InitialGenesis_DefaultInitialGenesis) isInitialGenesis_Source() {} + +func (*InitialGenesis_GenesisURL) isInitialGenesis_Source() {} + +func (*InitialGenesis_GenesisConfig) isInitialGenesis_Source() {} + +// DefaultInitialGenesis specifies using the default CLI-generated genesis as an +// initial genesis +type DefaultInitialGenesis struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DefaultInitialGenesis) Reset() { + *x = DefaultInitialGenesis{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_chain_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultInitialGenesis) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultInitialGenesis) ProtoMessage() {} + +// Deprecated: Use DefaultInitialGenesis.ProtoReflect.Descriptor instead. +func (*DefaultInitialGenesis) Descriptor() ([]byte, []int) { + return file_network_launch_v1_chain_proto_rawDescGZIP(), []int{2} +} + +// GenesisURL specifies using a custom genesis from a URL as the initial genesis +type GenesisURL struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` +} + +func (x *GenesisURL) Reset() { + *x = GenesisURL{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_chain_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisURL) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisURL) ProtoMessage() {} + +// Deprecated: Use GenesisURL.ProtoReflect.Descriptor instead. +func (*GenesisURL) Descriptor() ([]byte, []int) { + return file_network_launch_v1_chain_proto_rawDescGZIP(), []int{3} +} + +func (x *GenesisURL) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *GenesisURL) GetHash() string { + if x != nil { + return x.Hash + } + return "" +} + +// GenesisConfig specifies using a custom genesis from a Ignite CLI config file +// the file is located in the root specified by sourceURL +type GenesisConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + File string `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"` +} + +func (x *GenesisConfig) Reset() { + *x = GenesisConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_chain_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisConfig) ProtoMessage() {} + +// Deprecated: Use GenesisConfig.ProtoReflect.Descriptor instead. +func (*GenesisConfig) Descriptor() ([]byte, []int) { + return file_network_launch_v1_chain_proto_rawDescGZIP(), []int{4} +} + +func (x *GenesisConfig) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +var File_network_launch_v1_chain_proto protoreflect.FileDescriptor + +var file_network_launch_v1_chain_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, + 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa7, 0x06, 0x0a, + 0x05, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x67, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1e, 0x0a, 0x0a, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x4f, 0x0a, 0x0e, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x12, 0x1e, 0x0a, + 0x0a, 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x73, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x69, 0x73, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0a, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x63, 0x6f, 0x6e, + 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x75, + 0x6d, 0x65, 0x72, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x12, 0xb4, 0x01, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, + 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, + 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x87, 0x02, 0x0a, 0x0e, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x12, 0x60, 0x0a, 0x15, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x48, 0x00, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x12, 0x3f, 0x0a, 0x0a, 0x67, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x55, 0x52, 0x4c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x55, 0x52, 0x4c, 0x48, 0x00, + 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x55, 0x52, 0x4c, 0x12, 0x48, 0x0a, 0x0d, + 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x22, 0x32, 0x0a, 0x0a, 0x47, 0x65, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x55, 0x52, 0x4c, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x23, 0x0a, + 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, + 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, + 0x6c, 0x65, 0x42, 0xc3, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, + 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_chain_proto_rawDescOnce sync.Once + file_network_launch_v1_chain_proto_rawDescData = file_network_launch_v1_chain_proto_rawDesc +) + +func file_network_launch_v1_chain_proto_rawDescGZIP() []byte { + file_network_launch_v1_chain_proto_rawDescOnce.Do(func() { + file_network_launch_v1_chain_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_chain_proto_rawDescData) + }) + return file_network_launch_v1_chain_proto_rawDescData +} + +var file_network_launch_v1_chain_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_network_launch_v1_chain_proto_goTypes = []interface{}{ + (*Chain)(nil), // 0: network.launch.v1.Chain + (*InitialGenesis)(nil), // 1: network.launch.v1.InitialGenesis + (*DefaultInitialGenesis)(nil), // 2: network.launch.v1.DefaultInitialGenesis + (*GenesisURL)(nil), // 3: network.launch.v1.GenesisURL + (*GenesisConfig)(nil), // 4: network.launch.v1.GenesisConfig + (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp + (*v1beta1.Coin)(nil), // 6: cosmos.base.v1beta1.Coin +} +var file_network_launch_v1_chain_proto_depIdxs = []int32{ + 1, // 0: network.launch.v1.Chain.initialGenesis:type_name -> network.launch.v1.InitialGenesis + 5, // 1: network.launch.v1.Chain.launchTime:type_name -> google.protobuf.Timestamp + 6, // 2: network.launch.v1.Chain.accountBalance:type_name -> cosmos.base.v1beta1.Coin + 2, // 3: network.launch.v1.InitialGenesis.defaultInitialGenesis:type_name -> network.launch.v1.DefaultInitialGenesis + 3, // 4: network.launch.v1.InitialGenesis.genesisURL:type_name -> network.launch.v1.GenesisURL + 4, // 5: network.launch.v1.InitialGenesis.genesisConfig:type_name -> network.launch.v1.GenesisConfig + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_network_launch_v1_chain_proto_init() } +func file_network_launch_v1_chain_proto_init() { + if File_network_launch_v1_chain_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_chain_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Chain); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_chain_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InitialGenesis); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_chain_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultInitialGenesis); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_chain_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisURL); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_chain_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_network_launch_v1_chain_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*InitialGenesis_DefaultInitialGenesis)(nil), + (*InitialGenesis_GenesisURL)(nil), + (*InitialGenesis_GenesisConfig)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_launch_v1_chain_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_chain_proto_goTypes, + DependencyIndexes: file_network_launch_v1_chain_proto_depIdxs, + MessageInfos: file_network_launch_v1_chain_proto_msgTypes, + }.Build() + File_network_launch_v1_chain_proto = out.File + file_network_launch_v1_chain_proto_rawDesc = nil + file_network_launch_v1_chain_proto_goTypes = nil + file_network_launch_v1_chain_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/events.pulsar.go b/api/network/launch/v1/events.pulsar.go new file mode 100644 index 00000000..708e8b74 --- /dev/null +++ b/api/network/launch/v1/events.pulsar.go @@ -0,0 +1,7415 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_EventChainCreated protoreflect.MessageDescriptor + fd_EventChainCreated_launchID protoreflect.FieldDescriptor + fd_EventChainCreated_coordinatorAddress protoreflect.FieldDescriptor + fd_EventChainCreated_coordinatorID protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventChainCreated = File_network_launch_v1_events_proto.Messages().ByName("EventChainCreated") + fd_EventChainCreated_launchID = md_EventChainCreated.Fields().ByName("launchID") + fd_EventChainCreated_coordinatorAddress = md_EventChainCreated.Fields().ByName("coordinatorAddress") + fd_EventChainCreated_coordinatorID = md_EventChainCreated.Fields().ByName("coordinatorID") +} + +var _ protoreflect.Message = (*fastReflection_EventChainCreated)(nil) + +type fastReflection_EventChainCreated EventChainCreated + +func (x *EventChainCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventChainCreated)(x) +} + +func (x *EventChainCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_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) +} + +var _fastReflection_EventChainCreated_messageType fastReflection_EventChainCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventChainCreated_messageType{} + +type fastReflection_EventChainCreated_messageType struct{} + +func (x fastReflection_EventChainCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventChainCreated)(nil) +} +func (x fastReflection_EventChainCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventChainCreated) +} +func (x fastReflection_EventChainCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventChainCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventChainCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventChainCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventChainCreated) Type() protoreflect.MessageType { + return _fastReflection_EventChainCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventChainCreated) New() protoreflect.Message { + return new(fastReflection_EventChainCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventChainCreated) Interface() protoreflect.ProtoMessage { + return (*EventChainCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventChainCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventChainCreated_launchID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventChainCreated_coordinatorAddress, value) { + return + } + } + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_EventChainCreated_coordinatorID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventChainCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventChainCreated.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventChainCreated.coordinatorAddress": + return x.CoordinatorAddress != "" + case "network.launch.v1.EventChainCreated.coordinatorID": + return x.CoordinatorID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventChainCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventChainCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventChainCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventChainCreated.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventChainCreated.coordinatorAddress": + x.CoordinatorAddress = "" + case "network.launch.v1.EventChainCreated.coordinatorID": + x.CoordinatorID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventChainCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventChainCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventChainCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventChainCreated.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventChainCreated.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventChainCreated.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventChainCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventChainCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventChainCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventChainCreated.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventChainCreated.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + case "network.launch.v1.EventChainCreated.coordinatorID": + x.CoordinatorID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventChainCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventChainCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventChainCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventChainCreated.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventChainCreated is not mutable")) + case "network.launch.v1.EventChainCreated.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.launch.v1.EventChainCreated is not mutable")) + case "network.launch.v1.EventChainCreated.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.launch.v1.EventChainCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventChainCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventChainCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventChainCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventChainCreated.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventChainCreated.coordinatorAddress": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventChainCreated.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventChainCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventChainCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventChainCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventChainCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventChainCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventChainCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventChainCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventChainCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventChainCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventChainCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x18 + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventChainCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventChainCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventChainCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventRequestCreated protoreflect.MessageDescriptor + fd_EventRequestCreated_creator protoreflect.FieldDescriptor + fd_EventRequestCreated_request protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventRequestCreated = File_network_launch_v1_events_proto.Messages().ByName("EventRequestCreated") + fd_EventRequestCreated_creator = md_EventRequestCreated.Fields().ByName("creator") + fd_EventRequestCreated_request = md_EventRequestCreated.Fields().ByName("request") +} + +var _ protoreflect.Message = (*fastReflection_EventRequestCreated)(nil) + +type fastReflection_EventRequestCreated EventRequestCreated + +func (x *EventRequestCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventRequestCreated)(x) +} + +func (x *EventRequestCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_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) +} + +var _fastReflection_EventRequestCreated_messageType fastReflection_EventRequestCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventRequestCreated_messageType{} + +type fastReflection_EventRequestCreated_messageType struct{} + +func (x fastReflection_EventRequestCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventRequestCreated)(nil) +} +func (x fastReflection_EventRequestCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventRequestCreated) +} +func (x fastReflection_EventRequestCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventRequestCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventRequestCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventRequestCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventRequestCreated) Type() protoreflect.MessageType { + return _fastReflection_EventRequestCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventRequestCreated) New() protoreflect.Message { + return new(fastReflection_EventRequestCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventRequestCreated) Interface() protoreflect.ProtoMessage { + return (*EventRequestCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventRequestCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Creator != "" { + value := protoreflect.ValueOfString(x.Creator) + if !f(fd_EventRequestCreated_creator, value) { + return + } + } + if x.Request != nil { + value := protoreflect.ValueOfMessage(x.Request.ProtoReflect()) + if !f(fd_EventRequestCreated_request, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventRequestCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventRequestCreated.creator": + return x.Creator != "" + case "network.launch.v1.EventRequestCreated.request": + return x.Request != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRequestCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventRequestCreated.creator": + x.Creator = "" + case "network.launch.v1.EventRequestCreated.request": + x.Request = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventRequestCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventRequestCreated.creator": + value := x.Creator + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventRequestCreated.request": + value := x.Request + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRequestCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventRequestCreated.creator": + x.Creator = value.Interface().(string) + case "network.launch.v1.EventRequestCreated.request": + x.Request = value.Message().Interface().(*Request) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRequestCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventRequestCreated.request": + if x.Request == nil { + x.Request = new(Request) + } + return protoreflect.ValueOfMessage(x.Request.ProtoReflect()) + case "network.launch.v1.EventRequestCreated.creator": + panic(fmt.Errorf("field creator of message network.launch.v1.EventRequestCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventRequestCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventRequestCreated.creator": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventRequestCreated.request": + m := new(Request) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestCreated")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventRequestCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventRequestCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventRequestCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRequestCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventRequestCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventRequestCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventRequestCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Creator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Request != nil { + l = options.Size(x.Request) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventRequestCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Request != nil { + encoded, err := options.Marshal(x.Request) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Creator) > 0 { + i -= len(x.Creator) + copy(dAtA[i:], x.Creator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Creator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventRequestCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRequestCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRequestCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Request", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Request == nil { + x.Request = &Request{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Request); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventRequestSettled protoreflect.MessageDescriptor + fd_EventRequestSettled_launchID protoreflect.FieldDescriptor + fd_EventRequestSettled_requestID protoreflect.FieldDescriptor + fd_EventRequestSettled_approved protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventRequestSettled = File_network_launch_v1_events_proto.Messages().ByName("EventRequestSettled") + fd_EventRequestSettled_launchID = md_EventRequestSettled.Fields().ByName("launchID") + fd_EventRequestSettled_requestID = md_EventRequestSettled.Fields().ByName("requestID") + fd_EventRequestSettled_approved = md_EventRequestSettled.Fields().ByName("approved") +} + +var _ protoreflect.Message = (*fastReflection_EventRequestSettled)(nil) + +type fastReflection_EventRequestSettled EventRequestSettled + +func (x *EventRequestSettled) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventRequestSettled)(x) +} + +func (x *EventRequestSettled) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_proto_msgTypes[2] + 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) +} + +var _fastReflection_EventRequestSettled_messageType fastReflection_EventRequestSettled_messageType +var _ protoreflect.MessageType = fastReflection_EventRequestSettled_messageType{} + +type fastReflection_EventRequestSettled_messageType struct{} + +func (x fastReflection_EventRequestSettled_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventRequestSettled)(nil) +} +func (x fastReflection_EventRequestSettled_messageType) New() protoreflect.Message { + return new(fastReflection_EventRequestSettled) +} +func (x fastReflection_EventRequestSettled_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventRequestSettled +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventRequestSettled) Descriptor() protoreflect.MessageDescriptor { + return md_EventRequestSettled +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventRequestSettled) Type() protoreflect.MessageType { + return _fastReflection_EventRequestSettled_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventRequestSettled) New() protoreflect.Message { + return new(fastReflection_EventRequestSettled) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventRequestSettled) Interface() protoreflect.ProtoMessage { + return (*EventRequestSettled)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventRequestSettled) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventRequestSettled_launchID, value) { + return + } + } + if x.RequestID != uint64(0) { + value := protoreflect.ValueOfUint64(x.RequestID) + if !f(fd_EventRequestSettled_requestID, value) { + return + } + } + if x.Approved != false { + value := protoreflect.ValueOfBool(x.Approved) + if !f(fd_EventRequestSettled_approved, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventRequestSettled) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventRequestSettled.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventRequestSettled.requestID": + return x.RequestID != uint64(0) + case "network.launch.v1.EventRequestSettled.approved": + return x.Approved != false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestSettled")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestSettled does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRequestSettled) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventRequestSettled.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventRequestSettled.requestID": + x.RequestID = uint64(0) + case "network.launch.v1.EventRequestSettled.approved": + x.Approved = false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestSettled")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestSettled does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventRequestSettled) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventRequestSettled.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventRequestSettled.requestID": + value := x.RequestID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventRequestSettled.approved": + value := x.Approved + return protoreflect.ValueOfBool(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestSettled")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestSettled does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRequestSettled) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventRequestSettled.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventRequestSettled.requestID": + x.RequestID = value.Uint() + case "network.launch.v1.EventRequestSettled.approved": + x.Approved = value.Bool() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestSettled")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestSettled does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRequestSettled) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventRequestSettled.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventRequestSettled is not mutable")) + case "network.launch.v1.EventRequestSettled.requestID": + panic(fmt.Errorf("field requestID of message network.launch.v1.EventRequestSettled is not mutable")) + case "network.launch.v1.EventRequestSettled.approved": + panic(fmt.Errorf("field approved of message network.launch.v1.EventRequestSettled is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestSettled")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestSettled does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventRequestSettled) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventRequestSettled.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventRequestSettled.requestID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventRequestSettled.approved": + return protoreflect.ValueOfBool(false) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventRequestSettled")) + } + panic(fmt.Errorf("message network.launch.v1.EventRequestSettled does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventRequestSettled) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventRequestSettled", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventRequestSettled) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRequestSettled) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventRequestSettled) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventRequestSettled) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventRequestSettled) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.RequestID != 0 { + n += 1 + runtime.Sov(uint64(x.RequestID)) + } + if x.Approved { + n += 2 + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventRequestSettled) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Approved { + i-- + if x.Approved { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if x.RequestID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RequestID)) + i-- + dAtA[i] = 0x10 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventRequestSettled) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRequestSettled: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRequestSettled: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequestID", wireType) + } + x.RequestID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.RequestID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Approved", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Approved = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_EventGenesisAccountAdded_3_list)(nil) + +type _EventGenesisAccountAdded_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_EventGenesisAccountAdded_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_EventGenesisAccountAdded_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_EventGenesisAccountAdded_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_EventGenesisAccountAdded_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_EventGenesisAccountAdded_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventGenesisAccountAdded_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_EventGenesisAccountAdded_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventGenesisAccountAdded_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_EventGenesisAccountAdded protoreflect.MessageDescriptor + fd_EventGenesisAccountAdded_launchID protoreflect.FieldDescriptor + fd_EventGenesisAccountAdded_address protoreflect.FieldDescriptor + fd_EventGenesisAccountAdded_coins protoreflect.FieldDescriptor + fd_EventGenesisAccountAdded_coordinatorAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventGenesisAccountAdded = File_network_launch_v1_events_proto.Messages().ByName("EventGenesisAccountAdded") + fd_EventGenesisAccountAdded_launchID = md_EventGenesisAccountAdded.Fields().ByName("launchID") + fd_EventGenesisAccountAdded_address = md_EventGenesisAccountAdded.Fields().ByName("address") + fd_EventGenesisAccountAdded_coins = md_EventGenesisAccountAdded.Fields().ByName("coins") + fd_EventGenesisAccountAdded_coordinatorAddress = md_EventGenesisAccountAdded.Fields().ByName("coordinatorAddress") +} + +var _ protoreflect.Message = (*fastReflection_EventGenesisAccountAdded)(nil) + +type fastReflection_EventGenesisAccountAdded EventGenesisAccountAdded + +func (x *EventGenesisAccountAdded) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventGenesisAccountAdded)(x) +} + +func (x *EventGenesisAccountAdded) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_proto_msgTypes[3] + 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) +} + +var _fastReflection_EventGenesisAccountAdded_messageType fastReflection_EventGenesisAccountAdded_messageType +var _ protoreflect.MessageType = fastReflection_EventGenesisAccountAdded_messageType{} + +type fastReflection_EventGenesisAccountAdded_messageType struct{} + +func (x fastReflection_EventGenesisAccountAdded_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventGenesisAccountAdded)(nil) +} +func (x fastReflection_EventGenesisAccountAdded_messageType) New() protoreflect.Message { + return new(fastReflection_EventGenesisAccountAdded) +} +func (x fastReflection_EventGenesisAccountAdded_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventGenesisAccountAdded +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventGenesisAccountAdded) Descriptor() protoreflect.MessageDescriptor { + return md_EventGenesisAccountAdded +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventGenesisAccountAdded) Type() protoreflect.MessageType { + return _fastReflection_EventGenesisAccountAdded_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventGenesisAccountAdded) New() protoreflect.Message { + return new(fastReflection_EventGenesisAccountAdded) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventGenesisAccountAdded) Interface() protoreflect.ProtoMessage { + return (*EventGenesisAccountAdded)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventGenesisAccountAdded) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventGenesisAccountAdded_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventGenesisAccountAdded_address, value) { + return + } + } + if len(x.Coins) != 0 { + value := protoreflect.ValueOfList(&_EventGenesisAccountAdded_3_list{list: &x.Coins}) + if !f(fd_EventGenesisAccountAdded_coins, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventGenesisAccountAdded_coordinatorAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventGenesisAccountAdded) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventGenesisAccountAdded.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventGenesisAccountAdded.address": + return x.Address != "" + case "network.launch.v1.EventGenesisAccountAdded.coins": + return len(x.Coins) != 0 + case "network.launch.v1.EventGenesisAccountAdded.coordinatorAddress": + return x.CoordinatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventGenesisAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventGenesisAccountAdded does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventGenesisAccountAdded) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventGenesisAccountAdded.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventGenesisAccountAdded.address": + x.Address = "" + case "network.launch.v1.EventGenesisAccountAdded.coins": + x.Coins = nil + case "network.launch.v1.EventGenesisAccountAdded.coordinatorAddress": + x.CoordinatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventGenesisAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventGenesisAccountAdded does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventGenesisAccountAdded) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventGenesisAccountAdded.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventGenesisAccountAdded.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventGenesisAccountAdded.coins": + if len(x.Coins) == 0 { + return protoreflect.ValueOfList(&_EventGenesisAccountAdded_3_list{}) + } + listValue := &_EventGenesisAccountAdded_3_list{list: &x.Coins} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.EventGenesisAccountAdded.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventGenesisAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventGenesisAccountAdded does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventGenesisAccountAdded) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventGenesisAccountAdded.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventGenesisAccountAdded.address": + x.Address = value.Interface().(string) + case "network.launch.v1.EventGenesisAccountAdded.coins": + lv := value.List() + clv := lv.(*_EventGenesisAccountAdded_3_list) + x.Coins = *clv.list + case "network.launch.v1.EventGenesisAccountAdded.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventGenesisAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventGenesisAccountAdded does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventGenesisAccountAdded) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventGenesisAccountAdded.coins": + if x.Coins == nil { + x.Coins = []*v1beta1.Coin{} + } + value := &_EventGenesisAccountAdded_3_list{list: &x.Coins} + return protoreflect.ValueOfList(value) + case "network.launch.v1.EventGenesisAccountAdded.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventGenesisAccountAdded is not mutable")) + case "network.launch.v1.EventGenesisAccountAdded.address": + panic(fmt.Errorf("field address of message network.launch.v1.EventGenesisAccountAdded is not mutable")) + case "network.launch.v1.EventGenesisAccountAdded.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.launch.v1.EventGenesisAccountAdded is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventGenesisAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventGenesisAccountAdded does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventGenesisAccountAdded) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventGenesisAccountAdded.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventGenesisAccountAdded.address": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventGenesisAccountAdded.coins": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_EventGenesisAccountAdded_3_list{list: &list}) + case "network.launch.v1.EventGenesisAccountAdded.coordinatorAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventGenesisAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventGenesisAccountAdded does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventGenesisAccountAdded) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventGenesisAccountAdded", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventGenesisAccountAdded) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventGenesisAccountAdded) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventGenesisAccountAdded) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventGenesisAccountAdded) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventGenesisAccountAdded) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Coins) > 0 { + for _, e := range x.Coins { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventGenesisAccountAdded) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x22 + } + if len(x.Coins) > 0 { + for iNdEx := len(x.Coins) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Coins[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventGenesisAccountAdded) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventGenesisAccountAdded: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventGenesisAccountAdded: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coins = append(x.Coins, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Coins[len(x.Coins)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventVestingAccountAdded protoreflect.MessageDescriptor + fd_EventVestingAccountAdded_launchID protoreflect.FieldDescriptor + fd_EventVestingAccountAdded_address protoreflect.FieldDescriptor + fd_EventVestingAccountAdded_vestingOptions protoreflect.FieldDescriptor + fd_EventVestingAccountAdded_coordinatorAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventVestingAccountAdded = File_network_launch_v1_events_proto.Messages().ByName("EventVestingAccountAdded") + fd_EventVestingAccountAdded_launchID = md_EventVestingAccountAdded.Fields().ByName("launchID") + fd_EventVestingAccountAdded_address = md_EventVestingAccountAdded.Fields().ByName("address") + fd_EventVestingAccountAdded_vestingOptions = md_EventVestingAccountAdded.Fields().ByName("vestingOptions") + fd_EventVestingAccountAdded_coordinatorAddress = md_EventVestingAccountAdded.Fields().ByName("coordinatorAddress") +} + +var _ protoreflect.Message = (*fastReflection_EventVestingAccountAdded)(nil) + +type fastReflection_EventVestingAccountAdded EventVestingAccountAdded + +func (x *EventVestingAccountAdded) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventVestingAccountAdded)(x) +} + +func (x *EventVestingAccountAdded) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_proto_msgTypes[4] + 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) +} + +var _fastReflection_EventVestingAccountAdded_messageType fastReflection_EventVestingAccountAdded_messageType +var _ protoreflect.MessageType = fastReflection_EventVestingAccountAdded_messageType{} + +type fastReflection_EventVestingAccountAdded_messageType struct{} + +func (x fastReflection_EventVestingAccountAdded_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventVestingAccountAdded)(nil) +} +func (x fastReflection_EventVestingAccountAdded_messageType) New() protoreflect.Message { + return new(fastReflection_EventVestingAccountAdded) +} +func (x fastReflection_EventVestingAccountAdded_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventVestingAccountAdded +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventVestingAccountAdded) Descriptor() protoreflect.MessageDescriptor { + return md_EventVestingAccountAdded +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventVestingAccountAdded) Type() protoreflect.MessageType { + return _fastReflection_EventVestingAccountAdded_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventVestingAccountAdded) New() protoreflect.Message { + return new(fastReflection_EventVestingAccountAdded) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventVestingAccountAdded) Interface() protoreflect.ProtoMessage { + return (*EventVestingAccountAdded)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventVestingAccountAdded) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventVestingAccountAdded_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventVestingAccountAdded_address, value) { + return + } + } + if x.VestingOptions != nil { + value := protoreflect.ValueOfMessage(x.VestingOptions.ProtoReflect()) + if !f(fd_EventVestingAccountAdded_vestingOptions, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventVestingAccountAdded_coordinatorAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventVestingAccountAdded) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventVestingAccountAdded.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventVestingAccountAdded.address": + return x.Address != "" + case "network.launch.v1.EventVestingAccountAdded.vestingOptions": + return x.VestingOptions != nil + case "network.launch.v1.EventVestingAccountAdded.coordinatorAddress": + return x.CoordinatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventVestingAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventVestingAccountAdded does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventVestingAccountAdded) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventVestingAccountAdded.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventVestingAccountAdded.address": + x.Address = "" + case "network.launch.v1.EventVestingAccountAdded.vestingOptions": + x.VestingOptions = nil + case "network.launch.v1.EventVestingAccountAdded.coordinatorAddress": + x.CoordinatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventVestingAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventVestingAccountAdded does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventVestingAccountAdded) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventVestingAccountAdded.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventVestingAccountAdded.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventVestingAccountAdded.vestingOptions": + value := x.VestingOptions + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.EventVestingAccountAdded.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventVestingAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventVestingAccountAdded does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventVestingAccountAdded) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventVestingAccountAdded.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventVestingAccountAdded.address": + x.Address = value.Interface().(string) + case "network.launch.v1.EventVestingAccountAdded.vestingOptions": + x.VestingOptions = value.Message().Interface().(*VestingOptions) + case "network.launch.v1.EventVestingAccountAdded.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventVestingAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventVestingAccountAdded does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventVestingAccountAdded) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventVestingAccountAdded.vestingOptions": + if x.VestingOptions == nil { + x.VestingOptions = new(VestingOptions) + } + return protoreflect.ValueOfMessage(x.VestingOptions.ProtoReflect()) + case "network.launch.v1.EventVestingAccountAdded.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventVestingAccountAdded is not mutable")) + case "network.launch.v1.EventVestingAccountAdded.address": + panic(fmt.Errorf("field address of message network.launch.v1.EventVestingAccountAdded is not mutable")) + case "network.launch.v1.EventVestingAccountAdded.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.launch.v1.EventVestingAccountAdded is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventVestingAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventVestingAccountAdded does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventVestingAccountAdded) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventVestingAccountAdded.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventVestingAccountAdded.address": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventVestingAccountAdded.vestingOptions": + m := new(VestingOptions) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.EventVestingAccountAdded.coordinatorAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventVestingAccountAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventVestingAccountAdded does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventVestingAccountAdded) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventVestingAccountAdded", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventVestingAccountAdded) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventVestingAccountAdded) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventVestingAccountAdded) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventVestingAccountAdded) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventVestingAccountAdded) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.VestingOptions != nil { + l = options.Size(x.VestingOptions) + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventVestingAccountAdded) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x22 + } + if x.VestingOptions != nil { + encoded, err := options.Marshal(x.VestingOptions) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventVestingAccountAdded) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventVestingAccountAdded: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventVestingAccountAdded: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VestingOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.VestingOptions == nil { + x.VestingOptions = &VestingOptions{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VestingOptions); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventValidatorAdded protoreflect.MessageDescriptor + fd_EventValidatorAdded_launchID protoreflect.FieldDescriptor + fd_EventValidatorAdded_address protoreflect.FieldDescriptor + fd_EventValidatorAdded_genTx protoreflect.FieldDescriptor + fd_EventValidatorAdded_consPubKey protoreflect.FieldDescriptor + fd_EventValidatorAdded_selfDelegation protoreflect.FieldDescriptor + fd_EventValidatorAdded_peer protoreflect.FieldDescriptor + fd_EventValidatorAdded_hasProject protoreflect.FieldDescriptor + fd_EventValidatorAdded_projectID protoreflect.FieldDescriptor + fd_EventValidatorAdded_coordinatorAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventValidatorAdded = File_network_launch_v1_events_proto.Messages().ByName("EventValidatorAdded") + fd_EventValidatorAdded_launchID = md_EventValidatorAdded.Fields().ByName("launchID") + fd_EventValidatorAdded_address = md_EventValidatorAdded.Fields().ByName("address") + fd_EventValidatorAdded_genTx = md_EventValidatorAdded.Fields().ByName("genTx") + fd_EventValidatorAdded_consPubKey = md_EventValidatorAdded.Fields().ByName("consPubKey") + fd_EventValidatorAdded_selfDelegation = md_EventValidatorAdded.Fields().ByName("selfDelegation") + fd_EventValidatorAdded_peer = md_EventValidatorAdded.Fields().ByName("peer") + fd_EventValidatorAdded_hasProject = md_EventValidatorAdded.Fields().ByName("hasProject") + fd_EventValidatorAdded_projectID = md_EventValidatorAdded.Fields().ByName("projectID") + fd_EventValidatorAdded_coordinatorAddress = md_EventValidatorAdded.Fields().ByName("coordinatorAddress") +} + +var _ protoreflect.Message = (*fastReflection_EventValidatorAdded)(nil) + +type fastReflection_EventValidatorAdded EventValidatorAdded + +func (x *EventValidatorAdded) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventValidatorAdded)(x) +} + +func (x *EventValidatorAdded) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_proto_msgTypes[5] + 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) +} + +var _fastReflection_EventValidatorAdded_messageType fastReflection_EventValidatorAdded_messageType +var _ protoreflect.MessageType = fastReflection_EventValidatorAdded_messageType{} + +type fastReflection_EventValidatorAdded_messageType struct{} + +func (x fastReflection_EventValidatorAdded_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventValidatorAdded)(nil) +} +func (x fastReflection_EventValidatorAdded_messageType) New() protoreflect.Message { + return new(fastReflection_EventValidatorAdded) +} +func (x fastReflection_EventValidatorAdded_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventValidatorAdded +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventValidatorAdded) Descriptor() protoreflect.MessageDescriptor { + return md_EventValidatorAdded +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventValidatorAdded) Type() protoreflect.MessageType { + return _fastReflection_EventValidatorAdded_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventValidatorAdded) New() protoreflect.Message { + return new(fastReflection_EventValidatorAdded) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventValidatorAdded) Interface() protoreflect.ProtoMessage { + return (*EventValidatorAdded)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventValidatorAdded) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventValidatorAdded_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventValidatorAdded_address, value) { + return + } + } + if len(x.GenTx) != 0 { + value := protoreflect.ValueOfBytes(x.GenTx) + if !f(fd_EventValidatorAdded_genTx, value) { + return + } + } + if len(x.ConsPubKey) != 0 { + value := protoreflect.ValueOfBytes(x.ConsPubKey) + if !f(fd_EventValidatorAdded_consPubKey, value) { + return + } + } + if x.SelfDelegation != nil { + value := protoreflect.ValueOfMessage(x.SelfDelegation.ProtoReflect()) + if !f(fd_EventValidatorAdded_selfDelegation, value) { + return + } + } + if x.Peer != nil { + value := protoreflect.ValueOfMessage(x.Peer.ProtoReflect()) + if !f(fd_EventValidatorAdded_peer, value) { + return + } + } + if x.HasProject != false { + value := protoreflect.ValueOfBool(x.HasProject) + if !f(fd_EventValidatorAdded_hasProject, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventValidatorAdded_projectID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventValidatorAdded_coordinatorAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventValidatorAdded) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventValidatorAdded.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventValidatorAdded.address": + return x.Address != "" + case "network.launch.v1.EventValidatorAdded.genTx": + return len(x.GenTx) != 0 + case "network.launch.v1.EventValidatorAdded.consPubKey": + return len(x.ConsPubKey) != 0 + case "network.launch.v1.EventValidatorAdded.selfDelegation": + return x.SelfDelegation != nil + case "network.launch.v1.EventValidatorAdded.peer": + return x.Peer != nil + case "network.launch.v1.EventValidatorAdded.hasProject": + return x.HasProject != false + case "network.launch.v1.EventValidatorAdded.projectID": + return x.ProjectID != uint64(0) + case "network.launch.v1.EventValidatorAdded.coordinatorAddress": + return x.CoordinatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorAdded does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorAdded) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventValidatorAdded.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventValidatorAdded.address": + x.Address = "" + case "network.launch.v1.EventValidatorAdded.genTx": + x.GenTx = nil + case "network.launch.v1.EventValidatorAdded.consPubKey": + x.ConsPubKey = nil + case "network.launch.v1.EventValidatorAdded.selfDelegation": + x.SelfDelegation = nil + case "network.launch.v1.EventValidatorAdded.peer": + x.Peer = nil + case "network.launch.v1.EventValidatorAdded.hasProject": + x.HasProject = false + case "network.launch.v1.EventValidatorAdded.projectID": + x.ProjectID = uint64(0) + case "network.launch.v1.EventValidatorAdded.coordinatorAddress": + x.CoordinatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorAdded does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventValidatorAdded) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventValidatorAdded.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventValidatorAdded.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventValidatorAdded.genTx": + value := x.GenTx + return protoreflect.ValueOfBytes(value) + case "network.launch.v1.EventValidatorAdded.consPubKey": + value := x.ConsPubKey + return protoreflect.ValueOfBytes(value) + case "network.launch.v1.EventValidatorAdded.selfDelegation": + value := x.SelfDelegation + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.EventValidatorAdded.peer": + value := x.Peer + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.EventValidatorAdded.hasProject": + value := x.HasProject + return protoreflect.ValueOfBool(value) + case "network.launch.v1.EventValidatorAdded.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventValidatorAdded.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorAdded does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorAdded) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventValidatorAdded.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventValidatorAdded.address": + x.Address = value.Interface().(string) + case "network.launch.v1.EventValidatorAdded.genTx": + x.GenTx = value.Bytes() + case "network.launch.v1.EventValidatorAdded.consPubKey": + x.ConsPubKey = value.Bytes() + case "network.launch.v1.EventValidatorAdded.selfDelegation": + x.SelfDelegation = value.Message().Interface().(*v1beta1.Coin) + case "network.launch.v1.EventValidatorAdded.peer": + x.Peer = value.Message().Interface().(*Peer) + case "network.launch.v1.EventValidatorAdded.hasProject": + x.HasProject = value.Bool() + case "network.launch.v1.EventValidatorAdded.projectID": + x.ProjectID = value.Uint() + case "network.launch.v1.EventValidatorAdded.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorAdded does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorAdded) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventValidatorAdded.selfDelegation": + if x.SelfDelegation == nil { + x.SelfDelegation = new(v1beta1.Coin) + } + return protoreflect.ValueOfMessage(x.SelfDelegation.ProtoReflect()) + case "network.launch.v1.EventValidatorAdded.peer": + if x.Peer == nil { + x.Peer = new(Peer) + } + return protoreflect.ValueOfMessage(x.Peer.ProtoReflect()) + case "network.launch.v1.EventValidatorAdded.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventValidatorAdded is not mutable")) + case "network.launch.v1.EventValidatorAdded.address": + panic(fmt.Errorf("field address of message network.launch.v1.EventValidatorAdded is not mutable")) + case "network.launch.v1.EventValidatorAdded.genTx": + panic(fmt.Errorf("field genTx of message network.launch.v1.EventValidatorAdded is not mutable")) + case "network.launch.v1.EventValidatorAdded.consPubKey": + panic(fmt.Errorf("field consPubKey of message network.launch.v1.EventValidatorAdded is not mutable")) + case "network.launch.v1.EventValidatorAdded.hasProject": + panic(fmt.Errorf("field hasProject of message network.launch.v1.EventValidatorAdded is not mutable")) + case "network.launch.v1.EventValidatorAdded.projectID": + panic(fmt.Errorf("field projectID of message network.launch.v1.EventValidatorAdded is not mutable")) + case "network.launch.v1.EventValidatorAdded.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.launch.v1.EventValidatorAdded is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorAdded does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventValidatorAdded) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventValidatorAdded.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventValidatorAdded.address": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventValidatorAdded.genTx": + return protoreflect.ValueOfBytes(nil) + case "network.launch.v1.EventValidatorAdded.consPubKey": + return protoreflect.ValueOfBytes(nil) + case "network.launch.v1.EventValidatorAdded.selfDelegation": + m := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.EventValidatorAdded.peer": + m := new(Peer) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.EventValidatorAdded.hasProject": + return protoreflect.ValueOfBool(false) + case "network.launch.v1.EventValidatorAdded.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventValidatorAdded.coordinatorAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorAdded")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorAdded does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventValidatorAdded) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventValidatorAdded", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventValidatorAdded) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorAdded) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventValidatorAdded) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventValidatorAdded) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventValidatorAdded) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.GenTx) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ConsPubKey) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.SelfDelegation != nil { + l = options.Size(x.SelfDelegation) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Peer != nil { + l = options.Size(x.Peer) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.HasProject { + n += 2 + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventValidatorAdded) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x4a + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x40 + } + if x.HasProject { + i-- + if x.HasProject { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } + if x.Peer != nil { + encoded, err := options.Marshal(x.Peer) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + if x.SelfDelegation != nil { + encoded, err := options.Marshal(x.SelfDelegation) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + } + if len(x.ConsPubKey) > 0 { + i -= len(x.ConsPubKey) + copy(dAtA[i:], x.ConsPubKey) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ConsPubKey))) + i-- + dAtA[i] = 0x22 + } + if len(x.GenTx) > 0 { + i -= len(x.GenTx) + copy(dAtA[i:], x.GenTx) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GenTx))) + i-- + dAtA[i] = 0x1a + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventValidatorAdded) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventValidatorAdded: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventValidatorAdded: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenTx", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenTx = append(x.GenTx[:0], dAtA[iNdEx:postIndex]...) + if x.GenTx == nil { + x.GenTx = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsPubKey", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ConsPubKey = append(x.ConsPubKey[:0], dAtA[iNdEx:postIndex]...) + if x.ConsPubKey == nil { + x.ConsPubKey = []byte{} + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SelfDelegation", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.SelfDelegation == nil { + x.SelfDelegation = &v1beta1.Coin{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.SelfDelegation); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Peer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Peer == nil { + x.Peer = &Peer{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Peer); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 7: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field HasProject", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.HasProject = bool(v != 0) + case 8: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventAccountRemoved protoreflect.MessageDescriptor + fd_EventAccountRemoved_address protoreflect.FieldDescriptor + fd_EventAccountRemoved_launchID protoreflect.FieldDescriptor + fd_EventAccountRemoved_coordinatorAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventAccountRemoved = File_network_launch_v1_events_proto.Messages().ByName("EventAccountRemoved") + fd_EventAccountRemoved_address = md_EventAccountRemoved.Fields().ByName("address") + fd_EventAccountRemoved_launchID = md_EventAccountRemoved.Fields().ByName("launchID") + fd_EventAccountRemoved_coordinatorAddress = md_EventAccountRemoved.Fields().ByName("coordinatorAddress") +} + +var _ protoreflect.Message = (*fastReflection_EventAccountRemoved)(nil) + +type fastReflection_EventAccountRemoved EventAccountRemoved + +func (x *EventAccountRemoved) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventAccountRemoved)(x) +} + +func (x *EventAccountRemoved) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_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) +} + +var _fastReflection_EventAccountRemoved_messageType fastReflection_EventAccountRemoved_messageType +var _ protoreflect.MessageType = fastReflection_EventAccountRemoved_messageType{} + +type fastReflection_EventAccountRemoved_messageType struct{} + +func (x fastReflection_EventAccountRemoved_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventAccountRemoved)(nil) +} +func (x fastReflection_EventAccountRemoved_messageType) New() protoreflect.Message { + return new(fastReflection_EventAccountRemoved) +} +func (x fastReflection_EventAccountRemoved_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventAccountRemoved +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventAccountRemoved) Descriptor() protoreflect.MessageDescriptor { + return md_EventAccountRemoved +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventAccountRemoved) Type() protoreflect.MessageType { + return _fastReflection_EventAccountRemoved_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventAccountRemoved) New() protoreflect.Message { + return new(fastReflection_EventAccountRemoved) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventAccountRemoved) Interface() protoreflect.ProtoMessage { + return (*EventAccountRemoved)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventAccountRemoved) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventAccountRemoved_address, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventAccountRemoved_launchID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventAccountRemoved_coordinatorAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventAccountRemoved) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventAccountRemoved.address": + return x.Address != "" + case "network.launch.v1.EventAccountRemoved.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventAccountRemoved.coordinatorAddress": + return x.CoordinatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventAccountRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAccountRemoved) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventAccountRemoved.address": + x.Address = "" + case "network.launch.v1.EventAccountRemoved.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventAccountRemoved.coordinatorAddress": + x.CoordinatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventAccountRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventAccountRemoved) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventAccountRemoved.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventAccountRemoved.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventAccountRemoved.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventAccountRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventAccountRemoved does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAccountRemoved) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventAccountRemoved.address": + x.Address = value.Interface().(string) + case "network.launch.v1.EventAccountRemoved.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventAccountRemoved.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventAccountRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAccountRemoved) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventAccountRemoved.address": + panic(fmt.Errorf("field address of message network.launch.v1.EventAccountRemoved is not mutable")) + case "network.launch.v1.EventAccountRemoved.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventAccountRemoved is not mutable")) + case "network.launch.v1.EventAccountRemoved.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.launch.v1.EventAccountRemoved is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventAccountRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventAccountRemoved) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventAccountRemoved.address": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventAccountRemoved.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventAccountRemoved.coordinatorAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventAccountRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventAccountRemoved) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventAccountRemoved", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventAccountRemoved) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAccountRemoved) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventAccountRemoved) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventAccountRemoved) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventAccountRemoved) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventAccountRemoved) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x1a + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventAccountRemoved) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventAccountRemoved: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventAccountRemoved: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventValidatorRemoved protoreflect.MessageDescriptor + fd_EventValidatorRemoved_genesisValidatorAccount protoreflect.FieldDescriptor + fd_EventValidatorRemoved_launchID protoreflect.FieldDescriptor + fd_EventValidatorRemoved_hasProject protoreflect.FieldDescriptor + fd_EventValidatorRemoved_projectID protoreflect.FieldDescriptor + fd_EventValidatorRemoved_coordinatorAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventValidatorRemoved = File_network_launch_v1_events_proto.Messages().ByName("EventValidatorRemoved") + fd_EventValidatorRemoved_genesisValidatorAccount = md_EventValidatorRemoved.Fields().ByName("genesisValidatorAccount") + fd_EventValidatorRemoved_launchID = md_EventValidatorRemoved.Fields().ByName("launchID") + fd_EventValidatorRemoved_hasProject = md_EventValidatorRemoved.Fields().ByName("hasProject") + fd_EventValidatorRemoved_projectID = md_EventValidatorRemoved.Fields().ByName("projectID") + fd_EventValidatorRemoved_coordinatorAddress = md_EventValidatorRemoved.Fields().ByName("coordinatorAddress") +} + +var _ protoreflect.Message = (*fastReflection_EventValidatorRemoved)(nil) + +type fastReflection_EventValidatorRemoved EventValidatorRemoved + +func (x *EventValidatorRemoved) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventValidatorRemoved)(x) +} + +func (x *EventValidatorRemoved) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_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) +} + +var _fastReflection_EventValidatorRemoved_messageType fastReflection_EventValidatorRemoved_messageType +var _ protoreflect.MessageType = fastReflection_EventValidatorRemoved_messageType{} + +type fastReflection_EventValidatorRemoved_messageType struct{} + +func (x fastReflection_EventValidatorRemoved_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventValidatorRemoved)(nil) +} +func (x fastReflection_EventValidatorRemoved_messageType) New() protoreflect.Message { + return new(fastReflection_EventValidatorRemoved) +} +func (x fastReflection_EventValidatorRemoved_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventValidatorRemoved +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventValidatorRemoved) Descriptor() protoreflect.MessageDescriptor { + return md_EventValidatorRemoved +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventValidatorRemoved) Type() protoreflect.MessageType { + return _fastReflection_EventValidatorRemoved_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventValidatorRemoved) New() protoreflect.Message { + return new(fastReflection_EventValidatorRemoved) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventValidatorRemoved) Interface() protoreflect.ProtoMessage { + return (*EventValidatorRemoved)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventValidatorRemoved) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.GenesisValidatorAccount != "" { + value := protoreflect.ValueOfString(x.GenesisValidatorAccount) + if !f(fd_EventValidatorRemoved_genesisValidatorAccount, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventValidatorRemoved_launchID, value) { + return + } + } + if x.HasProject != false { + value := protoreflect.ValueOfBool(x.HasProject) + if !f(fd_EventValidatorRemoved_hasProject, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventValidatorRemoved_projectID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventValidatorRemoved_coordinatorAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventValidatorRemoved) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventValidatorRemoved.genesisValidatorAccount": + return x.GenesisValidatorAccount != "" + case "network.launch.v1.EventValidatorRemoved.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventValidatorRemoved.hasProject": + return x.HasProject != false + case "network.launch.v1.EventValidatorRemoved.projectID": + return x.ProjectID != uint64(0) + case "network.launch.v1.EventValidatorRemoved.coordinatorAddress": + return x.CoordinatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorRemoved does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorRemoved) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventValidatorRemoved.genesisValidatorAccount": + x.GenesisValidatorAccount = "" + case "network.launch.v1.EventValidatorRemoved.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventValidatorRemoved.hasProject": + x.HasProject = false + case "network.launch.v1.EventValidatorRemoved.projectID": + x.ProjectID = uint64(0) + case "network.launch.v1.EventValidatorRemoved.coordinatorAddress": + x.CoordinatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorRemoved does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventValidatorRemoved) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventValidatorRemoved.genesisValidatorAccount": + value := x.GenesisValidatorAccount + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventValidatorRemoved.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventValidatorRemoved.hasProject": + value := x.HasProject + return protoreflect.ValueOfBool(value) + case "network.launch.v1.EventValidatorRemoved.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventValidatorRemoved.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorRemoved does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorRemoved) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventValidatorRemoved.genesisValidatorAccount": + x.GenesisValidatorAccount = value.Interface().(string) + case "network.launch.v1.EventValidatorRemoved.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventValidatorRemoved.hasProject": + x.HasProject = value.Bool() + case "network.launch.v1.EventValidatorRemoved.projectID": + x.ProjectID = value.Uint() + case "network.launch.v1.EventValidatorRemoved.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorRemoved does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorRemoved) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventValidatorRemoved.genesisValidatorAccount": + panic(fmt.Errorf("field genesisValidatorAccount of message network.launch.v1.EventValidatorRemoved is not mutable")) + case "network.launch.v1.EventValidatorRemoved.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventValidatorRemoved is not mutable")) + case "network.launch.v1.EventValidatorRemoved.hasProject": + panic(fmt.Errorf("field hasProject of message network.launch.v1.EventValidatorRemoved is not mutable")) + case "network.launch.v1.EventValidatorRemoved.projectID": + panic(fmt.Errorf("field projectID of message network.launch.v1.EventValidatorRemoved is not mutable")) + case "network.launch.v1.EventValidatorRemoved.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.launch.v1.EventValidatorRemoved is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorRemoved does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventValidatorRemoved) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventValidatorRemoved.genesisValidatorAccount": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventValidatorRemoved.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventValidatorRemoved.hasProject": + return protoreflect.ValueOfBool(false) + case "network.launch.v1.EventValidatorRemoved.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventValidatorRemoved.coordinatorAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventValidatorRemoved")) + } + panic(fmt.Errorf("message network.launch.v1.EventValidatorRemoved does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventValidatorRemoved) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventValidatorRemoved", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventValidatorRemoved) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorRemoved) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventValidatorRemoved) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventValidatorRemoved) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventValidatorRemoved) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.GenesisValidatorAccount) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.HasProject { + n += 2 + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventValidatorRemoved) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x2a + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x20 + } + if x.HasProject { + i-- + if x.HasProject { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.GenesisValidatorAccount) > 0 { + i -= len(x.GenesisValidatorAccount) + copy(dAtA[i:], x.GenesisValidatorAccount) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GenesisValidatorAccount))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventValidatorRemoved) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventValidatorRemoved: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventValidatorRemoved: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisValidatorAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisValidatorAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field HasProject", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.HasProject = bool(v != 0) + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventParamChanged protoreflect.MessageDescriptor + fd_EventParamChanged_launchID protoreflect.FieldDescriptor + fd_EventParamChanged_module protoreflect.FieldDescriptor + fd_EventParamChanged_param protoreflect.FieldDescriptor + fd_EventParamChanged_value protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventParamChanged = File_network_launch_v1_events_proto.Messages().ByName("EventParamChanged") + fd_EventParamChanged_launchID = md_EventParamChanged.Fields().ByName("launchID") + fd_EventParamChanged_module = md_EventParamChanged.Fields().ByName("module") + fd_EventParamChanged_param = md_EventParamChanged.Fields().ByName("param") + fd_EventParamChanged_value = md_EventParamChanged.Fields().ByName("value") +} + +var _ protoreflect.Message = (*fastReflection_EventParamChanged)(nil) + +type fastReflection_EventParamChanged EventParamChanged + +func (x *EventParamChanged) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventParamChanged)(x) +} + +func (x *EventParamChanged) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_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) +} + +var _fastReflection_EventParamChanged_messageType fastReflection_EventParamChanged_messageType +var _ protoreflect.MessageType = fastReflection_EventParamChanged_messageType{} + +type fastReflection_EventParamChanged_messageType struct{} + +func (x fastReflection_EventParamChanged_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventParamChanged)(nil) +} +func (x fastReflection_EventParamChanged_messageType) New() protoreflect.Message { + return new(fastReflection_EventParamChanged) +} +func (x fastReflection_EventParamChanged_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventParamChanged +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventParamChanged) Descriptor() protoreflect.MessageDescriptor { + return md_EventParamChanged +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventParamChanged) Type() protoreflect.MessageType { + return _fastReflection_EventParamChanged_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventParamChanged) New() protoreflect.Message { + return new(fastReflection_EventParamChanged) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventParamChanged) Interface() protoreflect.ProtoMessage { + return (*EventParamChanged)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventParamChanged) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventParamChanged_launchID, value) { + return + } + } + if x.Module != "" { + value := protoreflect.ValueOfString(x.Module) + if !f(fd_EventParamChanged_module, value) { + return + } + } + if x.Param != "" { + value := protoreflect.ValueOfString(x.Param) + if !f(fd_EventParamChanged_param, value) { + return + } + } + if len(x.Value) != 0 { + value := protoreflect.ValueOfBytes(x.Value) + if !f(fd_EventParamChanged_value, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventParamChanged) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventParamChanged.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventParamChanged.module": + return x.Module != "" + case "network.launch.v1.EventParamChanged.param": + return x.Param != "" + case "network.launch.v1.EventParamChanged.value": + return len(x.Value) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventParamChanged")) + } + panic(fmt.Errorf("message network.launch.v1.EventParamChanged does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventParamChanged) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventParamChanged.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventParamChanged.module": + x.Module = "" + case "network.launch.v1.EventParamChanged.param": + x.Param = "" + case "network.launch.v1.EventParamChanged.value": + x.Value = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventParamChanged")) + } + panic(fmt.Errorf("message network.launch.v1.EventParamChanged does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventParamChanged) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventParamChanged.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventParamChanged.module": + value := x.Module + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventParamChanged.param": + value := x.Param + return protoreflect.ValueOfString(value) + case "network.launch.v1.EventParamChanged.value": + value := x.Value + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventParamChanged")) + } + panic(fmt.Errorf("message network.launch.v1.EventParamChanged does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventParamChanged) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventParamChanged.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventParamChanged.module": + x.Module = value.Interface().(string) + case "network.launch.v1.EventParamChanged.param": + x.Param = value.Interface().(string) + case "network.launch.v1.EventParamChanged.value": + x.Value = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventParamChanged")) + } + panic(fmt.Errorf("message network.launch.v1.EventParamChanged does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventParamChanged) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventParamChanged.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventParamChanged is not mutable")) + case "network.launch.v1.EventParamChanged.module": + panic(fmt.Errorf("field module of message network.launch.v1.EventParamChanged is not mutable")) + case "network.launch.v1.EventParamChanged.param": + panic(fmt.Errorf("field param of message network.launch.v1.EventParamChanged is not mutable")) + case "network.launch.v1.EventParamChanged.value": + panic(fmt.Errorf("field value of message network.launch.v1.EventParamChanged is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventParamChanged")) + } + panic(fmt.Errorf("message network.launch.v1.EventParamChanged does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventParamChanged) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventParamChanged.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventParamChanged.module": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventParamChanged.param": + return protoreflect.ValueOfString("") + case "network.launch.v1.EventParamChanged.value": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventParamChanged")) + } + panic(fmt.Errorf("message network.launch.v1.EventParamChanged does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventParamChanged) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventParamChanged", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventParamChanged) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventParamChanged) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventParamChanged) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventParamChanged) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventParamChanged) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Module) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Param) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Value) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventParamChanged) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Value) > 0 { + i -= len(x.Value) + copy(dAtA[i:], x.Value) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Value))) + i-- + dAtA[i] = 0x22 + } + if len(x.Param) > 0 { + i -= len(x.Param) + copy(dAtA[i:], x.Param) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Param))) + i-- + dAtA[i] = 0x1a + } + if len(x.Module) > 0 { + i -= len(x.Module) + copy(dAtA[i:], x.Module) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Module))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventParamChanged) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventParamChanged: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventParamChanged: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Module", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Module = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Param", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Param = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Value = append(x.Value[:0], dAtA[iNdEx:postIndex]...) + if x.Value == nil { + x.Value = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventLaunchTriggered protoreflect.MessageDescriptor + fd_EventLaunchTriggered_launchID protoreflect.FieldDescriptor + fd_EventLaunchTriggered_launchTimeStamp protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventLaunchTriggered = File_network_launch_v1_events_proto.Messages().ByName("EventLaunchTriggered") + fd_EventLaunchTriggered_launchID = md_EventLaunchTriggered.Fields().ByName("launchID") + fd_EventLaunchTriggered_launchTimeStamp = md_EventLaunchTriggered.Fields().ByName("launchTimeStamp") +} + +var _ protoreflect.Message = (*fastReflection_EventLaunchTriggered)(nil) + +type fastReflection_EventLaunchTriggered EventLaunchTriggered + +func (x *EventLaunchTriggered) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventLaunchTriggered)(x) +} + +func (x *EventLaunchTriggered) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_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) +} + +var _fastReflection_EventLaunchTriggered_messageType fastReflection_EventLaunchTriggered_messageType +var _ protoreflect.MessageType = fastReflection_EventLaunchTriggered_messageType{} + +type fastReflection_EventLaunchTriggered_messageType struct{} + +func (x fastReflection_EventLaunchTriggered_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventLaunchTriggered)(nil) +} +func (x fastReflection_EventLaunchTriggered_messageType) New() protoreflect.Message { + return new(fastReflection_EventLaunchTriggered) +} +func (x fastReflection_EventLaunchTriggered_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventLaunchTriggered +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventLaunchTriggered) Descriptor() protoreflect.MessageDescriptor { + return md_EventLaunchTriggered +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventLaunchTriggered) Type() protoreflect.MessageType { + return _fastReflection_EventLaunchTriggered_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventLaunchTriggered) New() protoreflect.Message { + return new(fastReflection_EventLaunchTriggered) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventLaunchTriggered) Interface() protoreflect.ProtoMessage { + return (*EventLaunchTriggered)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventLaunchTriggered) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventLaunchTriggered_launchID, value) { + return + } + } + if x.LaunchTimeStamp != nil { + value := protoreflect.ValueOfMessage(x.LaunchTimeStamp.ProtoReflect()) + if !f(fd_EventLaunchTriggered_launchTimeStamp, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventLaunchTriggered) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventLaunchTriggered.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.EventLaunchTriggered.launchTimeStamp": + return x.LaunchTimeStamp != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchTriggered")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchTriggered does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventLaunchTriggered) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventLaunchTriggered.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.EventLaunchTriggered.launchTimeStamp": + x.LaunchTimeStamp = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchTriggered")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchTriggered does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventLaunchTriggered) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventLaunchTriggered.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.EventLaunchTriggered.launchTimeStamp": + value := x.LaunchTimeStamp + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchTriggered")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchTriggered does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventLaunchTriggered) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventLaunchTriggered.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.EventLaunchTriggered.launchTimeStamp": + x.LaunchTimeStamp = value.Message().Interface().(*timestamppb.Timestamp) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchTriggered")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchTriggered does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventLaunchTriggered) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventLaunchTriggered.launchTimeStamp": + if x.LaunchTimeStamp == nil { + x.LaunchTimeStamp = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.LaunchTimeStamp.ProtoReflect()) + case "network.launch.v1.EventLaunchTriggered.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventLaunchTriggered is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchTriggered")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchTriggered does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventLaunchTriggered) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventLaunchTriggered.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.EventLaunchTriggered.launchTimeStamp": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchTriggered")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchTriggered does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventLaunchTriggered) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventLaunchTriggered", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventLaunchTriggered) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventLaunchTriggered) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventLaunchTriggered) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventLaunchTriggered) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventLaunchTriggered) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.LaunchTimeStamp != nil { + l = options.Size(x.LaunchTimeStamp) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventLaunchTriggered) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchTimeStamp != nil { + encoded, err := options.Marshal(x.LaunchTimeStamp) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventLaunchTriggered) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventLaunchTriggered: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventLaunchTriggered: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchTimeStamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.LaunchTimeStamp == nil { + x.LaunchTimeStamp = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.LaunchTimeStamp); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventLaunchReverted protoreflect.MessageDescriptor + fd_EventLaunchReverted_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_events_proto_init() + md_EventLaunchReverted = File_network_launch_v1_events_proto.Messages().ByName("EventLaunchReverted") + fd_EventLaunchReverted_launchID = md_EventLaunchReverted.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_EventLaunchReverted)(nil) + +type fastReflection_EventLaunchReverted EventLaunchReverted + +func (x *EventLaunchReverted) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventLaunchReverted)(x) +} + +func (x *EventLaunchReverted) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_events_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) +} + +var _fastReflection_EventLaunchReverted_messageType fastReflection_EventLaunchReverted_messageType +var _ protoreflect.MessageType = fastReflection_EventLaunchReverted_messageType{} + +type fastReflection_EventLaunchReverted_messageType struct{} + +func (x fastReflection_EventLaunchReverted_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventLaunchReverted)(nil) +} +func (x fastReflection_EventLaunchReverted_messageType) New() protoreflect.Message { + return new(fastReflection_EventLaunchReverted) +} +func (x fastReflection_EventLaunchReverted_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventLaunchReverted +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventLaunchReverted) Descriptor() protoreflect.MessageDescriptor { + return md_EventLaunchReverted +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventLaunchReverted) Type() protoreflect.MessageType { + return _fastReflection_EventLaunchReverted_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventLaunchReverted) New() protoreflect.Message { + return new(fastReflection_EventLaunchReverted) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventLaunchReverted) Interface() protoreflect.ProtoMessage { + return (*EventLaunchReverted)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventLaunchReverted) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventLaunchReverted_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventLaunchReverted) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.EventLaunchReverted.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchReverted")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchReverted does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventLaunchReverted) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.EventLaunchReverted.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchReverted")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchReverted does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventLaunchReverted) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.EventLaunchReverted.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchReverted")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchReverted does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventLaunchReverted) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.EventLaunchReverted.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchReverted")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchReverted does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventLaunchReverted) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventLaunchReverted.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.EventLaunchReverted is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchReverted")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchReverted does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventLaunchReverted) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.EventLaunchReverted.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.EventLaunchReverted")) + } + panic(fmt.Errorf("message network.launch.v1.EventLaunchReverted does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventLaunchReverted) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.EventLaunchReverted", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventLaunchReverted) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventLaunchReverted) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventLaunchReverted) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventLaunchReverted) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventLaunchReverted) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventLaunchReverted) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventLaunchReverted) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventLaunchReverted: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventLaunchReverted: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/events.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EventChainCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,2,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` + CoordinatorID uint64 `protobuf:"varint,3,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` +} + +func (x *EventChainCreated) Reset() { + *x = EventChainCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventChainCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventChainCreated) ProtoMessage() {} + +// Deprecated: Use EventChainCreated.ProtoReflect.Descriptor instead. +func (*EventChainCreated) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{0} +} + +func (x *EventChainCreated) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventChainCreated) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +func (x *EventChainCreated) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +type EventRequestCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + Request *Request `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"` +} + +func (x *EventRequestCreated) Reset() { + *x = EventRequestCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventRequestCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventRequestCreated) ProtoMessage() {} + +// Deprecated: Use EventRequestCreated.ProtoReflect.Descriptor instead. +func (*EventRequestCreated) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{1} +} + +func (x *EventRequestCreated) GetCreator() string { + if x != nil { + return x.Creator + } + return "" +} + +func (x *EventRequestCreated) GetRequest() *Request { + if x != nil { + return x.Request + } + return nil +} + +type EventRequestSettled struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + RequestID uint64 `protobuf:"varint,2,opt,name=requestID,proto3" json:"requestID,omitempty"` + Approved bool `protobuf:"varint,3,opt,name=approved,proto3" json:"approved,omitempty"` +} + +func (x *EventRequestSettled) Reset() { + *x = EventRequestSettled{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventRequestSettled) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventRequestSettled) ProtoMessage() {} + +// Deprecated: Use EventRequestSettled.ProtoReflect.Descriptor instead. +func (*EventRequestSettled) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{2} +} + +func (x *EventRequestSettled) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventRequestSettled) GetRequestID() uint64 { + if x != nil { + return x.RequestID + } + return 0 +} + +func (x *EventRequestSettled) GetApproved() bool { + if x != nil { + return x.Approved + } + return false +} + +type EventGenesisAccountAdded struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Coins []*v1beta1.Coin `protobuf:"bytes,3,rep,name=coins,proto3" json:"coins,omitempty"` + CoordinatorAddress string `protobuf:"bytes,4,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` +} + +func (x *EventGenesisAccountAdded) Reset() { + *x = EventGenesisAccountAdded{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventGenesisAccountAdded) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventGenesisAccountAdded) ProtoMessage() {} + +// Deprecated: Use EventGenesisAccountAdded.ProtoReflect.Descriptor instead. +func (*EventGenesisAccountAdded) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{3} +} + +func (x *EventGenesisAccountAdded) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventGenesisAccountAdded) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventGenesisAccountAdded) GetCoins() []*v1beta1.Coin { + if x != nil { + return x.Coins + } + return nil +} + +func (x *EventGenesisAccountAdded) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +type EventVestingAccountAdded struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + VestingOptions *VestingOptions `protobuf:"bytes,3,opt,name=vestingOptions,proto3" json:"vestingOptions,omitempty"` + CoordinatorAddress string `protobuf:"bytes,4,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` +} + +func (x *EventVestingAccountAdded) Reset() { + *x = EventVestingAccountAdded{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventVestingAccountAdded) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventVestingAccountAdded) ProtoMessage() {} + +// Deprecated: Use EventVestingAccountAdded.ProtoReflect.Descriptor instead. +func (*EventVestingAccountAdded) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{4} +} + +func (x *EventVestingAccountAdded) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventVestingAccountAdded) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventVestingAccountAdded) GetVestingOptions() *VestingOptions { + if x != nil { + return x.VestingOptions + } + return nil +} + +func (x *EventVestingAccountAdded) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +type EventValidatorAdded struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + GenTx []byte `protobuf:"bytes,3,opt,name=genTx,proto3" json:"genTx,omitempty"` + ConsPubKey []byte `protobuf:"bytes,4,opt,name=consPubKey,proto3" json:"consPubKey,omitempty"` + SelfDelegation *v1beta1.Coin `protobuf:"bytes,5,opt,name=selfDelegation,proto3" json:"selfDelegation,omitempty"` + Peer *Peer `protobuf:"bytes,6,opt,name=peer,proto3" json:"peer,omitempty"` + HasProject bool `protobuf:"varint,7,opt,name=hasProject,proto3" json:"hasProject,omitempty"` + ProjectID uint64 `protobuf:"varint,8,opt,name=projectID,proto3" json:"projectID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,9,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` +} + +func (x *EventValidatorAdded) Reset() { + *x = EventValidatorAdded{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventValidatorAdded) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventValidatorAdded) ProtoMessage() {} + +// Deprecated: Use EventValidatorAdded.ProtoReflect.Descriptor instead. +func (*EventValidatorAdded) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{5} +} + +func (x *EventValidatorAdded) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventValidatorAdded) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventValidatorAdded) GetGenTx() []byte { + if x != nil { + return x.GenTx + } + return nil +} + +func (x *EventValidatorAdded) GetConsPubKey() []byte { + if x != nil { + return x.ConsPubKey + } + return nil +} + +func (x *EventValidatorAdded) GetSelfDelegation() *v1beta1.Coin { + if x != nil { + return x.SelfDelegation + } + return nil +} + +func (x *EventValidatorAdded) GetPeer() *Peer { + if x != nil { + return x.Peer + } + return nil +} + +func (x *EventValidatorAdded) GetHasProject() bool { + if x != nil { + return x.HasProject + } + return false +} + +func (x *EventValidatorAdded) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventValidatorAdded) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +type EventAccountRemoved struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,3,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` +} + +func (x *EventAccountRemoved) Reset() { + *x = EventAccountRemoved{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventAccountRemoved) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventAccountRemoved) ProtoMessage() {} + +// Deprecated: Use EventAccountRemoved.ProtoReflect.Descriptor instead. +func (*EventAccountRemoved) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{6} +} + +func (x *EventAccountRemoved) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventAccountRemoved) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventAccountRemoved) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +type EventValidatorRemoved struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GenesisValidatorAccount string `protobuf:"bytes,1,opt,name=genesisValidatorAccount,proto3" json:"genesisValidatorAccount,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + HasProject bool `protobuf:"varint,3,opt,name=hasProject,proto3" json:"hasProject,omitempty"` + ProjectID uint64 `protobuf:"varint,4,opt,name=projectID,proto3" json:"projectID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,5,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` +} + +func (x *EventValidatorRemoved) Reset() { + *x = EventValidatorRemoved{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventValidatorRemoved) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventValidatorRemoved) ProtoMessage() {} + +// Deprecated: Use EventValidatorRemoved.ProtoReflect.Descriptor instead. +func (*EventValidatorRemoved) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{7} +} + +func (x *EventValidatorRemoved) GetGenesisValidatorAccount() string { + if x != nil { + return x.GenesisValidatorAccount + } + return "" +} + +func (x *EventValidatorRemoved) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventValidatorRemoved) GetHasProject() bool { + if x != nil { + return x.HasProject + } + return false +} + +func (x *EventValidatorRemoved) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventValidatorRemoved) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +type EventParamChanged struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Module string `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` + Param string `protobuf:"bytes,3,opt,name=param,proto3" json:"param,omitempty"` + Value []byte `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *EventParamChanged) Reset() { + *x = EventParamChanged{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventParamChanged) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventParamChanged) ProtoMessage() {} + +// Deprecated: Use EventParamChanged.ProtoReflect.Descriptor instead. +func (*EventParamChanged) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{8} +} + +func (x *EventParamChanged) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventParamChanged) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *EventParamChanged) GetParam() string { + if x != nil { + return x.Param + } + return "" +} + +func (x *EventParamChanged) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type EventLaunchTriggered struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + LaunchTimeStamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=launchTimeStamp,proto3" json:"launchTimeStamp,omitempty"` +} + +func (x *EventLaunchTriggered) Reset() { + *x = EventLaunchTriggered{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLaunchTriggered) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLaunchTriggered) ProtoMessage() {} + +// Deprecated: Use EventLaunchTriggered.ProtoReflect.Descriptor instead. +func (*EventLaunchTriggered) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{9} +} + +func (x *EventLaunchTriggered) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventLaunchTriggered) GetLaunchTimeStamp() *timestamppb.Timestamp { + if x != nil { + return x.LaunchTimeStamp + } + return nil +} + +type EventLaunchReverted struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *EventLaunchReverted) Reset() { + *x = EventLaunchReverted{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_events_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLaunchReverted) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLaunchReverted) ProtoMessage() {} + +// Deprecated: Use EventLaunchReverted.ProtoReflect.Descriptor instead. +func (*EventLaunchReverted) Descriptor() ([]byte, []int) { + return file_network_launch_v1_events_proto_rawDescGZIP(), []int{10} +} + +func (x *EventLaunchReverted) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +var File_network_launch_v1_events_proto protoreflect.FileDescriptor + +var file_network_launch_v1_events_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, + 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x29, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, + 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9f, 0x01, 0x0a, 0x11, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x22, 0x85, 0x01, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x32, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x6b, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, + 0x65, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, + 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x22, 0xd9, 0x02, 0x0a, + 0x18, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x05, 0x63, 0x6f, + 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, + 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x48, + 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x85, 0x02, 0x0a, 0x18, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, + 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x48, 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x22, 0xe1, 0x03, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x54, + 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x67, 0x65, 0x6e, 0x54, 0x78, 0x12, 0x1e, + 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x88, + 0x01, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x42, 0x45, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, + 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x66, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x70, 0x65, 0x65, + 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x65, 0x72, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, + 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x52, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, + 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xf5, 0x01, 0x0a, 0x15, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x12, 0x38, 0x0a, 0x17, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x17, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x73, + 0x0a, 0x11, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, + 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x14, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x4e, 0x0a, 0x0f, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, + 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, + 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x31, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x42, 0xc4, 0x01, 0x0a, 0x15, + 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, + 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_events_proto_rawDescOnce sync.Once + file_network_launch_v1_events_proto_rawDescData = file_network_launch_v1_events_proto_rawDesc +) + +func file_network_launch_v1_events_proto_rawDescGZIP() []byte { + file_network_launch_v1_events_proto_rawDescOnce.Do(func() { + file_network_launch_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_events_proto_rawDescData) + }) + return file_network_launch_v1_events_proto_rawDescData +} + +var file_network_launch_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_network_launch_v1_events_proto_goTypes = []interface{}{ + (*EventChainCreated)(nil), // 0: network.launch.v1.EventChainCreated + (*EventRequestCreated)(nil), // 1: network.launch.v1.EventRequestCreated + (*EventRequestSettled)(nil), // 2: network.launch.v1.EventRequestSettled + (*EventGenesisAccountAdded)(nil), // 3: network.launch.v1.EventGenesisAccountAdded + (*EventVestingAccountAdded)(nil), // 4: network.launch.v1.EventVestingAccountAdded + (*EventValidatorAdded)(nil), // 5: network.launch.v1.EventValidatorAdded + (*EventAccountRemoved)(nil), // 6: network.launch.v1.EventAccountRemoved + (*EventValidatorRemoved)(nil), // 7: network.launch.v1.EventValidatorRemoved + (*EventParamChanged)(nil), // 8: network.launch.v1.EventParamChanged + (*EventLaunchTriggered)(nil), // 9: network.launch.v1.EventLaunchTriggered + (*EventLaunchReverted)(nil), // 10: network.launch.v1.EventLaunchReverted + (*Request)(nil), // 11: network.launch.v1.Request + (*v1beta1.Coin)(nil), // 12: cosmos.base.v1beta1.Coin + (*VestingOptions)(nil), // 13: network.launch.v1.VestingOptions + (*Peer)(nil), // 14: network.launch.v1.Peer + (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp +} +var file_network_launch_v1_events_proto_depIdxs = []int32{ + 11, // 0: network.launch.v1.EventRequestCreated.request:type_name -> network.launch.v1.Request + 12, // 1: network.launch.v1.EventGenesisAccountAdded.coins:type_name -> cosmos.base.v1beta1.Coin + 13, // 2: network.launch.v1.EventVestingAccountAdded.vestingOptions:type_name -> network.launch.v1.VestingOptions + 12, // 3: network.launch.v1.EventValidatorAdded.selfDelegation:type_name -> cosmos.base.v1beta1.Coin + 14, // 4: network.launch.v1.EventValidatorAdded.peer:type_name -> network.launch.v1.Peer + 15, // 5: network.launch.v1.EventLaunchTriggered.launchTimeStamp:type_name -> google.protobuf.Timestamp + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_network_launch_v1_events_proto_init() } +func file_network_launch_v1_events_proto_init() { + if File_network_launch_v1_events_proto != nil { + return + } + file_network_launch_v1_chain_proto_init() + file_network_launch_v1_genesis_account_proto_init() + file_network_launch_v1_genesis_validator_proto_init() + file_network_launch_v1_request_proto_init() + file_network_launch_v1_vesting_account_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventChainCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventRequestCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventRequestSettled); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventGenesisAccountAdded); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventVestingAccountAdded); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventValidatorAdded); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventAccountRemoved); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventValidatorRemoved); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventParamChanged); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventLaunchTriggered); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_events_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventLaunchReverted); 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_network_launch_v1_events_proto_rawDesc, + NumEnums: 0, + NumMessages: 11, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_events_proto_goTypes, + DependencyIndexes: file_network_launch_v1_events_proto_depIdxs, + MessageInfos: file_network_launch_v1_events_proto_msgTypes, + }.Build() + File_network_launch_v1_events_proto = out.File + file_network_launch_v1_events_proto_rawDesc = nil + file_network_launch_v1_events_proto_goTypes = nil + file_network_launch_v1_events_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/genesis.pulsar.go b/api/network/launch/v1/genesis.pulsar.go new file mode 100644 index 00000000..daf174a7 --- /dev/null +++ b/api/network/launch/v1/genesis.pulsar.go @@ -0,0 +1,2258 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_GenesisState_2_list)(nil) + +type _GenesisState_2_list struct { + list *[]*Chain +} + +func (x *_GenesisState_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Chain) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Chain) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_2_list) AppendMutable() protoreflect.Value { + v := new(Chain) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_2_list) NewElement() protoreflect.Value { + v := new(Chain) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_4_list)(nil) + +type _GenesisState_4_list struct { + list *[]*GenesisAccount +} + +func (x *_GenesisState_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*GenesisAccount) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*GenesisAccount) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_4_list) AppendMutable() protoreflect.Value { + v := new(GenesisAccount) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_4_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_4_list) NewElement() protoreflect.Value { + v := new(GenesisAccount) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_4_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_5_list)(nil) + +type _GenesisState_5_list struct { + list *[]*VestingAccount +} + +func (x *_GenesisState_5_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_5_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_5_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*VestingAccount) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_5_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*VestingAccount) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_5_list) AppendMutable() protoreflect.Value { + v := new(VestingAccount) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_5_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_5_list) NewElement() protoreflect.Value { + v := new(VestingAccount) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_5_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_6_list)(nil) + +type _GenesisState_6_list struct { + list *[]*GenesisValidator +} + +func (x *_GenesisState_6_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_6_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_6_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*GenesisValidator) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_6_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*GenesisValidator) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_6_list) AppendMutable() protoreflect.Value { + v := new(GenesisValidator) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_6_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_6_list) NewElement() protoreflect.Value { + v := new(GenesisValidator) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_6_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_7_list)(nil) + +type _GenesisState_7_list struct { + list *[]*Request +} + +func (x *_GenesisState_7_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_7_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_7_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Request) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_7_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Request) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_7_list) AppendMutable() protoreflect.Value { + v := new(Request) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_7_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_7_list) NewElement() protoreflect.Value { + v := new(Request) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_7_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_8_list)(nil) + +type _GenesisState_8_list struct { + list *[]*RequestCounter +} + +func (x *_GenesisState_8_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_8_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_8_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*RequestCounter) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_8_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*RequestCounter) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_8_list) AppendMutable() protoreflect.Value { + v := new(RequestCounter) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_8_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_8_list) NewElement() protoreflect.Value { + v := new(RequestCounter) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_8_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_9_list)(nil) + +type _GenesisState_9_list struct { + list *[]*ParamChange +} + +func (x *_GenesisState_9_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_9_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_9_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ParamChange) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_9_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ParamChange) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_9_list) AppendMutable() protoreflect.Value { + v := new(ParamChange) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_9_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_9_list) NewElement() protoreflect.Value { + v := new(ParamChange) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_9_list) IsValid() bool { + return x.list != nil +} + +var ( + md_GenesisState protoreflect.MessageDescriptor + fd_GenesisState_params protoreflect.FieldDescriptor + fd_GenesisState_chainList protoreflect.FieldDescriptor + fd_GenesisState_chainCount protoreflect.FieldDescriptor + fd_GenesisState_genesisAccountList protoreflect.FieldDescriptor + fd_GenesisState_vestingAccountList protoreflect.FieldDescriptor + fd_GenesisState_genesisValidatorList protoreflect.FieldDescriptor + fd_GenesisState_requestList protoreflect.FieldDescriptor + fd_GenesisState_requestCounters protoreflect.FieldDescriptor + fd_GenesisState_paramChangeList protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_genesis_proto_init() + md_GenesisState = File_network_launch_v1_genesis_proto.Messages().ByName("GenesisState") + fd_GenesisState_params = md_GenesisState.Fields().ByName("params") + fd_GenesisState_chainList = md_GenesisState.Fields().ByName("chainList") + fd_GenesisState_chainCount = md_GenesisState.Fields().ByName("chainCount") + fd_GenesisState_genesisAccountList = md_GenesisState.Fields().ByName("genesisAccountList") + fd_GenesisState_vestingAccountList = md_GenesisState.Fields().ByName("vestingAccountList") + fd_GenesisState_genesisValidatorList = md_GenesisState.Fields().ByName("genesisValidatorList") + fd_GenesisState_requestList = md_GenesisState.Fields().ByName("requestList") + fd_GenesisState_requestCounters = md_GenesisState.Fields().ByName("requestCounters") + fd_GenesisState_paramChangeList = md_GenesisState.Fields().ByName("paramChangeList") +} + +var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) + +type fastReflection_GenesisState GenesisState + +func (x *GenesisState) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisState)(x) +} + +func (x *GenesisState) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_genesis_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) +} + +var _fastReflection_GenesisState_messageType fastReflection_GenesisState_messageType +var _ protoreflect.MessageType = fastReflection_GenesisState_messageType{} + +type fastReflection_GenesisState_messageType struct{} + +func (x fastReflection_GenesisState_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisState)(nil) +} +func (x fastReflection_GenesisState_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} +func (x fastReflection_GenesisState_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisState) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisState) Type() protoreflect.MessageType { + return _fastReflection_GenesisState_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisState) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisState) Interface() protoreflect.ProtoMessage { + return (*GenesisState)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_GenesisState_params, value) { + return + } + } + if len(x.ChainList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_2_list{list: &x.ChainList}) + if !f(fd_GenesisState_chainList, value) { + return + } + } + if x.ChainCount != uint64(0) { + value := protoreflect.ValueOfUint64(x.ChainCount) + if !f(fd_GenesisState_chainCount, value) { + return + } + } + if len(x.GenesisAccountList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_4_list{list: &x.GenesisAccountList}) + if !f(fd_GenesisState_genesisAccountList, value) { + return + } + } + if len(x.VestingAccountList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_5_list{list: &x.VestingAccountList}) + if !f(fd_GenesisState_vestingAccountList, value) { + return + } + } + if len(x.GenesisValidatorList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_6_list{list: &x.GenesisValidatorList}) + if !f(fd_GenesisState_genesisValidatorList, value) { + return + } + } + if len(x.RequestList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_7_list{list: &x.RequestList}) + if !f(fd_GenesisState_requestList, value) { + return + } + } + if len(x.RequestCounters) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_8_list{list: &x.RequestCounters}) + if !f(fd_GenesisState_requestCounters, value) { + return + } + } + if len(x.ParamChangeList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_9_list{list: &x.ParamChangeList}) + if !f(fd_GenesisState_paramChangeList, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.GenesisState.params": + return x.Params != nil + case "network.launch.v1.GenesisState.chainList": + return len(x.ChainList) != 0 + case "network.launch.v1.GenesisState.chainCount": + return x.ChainCount != uint64(0) + case "network.launch.v1.GenesisState.genesisAccountList": + return len(x.GenesisAccountList) != 0 + case "network.launch.v1.GenesisState.vestingAccountList": + return len(x.VestingAccountList) != 0 + case "network.launch.v1.GenesisState.genesisValidatorList": + return len(x.GenesisValidatorList) != 0 + case "network.launch.v1.GenesisState.requestList": + return len(x.RequestList) != 0 + case "network.launch.v1.GenesisState.requestCounters": + return len(x.RequestCounters) != 0 + case "network.launch.v1.GenesisState.paramChangeList": + return len(x.ParamChangeList) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisState")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.GenesisState.params": + x.Params = nil + case "network.launch.v1.GenesisState.chainList": + x.ChainList = nil + case "network.launch.v1.GenesisState.chainCount": + x.ChainCount = uint64(0) + case "network.launch.v1.GenesisState.genesisAccountList": + x.GenesisAccountList = nil + case "network.launch.v1.GenesisState.vestingAccountList": + x.VestingAccountList = nil + case "network.launch.v1.GenesisState.genesisValidatorList": + x.GenesisValidatorList = nil + case "network.launch.v1.GenesisState.requestList": + x.RequestList = nil + case "network.launch.v1.GenesisState.requestCounters": + x.RequestCounters = nil + case "network.launch.v1.GenesisState.paramChangeList": + x.ParamChangeList = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisState")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.GenesisState.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.GenesisState.chainList": + if len(x.ChainList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_2_list{}) + } + listValue := &_GenesisState_2_list{list: &x.ChainList} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.GenesisState.chainCount": + value := x.ChainCount + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.GenesisState.genesisAccountList": + if len(x.GenesisAccountList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_4_list{}) + } + listValue := &_GenesisState_4_list{list: &x.GenesisAccountList} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.GenesisState.vestingAccountList": + if len(x.VestingAccountList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_5_list{}) + } + listValue := &_GenesisState_5_list{list: &x.VestingAccountList} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.GenesisState.genesisValidatorList": + if len(x.GenesisValidatorList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_6_list{}) + } + listValue := &_GenesisState_6_list{list: &x.GenesisValidatorList} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.GenesisState.requestList": + if len(x.RequestList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_7_list{}) + } + listValue := &_GenesisState_7_list{list: &x.RequestList} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.GenesisState.requestCounters": + if len(x.RequestCounters) == 0 { + return protoreflect.ValueOfList(&_GenesisState_8_list{}) + } + listValue := &_GenesisState_8_list{list: &x.RequestCounters} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.GenesisState.paramChangeList": + if len(x.ParamChangeList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_9_list{}) + } + listValue := &_GenesisState_9_list{list: &x.ParamChangeList} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisState")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisState does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.GenesisState.params": + x.Params = value.Message().Interface().(*Params) + case "network.launch.v1.GenesisState.chainList": + lv := value.List() + clv := lv.(*_GenesisState_2_list) + x.ChainList = *clv.list + case "network.launch.v1.GenesisState.chainCount": + x.ChainCount = value.Uint() + case "network.launch.v1.GenesisState.genesisAccountList": + lv := value.List() + clv := lv.(*_GenesisState_4_list) + x.GenesisAccountList = *clv.list + case "network.launch.v1.GenesisState.vestingAccountList": + lv := value.List() + clv := lv.(*_GenesisState_5_list) + x.VestingAccountList = *clv.list + case "network.launch.v1.GenesisState.genesisValidatorList": + lv := value.List() + clv := lv.(*_GenesisState_6_list) + x.GenesisValidatorList = *clv.list + case "network.launch.v1.GenesisState.requestList": + lv := value.List() + clv := lv.(*_GenesisState_7_list) + x.RequestList = *clv.list + case "network.launch.v1.GenesisState.requestCounters": + lv := value.List() + clv := lv.(*_GenesisState_8_list) + x.RequestCounters = *clv.list + case "network.launch.v1.GenesisState.paramChangeList": + lv := value.List() + clv := lv.(*_GenesisState_9_list) + x.ParamChangeList = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisState")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisState.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.launch.v1.GenesisState.chainList": + if x.ChainList == nil { + x.ChainList = []*Chain{} + } + value := &_GenesisState_2_list{list: &x.ChainList} + return protoreflect.ValueOfList(value) + case "network.launch.v1.GenesisState.genesisAccountList": + if x.GenesisAccountList == nil { + x.GenesisAccountList = []*GenesisAccount{} + } + value := &_GenesisState_4_list{list: &x.GenesisAccountList} + return protoreflect.ValueOfList(value) + case "network.launch.v1.GenesisState.vestingAccountList": + if x.VestingAccountList == nil { + x.VestingAccountList = []*VestingAccount{} + } + value := &_GenesisState_5_list{list: &x.VestingAccountList} + return protoreflect.ValueOfList(value) + case "network.launch.v1.GenesisState.genesisValidatorList": + if x.GenesisValidatorList == nil { + x.GenesisValidatorList = []*GenesisValidator{} + } + value := &_GenesisState_6_list{list: &x.GenesisValidatorList} + return protoreflect.ValueOfList(value) + case "network.launch.v1.GenesisState.requestList": + if x.RequestList == nil { + x.RequestList = []*Request{} + } + value := &_GenesisState_7_list{list: &x.RequestList} + return protoreflect.ValueOfList(value) + case "network.launch.v1.GenesisState.requestCounters": + if x.RequestCounters == nil { + x.RequestCounters = []*RequestCounter{} + } + value := &_GenesisState_8_list{list: &x.RequestCounters} + return protoreflect.ValueOfList(value) + case "network.launch.v1.GenesisState.paramChangeList": + if x.ParamChangeList == nil { + x.ParamChangeList = []*ParamChange{} + } + value := &_GenesisState_9_list{list: &x.ParamChangeList} + return protoreflect.ValueOfList(value) + case "network.launch.v1.GenesisState.chainCount": + panic(fmt.Errorf("field chainCount of message network.launch.v1.GenesisState is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisState")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisState.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.GenesisState.chainList": + list := []*Chain{} + return protoreflect.ValueOfList(&_GenesisState_2_list{list: &list}) + case "network.launch.v1.GenesisState.chainCount": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.GenesisState.genesisAccountList": + list := []*GenesisAccount{} + return protoreflect.ValueOfList(&_GenesisState_4_list{list: &list}) + case "network.launch.v1.GenesisState.vestingAccountList": + list := []*VestingAccount{} + return protoreflect.ValueOfList(&_GenesisState_5_list{list: &list}) + case "network.launch.v1.GenesisState.genesisValidatorList": + list := []*GenesisValidator{} + return protoreflect.ValueOfList(&_GenesisState_6_list{list: &list}) + case "network.launch.v1.GenesisState.requestList": + list := []*Request{} + return protoreflect.ValueOfList(&_GenesisState_7_list{list: &list}) + case "network.launch.v1.GenesisState.requestCounters": + list := []*RequestCounter{} + return protoreflect.ValueOfList(&_GenesisState_8_list{list: &list}) + case "network.launch.v1.GenesisState.paramChangeList": + list := []*ParamChange{} + return protoreflect.ValueOfList(&_GenesisState_9_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisState")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisState) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.GenesisState", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisState) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisState) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.ChainList) > 0 { + for _, e := range x.ChainList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.ChainCount != 0 { + n += 1 + runtime.Sov(uint64(x.ChainCount)) + } + if len(x.GenesisAccountList) > 0 { + for _, e := range x.GenesisAccountList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.VestingAccountList) > 0 { + for _, e := range x.VestingAccountList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.GenesisValidatorList) > 0 { + for _, e := range x.GenesisValidatorList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.RequestList) > 0 { + for _, e := range x.RequestList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.RequestCounters) > 0 { + for _, e := range x.RequestCounters { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.ParamChangeList) > 0 { + for _, e := range x.ParamChangeList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ParamChangeList) > 0 { + for iNdEx := len(x.ParamChangeList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ParamChangeList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x4a + } + } + if len(x.RequestCounters) > 0 { + for iNdEx := len(x.RequestCounters) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.RequestCounters[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x42 + } + } + if len(x.RequestList) > 0 { + for iNdEx := len(x.RequestList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.RequestList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x3a + } + } + if len(x.GenesisValidatorList) > 0 { + for iNdEx := len(x.GenesisValidatorList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.GenesisValidatorList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + } + if len(x.VestingAccountList) > 0 { + for iNdEx := len(x.VestingAccountList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.VestingAccountList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + } + } + if len(x.GenesisAccountList) > 0 { + for iNdEx := len(x.GenesisAccountList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.GenesisAccountList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + } + if x.ChainCount != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ChainCount)) + i-- + dAtA[i] = 0x18 + } + if len(x.ChainList) > 0 { + for iNdEx := len(x.ChainList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ChainList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ChainList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ChainList = append(x.ChainList, &Chain{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ChainList[len(x.ChainList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ChainCount", wireType) + } + x.ChainCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ChainCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisAccountList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisAccountList = append(x.GenesisAccountList, &GenesisAccount{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.GenesisAccountList[len(x.GenesisAccountList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VestingAccountList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.VestingAccountList = append(x.VestingAccountList, &VestingAccount{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VestingAccountList[len(x.VestingAccountList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisValidatorList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisValidatorList = append(x.GenesisValidatorList, &GenesisValidator{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.GenesisValidatorList[len(x.GenesisValidatorList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequestList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.RequestList = append(x.RequestList, &Request{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RequestList[len(x.RequestList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequestCounters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.RequestCounters = append(x.RequestCounters, &RequestCounter{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RequestCounters[len(x.RequestCounters)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ParamChangeList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ParamChangeList = append(x.ParamChangeList, &ParamChange{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ParamChangeList[len(x.ParamChangeList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_RequestCounter protoreflect.MessageDescriptor + fd_RequestCounter_launchID protoreflect.FieldDescriptor + fd_RequestCounter_counter protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_genesis_proto_init() + md_RequestCounter = File_network_launch_v1_genesis_proto.Messages().ByName("RequestCounter") + fd_RequestCounter_launchID = md_RequestCounter.Fields().ByName("launchID") + fd_RequestCounter_counter = md_RequestCounter.Fields().ByName("counter") +} + +var _ protoreflect.Message = (*fastReflection_RequestCounter)(nil) + +type fastReflection_RequestCounter RequestCounter + +func (x *RequestCounter) ProtoReflect() protoreflect.Message { + return (*fastReflection_RequestCounter)(x) +} + +func (x *RequestCounter) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_genesis_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) +} + +var _fastReflection_RequestCounter_messageType fastReflection_RequestCounter_messageType +var _ protoreflect.MessageType = fastReflection_RequestCounter_messageType{} + +type fastReflection_RequestCounter_messageType struct{} + +func (x fastReflection_RequestCounter_messageType) Zero() protoreflect.Message { + return (*fastReflection_RequestCounter)(nil) +} +func (x fastReflection_RequestCounter_messageType) New() protoreflect.Message { + return new(fastReflection_RequestCounter) +} +func (x fastReflection_RequestCounter_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_RequestCounter +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_RequestCounter) Descriptor() protoreflect.MessageDescriptor { + return md_RequestCounter +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_RequestCounter) Type() protoreflect.MessageType { + return _fastReflection_RequestCounter_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_RequestCounter) New() protoreflect.Message { + return new(fastReflection_RequestCounter) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_RequestCounter) Interface() protoreflect.ProtoMessage { + return (*RequestCounter)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_RequestCounter) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_RequestCounter_launchID, value) { + return + } + } + if x.Counter != uint64(0) { + value := protoreflect.ValueOfUint64(x.Counter) + if !f(fd_RequestCounter_counter, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_RequestCounter) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.RequestCounter.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.RequestCounter.counter": + return x.Counter != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestCounter")) + } + panic(fmt.Errorf("message network.launch.v1.RequestCounter does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RequestCounter) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.RequestCounter.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.RequestCounter.counter": + x.Counter = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestCounter")) + } + panic(fmt.Errorf("message network.launch.v1.RequestCounter does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_RequestCounter) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.RequestCounter.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.RequestCounter.counter": + value := x.Counter + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestCounter")) + } + panic(fmt.Errorf("message network.launch.v1.RequestCounter does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RequestCounter) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.RequestCounter.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.RequestCounter.counter": + x.Counter = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestCounter")) + } + panic(fmt.Errorf("message network.launch.v1.RequestCounter does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RequestCounter) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.RequestCounter.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.RequestCounter is not mutable")) + case "network.launch.v1.RequestCounter.counter": + panic(fmt.Errorf("field counter of message network.launch.v1.RequestCounter is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestCounter")) + } + panic(fmt.Errorf("message network.launch.v1.RequestCounter does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_RequestCounter) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.RequestCounter.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.RequestCounter.counter": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestCounter")) + } + panic(fmt.Errorf("message network.launch.v1.RequestCounter does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_RequestCounter) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.RequestCounter", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_RequestCounter) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RequestCounter) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_RequestCounter) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_RequestCounter) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*RequestCounter) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.Counter != 0 { + n += 1 + runtime.Sov(uint64(x.Counter)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*RequestCounter) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Counter != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.Counter)) + i-- + dAtA[i] = 0x10 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*RequestCounter) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: RequestCounter: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: RequestCounter: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Counter", wireType) + } + x.Counter = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.Counter |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/genesis.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// GenesisState defines the launch module's genesis state. +type GenesisState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params defines all the parameters of the module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + ChainList []*Chain `protobuf:"bytes,2,rep,name=chainList,proto3" json:"chainList,omitempty"` + ChainCount uint64 `protobuf:"varint,3,opt,name=chainCount,proto3" json:"chainCount,omitempty"` + GenesisAccountList []*GenesisAccount `protobuf:"bytes,4,rep,name=genesisAccountList,proto3" json:"genesisAccountList,omitempty"` + VestingAccountList []*VestingAccount `protobuf:"bytes,5,rep,name=vestingAccountList,proto3" json:"vestingAccountList,omitempty"` + GenesisValidatorList []*GenesisValidator `protobuf:"bytes,6,rep,name=genesisValidatorList,proto3" json:"genesisValidatorList,omitempty"` + RequestList []*Request `protobuf:"bytes,7,rep,name=requestList,proto3" json:"requestList,omitempty"` + RequestCounters []*RequestCounter `protobuf:"bytes,8,rep,name=requestCounters,proto3" json:"requestCounters,omitempty"` + ParamChangeList []*ParamChange `protobuf:"bytes,9,rep,name=paramChangeList,proto3" json:"paramChangeList,omitempty"` +} + +func (x *GenesisState) Reset() { + *x = GenesisState{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_genesis_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisState) ProtoMessage() {} + +// Deprecated: Use GenesisState.ProtoReflect.Descriptor instead. +func (*GenesisState) Descriptor() ([]byte, []int) { + return file_network_launch_v1_genesis_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisState) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +func (x *GenesisState) GetChainList() []*Chain { + if x != nil { + return x.ChainList + } + return nil +} + +func (x *GenesisState) GetChainCount() uint64 { + if x != nil { + return x.ChainCount + } + return 0 +} + +func (x *GenesisState) GetGenesisAccountList() []*GenesisAccount { + if x != nil { + return x.GenesisAccountList + } + return nil +} + +func (x *GenesisState) GetVestingAccountList() []*VestingAccount { + if x != nil { + return x.VestingAccountList + } + return nil +} + +func (x *GenesisState) GetGenesisValidatorList() []*GenesisValidator { + if x != nil { + return x.GenesisValidatorList + } + return nil +} + +func (x *GenesisState) GetRequestList() []*Request { + if x != nil { + return x.RequestList + } + return nil +} + +func (x *GenesisState) GetRequestCounters() []*RequestCounter { + if x != nil { + return x.RequestCounters + } + return nil +} + +func (x *GenesisState) GetParamChangeList() []*ParamChange { + if x != nil { + return x.ParamChangeList + } + return nil +} + +type RequestCounter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Counter uint64 `protobuf:"varint,2,opt,name=counter,proto3" json:"counter,omitempty"` +} + +func (x *RequestCounter) Reset() { + *x = RequestCounter{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_genesis_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RequestCounter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequestCounter) ProtoMessage() {} + +// Deprecated: Use RequestCounter.ProtoReflect.Descriptor instead. +func (*RequestCounter) Descriptor() ([]byte, []int) { + return file_network_launch_v1_genesis_proto_rawDescGZIP(), []int{1} +} + +func (x *RequestCounter) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *RequestCounter) GetCounter() uint64 { + if x != nil { + return x.Counter + } + return 0 +} + +var File_network_launch_v1_genesis_proto protoreflect.FileDescriptor + +var file_network_launch_v1_genesis_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, + 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0xa2, 0x05, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, + 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x3c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x57, 0x0a, + 0x12, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x12, 0x76, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x42, + 0x0a, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, + 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4e, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x42, 0xc5, 0x01, + 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_genesis_proto_rawDescOnce sync.Once + file_network_launch_v1_genesis_proto_rawDescData = file_network_launch_v1_genesis_proto_rawDesc +) + +func file_network_launch_v1_genesis_proto_rawDescGZIP() []byte { + file_network_launch_v1_genesis_proto_rawDescOnce.Do(func() { + file_network_launch_v1_genesis_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_genesis_proto_rawDescData) + }) + return file_network_launch_v1_genesis_proto_rawDescData +} + +var file_network_launch_v1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_launch_v1_genesis_proto_goTypes = []interface{}{ + (*GenesisState)(nil), // 0: network.launch.v1.GenesisState + (*RequestCounter)(nil), // 1: network.launch.v1.RequestCounter + (*Params)(nil), // 2: network.launch.v1.Params + (*Chain)(nil), // 3: network.launch.v1.Chain + (*GenesisAccount)(nil), // 4: network.launch.v1.GenesisAccount + (*VestingAccount)(nil), // 5: network.launch.v1.VestingAccount + (*GenesisValidator)(nil), // 6: network.launch.v1.GenesisValidator + (*Request)(nil), // 7: network.launch.v1.Request + (*ParamChange)(nil), // 8: network.launch.v1.ParamChange +} +var file_network_launch_v1_genesis_proto_depIdxs = []int32{ + 2, // 0: network.launch.v1.GenesisState.params:type_name -> network.launch.v1.Params + 3, // 1: network.launch.v1.GenesisState.chainList:type_name -> network.launch.v1.Chain + 4, // 2: network.launch.v1.GenesisState.genesisAccountList:type_name -> network.launch.v1.GenesisAccount + 5, // 3: network.launch.v1.GenesisState.vestingAccountList:type_name -> network.launch.v1.VestingAccount + 6, // 4: network.launch.v1.GenesisState.genesisValidatorList:type_name -> network.launch.v1.GenesisValidator + 7, // 5: network.launch.v1.GenesisState.requestList:type_name -> network.launch.v1.Request + 1, // 6: network.launch.v1.GenesisState.requestCounters:type_name -> network.launch.v1.RequestCounter + 8, // 7: network.launch.v1.GenesisState.paramChangeList:type_name -> network.launch.v1.ParamChange + 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 +} + +func init() { file_network_launch_v1_genesis_proto_init() } +func file_network_launch_v1_genesis_proto_init() { + if File_network_launch_v1_genesis_proto != nil { + return + } + file_network_launch_v1_chain_proto_init() + file_network_launch_v1_genesis_account_proto_init() + file_network_launch_v1_genesis_validator_proto_init() + file_network_launch_v1_param_change_proto_init() + file_network_launch_v1_params_proto_init() + file_network_launch_v1_request_proto_init() + file_network_launch_v1_vesting_account_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_genesis_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_genesis_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RequestCounter); 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_network_launch_v1_genesis_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_genesis_proto_goTypes, + DependencyIndexes: file_network_launch_v1_genesis_proto_depIdxs, + MessageInfos: file_network_launch_v1_genesis_proto_msgTypes, + }.Build() + File_network_launch_v1_genesis_proto = out.File + file_network_launch_v1_genesis_proto_rawDesc = nil + file_network_launch_v1_genesis_proto_goTypes = nil + file_network_launch_v1_genesis_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/genesis_account.pulsar.go b/api/network/launch/v1/genesis_account.pulsar.go new file mode 100644 index 00000000..a8eeef06 --- /dev/null +++ b/api/network/launch/v1/genesis_account.pulsar.go @@ -0,0 +1,797 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_GenesisAccount_3_list)(nil) + +type _GenesisAccount_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_GenesisAccount_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisAccount_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisAccount_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisAccount_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisAccount_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisAccount_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisAccount_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisAccount_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_GenesisAccount protoreflect.MessageDescriptor + fd_GenesisAccount_launchID protoreflect.FieldDescriptor + fd_GenesisAccount_address protoreflect.FieldDescriptor + fd_GenesisAccount_coins protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_genesis_account_proto_init() + md_GenesisAccount = File_network_launch_v1_genesis_account_proto.Messages().ByName("GenesisAccount") + fd_GenesisAccount_launchID = md_GenesisAccount.Fields().ByName("launchID") + fd_GenesisAccount_address = md_GenesisAccount.Fields().ByName("address") + fd_GenesisAccount_coins = md_GenesisAccount.Fields().ByName("coins") +} + +var _ protoreflect.Message = (*fastReflection_GenesisAccount)(nil) + +type fastReflection_GenesisAccount GenesisAccount + +func (x *GenesisAccount) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisAccount)(x) +} + +func (x *GenesisAccount) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_genesis_account_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) +} + +var _fastReflection_GenesisAccount_messageType fastReflection_GenesisAccount_messageType +var _ protoreflect.MessageType = fastReflection_GenesisAccount_messageType{} + +type fastReflection_GenesisAccount_messageType struct{} + +func (x fastReflection_GenesisAccount_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisAccount)(nil) +} +func (x fastReflection_GenesisAccount_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisAccount) +} +func (x fastReflection_GenesisAccount_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisAccount +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisAccount) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisAccount +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisAccount) Type() protoreflect.MessageType { + return _fastReflection_GenesisAccount_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisAccount) New() protoreflect.Message { + return new(fastReflection_GenesisAccount) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisAccount) Interface() protoreflect.ProtoMessage { + return (*GenesisAccount)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisAccount) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_GenesisAccount_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_GenesisAccount_address, value) { + return + } + } + if len(x.Coins) != 0 { + value := protoreflect.ValueOfList(&_GenesisAccount_3_list{list: &x.Coins}) + if !f(fd_GenesisAccount_coins, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisAccount) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.GenesisAccount.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.GenesisAccount.address": + return x.Address != "" + case "network.launch.v1.GenesisAccount.coins": + return len(x.Coins) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisAccount")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisAccount does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisAccount) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.GenesisAccount.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.GenesisAccount.address": + x.Address = "" + case "network.launch.v1.GenesisAccount.coins": + x.Coins = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisAccount")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisAccount does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisAccount) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.GenesisAccount.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.GenesisAccount.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.launch.v1.GenesisAccount.coins": + if len(x.Coins) == 0 { + return protoreflect.ValueOfList(&_GenesisAccount_3_list{}) + } + listValue := &_GenesisAccount_3_list{list: &x.Coins} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisAccount")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisAccount does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisAccount) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.GenesisAccount.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.GenesisAccount.address": + x.Address = value.Interface().(string) + case "network.launch.v1.GenesisAccount.coins": + lv := value.List() + clv := lv.(*_GenesisAccount_3_list) + x.Coins = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisAccount")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisAccount does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisAccount) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisAccount.coins": + if x.Coins == nil { + x.Coins = []*v1beta1.Coin{} + } + value := &_GenesisAccount_3_list{list: &x.Coins} + return protoreflect.ValueOfList(value) + case "network.launch.v1.GenesisAccount.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.GenesisAccount is not mutable")) + case "network.launch.v1.GenesisAccount.address": + panic(fmt.Errorf("field address of message network.launch.v1.GenesisAccount is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisAccount")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisAccount does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisAccount) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisAccount.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.GenesisAccount.address": + return protoreflect.ValueOfString("") + case "network.launch.v1.GenesisAccount.coins": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_GenesisAccount_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisAccount")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisAccount does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisAccount) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.GenesisAccount", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisAccount) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisAccount) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisAccount) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisAccount) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisAccount) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Coins) > 0 { + for _, e := range x.Coins { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisAccount) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Coins) > 0 { + for iNdEx := len(x.Coins) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Coins[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisAccount) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coins = append(x.Coins, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Coins[len(x.Coins)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/genesis_account.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GenesisAccount struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Coins []*v1beta1.Coin `protobuf:"bytes,3,rep,name=coins,proto3" json:"coins,omitempty"` +} + +func (x *GenesisAccount) Reset() { + *x = GenesisAccount{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_genesis_account_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisAccount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisAccount) ProtoMessage() {} + +// Deprecated: Use GenesisAccount.ProtoReflect.Descriptor instead. +func (*GenesisAccount) Descriptor() ([]byte, []int) { + return file_network_launch_v1_genesis_account_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisAccount) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *GenesisAccount) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *GenesisAccount) GetCoins() []*v1beta1.Coin { + if x != nil { + return x.Coins + } + return nil +} + +var File_network_launch_v1_genesis_account_proto protoreflect.FileDescriptor + +var file_network_launch_v1_genesis_account_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, + 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x85, 0x02, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, + 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, + 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, + 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, + 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, + 0x01, 0x52, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x42, 0xcc, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x42, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_genesis_account_proto_rawDescOnce sync.Once + file_network_launch_v1_genesis_account_proto_rawDescData = file_network_launch_v1_genesis_account_proto_rawDesc +) + +func file_network_launch_v1_genesis_account_proto_rawDescGZIP() []byte { + file_network_launch_v1_genesis_account_proto_rawDescOnce.Do(func() { + file_network_launch_v1_genesis_account_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_genesis_account_proto_rawDescData) + }) + return file_network_launch_v1_genesis_account_proto_rawDescData +} + +var file_network_launch_v1_genesis_account_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_launch_v1_genesis_account_proto_goTypes = []interface{}{ + (*GenesisAccount)(nil), // 0: network.launch.v1.GenesisAccount + (*v1beta1.Coin)(nil), // 1: cosmos.base.v1beta1.Coin +} +var file_network_launch_v1_genesis_account_proto_depIdxs = []int32{ + 1, // 0: network.launch.v1.GenesisAccount.coins:type_name -> cosmos.base.v1beta1.Coin + 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_network_launch_v1_genesis_account_proto_init() } +func file_network_launch_v1_genesis_account_proto_init() { + if File_network_launch_v1_genesis_account_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_genesis_account_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisAccount); 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_network_launch_v1_genesis_account_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_genesis_account_proto_goTypes, + DependencyIndexes: file_network_launch_v1_genesis_account_proto_depIdxs, + MessageInfos: file_network_launch_v1_genesis_account_proto_msgTypes, + }.Build() + File_network_launch_v1_genesis_account_proto = out.File + file_network_launch_v1_genesis_account_proto_rawDesc = nil + file_network_launch_v1_genesis_account_proto_goTypes = nil + file_network_launch_v1_genesis_account_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/genesis_validator.pulsar.go b/api/network/launch/v1/genesis_validator.pulsar.go new file mode 100644 index 00000000..3375bdaa --- /dev/null +++ b/api/network/launch/v1/genesis_validator.pulsar.go @@ -0,0 +1,2765 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_GenesisValidator protoreflect.MessageDescriptor + fd_GenesisValidator_launchID protoreflect.FieldDescriptor + fd_GenesisValidator_address protoreflect.FieldDescriptor + fd_GenesisValidator_genTx protoreflect.FieldDescriptor + fd_GenesisValidator_consPubKey protoreflect.FieldDescriptor + fd_GenesisValidator_selfDelegation protoreflect.FieldDescriptor + fd_GenesisValidator_peer protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_genesis_validator_proto_init() + md_GenesisValidator = File_network_launch_v1_genesis_validator_proto.Messages().ByName("GenesisValidator") + fd_GenesisValidator_launchID = md_GenesisValidator.Fields().ByName("launchID") + fd_GenesisValidator_address = md_GenesisValidator.Fields().ByName("address") + fd_GenesisValidator_genTx = md_GenesisValidator.Fields().ByName("genTx") + fd_GenesisValidator_consPubKey = md_GenesisValidator.Fields().ByName("consPubKey") + fd_GenesisValidator_selfDelegation = md_GenesisValidator.Fields().ByName("selfDelegation") + fd_GenesisValidator_peer = md_GenesisValidator.Fields().ByName("peer") +} + +var _ protoreflect.Message = (*fastReflection_GenesisValidator)(nil) + +type fastReflection_GenesisValidator GenesisValidator + +func (x *GenesisValidator) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisValidator)(x) +} + +func (x *GenesisValidator) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_genesis_validator_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) +} + +var _fastReflection_GenesisValidator_messageType fastReflection_GenesisValidator_messageType +var _ protoreflect.MessageType = fastReflection_GenesisValidator_messageType{} + +type fastReflection_GenesisValidator_messageType struct{} + +func (x fastReflection_GenesisValidator_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisValidator)(nil) +} +func (x fastReflection_GenesisValidator_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisValidator) +} +func (x fastReflection_GenesisValidator_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisValidator +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisValidator) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisValidator +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisValidator) Type() protoreflect.MessageType { + return _fastReflection_GenesisValidator_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisValidator) New() protoreflect.Message { + return new(fastReflection_GenesisValidator) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisValidator) Interface() protoreflect.ProtoMessage { + return (*GenesisValidator)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisValidator) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_GenesisValidator_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_GenesisValidator_address, value) { + return + } + } + if len(x.GenTx) != 0 { + value := protoreflect.ValueOfBytes(x.GenTx) + if !f(fd_GenesisValidator_genTx, value) { + return + } + } + if len(x.ConsPubKey) != 0 { + value := protoreflect.ValueOfBytes(x.ConsPubKey) + if !f(fd_GenesisValidator_consPubKey, value) { + return + } + } + if x.SelfDelegation != nil { + value := protoreflect.ValueOfMessage(x.SelfDelegation.ProtoReflect()) + if !f(fd_GenesisValidator_selfDelegation, value) { + return + } + } + if x.Peer != nil { + value := protoreflect.ValueOfMessage(x.Peer.ProtoReflect()) + if !f(fd_GenesisValidator_peer, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisValidator) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.GenesisValidator.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.GenesisValidator.address": + return x.Address != "" + case "network.launch.v1.GenesisValidator.genTx": + return len(x.GenTx) != 0 + case "network.launch.v1.GenesisValidator.consPubKey": + return len(x.ConsPubKey) != 0 + case "network.launch.v1.GenesisValidator.selfDelegation": + return x.SelfDelegation != nil + case "network.launch.v1.GenesisValidator.peer": + return x.Peer != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisValidator")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisValidator does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisValidator) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.GenesisValidator.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.GenesisValidator.address": + x.Address = "" + case "network.launch.v1.GenesisValidator.genTx": + x.GenTx = nil + case "network.launch.v1.GenesisValidator.consPubKey": + x.ConsPubKey = nil + case "network.launch.v1.GenesisValidator.selfDelegation": + x.SelfDelegation = nil + case "network.launch.v1.GenesisValidator.peer": + x.Peer = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisValidator")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisValidator does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisValidator) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.GenesisValidator.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.GenesisValidator.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.launch.v1.GenesisValidator.genTx": + value := x.GenTx + return protoreflect.ValueOfBytes(value) + case "network.launch.v1.GenesisValidator.consPubKey": + value := x.ConsPubKey + return protoreflect.ValueOfBytes(value) + case "network.launch.v1.GenesisValidator.selfDelegation": + value := x.SelfDelegation + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.GenesisValidator.peer": + value := x.Peer + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisValidator")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisValidator does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisValidator) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.GenesisValidator.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.GenesisValidator.address": + x.Address = value.Interface().(string) + case "network.launch.v1.GenesisValidator.genTx": + x.GenTx = value.Bytes() + case "network.launch.v1.GenesisValidator.consPubKey": + x.ConsPubKey = value.Bytes() + case "network.launch.v1.GenesisValidator.selfDelegation": + x.SelfDelegation = value.Message().Interface().(*v1beta1.Coin) + case "network.launch.v1.GenesisValidator.peer": + x.Peer = value.Message().Interface().(*Peer) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisValidator")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisValidator does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisValidator) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisValidator.selfDelegation": + if x.SelfDelegation == nil { + x.SelfDelegation = new(v1beta1.Coin) + } + return protoreflect.ValueOfMessage(x.SelfDelegation.ProtoReflect()) + case "network.launch.v1.GenesisValidator.peer": + if x.Peer == nil { + x.Peer = new(Peer) + } + return protoreflect.ValueOfMessage(x.Peer.ProtoReflect()) + case "network.launch.v1.GenesisValidator.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.GenesisValidator is not mutable")) + case "network.launch.v1.GenesisValidator.address": + panic(fmt.Errorf("field address of message network.launch.v1.GenesisValidator is not mutable")) + case "network.launch.v1.GenesisValidator.genTx": + panic(fmt.Errorf("field genTx of message network.launch.v1.GenesisValidator is not mutable")) + case "network.launch.v1.GenesisValidator.consPubKey": + panic(fmt.Errorf("field consPubKey of message network.launch.v1.GenesisValidator is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisValidator")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisValidator does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisValidator) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.GenesisValidator.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.GenesisValidator.address": + return protoreflect.ValueOfString("") + case "network.launch.v1.GenesisValidator.genTx": + return protoreflect.ValueOfBytes(nil) + case "network.launch.v1.GenesisValidator.consPubKey": + return protoreflect.ValueOfBytes(nil) + case "network.launch.v1.GenesisValidator.selfDelegation": + m := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.GenesisValidator.peer": + m := new(Peer) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.GenesisValidator")) + } + panic(fmt.Errorf("message network.launch.v1.GenesisValidator does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisValidator) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.GenesisValidator", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisValidator) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisValidator) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisValidator) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisValidator) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisValidator) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.GenTx) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ConsPubKey) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.SelfDelegation != nil { + l = options.Size(x.SelfDelegation) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Peer != nil { + l = options.Size(x.Peer) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisValidator) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Peer != nil { + encoded, err := options.Marshal(x.Peer) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + if x.SelfDelegation != nil { + encoded, err := options.Marshal(x.SelfDelegation) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + } + if len(x.ConsPubKey) > 0 { + i -= len(x.ConsPubKey) + copy(dAtA[i:], x.ConsPubKey) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ConsPubKey))) + i-- + dAtA[i] = 0x22 + } + if len(x.GenTx) > 0 { + i -= len(x.GenTx) + copy(dAtA[i:], x.GenTx) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GenTx))) + i-- + dAtA[i] = 0x1a + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisValidator) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisValidator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisValidator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenTx", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenTx = append(x.GenTx[:0], dAtA[iNdEx:postIndex]...) + if x.GenTx == nil { + x.GenTx = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsPubKey", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ConsPubKey = append(x.ConsPubKey[:0], dAtA[iNdEx:postIndex]...) + if x.ConsPubKey == nil { + x.ConsPubKey = []byte{} + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SelfDelegation", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.SelfDelegation == nil { + x.SelfDelegation = &v1beta1.Coin{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.SelfDelegation); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Peer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Peer == nil { + x.Peer = &Peer{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Peer); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_Peer protoreflect.MessageDescriptor + fd_Peer_id protoreflect.FieldDescriptor + fd_Peer_tcpAddress protoreflect.FieldDescriptor + fd_Peer_httpTunnel protoreflect.FieldDescriptor + fd_Peer_none protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_genesis_validator_proto_init() + md_Peer = File_network_launch_v1_genesis_validator_proto.Messages().ByName("Peer") + fd_Peer_id = md_Peer.Fields().ByName("id") + fd_Peer_tcpAddress = md_Peer.Fields().ByName("tcpAddress") + fd_Peer_httpTunnel = md_Peer.Fields().ByName("httpTunnel") + fd_Peer_none = md_Peer.Fields().ByName("none") +} + +var _ protoreflect.Message = (*fastReflection_Peer)(nil) + +type fastReflection_Peer Peer + +func (x *Peer) ProtoReflect() protoreflect.Message { + return (*fastReflection_Peer)(x) +} + +func (x *Peer) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_genesis_validator_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) +} + +var _fastReflection_Peer_messageType fastReflection_Peer_messageType +var _ protoreflect.MessageType = fastReflection_Peer_messageType{} + +type fastReflection_Peer_messageType struct{} + +func (x fastReflection_Peer_messageType) Zero() protoreflect.Message { + return (*fastReflection_Peer)(nil) +} +func (x fastReflection_Peer_messageType) New() protoreflect.Message { + return new(fastReflection_Peer) +} +func (x fastReflection_Peer_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Peer +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Peer) Descriptor() protoreflect.MessageDescriptor { + return md_Peer +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Peer) Type() protoreflect.MessageType { + return _fastReflection_Peer_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Peer) New() protoreflect.Message { + return new(fastReflection_Peer) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Peer) Interface() protoreflect.ProtoMessage { + return (*Peer)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Peer) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Id != "" { + value := protoreflect.ValueOfString(x.Id) + if !f(fd_Peer_id, value) { + return + } + } + if x.Connection != nil { + switch o := x.Connection.(type) { + case *Peer_TcpAddress: + v := o.TcpAddress + value := protoreflect.ValueOfString(v) + if !f(fd_Peer_tcpAddress, value) { + return + } + case *Peer_HttpTunnel: + v := o.HttpTunnel + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_Peer_httpTunnel, value) { + return + } + case *Peer_None: + v := o.None + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_Peer_none, value) { + return + } + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Peer) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.Peer.id": + return x.Id != "" + case "network.launch.v1.Peer.tcpAddress": + if x.Connection == nil { + return false + } else if _, ok := x.Connection.(*Peer_TcpAddress); ok { + return true + } else { + return false + } + case "network.launch.v1.Peer.httpTunnel": + if x.Connection == nil { + return false + } else if _, ok := x.Connection.(*Peer_HttpTunnel); ok { + return true + } else { + return false + } + case "network.launch.v1.Peer.none": + if x.Connection == nil { + return false + } else if _, ok := x.Connection.(*Peer_None); ok { + return true + } else { + return false + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer")) + } + panic(fmt.Errorf("message network.launch.v1.Peer does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.Peer.id": + x.Id = "" + case "network.launch.v1.Peer.tcpAddress": + x.Connection = nil + case "network.launch.v1.Peer.httpTunnel": + x.Connection = nil + case "network.launch.v1.Peer.none": + x.Connection = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer")) + } + panic(fmt.Errorf("message network.launch.v1.Peer does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Peer) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.Peer.id": + value := x.Id + return protoreflect.ValueOfString(value) + case "network.launch.v1.Peer.tcpAddress": + if x.Connection == nil { + return protoreflect.ValueOfString("") + } else if v, ok := x.Connection.(*Peer_TcpAddress); ok { + return protoreflect.ValueOfString(v.TcpAddress) + } else { + return protoreflect.ValueOfString("") + } + case "network.launch.v1.Peer.httpTunnel": + if x.Connection == nil { + return protoreflect.ValueOfMessage((*Peer_HTTPTunnel)(nil).ProtoReflect()) + } else if v, ok := x.Connection.(*Peer_HttpTunnel); ok { + return protoreflect.ValueOfMessage(v.HttpTunnel.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*Peer_HTTPTunnel)(nil).ProtoReflect()) + } + case "network.launch.v1.Peer.none": + if x.Connection == nil { + return protoreflect.ValueOfMessage((*Peer_EmptyConnection)(nil).ProtoReflect()) + } else if v, ok := x.Connection.(*Peer_None); ok { + return protoreflect.ValueOfMessage(v.None.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*Peer_EmptyConnection)(nil).ProtoReflect()) + } + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer")) + } + panic(fmt.Errorf("message network.launch.v1.Peer does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.Peer.id": + x.Id = value.Interface().(string) + case "network.launch.v1.Peer.tcpAddress": + cv := value.Interface().(string) + x.Connection = &Peer_TcpAddress{TcpAddress: cv} + case "network.launch.v1.Peer.httpTunnel": + cv := value.Message().Interface().(*Peer_HTTPTunnel) + x.Connection = &Peer_HttpTunnel{HttpTunnel: cv} + case "network.launch.v1.Peer.none": + cv := value.Message().Interface().(*Peer_EmptyConnection) + x.Connection = &Peer_None{None: cv} + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer")) + } + panic(fmt.Errorf("message network.launch.v1.Peer does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Peer.httpTunnel": + if x.Connection == nil { + value := &Peer_HTTPTunnel{} + oneofValue := &Peer_HttpTunnel{HttpTunnel: value} + x.Connection = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Connection.(type) { + case *Peer_HttpTunnel: + return protoreflect.ValueOfMessage(m.HttpTunnel.ProtoReflect()) + default: + value := &Peer_HTTPTunnel{} + oneofValue := &Peer_HttpTunnel{HttpTunnel: value} + x.Connection = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.Peer.none": + if x.Connection == nil { + value := &Peer_EmptyConnection{} + oneofValue := &Peer_None{None: value} + x.Connection = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Connection.(type) { + case *Peer_None: + return protoreflect.ValueOfMessage(m.None.ProtoReflect()) + default: + value := &Peer_EmptyConnection{} + oneofValue := &Peer_None{None: value} + x.Connection = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.Peer.id": + panic(fmt.Errorf("field id of message network.launch.v1.Peer is not mutable")) + case "network.launch.v1.Peer.tcpAddress": + panic(fmt.Errorf("field tcpAddress of message network.launch.v1.Peer is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer")) + } + panic(fmt.Errorf("message network.launch.v1.Peer does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Peer) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Peer.id": + return protoreflect.ValueOfString("") + case "network.launch.v1.Peer.tcpAddress": + return protoreflect.ValueOfString("") + case "network.launch.v1.Peer.httpTunnel": + value := &Peer_HTTPTunnel{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.Peer.none": + value := &Peer_EmptyConnection{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer")) + } + panic(fmt.Errorf("message network.launch.v1.Peer does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Peer) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + case "network.launch.v1.Peer.connection": + if x.Connection == nil { + return nil + } + switch x.Connection.(type) { + case *Peer_TcpAddress: + return x.Descriptor().Fields().ByName("tcpAddress") + case *Peer_HttpTunnel: + return x.Descriptor().Fields().ByName("httpTunnel") + case *Peer_None: + return x.Descriptor().Fields().ByName("none") + } + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.Peer", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Peer) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Peer) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Peer) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Peer) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Id) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + switch x := x.Connection.(type) { + case *Peer_TcpAddress: + if x == nil { + break + } + l = len(x.TcpAddress) + n += 1 + l + runtime.Sov(uint64(l)) + case *Peer_HttpTunnel: + if x == nil { + break + } + l = options.Size(x.HttpTunnel) + n += 1 + l + runtime.Sov(uint64(l)) + case *Peer_None: + if x == nil { + break + } + l = options.Size(x.None) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Peer) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + switch x := x.Connection.(type) { + case *Peer_TcpAddress: + i -= len(x.TcpAddress) + copy(dAtA[i:], x.TcpAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.TcpAddress))) + i-- + dAtA[i] = 0x12 + case *Peer_HttpTunnel: + encoded, err := options.Marshal(x.HttpTunnel) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + case *Peer_None: + encoded, err := options.Marshal(x.None) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + if len(x.Id) > 0 { + i -= len(x.Id) + copy(dAtA[i:], x.Id) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Id))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Peer) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Peer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Peer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TcpAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Connection = &Peer_TcpAddress{string(dAtA[iNdEx:postIndex])} + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field HttpTunnel", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &Peer_HTTPTunnel{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Connection = &Peer_HttpTunnel{v} + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field None", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &Peer_EmptyConnection{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Connection = &Peer_None{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_Peer_HTTPTunnel protoreflect.MessageDescriptor + fd_Peer_HTTPTunnel_name protoreflect.FieldDescriptor + fd_Peer_HTTPTunnel_address protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_genesis_validator_proto_init() + md_Peer_HTTPTunnel = File_network_launch_v1_genesis_validator_proto.Messages().ByName("Peer").Messages().ByName("HTTPTunnel") + fd_Peer_HTTPTunnel_name = md_Peer_HTTPTunnel.Fields().ByName("name") + fd_Peer_HTTPTunnel_address = md_Peer_HTTPTunnel.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_Peer_HTTPTunnel)(nil) + +type fastReflection_Peer_HTTPTunnel Peer_HTTPTunnel + +func (x *Peer_HTTPTunnel) ProtoReflect() protoreflect.Message { + return (*fastReflection_Peer_HTTPTunnel)(x) +} + +func (x *Peer_HTTPTunnel) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_genesis_validator_proto_msgTypes[2] + 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) +} + +var _fastReflection_Peer_HTTPTunnel_messageType fastReflection_Peer_HTTPTunnel_messageType +var _ protoreflect.MessageType = fastReflection_Peer_HTTPTunnel_messageType{} + +type fastReflection_Peer_HTTPTunnel_messageType struct{} + +func (x fastReflection_Peer_HTTPTunnel_messageType) Zero() protoreflect.Message { + return (*fastReflection_Peer_HTTPTunnel)(nil) +} +func (x fastReflection_Peer_HTTPTunnel_messageType) New() protoreflect.Message { + return new(fastReflection_Peer_HTTPTunnel) +} +func (x fastReflection_Peer_HTTPTunnel_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Peer_HTTPTunnel +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Peer_HTTPTunnel) Descriptor() protoreflect.MessageDescriptor { + return md_Peer_HTTPTunnel +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Peer_HTTPTunnel) Type() protoreflect.MessageType { + return _fastReflection_Peer_HTTPTunnel_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Peer_HTTPTunnel) New() protoreflect.Message { + return new(fastReflection_Peer_HTTPTunnel) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Peer_HTTPTunnel) Interface() protoreflect.ProtoMessage { + return (*Peer_HTTPTunnel)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Peer_HTTPTunnel) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Name != "" { + value := protoreflect.ValueOfString(x.Name) + if !f(fd_Peer_HTTPTunnel_name, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_Peer_HTTPTunnel_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Peer_HTTPTunnel) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.Peer.HTTPTunnel.name": + return x.Name != "" + case "network.launch.v1.Peer.HTTPTunnel.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.HTTPTunnel")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.HTTPTunnel does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer_HTTPTunnel) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.Peer.HTTPTunnel.name": + x.Name = "" + case "network.launch.v1.Peer.HTTPTunnel.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.HTTPTunnel")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.HTTPTunnel does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Peer_HTTPTunnel) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.Peer.HTTPTunnel.name": + value := x.Name + return protoreflect.ValueOfString(value) + case "network.launch.v1.Peer.HTTPTunnel.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.HTTPTunnel")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.HTTPTunnel does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer_HTTPTunnel) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.Peer.HTTPTunnel.name": + x.Name = value.Interface().(string) + case "network.launch.v1.Peer.HTTPTunnel.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.HTTPTunnel")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.HTTPTunnel does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer_HTTPTunnel) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Peer.HTTPTunnel.name": + panic(fmt.Errorf("field name of message network.launch.v1.Peer.HTTPTunnel is not mutable")) + case "network.launch.v1.Peer.HTTPTunnel.address": + panic(fmt.Errorf("field address of message network.launch.v1.Peer.HTTPTunnel is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.HTTPTunnel")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.HTTPTunnel does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Peer_HTTPTunnel) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Peer.HTTPTunnel.name": + return protoreflect.ValueOfString("") + case "network.launch.v1.Peer.HTTPTunnel.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.HTTPTunnel")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.HTTPTunnel does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Peer_HTTPTunnel) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.Peer.HTTPTunnel", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Peer_HTTPTunnel) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer_HTTPTunnel) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Peer_HTTPTunnel) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Peer_HTTPTunnel) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Peer_HTTPTunnel) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Name) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Peer_HTTPTunnel) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if len(x.Name) > 0 { + i -= len(x.Name) + copy(dAtA[i:], x.Name) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Name))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Peer_HTTPTunnel) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Peer_HTTPTunnel: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Peer_HTTPTunnel: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_Peer_EmptyConnection protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_genesis_validator_proto_init() + md_Peer_EmptyConnection = File_network_launch_v1_genesis_validator_proto.Messages().ByName("Peer").Messages().ByName("EmptyConnection") +} + +var _ protoreflect.Message = (*fastReflection_Peer_EmptyConnection)(nil) + +type fastReflection_Peer_EmptyConnection Peer_EmptyConnection + +func (x *Peer_EmptyConnection) ProtoReflect() protoreflect.Message { + return (*fastReflection_Peer_EmptyConnection)(x) +} + +func (x *Peer_EmptyConnection) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_genesis_validator_proto_msgTypes[3] + 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) +} + +var _fastReflection_Peer_EmptyConnection_messageType fastReflection_Peer_EmptyConnection_messageType +var _ protoreflect.MessageType = fastReflection_Peer_EmptyConnection_messageType{} + +type fastReflection_Peer_EmptyConnection_messageType struct{} + +func (x fastReflection_Peer_EmptyConnection_messageType) Zero() protoreflect.Message { + return (*fastReflection_Peer_EmptyConnection)(nil) +} +func (x fastReflection_Peer_EmptyConnection_messageType) New() protoreflect.Message { + return new(fastReflection_Peer_EmptyConnection) +} +func (x fastReflection_Peer_EmptyConnection_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Peer_EmptyConnection +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Peer_EmptyConnection) Descriptor() protoreflect.MessageDescriptor { + return md_Peer_EmptyConnection +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Peer_EmptyConnection) Type() protoreflect.MessageType { + return _fastReflection_Peer_EmptyConnection_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Peer_EmptyConnection) New() protoreflect.Message { + return new(fastReflection_Peer_EmptyConnection) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Peer_EmptyConnection) Interface() protoreflect.ProtoMessage { + return (*Peer_EmptyConnection)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Peer_EmptyConnection) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Peer_EmptyConnection) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.EmptyConnection")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.EmptyConnection does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer_EmptyConnection) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.EmptyConnection")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.EmptyConnection does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Peer_EmptyConnection) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.EmptyConnection")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.EmptyConnection does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer_EmptyConnection) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.EmptyConnection")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.EmptyConnection does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer_EmptyConnection) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.EmptyConnection")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.EmptyConnection does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Peer_EmptyConnection) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Peer.EmptyConnection")) + } + panic(fmt.Errorf("message network.launch.v1.Peer.EmptyConnection does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Peer_EmptyConnection) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.Peer.EmptyConnection", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Peer_EmptyConnection) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Peer_EmptyConnection) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Peer_EmptyConnection) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Peer_EmptyConnection) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Peer_EmptyConnection) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Peer_EmptyConnection) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Peer_EmptyConnection) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Peer_EmptyConnection: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Peer_EmptyConnection: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/genesis_validator.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GenesisValidator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + GenTx []byte `protobuf:"bytes,3,opt,name=genTx,proto3" json:"genTx,omitempty"` + ConsPubKey []byte `protobuf:"bytes,4,opt,name=consPubKey,proto3" json:"consPubKey,omitempty"` + SelfDelegation *v1beta1.Coin `protobuf:"bytes,5,opt,name=selfDelegation,proto3" json:"selfDelegation,omitempty"` + Peer *Peer `protobuf:"bytes,6,opt,name=peer,proto3" json:"peer,omitempty"` +} + +func (x *GenesisValidator) Reset() { + *x = GenesisValidator{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_genesis_validator_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisValidator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisValidator) ProtoMessage() {} + +// Deprecated: Use GenesisValidator.ProtoReflect.Descriptor instead. +func (*GenesisValidator) Descriptor() ([]byte, []int) { + return file_network_launch_v1_genesis_validator_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisValidator) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *GenesisValidator) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *GenesisValidator) GetGenTx() []byte { + if x != nil { + return x.GenTx + } + return nil +} + +func (x *GenesisValidator) GetConsPubKey() []byte { + if x != nil { + return x.ConsPubKey + } + return nil +} + +func (x *GenesisValidator) GetSelfDelegation() *v1beta1.Coin { + if x != nil { + return x.SelfDelegation + } + return nil +} + +func (x *GenesisValidator) GetPeer() *Peer { + if x != nil { + return x.Peer + } + return nil +} + +type Peer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // e.g.: 7786ace6ddb3d771024792a46540c88587e0e8cc + // Types that are assignable to Connection: + // + // *Peer_TcpAddress + // *Peer_HttpTunnel + // *Peer_None + Connection isPeer_Connection `protobuf_oneof:"connection"` +} + +func (x *Peer) Reset() { + *x = Peer{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_genesis_validator_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Peer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Peer) ProtoMessage() {} + +// Deprecated: Use Peer.ProtoReflect.Descriptor instead. +func (*Peer) Descriptor() ([]byte, []int) { + return file_network_launch_v1_genesis_validator_proto_rawDescGZIP(), []int{1} +} + +func (x *Peer) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Peer) GetConnection() isPeer_Connection { + if x != nil { + return x.Connection + } + return nil +} + +func (x *Peer) GetTcpAddress() string { + if x, ok := x.GetConnection().(*Peer_TcpAddress); ok { + return x.TcpAddress + } + return "" +} + +func (x *Peer) GetHttpTunnel() *Peer_HTTPTunnel { + if x, ok := x.GetConnection().(*Peer_HttpTunnel); ok { + return x.HttpTunnel + } + return nil +} + +func (x *Peer) GetNone() *Peer_EmptyConnection { + if x, ok := x.GetConnection().(*Peer_None); ok { + return x.None + } + return nil +} + +type isPeer_Connection interface { + isPeer_Connection() +} + +type Peer_TcpAddress struct { + TcpAddress string `protobuf:"bytes,2,opt,name=tcpAddress,proto3,oneof"` // use a TCP address +} + +type Peer_HttpTunnel struct { + HttpTunnel *Peer_HTTPTunnel `protobuf:"bytes,3,opt,name=httpTunnel,proto3,oneof"` // or use an HTTP tunnel +} + +type Peer_None struct { + None *Peer_EmptyConnection `protobuf:"bytes,4,opt,name=none,proto3,oneof"` // or don't provide any connection +} + +func (*Peer_TcpAddress) isPeer_Connection() {} + +func (*Peer_HttpTunnel) isPeer_Connection() {} + +func (*Peer_None) isPeer_Connection() {} + +type Peer_HTTPTunnel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // e.g.: chisel (https://github.com/jpillora/chisel) + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` // for chisel running on Gitpod, e.g.: https://3475-chocolate-capybara-kkiztq32.ws-eu21.gitpod.io/ +} + +func (x *Peer_HTTPTunnel) Reset() { + *x = Peer_HTTPTunnel{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_genesis_validator_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Peer_HTTPTunnel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Peer_HTTPTunnel) ProtoMessage() {} + +// Deprecated: Use Peer_HTTPTunnel.ProtoReflect.Descriptor instead. +func (*Peer_HTTPTunnel) Descriptor() ([]byte, []int) { + return file_network_launch_v1_genesis_validator_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *Peer_HTTPTunnel) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Peer_HTTPTunnel) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type Peer_EmptyConnection struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Peer_EmptyConnection) Reset() { + *x = Peer_EmptyConnection{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_genesis_validator_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Peer_EmptyConnection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Peer_EmptyConnection) ProtoMessage() {} + +// Deprecated: Use Peer_EmptyConnection.ProtoReflect.Descriptor instead. +func (*Peer_EmptyConnection) Descriptor() ([]byte, []int) { + return file_network_launch_v1_genesis_validator_proto_rawDescGZIP(), []int{1, 1} +} + +var File_network_launch_v1_genesis_validator_proto protoreflect.FileDescriptor + +var file_network_launch_v1_genesis_validator_proto_rawDesc = []byte{ + 0x0a, 0x29, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x1a, 0x11, + 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, + 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xd6, 0x02, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x54, 0x78, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x67, 0x65, 0x6e, 0x54, 0x78, 0x12, 0x1e, 0x0a, + 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x88, 0x01, + 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, + 0x6e, 0x42, 0x45, 0xc8, 0xde, 0x1f, 0x00, 0xaa, 0xdf, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, + 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x66, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x42, + 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x22, 0x9a, 0x02, 0x0a, 0x04, + 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0a, 0x74, 0x63, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x63, 0x70, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x44, 0x0a, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x54, 0x75, + 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x65, 0x65, 0x72, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x48, 0x00, + 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3d, 0x0a, 0x04, + 0x6e, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x65, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x1a, 0x3a, 0x0a, 0x0a, 0x48, + 0x54, 0x54, 0x50, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x11, 0x0a, 0x0f, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0xce, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x42, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x31, 0xca, + 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_launch_v1_genesis_validator_proto_rawDescOnce sync.Once + file_network_launch_v1_genesis_validator_proto_rawDescData = file_network_launch_v1_genesis_validator_proto_rawDesc +) + +func file_network_launch_v1_genesis_validator_proto_rawDescGZIP() []byte { + file_network_launch_v1_genesis_validator_proto_rawDescOnce.Do(func() { + file_network_launch_v1_genesis_validator_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_genesis_validator_proto_rawDescData) + }) + return file_network_launch_v1_genesis_validator_proto_rawDescData +} + +var file_network_launch_v1_genesis_validator_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_network_launch_v1_genesis_validator_proto_goTypes = []interface{}{ + (*GenesisValidator)(nil), // 0: network.launch.v1.GenesisValidator + (*Peer)(nil), // 1: network.launch.v1.Peer + (*Peer_HTTPTunnel)(nil), // 2: network.launch.v1.Peer.HTTPTunnel + (*Peer_EmptyConnection)(nil), // 3: network.launch.v1.Peer.EmptyConnection + (*v1beta1.Coin)(nil), // 4: cosmos.base.v1beta1.Coin +} +var file_network_launch_v1_genesis_validator_proto_depIdxs = []int32{ + 4, // 0: network.launch.v1.GenesisValidator.selfDelegation:type_name -> cosmos.base.v1beta1.Coin + 1, // 1: network.launch.v1.GenesisValidator.peer:type_name -> network.launch.v1.Peer + 2, // 2: network.launch.v1.Peer.httpTunnel:type_name -> network.launch.v1.Peer.HTTPTunnel + 3, // 3: network.launch.v1.Peer.none:type_name -> network.launch.v1.Peer.EmptyConnection + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] 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_network_launch_v1_genesis_validator_proto_init() } +func file_network_launch_v1_genesis_validator_proto_init() { + if File_network_launch_v1_genesis_validator_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_genesis_validator_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisValidator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_genesis_validator_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Peer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_genesis_validator_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Peer_HTTPTunnel); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_genesis_validator_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Peer_EmptyConnection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_network_launch_v1_genesis_validator_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*Peer_TcpAddress)(nil), + (*Peer_HttpTunnel)(nil), + (*Peer_None)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_launch_v1_genesis_validator_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_genesis_validator_proto_goTypes, + DependencyIndexes: file_network_launch_v1_genesis_validator_proto_depIdxs, + MessageInfos: file_network_launch_v1_genesis_validator_proto_msgTypes, + }.Build() + File_network_launch_v1_genesis_validator_proto = out.File + file_network_launch_v1_genesis_validator_proto_rawDesc = nil + file_network_launch_v1_genesis_validator_proto_goTypes = nil + file_network_launch_v1_genesis_validator_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/initial_genesis.pulsar.go b/api/network/launch/v1/initial_genesis.pulsar.go new file mode 100644 index 00000000..68f2d146 --- /dev/null +++ b/api/network/launch/v1/initial_genesis.pulsar.go @@ -0,0 +1,80 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + reflect "reflect" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/initial_genesis.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var File_network_launch_v1_initial_genesis_proto protoreflect.FileDescriptor + +var file_network_launch_v1_initial_genesis_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x67, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0xcc, 0x01, 0x0a, + 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, + 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_initial_genesis_proto_goTypes = []interface{}{} + file_network_launch_v1_initial_genesis_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 + } +) + +func init() { file_network_launch_v1_initial_genesis_proto_init() } +func file_network_launch_v1_initial_genesis_proto_init() { + if File_network_launch_v1_initial_genesis_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_launch_v1_initial_genesis_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_initial_genesis_proto_goTypes, + DependencyIndexes: file_network_launch_v1_initial_genesis_proto_depIdxs, + }.Build() + File_network_launch_v1_initial_genesis_proto = out.File + file_network_launch_v1_initial_genesis_proto_rawDesc = nil + file_network_launch_v1_initial_genesis_proto_goTypes = nil + file_network_launch_v1_initial_genesis_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/param_change.pulsar.go b/api/network/launch/v1/param_change.pulsar.go new file mode 100644 index 00000000..4c12fff5 --- /dev/null +++ b/api/network/launch/v1/param_change.pulsar.go @@ -0,0 +1,775 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_ParamChange protoreflect.MessageDescriptor + fd_ParamChange_launchID protoreflect.FieldDescriptor + fd_ParamChange_module protoreflect.FieldDescriptor + fd_ParamChange_param protoreflect.FieldDescriptor + fd_ParamChange_value protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_param_change_proto_init() + md_ParamChange = File_network_launch_v1_param_change_proto.Messages().ByName("ParamChange") + fd_ParamChange_launchID = md_ParamChange.Fields().ByName("launchID") + fd_ParamChange_module = md_ParamChange.Fields().ByName("module") + fd_ParamChange_param = md_ParamChange.Fields().ByName("param") + fd_ParamChange_value = md_ParamChange.Fields().ByName("value") +} + +var _ protoreflect.Message = (*fastReflection_ParamChange)(nil) + +type fastReflection_ParamChange ParamChange + +func (x *ParamChange) ProtoReflect() protoreflect.Message { + return (*fastReflection_ParamChange)(x) +} + +func (x *ParamChange) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_param_change_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) +} + +var _fastReflection_ParamChange_messageType fastReflection_ParamChange_messageType +var _ protoreflect.MessageType = fastReflection_ParamChange_messageType{} + +type fastReflection_ParamChange_messageType struct{} + +func (x fastReflection_ParamChange_messageType) Zero() protoreflect.Message { + return (*fastReflection_ParamChange)(nil) +} +func (x fastReflection_ParamChange_messageType) New() protoreflect.Message { + return new(fastReflection_ParamChange) +} +func (x fastReflection_ParamChange_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ParamChange +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ParamChange) Descriptor() protoreflect.MessageDescriptor { + return md_ParamChange +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ParamChange) Type() protoreflect.MessageType { + return _fastReflection_ParamChange_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ParamChange) New() protoreflect.Message { + return new(fastReflection_ParamChange) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ParamChange) Interface() protoreflect.ProtoMessage { + return (*ParamChange)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ParamChange) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_ParamChange_launchID, value) { + return + } + } + if x.Module != "" { + value := protoreflect.ValueOfString(x.Module) + if !f(fd_ParamChange_module, value) { + return + } + } + if x.Param != "" { + value := protoreflect.ValueOfString(x.Param) + if !f(fd_ParamChange_param, value) { + return + } + } + if len(x.Value) != 0 { + value := protoreflect.ValueOfBytes(x.Value) + if !f(fd_ParamChange_value, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ParamChange) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.ParamChange.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.ParamChange.module": + return x.Module != "" + case "network.launch.v1.ParamChange.param": + return x.Param != "" + case "network.launch.v1.ParamChange.value": + return len(x.Value) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ParamChange")) + } + panic(fmt.Errorf("message network.launch.v1.ParamChange does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ParamChange) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.ParamChange.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.ParamChange.module": + x.Module = "" + case "network.launch.v1.ParamChange.param": + x.Param = "" + case "network.launch.v1.ParamChange.value": + x.Value = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ParamChange")) + } + panic(fmt.Errorf("message network.launch.v1.ParamChange does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ParamChange) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.ParamChange.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.ParamChange.module": + value := x.Module + return protoreflect.ValueOfString(value) + case "network.launch.v1.ParamChange.param": + value := x.Param + return protoreflect.ValueOfString(value) + case "network.launch.v1.ParamChange.value": + value := x.Value + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ParamChange")) + } + panic(fmt.Errorf("message network.launch.v1.ParamChange does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ParamChange) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.ParamChange.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.ParamChange.module": + x.Module = value.Interface().(string) + case "network.launch.v1.ParamChange.param": + x.Param = value.Interface().(string) + case "network.launch.v1.ParamChange.value": + x.Value = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ParamChange")) + } + panic(fmt.Errorf("message network.launch.v1.ParamChange does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ParamChange) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.ParamChange.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.ParamChange is not mutable")) + case "network.launch.v1.ParamChange.module": + panic(fmt.Errorf("field module of message network.launch.v1.ParamChange is not mutable")) + case "network.launch.v1.ParamChange.param": + panic(fmt.Errorf("field param of message network.launch.v1.ParamChange is not mutable")) + case "network.launch.v1.ParamChange.value": + panic(fmt.Errorf("field value of message network.launch.v1.ParamChange is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ParamChange")) + } + panic(fmt.Errorf("message network.launch.v1.ParamChange does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ParamChange) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.ParamChange.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.ParamChange.module": + return protoreflect.ValueOfString("") + case "network.launch.v1.ParamChange.param": + return protoreflect.ValueOfString("") + case "network.launch.v1.ParamChange.value": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ParamChange")) + } + panic(fmt.Errorf("message network.launch.v1.ParamChange does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ParamChange) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.ParamChange", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ParamChange) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ParamChange) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ParamChange) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ParamChange) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ParamChange) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Module) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Param) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Value) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ParamChange) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Value) > 0 { + i -= len(x.Value) + copy(dAtA[i:], x.Value) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Value))) + i-- + dAtA[i] = 0x22 + } + if len(x.Param) > 0 { + i -= len(x.Param) + copy(dAtA[i:], x.Param) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Param))) + i-- + dAtA[i] = 0x1a + } + if len(x.Module) > 0 { + i -= len(x.Module) + copy(dAtA[i:], x.Module) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Module))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ParamChange) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ParamChange: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ParamChange: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Module", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Module = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Param", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Param = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Value = append(x.Value[:0], dAtA[iNdEx:postIndex]...) + if x.Value == nil { + x.Value = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/param_change.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ParamChange struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Module string `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` + Param string `protobuf:"bytes,3,opt,name=param,proto3" json:"param,omitempty"` + Value []byte `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ParamChange) Reset() { + *x = ParamChange{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_param_change_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ParamChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParamChange) ProtoMessage() {} + +// Deprecated: Use ParamChange.ProtoReflect.Descriptor instead. +func (*ParamChange) Descriptor() ([]byte, []int) { + return file_network_launch_v1_param_change_proto_rawDescGZIP(), []int{0} +} + +func (x *ParamChange) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *ParamChange) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *ParamChange) GetParam() string { + if x != nil { + return x.Param + } + return "" +} + +func (x *ParamChange) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +var File_network_launch_v1_param_change_proto protoreflect.FileDescriptor + +var file_network_launch_v1_param_change_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x6d, 0x0a, 0x0b, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0xc9, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x42, 0x10, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, + 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, + 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_param_change_proto_rawDescOnce sync.Once + file_network_launch_v1_param_change_proto_rawDescData = file_network_launch_v1_param_change_proto_rawDesc +) + +func file_network_launch_v1_param_change_proto_rawDescGZIP() []byte { + file_network_launch_v1_param_change_proto_rawDescOnce.Do(func() { + file_network_launch_v1_param_change_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_param_change_proto_rawDescData) + }) + return file_network_launch_v1_param_change_proto_rawDescData +} + +var file_network_launch_v1_param_change_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_launch_v1_param_change_proto_goTypes = []interface{}{ + (*ParamChange)(nil), // 0: network.launch.v1.ParamChange +} +var file_network_launch_v1_param_change_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 +} + +func init() { file_network_launch_v1_param_change_proto_init() } +func file_network_launch_v1_param_change_proto_init() { + if File_network_launch_v1_param_change_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_param_change_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ParamChange); 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_network_launch_v1_param_change_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_param_change_proto_goTypes, + DependencyIndexes: file_network_launch_v1_param_change_proto_depIdxs, + MessageInfos: file_network_launch_v1_param_change_proto_msgTypes, + }.Build() + File_network_launch_v1_param_change_proto = out.File + file_network_launch_v1_param_change_proto_rawDesc = nil + file_network_launch_v1_param_change_proto_goTypes = nil + file_network_launch_v1_param_change_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/params.pulsar.go b/api/network/launch/v1/params.pulsar.go new file mode 100644 index 00000000..18ebaa83 --- /dev/null +++ b/api/network/launch/v1/params.pulsar.go @@ -0,0 +1,1656 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_Params_3_list)(nil) + +type _Params_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_Params_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Params_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Params_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_Params_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Params_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Params_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Params_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Params_3_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_Params_4_list)(nil) + +type _Params_4_list struct { + list *[]*v1beta1.Coin +} + +func (x *_Params_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Params_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Params_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_Params_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Params_4_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Params_4_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Params_4_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Params_4_list) IsValid() bool { + return x.list != nil +} + +var ( + md_Params protoreflect.MessageDescriptor + fd_Params_launchTimeRange protoreflect.FieldDescriptor + fd_Params_revertDelay protoreflect.FieldDescriptor + fd_Params_chainCreationFee protoreflect.FieldDescriptor + fd_Params_requestFee protoreflect.FieldDescriptor + fd_Params_maxMetadataLength protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_params_proto_init() + md_Params = File_network_launch_v1_params_proto.Messages().ByName("Params") + fd_Params_launchTimeRange = md_Params.Fields().ByName("launchTimeRange") + fd_Params_revertDelay = md_Params.Fields().ByName("revertDelay") + fd_Params_chainCreationFee = md_Params.Fields().ByName("chainCreationFee") + fd_Params_requestFee = md_Params.Fields().ByName("requestFee") + fd_Params_maxMetadataLength = md_Params.Fields().ByName("maxMetadataLength") +} + +var _ protoreflect.Message = (*fastReflection_Params)(nil) + +type fastReflection_Params Params + +func (x *Params) ProtoReflect() protoreflect.Message { + return (*fastReflection_Params)(x) +} + +func (x *Params) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_params_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) +} + +var _fastReflection_Params_messageType fastReflection_Params_messageType +var _ protoreflect.MessageType = fastReflection_Params_messageType{} + +type fastReflection_Params_messageType struct{} + +func (x fastReflection_Params_messageType) Zero() protoreflect.Message { + return (*fastReflection_Params)(nil) +} +func (x fastReflection_Params_messageType) New() protoreflect.Message { + return new(fastReflection_Params) +} +func (x fastReflection_Params_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Params) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Params) Type() protoreflect.MessageType { + return _fastReflection_Params_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Params) New() protoreflect.Message { + return new(fastReflection_Params) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Params) Interface() protoreflect.ProtoMessage { + return (*Params)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchTimeRange != nil { + value := protoreflect.ValueOfMessage(x.LaunchTimeRange.ProtoReflect()) + if !f(fd_Params_launchTimeRange, value) { + return + } + } + if x.RevertDelay != nil { + value := protoreflect.ValueOfMessage(x.RevertDelay.ProtoReflect()) + if !f(fd_Params_revertDelay, value) { + return + } + } + if len(x.ChainCreationFee) != 0 { + value := protoreflect.ValueOfList(&_Params_3_list{list: &x.ChainCreationFee}) + if !f(fd_Params_chainCreationFee, value) { + return + } + } + if len(x.RequestFee) != 0 { + value := protoreflect.ValueOfList(&_Params_4_list{list: &x.RequestFee}) + if !f(fd_Params_requestFee, value) { + return + } + } + if x.MaxMetadataLength != uint64(0) { + value := protoreflect.ValueOfUint64(x.MaxMetadataLength) + if !f(fd_Params_maxMetadataLength, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.Params.launchTimeRange": + return x.LaunchTimeRange != nil + case "network.launch.v1.Params.revertDelay": + return x.RevertDelay != nil + case "network.launch.v1.Params.chainCreationFee": + return len(x.ChainCreationFee) != 0 + case "network.launch.v1.Params.requestFee": + return len(x.RequestFee) != 0 + case "network.launch.v1.Params.maxMetadataLength": + return x.MaxMetadataLength != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Params")) + } + panic(fmt.Errorf("message network.launch.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.Params.launchTimeRange": + x.LaunchTimeRange = nil + case "network.launch.v1.Params.revertDelay": + x.RevertDelay = nil + case "network.launch.v1.Params.chainCreationFee": + x.ChainCreationFee = nil + case "network.launch.v1.Params.requestFee": + x.RequestFee = nil + case "network.launch.v1.Params.maxMetadataLength": + x.MaxMetadataLength = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Params")) + } + panic(fmt.Errorf("message network.launch.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.Params.launchTimeRange": + value := x.LaunchTimeRange + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.Params.revertDelay": + value := x.RevertDelay + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.Params.chainCreationFee": + if len(x.ChainCreationFee) == 0 { + return protoreflect.ValueOfList(&_Params_3_list{}) + } + listValue := &_Params_3_list{list: &x.ChainCreationFee} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.Params.requestFee": + if len(x.RequestFee) == 0 { + return protoreflect.ValueOfList(&_Params_4_list{}) + } + listValue := &_Params_4_list{list: &x.RequestFee} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.Params.maxMetadataLength": + value := x.MaxMetadataLength + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Params")) + } + panic(fmt.Errorf("message network.launch.v1.Params does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.Params.launchTimeRange": + x.LaunchTimeRange = value.Message().Interface().(*LaunchTimeRange) + case "network.launch.v1.Params.revertDelay": + x.RevertDelay = value.Message().Interface().(*durationpb.Duration) + case "network.launch.v1.Params.chainCreationFee": + lv := value.List() + clv := lv.(*_Params_3_list) + x.ChainCreationFee = *clv.list + case "network.launch.v1.Params.requestFee": + lv := value.List() + clv := lv.(*_Params_4_list) + x.RequestFee = *clv.list + case "network.launch.v1.Params.maxMetadataLength": + x.MaxMetadataLength = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Params")) + } + panic(fmt.Errorf("message network.launch.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Params.launchTimeRange": + if x.LaunchTimeRange == nil { + x.LaunchTimeRange = new(LaunchTimeRange) + } + return protoreflect.ValueOfMessage(x.LaunchTimeRange.ProtoReflect()) + case "network.launch.v1.Params.revertDelay": + if x.RevertDelay == nil { + x.RevertDelay = new(durationpb.Duration) + } + return protoreflect.ValueOfMessage(x.RevertDelay.ProtoReflect()) + case "network.launch.v1.Params.chainCreationFee": + if x.ChainCreationFee == nil { + x.ChainCreationFee = []*v1beta1.Coin{} + } + value := &_Params_3_list{list: &x.ChainCreationFee} + return protoreflect.ValueOfList(value) + case "network.launch.v1.Params.requestFee": + if x.RequestFee == nil { + x.RequestFee = []*v1beta1.Coin{} + } + value := &_Params_4_list{list: &x.RequestFee} + return protoreflect.ValueOfList(value) + case "network.launch.v1.Params.maxMetadataLength": + panic(fmt.Errorf("field maxMetadataLength of message network.launch.v1.Params is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Params")) + } + panic(fmt.Errorf("message network.launch.v1.Params does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Params.launchTimeRange": + m := new(LaunchTimeRange) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.Params.revertDelay": + m := new(durationpb.Duration) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.Params.chainCreationFee": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_Params_3_list{list: &list}) + case "network.launch.v1.Params.requestFee": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_Params_4_list{list: &list}) + case "network.launch.v1.Params.maxMetadataLength": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Params")) + } + panic(fmt.Errorf("message network.launch.v1.Params does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Params) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.Params", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Params) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Params) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchTimeRange != nil { + l = options.Size(x.LaunchTimeRange) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.RevertDelay != nil { + l = options.Size(x.RevertDelay) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.ChainCreationFee) > 0 { + for _, e := range x.ChainCreationFee { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.RequestFee) > 0 { + for _, e := range x.RequestFee { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.MaxMetadataLength != 0 { + n += 1 + runtime.Sov(uint64(x.MaxMetadataLength)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MaxMetadataLength != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.MaxMetadataLength)) + i-- + dAtA[i] = 0x28 + } + if len(x.RequestFee) > 0 { + for iNdEx := len(x.RequestFee) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.RequestFee[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + } + if len(x.ChainCreationFee) > 0 { + for iNdEx := len(x.ChainCreationFee) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ChainCreationFee[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if x.RevertDelay != nil { + encoded, err := options.Marshal(x.RevertDelay) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchTimeRange != nil { + encoded, err := options.Marshal(x.LaunchTimeRange) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchTimeRange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.LaunchTimeRange == nil { + x.LaunchTimeRange = &LaunchTimeRange{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.LaunchTimeRange); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RevertDelay", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.RevertDelay == nil { + x.RevertDelay = &durationpb.Duration{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RevertDelay); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ChainCreationFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ChainCreationFee = append(x.ChainCreationFee, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ChainCreationFee[len(x.ChainCreationFee)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequestFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.RequestFee = append(x.RequestFee, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RequestFee[len(x.RequestFee)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MaxMetadataLength", wireType) + } + x.MaxMetadataLength = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.MaxMetadataLength |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_LaunchTimeRange protoreflect.MessageDescriptor + fd_LaunchTimeRange_minLaunchTime protoreflect.FieldDescriptor + fd_LaunchTimeRange_maxLaunchTime protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_params_proto_init() + md_LaunchTimeRange = File_network_launch_v1_params_proto.Messages().ByName("LaunchTimeRange") + fd_LaunchTimeRange_minLaunchTime = md_LaunchTimeRange.Fields().ByName("minLaunchTime") + fd_LaunchTimeRange_maxLaunchTime = md_LaunchTimeRange.Fields().ByName("maxLaunchTime") +} + +var _ protoreflect.Message = (*fastReflection_LaunchTimeRange)(nil) + +type fastReflection_LaunchTimeRange LaunchTimeRange + +func (x *LaunchTimeRange) ProtoReflect() protoreflect.Message { + return (*fastReflection_LaunchTimeRange)(x) +} + +func (x *LaunchTimeRange) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_params_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) +} + +var _fastReflection_LaunchTimeRange_messageType fastReflection_LaunchTimeRange_messageType +var _ protoreflect.MessageType = fastReflection_LaunchTimeRange_messageType{} + +type fastReflection_LaunchTimeRange_messageType struct{} + +func (x fastReflection_LaunchTimeRange_messageType) Zero() protoreflect.Message { + return (*fastReflection_LaunchTimeRange)(nil) +} +func (x fastReflection_LaunchTimeRange_messageType) New() protoreflect.Message { + return new(fastReflection_LaunchTimeRange) +} +func (x fastReflection_LaunchTimeRange_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_LaunchTimeRange +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_LaunchTimeRange) Descriptor() protoreflect.MessageDescriptor { + return md_LaunchTimeRange +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_LaunchTimeRange) Type() protoreflect.MessageType { + return _fastReflection_LaunchTimeRange_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_LaunchTimeRange) New() protoreflect.Message { + return new(fastReflection_LaunchTimeRange) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_LaunchTimeRange) Interface() protoreflect.ProtoMessage { + return (*LaunchTimeRange)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_LaunchTimeRange) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.MinLaunchTime != nil { + value := protoreflect.ValueOfMessage(x.MinLaunchTime.ProtoReflect()) + if !f(fd_LaunchTimeRange_minLaunchTime, value) { + return + } + } + if x.MaxLaunchTime != nil { + value := protoreflect.ValueOfMessage(x.MaxLaunchTime.ProtoReflect()) + if !f(fd_LaunchTimeRange_maxLaunchTime, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_LaunchTimeRange) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.LaunchTimeRange.minLaunchTime": + return x.MinLaunchTime != nil + case "network.launch.v1.LaunchTimeRange.maxLaunchTime": + return x.MaxLaunchTime != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.LaunchTimeRange")) + } + panic(fmt.Errorf("message network.launch.v1.LaunchTimeRange does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchTimeRange) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.LaunchTimeRange.minLaunchTime": + x.MinLaunchTime = nil + case "network.launch.v1.LaunchTimeRange.maxLaunchTime": + x.MaxLaunchTime = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.LaunchTimeRange")) + } + panic(fmt.Errorf("message network.launch.v1.LaunchTimeRange does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_LaunchTimeRange) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.LaunchTimeRange.minLaunchTime": + value := x.MinLaunchTime + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.LaunchTimeRange.maxLaunchTime": + value := x.MaxLaunchTime + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.LaunchTimeRange")) + } + panic(fmt.Errorf("message network.launch.v1.LaunchTimeRange does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchTimeRange) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.LaunchTimeRange.minLaunchTime": + x.MinLaunchTime = value.Message().Interface().(*durationpb.Duration) + case "network.launch.v1.LaunchTimeRange.maxLaunchTime": + x.MaxLaunchTime = value.Message().Interface().(*durationpb.Duration) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.LaunchTimeRange")) + } + panic(fmt.Errorf("message network.launch.v1.LaunchTimeRange does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchTimeRange) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.LaunchTimeRange.minLaunchTime": + if x.MinLaunchTime == nil { + x.MinLaunchTime = new(durationpb.Duration) + } + return protoreflect.ValueOfMessage(x.MinLaunchTime.ProtoReflect()) + case "network.launch.v1.LaunchTimeRange.maxLaunchTime": + if x.MaxLaunchTime == nil { + x.MaxLaunchTime = new(durationpb.Duration) + } + return protoreflect.ValueOfMessage(x.MaxLaunchTime.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.LaunchTimeRange")) + } + panic(fmt.Errorf("message network.launch.v1.LaunchTimeRange does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_LaunchTimeRange) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.LaunchTimeRange.minLaunchTime": + m := new(durationpb.Duration) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.LaunchTimeRange.maxLaunchTime": + m := new(durationpb.Duration) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.LaunchTimeRange")) + } + panic(fmt.Errorf("message network.launch.v1.LaunchTimeRange does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_LaunchTimeRange) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.LaunchTimeRange", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_LaunchTimeRange) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchTimeRange) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_LaunchTimeRange) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_LaunchTimeRange) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*LaunchTimeRange) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.MinLaunchTime != nil { + l = options.Size(x.MinLaunchTime) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.MaxLaunchTime != nil { + l = options.Size(x.MaxLaunchTime) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*LaunchTimeRange) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MaxLaunchTime != nil { + encoded, err := options.Marshal(x.MaxLaunchTime) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.MinLaunchTime != nil { + encoded, err := options.Marshal(x.MinLaunchTime) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*LaunchTimeRange) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: LaunchTimeRange: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: LaunchTimeRange: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MinLaunchTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.MinLaunchTime == nil { + x.MinLaunchTime = &durationpb.Duration{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MinLaunchTime); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MaxLaunchTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.MaxLaunchTime == nil { + x.MaxLaunchTime = &durationpb.Duration{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MaxLaunchTime); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/params.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Params defines the parameters for the module. +type Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchTimeRange *LaunchTimeRange `protobuf:"bytes,1,opt,name=launchTimeRange,proto3" json:"launchTimeRange,omitempty"` + RevertDelay *durationpb.Duration `protobuf:"bytes,2,opt,name=revertDelay,proto3" json:"revertDelay,omitempty"` + ChainCreationFee []*v1beta1.Coin `protobuf:"bytes,3,rep,name=chainCreationFee,proto3" json:"chainCreationFee,omitempty"` + // requestFee is the fee for making a request to a chain + RequestFee []*v1beta1.Coin `protobuf:"bytes,4,rep,name=requestFee,proto3" json:"requestFee,omitempty"` + MaxMetadataLength uint64 `protobuf:"varint,5,opt,name=maxMetadataLength,proto3" json:"maxMetadataLength,omitempty"` +} + +func (x *Params) Reset() { + *x = Params{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_params_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Params) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Params) ProtoMessage() {} + +// Deprecated: Use Params.ProtoReflect.Descriptor instead. +func (*Params) Descriptor() ([]byte, []int) { + return file_network_launch_v1_params_proto_rawDescGZIP(), []int{0} +} + +func (x *Params) GetLaunchTimeRange() *LaunchTimeRange { + if x != nil { + return x.LaunchTimeRange + } + return nil +} + +func (x *Params) GetRevertDelay() *durationpb.Duration { + if x != nil { + return x.RevertDelay + } + return nil +} + +func (x *Params) GetChainCreationFee() []*v1beta1.Coin { + if x != nil { + return x.ChainCreationFee + } + return nil +} + +func (x *Params) GetRequestFee() []*v1beta1.Coin { + if x != nil { + return x.RequestFee + } + return nil +} + +func (x *Params) GetMaxMetadataLength() uint64 { + if x != nil { + return x.MaxMetadataLength + } + return 0 +} + +type LaunchTimeRange struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MinLaunchTime *durationpb.Duration `protobuf:"bytes,1,opt,name=minLaunchTime,proto3" json:"minLaunchTime,omitempty"` + MaxLaunchTime *durationpb.Duration `protobuf:"bytes,2,opt,name=maxLaunchTime,proto3" json:"maxLaunchTime,omitempty"` +} + +func (x *LaunchTimeRange) Reset() { + *x = LaunchTimeRange{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_params_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LaunchTimeRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LaunchTimeRange) ProtoMessage() {} + +// Deprecated: Use LaunchTimeRange.ProtoReflect.Descriptor instead. +func (*LaunchTimeRange) Descriptor() ([]byte, []int) { + return file_network_launch_v1_params_proto_rawDescGZIP(), []int{1} +} + +func (x *LaunchTimeRange) GetMinLaunchTime() *durationpb.Duration { + if x != nil { + return x.MinLaunchTime + } + return nil +} + +func (x *LaunchTimeRange) GetMaxLaunchTime() *durationpb.Duration { + if x != nil { + return x.MaxLaunchTime + } + return nil +} + +var File_network_launch_v1_params_proto protoreflect.FileDescriptor + +var file_network_launch_v1_params_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, + 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc7, 0x04, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x42, + 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, + 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, + 0x52, 0x0b, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0xb8, 0x01, + 0x0a, 0x10, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, + 0x65, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, + 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, + 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x10, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x0a, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x46, 0x65, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x5b, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, + 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x52, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x65, + 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6d, 0x61, + 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, + 0x20, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x17, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x78, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x0f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, + 0x01, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x49, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0x52, 0x0d, 0x6d, 0x61, + 0x78, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x42, 0xc4, 0x01, 0x0a, 0x15, + 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, + 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_params_proto_rawDescOnce sync.Once + file_network_launch_v1_params_proto_rawDescData = file_network_launch_v1_params_proto_rawDesc +) + +func file_network_launch_v1_params_proto_rawDescGZIP() []byte { + file_network_launch_v1_params_proto_rawDescOnce.Do(func() { + file_network_launch_v1_params_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_params_proto_rawDescData) + }) + return file_network_launch_v1_params_proto_rawDescData +} + +var file_network_launch_v1_params_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_launch_v1_params_proto_goTypes = []interface{}{ + (*Params)(nil), // 0: network.launch.v1.Params + (*LaunchTimeRange)(nil), // 1: network.launch.v1.LaunchTimeRange + (*durationpb.Duration)(nil), // 2: google.protobuf.Duration + (*v1beta1.Coin)(nil), // 3: cosmos.base.v1beta1.Coin +} +var file_network_launch_v1_params_proto_depIdxs = []int32{ + 1, // 0: network.launch.v1.Params.launchTimeRange:type_name -> network.launch.v1.LaunchTimeRange + 2, // 1: network.launch.v1.Params.revertDelay:type_name -> google.protobuf.Duration + 3, // 2: network.launch.v1.Params.chainCreationFee:type_name -> cosmos.base.v1beta1.Coin + 3, // 3: network.launch.v1.Params.requestFee:type_name -> cosmos.base.v1beta1.Coin + 2, // 4: network.launch.v1.LaunchTimeRange.minLaunchTime:type_name -> google.protobuf.Duration + 2, // 5: network.launch.v1.LaunchTimeRange.maxLaunchTime:type_name -> google.protobuf.Duration + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_network_launch_v1_params_proto_init() } +func file_network_launch_v1_params_proto_init() { + if File_network_launch_v1_params_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_params_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Params); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_params_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LaunchTimeRange); 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_network_launch_v1_params_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_params_proto_goTypes, + DependencyIndexes: file_network_launch_v1_params_proto_depIdxs, + MessageInfos: file_network_launch_v1_params_proto_msgTypes, + }.Build() + File_network_launch_v1_params_proto = out.File + file_network_launch_v1_params_proto_rawDesc = nil + file_network_launch_v1_params_proto_goTypes = nil + file_network_launch_v1_params_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/query.pulsar.go b/api/network/launch/v1/query.pulsar.go new file mode 100644 index 00000000..e768b277 --- /dev/null +++ b/api/network/launch/v1/query.pulsar.go @@ -0,0 +1,13282 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_QueryParamsRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryParamsRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryParamsRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsRequest)(nil) + +type fastReflection_QueryParamsRequest QueryParamsRequest + +func (x *QueryParamsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(x) +} + +func (x *QueryParamsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryParamsRequest_messageType fastReflection_QueryParamsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsRequest_messageType{} + +type fastReflection_QueryParamsRequest_messageType struct{} + +func (x fastReflection_QueryParamsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(nil) +} +func (x fastReflection_QueryParamsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} +func (x fastReflection_QueryParamsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsRequest) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryParamsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryParamsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryParamsResponse protoreflect.MessageDescriptor + fd_QueryParamsResponse_params protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryParamsResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryParamsResponse") + fd_QueryParamsResponse_params = md_QueryParamsResponse.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsResponse)(nil) + +type fastReflection_QueryParamsResponse QueryParamsResponse + +func (x *QueryParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(x) +} + +func (x *QueryParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryParamsResponse_messageType fastReflection_QueryParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsResponse_messageType{} + +type fastReflection_QueryParamsResponse_messageType struct{} + +func (x fastReflection_QueryParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(nil) +} +func (x fastReflection_QueryParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} +func (x fastReflection_QueryParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsResponse) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_QueryParamsResponse_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryParamsResponse.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryParamsResponse.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryParamsResponse.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryParamsResponse.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryParamsResponse.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryParamsResponse.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetChainRequest protoreflect.MessageDescriptor + fd_QueryGetChainRequest_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetChainRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryGetChainRequest") + fd_QueryGetChainRequest_launchID = md_QueryGetChainRequest.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetChainRequest)(nil) + +type fastReflection_QueryGetChainRequest QueryGetChainRequest + +func (x *QueryGetChainRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetChainRequest)(x) +} + +func (x *QueryGetChainRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[2] + 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) +} + +var _fastReflection_QueryGetChainRequest_messageType fastReflection_QueryGetChainRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetChainRequest_messageType{} + +type fastReflection_QueryGetChainRequest_messageType struct{} + +func (x fastReflection_QueryGetChainRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetChainRequest)(nil) +} +func (x fastReflection_QueryGetChainRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetChainRequest) +} +func (x fastReflection_QueryGetChainRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetChainRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetChainRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetChainRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetChainRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetChainRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetChainRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetChainRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetChainRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetChainRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetChainRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetChainRequest_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetChainRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainRequest.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetChainRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainRequest.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetChainRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetChainRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetChainRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainRequest.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetChainRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryGetChainRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetChainRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetChainRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetChainRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetChainRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetChainRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetChainRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetChainRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetChainRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetChainRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetChainRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetChainRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetChainRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetChainResponse protoreflect.MessageDescriptor + fd_QueryGetChainResponse_Chain protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetChainResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryGetChainResponse") + fd_QueryGetChainResponse_Chain = md_QueryGetChainResponse.Fields().ByName("Chain") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetChainResponse)(nil) + +type fastReflection_QueryGetChainResponse QueryGetChainResponse + +func (x *QueryGetChainResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetChainResponse)(x) +} + +func (x *QueryGetChainResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[3] + 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) +} + +var _fastReflection_QueryGetChainResponse_messageType fastReflection_QueryGetChainResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetChainResponse_messageType{} + +type fastReflection_QueryGetChainResponse_messageType struct{} + +func (x fastReflection_QueryGetChainResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetChainResponse)(nil) +} +func (x fastReflection_QueryGetChainResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetChainResponse) +} +func (x fastReflection_QueryGetChainResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetChainResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetChainResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetChainResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetChainResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetChainResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetChainResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetChainResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetChainResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetChainResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetChainResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Chain != nil { + value := protoreflect.ValueOfMessage(x.Chain.ProtoReflect()) + if !f(fd_QueryGetChainResponse_Chain, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetChainResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainResponse.Chain": + return x.Chain != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetChainResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainResponse.Chain": + x.Chain = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetChainResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetChainResponse.Chain": + value := x.Chain + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetChainResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainResponse.Chain": + x.Chain = value.Message().Interface().(*Chain) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetChainResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainResponse.Chain": + if x.Chain == nil { + x.Chain = new(Chain) + } + return protoreflect.ValueOfMessage(x.Chain.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetChainResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetChainResponse.Chain": + m := new(Chain) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetChainResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetChainResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetChainResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetChainResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetChainResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetChainResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetChainResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetChainResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Chain != nil { + l = options.Size(x.Chain) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetChainResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Chain != nil { + encoded, err := options.Marshal(x.Chain) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetChainResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetChainResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetChainResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Chain", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Chain == nil { + x.Chain = &Chain{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Chain); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllChainRequest protoreflect.MessageDescriptor + fd_QueryAllChainRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllChainRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryAllChainRequest") + fd_QueryAllChainRequest_pagination = md_QueryAllChainRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllChainRequest)(nil) + +type fastReflection_QueryAllChainRequest QueryAllChainRequest + +func (x *QueryAllChainRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllChainRequest)(x) +} + +func (x *QueryAllChainRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[4] + 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) +} + +var _fastReflection_QueryAllChainRequest_messageType fastReflection_QueryAllChainRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllChainRequest_messageType{} + +type fastReflection_QueryAllChainRequest_messageType struct{} + +func (x fastReflection_QueryAllChainRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllChainRequest)(nil) +} +func (x fastReflection_QueryAllChainRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllChainRequest) +} +func (x fastReflection_QueryAllChainRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllChainRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllChainRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllChainRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllChainRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllChainRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllChainRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllChainRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllChainRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllChainRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllChainRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllChainRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllChainRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllChainRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllChainRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllChainRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllChainRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllChainRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllChainRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllChainRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllChainRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllChainRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllChainRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllChainRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllChainRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllChainRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllChainRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllChainRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllChainRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllChainRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllChainResponse_1_list)(nil) + +type _QueryAllChainResponse_1_list struct { + list *[]*Chain +} + +func (x *_QueryAllChainResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllChainResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllChainResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Chain) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllChainResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Chain) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllChainResponse_1_list) AppendMutable() protoreflect.Value { + v := new(Chain) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllChainResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllChainResponse_1_list) NewElement() protoreflect.Value { + v := new(Chain) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllChainResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllChainResponse protoreflect.MessageDescriptor + fd_QueryAllChainResponse_Chain protoreflect.FieldDescriptor + fd_QueryAllChainResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllChainResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryAllChainResponse") + fd_QueryAllChainResponse_Chain = md_QueryAllChainResponse.Fields().ByName("Chain") + fd_QueryAllChainResponse_pagination = md_QueryAllChainResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllChainResponse)(nil) + +type fastReflection_QueryAllChainResponse QueryAllChainResponse + +func (x *QueryAllChainResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllChainResponse)(x) +} + +func (x *QueryAllChainResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[5] + 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) +} + +var _fastReflection_QueryAllChainResponse_messageType fastReflection_QueryAllChainResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllChainResponse_messageType{} + +type fastReflection_QueryAllChainResponse_messageType struct{} + +func (x fastReflection_QueryAllChainResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllChainResponse)(nil) +} +func (x fastReflection_QueryAllChainResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllChainResponse) +} +func (x fastReflection_QueryAllChainResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllChainResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllChainResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllChainResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllChainResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllChainResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllChainResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllChainResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllChainResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllChainResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllChainResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Chain) != 0 { + value := protoreflect.ValueOfList(&_QueryAllChainResponse_1_list{list: &x.Chain}) + if !f(fd_QueryAllChainResponse_Chain, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllChainResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllChainResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainResponse.Chain": + return len(x.Chain) != 0 + case "network.launch.v1.QueryAllChainResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllChainResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainResponse.Chain": + x.Chain = nil + case "network.launch.v1.QueryAllChainResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllChainResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllChainResponse.Chain": + if len(x.Chain) == 0 { + return protoreflect.ValueOfList(&_QueryAllChainResponse_1_list{}) + } + listValue := &_QueryAllChainResponse_1_list{list: &x.Chain} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.QueryAllChainResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllChainResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainResponse.Chain": + lv := value.List() + clv := lv.(*_QueryAllChainResponse_1_list) + x.Chain = *clv.list + case "network.launch.v1.QueryAllChainResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllChainResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainResponse.Chain": + if x.Chain == nil { + x.Chain = []*Chain{} + } + value := &_QueryAllChainResponse_1_list{list: &x.Chain} + return protoreflect.ValueOfList(value) + case "network.launch.v1.QueryAllChainResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllChainResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllChainResponse.Chain": + list := []*Chain{} + return protoreflect.ValueOfList(&_QueryAllChainResponse_1_list{list: &list}) + case "network.launch.v1.QueryAllChainResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllChainResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllChainResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllChainResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllChainResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllChainResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllChainResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllChainResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllChainResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Chain) > 0 { + for _, e := range x.Chain { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllChainResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Chain) > 0 { + for iNdEx := len(x.Chain) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Chain[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllChainResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllChainResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllChainResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Chain", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Chain = append(x.Chain, &Chain{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Chain[len(x.Chain)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetGenesisAccountRequest protoreflect.MessageDescriptor + fd_QueryGetGenesisAccountRequest_launchID protoreflect.FieldDescriptor + fd_QueryGetGenesisAccountRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetGenesisAccountRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryGetGenesisAccountRequest") + fd_QueryGetGenesisAccountRequest_launchID = md_QueryGetGenesisAccountRequest.Fields().ByName("launchID") + fd_QueryGetGenesisAccountRequest_address = md_QueryGetGenesisAccountRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetGenesisAccountRequest)(nil) + +type fastReflection_QueryGetGenesisAccountRequest QueryGetGenesisAccountRequest + +func (x *QueryGetGenesisAccountRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetGenesisAccountRequest)(x) +} + +func (x *QueryGetGenesisAccountRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryGetGenesisAccountRequest_messageType fastReflection_QueryGetGenesisAccountRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetGenesisAccountRequest_messageType{} + +type fastReflection_QueryGetGenesisAccountRequest_messageType struct{} + +func (x fastReflection_QueryGetGenesisAccountRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetGenesisAccountRequest)(nil) +} +func (x fastReflection_QueryGetGenesisAccountRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetGenesisAccountRequest) +} +func (x fastReflection_QueryGetGenesisAccountRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetGenesisAccountRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetGenesisAccountRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetGenesisAccountRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetGenesisAccountRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetGenesisAccountRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetGenesisAccountRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetGenesisAccountRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetGenesisAccountRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetGenesisAccountRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetGenesisAccountRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetGenesisAccountRequest_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetGenesisAccountRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetGenesisAccountRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryGetGenesisAccountRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisAccountRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryGetGenesisAccountRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetGenesisAccountRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetGenesisAccountRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryGetGenesisAccountRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisAccountRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryGetGenesisAccountRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisAccountRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryGetGenesisAccountRequest is not mutable")) + case "network.launch.v1.QueryGetGenesisAccountRequest.address": + panic(fmt.Errorf("field address of message network.launch.v1.QueryGetGenesisAccountRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetGenesisAccountRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryGetGenesisAccountRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetGenesisAccountRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetGenesisAccountRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetGenesisAccountRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisAccountRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetGenesisAccountRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetGenesisAccountRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetGenesisAccountRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetGenesisAccountRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetGenesisAccountRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetGenesisAccountRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetGenesisAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetGenesisAccountResponse protoreflect.MessageDescriptor + fd_QueryGetGenesisAccountResponse_genesisAccount protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetGenesisAccountResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryGetGenesisAccountResponse") + fd_QueryGetGenesisAccountResponse_genesisAccount = md_QueryGetGenesisAccountResponse.Fields().ByName("genesisAccount") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetGenesisAccountResponse)(nil) + +type fastReflection_QueryGetGenesisAccountResponse QueryGetGenesisAccountResponse + +func (x *QueryGetGenesisAccountResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetGenesisAccountResponse)(x) +} + +func (x *QueryGetGenesisAccountResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryGetGenesisAccountResponse_messageType fastReflection_QueryGetGenesisAccountResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetGenesisAccountResponse_messageType{} + +type fastReflection_QueryGetGenesisAccountResponse_messageType struct{} + +func (x fastReflection_QueryGetGenesisAccountResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetGenesisAccountResponse)(nil) +} +func (x fastReflection_QueryGetGenesisAccountResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetGenesisAccountResponse) +} +func (x fastReflection_QueryGetGenesisAccountResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetGenesisAccountResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetGenesisAccountResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetGenesisAccountResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetGenesisAccountResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetGenesisAccountResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetGenesisAccountResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetGenesisAccountResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetGenesisAccountResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetGenesisAccountResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetGenesisAccountResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.GenesisAccount != nil { + value := protoreflect.ValueOfMessage(x.GenesisAccount.ProtoReflect()) + if !f(fd_QueryGetGenesisAccountResponse_genesisAccount, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetGenesisAccountResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountResponse.genesisAccount": + return x.GenesisAccount != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisAccountResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountResponse.genesisAccount": + x.GenesisAccount = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetGenesisAccountResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetGenesisAccountResponse.genesisAccount": + value := x.GenesisAccount + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisAccountResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountResponse.genesisAccount": + x.GenesisAccount = value.Message().Interface().(*GenesisAccount) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisAccountResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountResponse.genesisAccount": + if x.GenesisAccount == nil { + x.GenesisAccount = new(GenesisAccount) + } + return protoreflect.ValueOfMessage(x.GenesisAccount.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetGenesisAccountResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisAccountResponse.genesisAccount": + m := new(GenesisAccount) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetGenesisAccountResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetGenesisAccountResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetGenesisAccountResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisAccountResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetGenesisAccountResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetGenesisAccountResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetGenesisAccountResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.GenesisAccount != nil { + l = options.Size(x.GenesisAccount) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetGenesisAccountResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.GenesisAccount != nil { + encoded, err := options.Marshal(x.GenesisAccount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetGenesisAccountResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetGenesisAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetGenesisAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.GenesisAccount == nil { + x.GenesisAccount = &GenesisAccount{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.GenesisAccount); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllGenesisAccountRequest protoreflect.MessageDescriptor + fd_QueryAllGenesisAccountRequest_launchID protoreflect.FieldDescriptor + fd_QueryAllGenesisAccountRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllGenesisAccountRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryAllGenesisAccountRequest") + fd_QueryAllGenesisAccountRequest_launchID = md_QueryAllGenesisAccountRequest.Fields().ByName("launchID") + fd_QueryAllGenesisAccountRequest_pagination = md_QueryAllGenesisAccountRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllGenesisAccountRequest)(nil) + +type fastReflection_QueryAllGenesisAccountRequest QueryAllGenesisAccountRequest + +func (x *QueryAllGenesisAccountRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllGenesisAccountRequest)(x) +} + +func (x *QueryAllGenesisAccountRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryAllGenesisAccountRequest_messageType fastReflection_QueryAllGenesisAccountRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllGenesisAccountRequest_messageType{} + +type fastReflection_QueryAllGenesisAccountRequest_messageType struct{} + +func (x fastReflection_QueryAllGenesisAccountRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllGenesisAccountRequest)(nil) +} +func (x fastReflection_QueryAllGenesisAccountRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllGenesisAccountRequest) +} +func (x fastReflection_QueryAllGenesisAccountRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllGenesisAccountRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllGenesisAccountRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllGenesisAccountRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllGenesisAccountRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllGenesisAccountRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllGenesisAccountRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllGenesisAccountRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllGenesisAccountRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllGenesisAccountRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllGenesisAccountRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryAllGenesisAccountRequest_launchID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllGenesisAccountRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllGenesisAccountRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryAllGenesisAccountRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisAccountRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryAllGenesisAccountRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllGenesisAccountRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllGenesisAccountRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryAllGenesisAccountRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisAccountRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryAllGenesisAccountRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisAccountRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + case "network.launch.v1.QueryAllGenesisAccountRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryAllGenesisAccountRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllGenesisAccountRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryAllGenesisAccountRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllGenesisAccountRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllGenesisAccountRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllGenesisAccountRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisAccountRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllGenesisAccountRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllGenesisAccountRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllGenesisAccountRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllGenesisAccountRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllGenesisAccountRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllGenesisAccountRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllGenesisAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllGenesisAccountResponse_1_list)(nil) + +type _QueryAllGenesisAccountResponse_1_list struct { + list *[]*GenesisAccount +} + +func (x *_QueryAllGenesisAccountResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllGenesisAccountResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllGenesisAccountResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*GenesisAccount) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllGenesisAccountResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*GenesisAccount) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllGenesisAccountResponse_1_list) AppendMutable() protoreflect.Value { + v := new(GenesisAccount) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllGenesisAccountResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllGenesisAccountResponse_1_list) NewElement() protoreflect.Value { + v := new(GenesisAccount) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllGenesisAccountResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllGenesisAccountResponse protoreflect.MessageDescriptor + fd_QueryAllGenesisAccountResponse_genesisAccount protoreflect.FieldDescriptor + fd_QueryAllGenesisAccountResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllGenesisAccountResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryAllGenesisAccountResponse") + fd_QueryAllGenesisAccountResponse_genesisAccount = md_QueryAllGenesisAccountResponse.Fields().ByName("genesisAccount") + fd_QueryAllGenesisAccountResponse_pagination = md_QueryAllGenesisAccountResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllGenesisAccountResponse)(nil) + +type fastReflection_QueryAllGenesisAccountResponse QueryAllGenesisAccountResponse + +func (x *QueryAllGenesisAccountResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllGenesisAccountResponse)(x) +} + +func (x *QueryAllGenesisAccountResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryAllGenesisAccountResponse_messageType fastReflection_QueryAllGenesisAccountResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllGenesisAccountResponse_messageType{} + +type fastReflection_QueryAllGenesisAccountResponse_messageType struct{} + +func (x fastReflection_QueryAllGenesisAccountResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllGenesisAccountResponse)(nil) +} +func (x fastReflection_QueryAllGenesisAccountResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllGenesisAccountResponse) +} +func (x fastReflection_QueryAllGenesisAccountResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllGenesisAccountResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllGenesisAccountResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllGenesisAccountResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllGenesisAccountResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllGenesisAccountResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllGenesisAccountResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllGenesisAccountResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllGenesisAccountResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllGenesisAccountResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllGenesisAccountResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.GenesisAccount) != 0 { + value := protoreflect.ValueOfList(&_QueryAllGenesisAccountResponse_1_list{list: &x.GenesisAccount}) + if !f(fd_QueryAllGenesisAccountResponse_genesisAccount, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllGenesisAccountResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllGenesisAccountResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountResponse.genesisAccount": + return len(x.GenesisAccount) != 0 + case "network.launch.v1.QueryAllGenesisAccountResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisAccountResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountResponse.genesisAccount": + x.GenesisAccount = nil + case "network.launch.v1.QueryAllGenesisAccountResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllGenesisAccountResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllGenesisAccountResponse.genesisAccount": + if len(x.GenesisAccount) == 0 { + return protoreflect.ValueOfList(&_QueryAllGenesisAccountResponse_1_list{}) + } + listValue := &_QueryAllGenesisAccountResponse_1_list{list: &x.GenesisAccount} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.QueryAllGenesisAccountResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisAccountResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountResponse.genesisAccount": + lv := value.List() + clv := lv.(*_QueryAllGenesisAccountResponse_1_list) + x.GenesisAccount = *clv.list + case "network.launch.v1.QueryAllGenesisAccountResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisAccountResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountResponse.genesisAccount": + if x.GenesisAccount == nil { + x.GenesisAccount = []*GenesisAccount{} + } + value := &_QueryAllGenesisAccountResponse_1_list{list: &x.GenesisAccount} + return protoreflect.ValueOfList(value) + case "network.launch.v1.QueryAllGenesisAccountResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllGenesisAccountResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisAccountResponse.genesisAccount": + list := []*GenesisAccount{} + return protoreflect.ValueOfList(&_QueryAllGenesisAccountResponse_1_list{list: &list}) + case "network.launch.v1.QueryAllGenesisAccountResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisAccountResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllGenesisAccountResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllGenesisAccountResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllGenesisAccountResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisAccountResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllGenesisAccountResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllGenesisAccountResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllGenesisAccountResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.GenesisAccount) > 0 { + for _, e := range x.GenesisAccount { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllGenesisAccountResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.GenesisAccount) > 0 { + for iNdEx := len(x.GenesisAccount) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.GenesisAccount[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllGenesisAccountResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllGenesisAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllGenesisAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisAccount = append(x.GenesisAccount, &GenesisAccount{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.GenesisAccount[len(x.GenesisAccount)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetGenesisValidatorRequest protoreflect.MessageDescriptor + fd_QueryGetGenesisValidatorRequest_launchID protoreflect.FieldDescriptor + fd_QueryGetGenesisValidatorRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetGenesisValidatorRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryGetGenesisValidatorRequest") + fd_QueryGetGenesisValidatorRequest_launchID = md_QueryGetGenesisValidatorRequest.Fields().ByName("launchID") + fd_QueryGetGenesisValidatorRequest_address = md_QueryGetGenesisValidatorRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetGenesisValidatorRequest)(nil) + +type fastReflection_QueryGetGenesisValidatorRequest QueryGetGenesisValidatorRequest + +func (x *QueryGetGenesisValidatorRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetGenesisValidatorRequest)(x) +} + +func (x *QueryGetGenesisValidatorRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryGetGenesisValidatorRequest_messageType fastReflection_QueryGetGenesisValidatorRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetGenesisValidatorRequest_messageType{} + +type fastReflection_QueryGetGenesisValidatorRequest_messageType struct{} + +func (x fastReflection_QueryGetGenesisValidatorRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetGenesisValidatorRequest)(nil) +} +func (x fastReflection_QueryGetGenesisValidatorRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetGenesisValidatorRequest) +} +func (x fastReflection_QueryGetGenesisValidatorRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetGenesisValidatorRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetGenesisValidatorRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetGenesisValidatorRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetGenesisValidatorRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetGenesisValidatorRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetGenesisValidatorRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetGenesisValidatorRequest_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetGenesisValidatorRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryGetGenesisValidatorRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryGetGenesisValidatorRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryGetGenesisValidatorRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryGetGenesisValidatorRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisValidatorRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryGetGenesisValidatorRequest is not mutable")) + case "network.launch.v1.QueryGetGenesisValidatorRequest.address": + panic(fmt.Errorf("field address of message network.launch.v1.QueryGetGenesisValidatorRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetGenesisValidatorRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryGetGenesisValidatorRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetGenesisValidatorRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetGenesisValidatorRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetGenesisValidatorRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisValidatorRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetGenesisValidatorRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetGenesisValidatorRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetGenesisValidatorRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetGenesisValidatorRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetGenesisValidatorRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetGenesisValidatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetGenesisValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetGenesisValidatorResponse protoreflect.MessageDescriptor + fd_QueryGetGenesisValidatorResponse_genesisValidator protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetGenesisValidatorResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryGetGenesisValidatorResponse") + fd_QueryGetGenesisValidatorResponse_genesisValidator = md_QueryGetGenesisValidatorResponse.Fields().ByName("genesisValidator") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetGenesisValidatorResponse)(nil) + +type fastReflection_QueryGetGenesisValidatorResponse QueryGetGenesisValidatorResponse + +func (x *QueryGetGenesisValidatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetGenesisValidatorResponse)(x) +} + +func (x *QueryGetGenesisValidatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[11] + 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) +} + +var _fastReflection_QueryGetGenesisValidatorResponse_messageType fastReflection_QueryGetGenesisValidatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetGenesisValidatorResponse_messageType{} + +type fastReflection_QueryGetGenesisValidatorResponse_messageType struct{} + +func (x fastReflection_QueryGetGenesisValidatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetGenesisValidatorResponse)(nil) +} +func (x fastReflection_QueryGetGenesisValidatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetGenesisValidatorResponse) +} +func (x fastReflection_QueryGetGenesisValidatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetGenesisValidatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetGenesisValidatorResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetGenesisValidatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetGenesisValidatorResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetGenesisValidatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetGenesisValidatorResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.GenesisValidator != nil { + value := protoreflect.ValueOfMessage(x.GenesisValidator.ProtoReflect()) + if !f(fd_QueryGetGenesisValidatorResponse_genesisValidator, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorResponse.genesisValidator": + return x.GenesisValidator != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorResponse.genesisValidator": + x.GenesisValidator = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorResponse.genesisValidator": + value := x.GenesisValidator + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorResponse.genesisValidator": + x.GenesisValidator = value.Message().Interface().(*GenesisValidator) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisValidatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorResponse.genesisValidator": + if x.GenesisValidator == nil { + x.GenesisValidator = new(GenesisValidator) + } + return protoreflect.ValueOfMessage(x.GenesisValidator.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetGenesisValidatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetGenesisValidatorResponse.genesisValidator": + m := new(GenesisValidator) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetGenesisValidatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetGenesisValidatorResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetGenesisValidatorResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetGenesisValidatorResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetGenesisValidatorResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetGenesisValidatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetGenesisValidatorResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.GenesisValidator != nil { + l = options.Size(x.GenesisValidator) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetGenesisValidatorResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.GenesisValidator != nil { + encoded, err := options.Marshal(x.GenesisValidator) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetGenesisValidatorResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetGenesisValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetGenesisValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisValidator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.GenesisValidator == nil { + x.GenesisValidator = &GenesisValidator{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.GenesisValidator); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllGenesisValidatorRequest protoreflect.MessageDescriptor + fd_QueryAllGenesisValidatorRequest_launchID protoreflect.FieldDescriptor + fd_QueryAllGenesisValidatorRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllGenesisValidatorRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryAllGenesisValidatorRequest") + fd_QueryAllGenesisValidatorRequest_launchID = md_QueryAllGenesisValidatorRequest.Fields().ByName("launchID") + fd_QueryAllGenesisValidatorRequest_pagination = md_QueryAllGenesisValidatorRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllGenesisValidatorRequest)(nil) + +type fastReflection_QueryAllGenesisValidatorRequest QueryAllGenesisValidatorRequest + +func (x *QueryAllGenesisValidatorRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllGenesisValidatorRequest)(x) +} + +func (x *QueryAllGenesisValidatorRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryAllGenesisValidatorRequest_messageType fastReflection_QueryAllGenesisValidatorRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllGenesisValidatorRequest_messageType{} + +type fastReflection_QueryAllGenesisValidatorRequest_messageType struct{} + +func (x fastReflection_QueryAllGenesisValidatorRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllGenesisValidatorRequest)(nil) +} +func (x fastReflection_QueryAllGenesisValidatorRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllGenesisValidatorRequest) +} +func (x fastReflection_QueryAllGenesisValidatorRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllGenesisValidatorRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllGenesisValidatorRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllGenesisValidatorRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllGenesisValidatorRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllGenesisValidatorRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllGenesisValidatorRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryAllGenesisValidatorRequest_launchID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllGenesisValidatorRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryAllGenesisValidatorRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryAllGenesisValidatorRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryAllGenesisValidatorRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryAllGenesisValidatorRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisValidatorRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + case "network.launch.v1.QueryAllGenesisValidatorRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryAllGenesisValidatorRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllGenesisValidatorRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryAllGenesisValidatorRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllGenesisValidatorRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllGenesisValidatorRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllGenesisValidatorRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisValidatorRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllGenesisValidatorRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllGenesisValidatorRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllGenesisValidatorRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllGenesisValidatorRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllGenesisValidatorRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllGenesisValidatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllGenesisValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllGenesisValidatorResponse_1_list)(nil) + +type _QueryAllGenesisValidatorResponse_1_list struct { + list *[]*GenesisValidator +} + +func (x *_QueryAllGenesisValidatorResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllGenesisValidatorResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllGenesisValidatorResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*GenesisValidator) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllGenesisValidatorResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*GenesisValidator) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllGenesisValidatorResponse_1_list) AppendMutable() protoreflect.Value { + v := new(GenesisValidator) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllGenesisValidatorResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllGenesisValidatorResponse_1_list) NewElement() protoreflect.Value { + v := new(GenesisValidator) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllGenesisValidatorResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllGenesisValidatorResponse protoreflect.MessageDescriptor + fd_QueryAllGenesisValidatorResponse_genesisValidator protoreflect.FieldDescriptor + fd_QueryAllGenesisValidatorResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllGenesisValidatorResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryAllGenesisValidatorResponse") + fd_QueryAllGenesisValidatorResponse_genesisValidator = md_QueryAllGenesisValidatorResponse.Fields().ByName("genesisValidator") + fd_QueryAllGenesisValidatorResponse_pagination = md_QueryAllGenesisValidatorResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllGenesisValidatorResponse)(nil) + +type fastReflection_QueryAllGenesisValidatorResponse QueryAllGenesisValidatorResponse + +func (x *QueryAllGenesisValidatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllGenesisValidatorResponse)(x) +} + +func (x *QueryAllGenesisValidatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[13] + 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) +} + +var _fastReflection_QueryAllGenesisValidatorResponse_messageType fastReflection_QueryAllGenesisValidatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllGenesisValidatorResponse_messageType{} + +type fastReflection_QueryAllGenesisValidatorResponse_messageType struct{} + +func (x fastReflection_QueryAllGenesisValidatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllGenesisValidatorResponse)(nil) +} +func (x fastReflection_QueryAllGenesisValidatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllGenesisValidatorResponse) +} +func (x fastReflection_QueryAllGenesisValidatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllGenesisValidatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllGenesisValidatorResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllGenesisValidatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllGenesisValidatorResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllGenesisValidatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllGenesisValidatorResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.GenesisValidator) != 0 { + value := protoreflect.ValueOfList(&_QueryAllGenesisValidatorResponse_1_list{list: &x.GenesisValidator}) + if !f(fd_QueryAllGenesisValidatorResponse_genesisValidator, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllGenesisValidatorResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorResponse.genesisValidator": + return len(x.GenesisValidator) != 0 + case "network.launch.v1.QueryAllGenesisValidatorResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorResponse.genesisValidator": + x.GenesisValidator = nil + case "network.launch.v1.QueryAllGenesisValidatorResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorResponse.genesisValidator": + if len(x.GenesisValidator) == 0 { + return protoreflect.ValueOfList(&_QueryAllGenesisValidatorResponse_1_list{}) + } + listValue := &_QueryAllGenesisValidatorResponse_1_list{list: &x.GenesisValidator} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.QueryAllGenesisValidatorResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorResponse.genesisValidator": + lv := value.List() + clv := lv.(*_QueryAllGenesisValidatorResponse_1_list) + x.GenesisValidator = *clv.list + case "network.launch.v1.QueryAllGenesisValidatorResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisValidatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorResponse.genesisValidator": + if x.GenesisValidator == nil { + x.GenesisValidator = []*GenesisValidator{} + } + value := &_QueryAllGenesisValidatorResponse_1_list{list: &x.GenesisValidator} + return protoreflect.ValueOfList(value) + case "network.launch.v1.QueryAllGenesisValidatorResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllGenesisValidatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllGenesisValidatorResponse.genesisValidator": + list := []*GenesisValidator{} + return protoreflect.ValueOfList(&_QueryAllGenesisValidatorResponse_1_list{list: &list}) + case "network.launch.v1.QueryAllGenesisValidatorResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllGenesisValidatorResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllGenesisValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllGenesisValidatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllGenesisValidatorResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllGenesisValidatorResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllGenesisValidatorResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllGenesisValidatorResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllGenesisValidatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllGenesisValidatorResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.GenesisValidator) > 0 { + for _, e := range x.GenesisValidator { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllGenesisValidatorResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.GenesisValidator) > 0 { + for iNdEx := len(x.GenesisValidator) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.GenesisValidator[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllGenesisValidatorResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllGenesisValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllGenesisValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisValidator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisValidator = append(x.GenesisValidator, &GenesisValidator{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.GenesisValidator[len(x.GenesisValidator)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetVestingAccountRequest protoreflect.MessageDescriptor + fd_QueryGetVestingAccountRequest_launchID protoreflect.FieldDescriptor + fd_QueryGetVestingAccountRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetVestingAccountRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryGetVestingAccountRequest") + fd_QueryGetVestingAccountRequest_launchID = md_QueryGetVestingAccountRequest.Fields().ByName("launchID") + fd_QueryGetVestingAccountRequest_address = md_QueryGetVestingAccountRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetVestingAccountRequest)(nil) + +type fastReflection_QueryGetVestingAccountRequest QueryGetVestingAccountRequest + +func (x *QueryGetVestingAccountRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetVestingAccountRequest)(x) +} + +func (x *QueryGetVestingAccountRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[14] + 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) +} + +var _fastReflection_QueryGetVestingAccountRequest_messageType fastReflection_QueryGetVestingAccountRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetVestingAccountRequest_messageType{} + +type fastReflection_QueryGetVestingAccountRequest_messageType struct{} + +func (x fastReflection_QueryGetVestingAccountRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetVestingAccountRequest)(nil) +} +func (x fastReflection_QueryGetVestingAccountRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetVestingAccountRequest) +} +func (x fastReflection_QueryGetVestingAccountRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetVestingAccountRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetVestingAccountRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetVestingAccountRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetVestingAccountRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetVestingAccountRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetVestingAccountRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetVestingAccountRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetVestingAccountRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetVestingAccountRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetVestingAccountRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetVestingAccountRequest_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetVestingAccountRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetVestingAccountRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryGetVestingAccountRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVestingAccountRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryGetVestingAccountRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetVestingAccountRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetVestingAccountRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryGetVestingAccountRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVestingAccountRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryGetVestingAccountRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVestingAccountRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryGetVestingAccountRequest is not mutable")) + case "network.launch.v1.QueryGetVestingAccountRequest.address": + panic(fmt.Errorf("field address of message network.launch.v1.QueryGetVestingAccountRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetVestingAccountRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryGetVestingAccountRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetVestingAccountRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetVestingAccountRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetVestingAccountRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVestingAccountRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetVestingAccountRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetVestingAccountRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetVestingAccountRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetVestingAccountRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetVestingAccountRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetVestingAccountRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetVestingAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetVestingAccountResponse protoreflect.MessageDescriptor + fd_QueryGetVestingAccountResponse_vestingAccount protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetVestingAccountResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryGetVestingAccountResponse") + fd_QueryGetVestingAccountResponse_vestingAccount = md_QueryGetVestingAccountResponse.Fields().ByName("vestingAccount") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetVestingAccountResponse)(nil) + +type fastReflection_QueryGetVestingAccountResponse QueryGetVestingAccountResponse + +func (x *QueryGetVestingAccountResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetVestingAccountResponse)(x) +} + +func (x *QueryGetVestingAccountResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[15] + 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) +} + +var _fastReflection_QueryGetVestingAccountResponse_messageType fastReflection_QueryGetVestingAccountResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetVestingAccountResponse_messageType{} + +type fastReflection_QueryGetVestingAccountResponse_messageType struct{} + +func (x fastReflection_QueryGetVestingAccountResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetVestingAccountResponse)(nil) +} +func (x fastReflection_QueryGetVestingAccountResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetVestingAccountResponse) +} +func (x fastReflection_QueryGetVestingAccountResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetVestingAccountResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetVestingAccountResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetVestingAccountResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetVestingAccountResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetVestingAccountResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetVestingAccountResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetVestingAccountResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetVestingAccountResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetVestingAccountResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetVestingAccountResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.VestingAccount != nil { + value := protoreflect.ValueOfMessage(x.VestingAccount.ProtoReflect()) + if !f(fd_QueryGetVestingAccountResponse_vestingAccount, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetVestingAccountResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountResponse.vestingAccount": + return x.VestingAccount != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVestingAccountResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountResponse.vestingAccount": + x.VestingAccount = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetVestingAccountResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetVestingAccountResponse.vestingAccount": + value := x.VestingAccount + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVestingAccountResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountResponse.vestingAccount": + x.VestingAccount = value.Message().Interface().(*VestingAccount) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVestingAccountResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountResponse.vestingAccount": + if x.VestingAccount == nil { + x.VestingAccount = new(VestingAccount) + } + return protoreflect.ValueOfMessage(x.VestingAccount.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetVestingAccountResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetVestingAccountResponse.vestingAccount": + m := new(VestingAccount) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetVestingAccountResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetVestingAccountResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetVestingAccountResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVestingAccountResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetVestingAccountResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetVestingAccountResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetVestingAccountResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.VestingAccount != nil { + l = options.Size(x.VestingAccount) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetVestingAccountResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.VestingAccount != nil { + encoded, err := options.Marshal(x.VestingAccount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetVestingAccountResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetVestingAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetVestingAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VestingAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.VestingAccount == nil { + x.VestingAccount = &VestingAccount{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VestingAccount); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllVestingAccountRequest protoreflect.MessageDescriptor + fd_QueryAllVestingAccountRequest_launchID protoreflect.FieldDescriptor + fd_QueryAllVestingAccountRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllVestingAccountRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryAllVestingAccountRequest") + fd_QueryAllVestingAccountRequest_launchID = md_QueryAllVestingAccountRequest.Fields().ByName("launchID") + fd_QueryAllVestingAccountRequest_pagination = md_QueryAllVestingAccountRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllVestingAccountRequest)(nil) + +type fastReflection_QueryAllVestingAccountRequest QueryAllVestingAccountRequest + +func (x *QueryAllVestingAccountRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllVestingAccountRequest)(x) +} + +func (x *QueryAllVestingAccountRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[16] + 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) +} + +var _fastReflection_QueryAllVestingAccountRequest_messageType fastReflection_QueryAllVestingAccountRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllVestingAccountRequest_messageType{} + +type fastReflection_QueryAllVestingAccountRequest_messageType struct{} + +func (x fastReflection_QueryAllVestingAccountRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllVestingAccountRequest)(nil) +} +func (x fastReflection_QueryAllVestingAccountRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllVestingAccountRequest) +} +func (x fastReflection_QueryAllVestingAccountRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllVestingAccountRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllVestingAccountRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllVestingAccountRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllVestingAccountRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllVestingAccountRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllVestingAccountRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllVestingAccountRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllVestingAccountRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllVestingAccountRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllVestingAccountRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryAllVestingAccountRequest_launchID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllVestingAccountRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllVestingAccountRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryAllVestingAccountRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllVestingAccountRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryAllVestingAccountRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllVestingAccountRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllVestingAccountRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryAllVestingAccountRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllVestingAccountRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryAllVestingAccountRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllVestingAccountRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + case "network.launch.v1.QueryAllVestingAccountRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryAllVestingAccountRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllVestingAccountRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryAllVestingAccountRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllVestingAccountRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllVestingAccountRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllVestingAccountRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllVestingAccountRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllVestingAccountRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllVestingAccountRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllVestingAccountRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllVestingAccountRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllVestingAccountRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllVestingAccountRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllVestingAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllVestingAccountResponse_1_list)(nil) + +type _QueryAllVestingAccountResponse_1_list struct { + list *[]*VestingAccount +} + +func (x *_QueryAllVestingAccountResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllVestingAccountResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllVestingAccountResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*VestingAccount) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllVestingAccountResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*VestingAccount) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllVestingAccountResponse_1_list) AppendMutable() protoreflect.Value { + v := new(VestingAccount) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllVestingAccountResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllVestingAccountResponse_1_list) NewElement() protoreflect.Value { + v := new(VestingAccount) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllVestingAccountResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllVestingAccountResponse protoreflect.MessageDescriptor + fd_QueryAllVestingAccountResponse_vestingAccount protoreflect.FieldDescriptor + fd_QueryAllVestingAccountResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllVestingAccountResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryAllVestingAccountResponse") + fd_QueryAllVestingAccountResponse_vestingAccount = md_QueryAllVestingAccountResponse.Fields().ByName("vestingAccount") + fd_QueryAllVestingAccountResponse_pagination = md_QueryAllVestingAccountResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllVestingAccountResponse)(nil) + +type fastReflection_QueryAllVestingAccountResponse QueryAllVestingAccountResponse + +func (x *QueryAllVestingAccountResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllVestingAccountResponse)(x) +} + +func (x *QueryAllVestingAccountResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryAllVestingAccountResponse_messageType fastReflection_QueryAllVestingAccountResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllVestingAccountResponse_messageType{} + +type fastReflection_QueryAllVestingAccountResponse_messageType struct{} + +func (x fastReflection_QueryAllVestingAccountResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllVestingAccountResponse)(nil) +} +func (x fastReflection_QueryAllVestingAccountResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllVestingAccountResponse) +} +func (x fastReflection_QueryAllVestingAccountResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllVestingAccountResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllVestingAccountResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllVestingAccountResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllVestingAccountResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllVestingAccountResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllVestingAccountResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllVestingAccountResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllVestingAccountResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllVestingAccountResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllVestingAccountResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.VestingAccount) != 0 { + value := protoreflect.ValueOfList(&_QueryAllVestingAccountResponse_1_list{list: &x.VestingAccount}) + if !f(fd_QueryAllVestingAccountResponse_vestingAccount, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllVestingAccountResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllVestingAccountResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountResponse.vestingAccount": + return len(x.VestingAccount) != 0 + case "network.launch.v1.QueryAllVestingAccountResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllVestingAccountResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountResponse.vestingAccount": + x.VestingAccount = nil + case "network.launch.v1.QueryAllVestingAccountResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllVestingAccountResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllVestingAccountResponse.vestingAccount": + if len(x.VestingAccount) == 0 { + return protoreflect.ValueOfList(&_QueryAllVestingAccountResponse_1_list{}) + } + listValue := &_QueryAllVestingAccountResponse_1_list{list: &x.VestingAccount} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.QueryAllVestingAccountResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllVestingAccountResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountResponse.vestingAccount": + lv := value.List() + clv := lv.(*_QueryAllVestingAccountResponse_1_list) + x.VestingAccount = *clv.list + case "network.launch.v1.QueryAllVestingAccountResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllVestingAccountResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountResponse.vestingAccount": + if x.VestingAccount == nil { + x.VestingAccount = []*VestingAccount{} + } + value := &_QueryAllVestingAccountResponse_1_list{list: &x.VestingAccount} + return protoreflect.ValueOfList(value) + case "network.launch.v1.QueryAllVestingAccountResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllVestingAccountResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllVestingAccountResponse.vestingAccount": + list := []*VestingAccount{} + return protoreflect.ValueOfList(&_QueryAllVestingAccountResponse_1_list{list: &list}) + case "network.launch.v1.QueryAllVestingAccountResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllVestingAccountResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllVestingAccountResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllVestingAccountResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllVestingAccountResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllVestingAccountResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllVestingAccountResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllVestingAccountResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllVestingAccountResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllVestingAccountResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.VestingAccount) > 0 { + for _, e := range x.VestingAccount { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllVestingAccountResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.VestingAccount) > 0 { + for iNdEx := len(x.VestingAccount) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.VestingAccount[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllVestingAccountResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllVestingAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllVestingAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VestingAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.VestingAccount = append(x.VestingAccount, &VestingAccount{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VestingAccount[len(x.VestingAccount)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetRequestRequest protoreflect.MessageDescriptor + fd_QueryGetRequestRequest_launchID protoreflect.FieldDescriptor + fd_QueryGetRequestRequest_requestID protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetRequestRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryGetRequestRequest") + fd_QueryGetRequestRequest_launchID = md_QueryGetRequestRequest.Fields().ByName("launchID") + fd_QueryGetRequestRequest_requestID = md_QueryGetRequestRequest.Fields().ByName("requestID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetRequestRequest)(nil) + +type fastReflection_QueryGetRequestRequest QueryGetRequestRequest + +func (x *QueryGetRequestRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetRequestRequest)(x) +} + +func (x *QueryGetRequestRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[18] + 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) +} + +var _fastReflection_QueryGetRequestRequest_messageType fastReflection_QueryGetRequestRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetRequestRequest_messageType{} + +type fastReflection_QueryGetRequestRequest_messageType struct{} + +func (x fastReflection_QueryGetRequestRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetRequestRequest)(nil) +} +func (x fastReflection_QueryGetRequestRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetRequestRequest) +} +func (x fastReflection_QueryGetRequestRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetRequestRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetRequestRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetRequestRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetRequestRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetRequestRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetRequestRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetRequestRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetRequestRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetRequestRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetRequestRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetRequestRequest_launchID, value) { + return + } + } + if x.RequestID != uint64(0) { + value := protoreflect.ValueOfUint64(x.RequestID) + if !f(fd_QueryGetRequestRequest_requestID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetRequestRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryGetRequestRequest.requestID": + return x.RequestID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRequestRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryGetRequestRequest.requestID": + x.RequestID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetRequestRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetRequestRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryGetRequestRequest.requestID": + value := x.RequestID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRequestRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryGetRequestRequest.requestID": + x.RequestID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRequestRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryGetRequestRequest is not mutable")) + case "network.launch.v1.QueryGetRequestRequest.requestID": + panic(fmt.Errorf("field requestID of message network.launch.v1.QueryGetRequestRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetRequestRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryGetRequestRequest.requestID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetRequestRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetRequestRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetRequestRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRequestRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetRequestRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetRequestRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetRequestRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.RequestID != 0 { + n += 1 + runtime.Sov(uint64(x.RequestID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetRequestRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.RequestID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RequestID)) + i-- + dAtA[i] = 0x10 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetRequestRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetRequestRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetRequestRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequestID", wireType) + } + x.RequestID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.RequestID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetRequestResponse protoreflect.MessageDescriptor + fd_QueryGetRequestResponse_Request protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryGetRequestResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryGetRequestResponse") + fd_QueryGetRequestResponse_Request = md_QueryGetRequestResponse.Fields().ByName("Request") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetRequestResponse)(nil) + +type fastReflection_QueryGetRequestResponse QueryGetRequestResponse + +func (x *QueryGetRequestResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetRequestResponse)(x) +} + +func (x *QueryGetRequestResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[19] + 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) +} + +var _fastReflection_QueryGetRequestResponse_messageType fastReflection_QueryGetRequestResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetRequestResponse_messageType{} + +type fastReflection_QueryGetRequestResponse_messageType struct{} + +func (x fastReflection_QueryGetRequestResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetRequestResponse)(nil) +} +func (x fastReflection_QueryGetRequestResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetRequestResponse) +} +func (x fastReflection_QueryGetRequestResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetRequestResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetRequestResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetRequestResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetRequestResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetRequestResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetRequestResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetRequestResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetRequestResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetRequestResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetRequestResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Request != nil { + value := protoreflect.ValueOfMessage(x.Request.ProtoReflect()) + if !f(fd_QueryGetRequestResponse_Request, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetRequestResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestResponse.Request": + return x.Request != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRequestResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestResponse.Request": + x.Request = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetRequestResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryGetRequestResponse.Request": + value := x.Request + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRequestResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestResponse.Request": + x.Request = value.Message().Interface().(*Request) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRequestResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestResponse.Request": + if x.Request == nil { + x.Request = new(Request) + } + return protoreflect.ValueOfMessage(x.Request.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetRequestResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryGetRequestResponse.Request": + m := new(Request) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryGetRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryGetRequestResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetRequestResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryGetRequestResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetRequestResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRequestResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetRequestResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetRequestResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetRequestResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Request != nil { + l = options.Size(x.Request) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetRequestResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Request != nil { + encoded, err := options.Marshal(x.Request) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetRequestResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetRequestResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetRequestResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Request", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Request == nil { + x.Request = &Request{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Request); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllRequestRequest protoreflect.MessageDescriptor + fd_QueryAllRequestRequest_launchID protoreflect.FieldDescriptor + fd_QueryAllRequestRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllRequestRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryAllRequestRequest") + fd_QueryAllRequestRequest_launchID = md_QueryAllRequestRequest.Fields().ByName("launchID") + fd_QueryAllRequestRequest_pagination = md_QueryAllRequestRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllRequestRequest)(nil) + +type fastReflection_QueryAllRequestRequest QueryAllRequestRequest + +func (x *QueryAllRequestRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllRequestRequest)(x) +} + +func (x *QueryAllRequestRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[20] + 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) +} + +var _fastReflection_QueryAllRequestRequest_messageType fastReflection_QueryAllRequestRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllRequestRequest_messageType{} + +type fastReflection_QueryAllRequestRequest_messageType struct{} + +func (x fastReflection_QueryAllRequestRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllRequestRequest)(nil) +} +func (x fastReflection_QueryAllRequestRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllRequestRequest) +} +func (x fastReflection_QueryAllRequestRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllRequestRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllRequestRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllRequestRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllRequestRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllRequestRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllRequestRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllRequestRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllRequestRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllRequestRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllRequestRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryAllRequestRequest_launchID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllRequestRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllRequestRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryAllRequestRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRequestRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryAllRequestRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllRequestRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllRequestRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryAllRequestRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRequestRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryAllRequestRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRequestRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + case "network.launch.v1.QueryAllRequestRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryAllRequestRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllRequestRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryAllRequestRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllRequestRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllRequestRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllRequestRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRequestRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllRequestRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllRequestRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllRequestRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllRequestRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllRequestRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllRequestRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllRequestRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllRequestResponse_1_list)(nil) + +type _QueryAllRequestResponse_1_list struct { + list *[]*Request +} + +func (x *_QueryAllRequestResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllRequestResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllRequestResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Request) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllRequestResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Request) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllRequestResponse_1_list) AppendMutable() protoreflect.Value { + v := new(Request) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllRequestResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllRequestResponse_1_list) NewElement() protoreflect.Value { + v := new(Request) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllRequestResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllRequestResponse protoreflect.MessageDescriptor + fd_QueryAllRequestResponse_Request protoreflect.FieldDescriptor + fd_QueryAllRequestResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllRequestResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryAllRequestResponse") + fd_QueryAllRequestResponse_Request = md_QueryAllRequestResponse.Fields().ByName("Request") + fd_QueryAllRequestResponse_pagination = md_QueryAllRequestResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllRequestResponse)(nil) + +type fastReflection_QueryAllRequestResponse QueryAllRequestResponse + +func (x *QueryAllRequestResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllRequestResponse)(x) +} + +func (x *QueryAllRequestResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_proto_msgTypes[21] + 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) +} + +var _fastReflection_QueryAllRequestResponse_messageType fastReflection_QueryAllRequestResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllRequestResponse_messageType{} + +type fastReflection_QueryAllRequestResponse_messageType struct{} + +func (x fastReflection_QueryAllRequestResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllRequestResponse)(nil) +} +func (x fastReflection_QueryAllRequestResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllRequestResponse) +} +func (x fastReflection_QueryAllRequestResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllRequestResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllRequestResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllRequestResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllRequestResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllRequestResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllRequestResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllRequestResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllRequestResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllRequestResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllRequestResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Request) != 0 { + value := protoreflect.ValueOfList(&_QueryAllRequestResponse_1_list{list: &x.Request}) + if !f(fd_QueryAllRequestResponse_Request, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllRequestResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllRequestResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestResponse.Request": + return len(x.Request) != 0 + case "network.launch.v1.QueryAllRequestResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRequestResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestResponse.Request": + x.Request = nil + case "network.launch.v1.QueryAllRequestResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllRequestResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllRequestResponse.Request": + if len(x.Request) == 0 { + return protoreflect.ValueOfList(&_QueryAllRequestResponse_1_list{}) + } + listValue := &_QueryAllRequestResponse_1_list{list: &x.Request} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.QueryAllRequestResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRequestResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestResponse.Request": + lv := value.List() + clv := lv.(*_QueryAllRequestResponse_1_list) + x.Request = *clv.list + case "network.launch.v1.QueryAllRequestResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRequestResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestResponse.Request": + if x.Request == nil { + x.Request = []*Request{} + } + value := &_QueryAllRequestResponse_1_list{list: &x.Request} + return protoreflect.ValueOfList(value) + case "network.launch.v1.QueryAllRequestResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllRequestResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllRequestResponse.Request": + list := []*Request{} + return protoreflect.ValueOfList(&_QueryAllRequestResponse_1_list{list: &list}) + case "network.launch.v1.QueryAllRequestResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllRequestResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllRequestResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllRequestResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllRequestResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRequestResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllRequestResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllRequestResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllRequestResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Request) > 0 { + for _, e := range x.Request { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllRequestResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Request) > 0 { + for iNdEx := len(x.Request) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Request[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllRequestResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllRequestResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllRequestResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Request", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Request = append(x.Request, &Request{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Request[len(x.Request)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllParamChangeRequest protoreflect.MessageDescriptor + fd_QueryAllParamChangeRequest_launchID protoreflect.FieldDescriptor + fd_QueryAllParamChangeRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllParamChangeRequest = File_network_launch_v1_query_proto.Messages().ByName("QueryAllParamChangeRequest") + fd_QueryAllParamChangeRequest_launchID = md_QueryAllParamChangeRequest.Fields().ByName("launchID") + fd_QueryAllParamChangeRequest_pagination = md_QueryAllParamChangeRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllParamChangeRequest)(nil) + +type fastReflection_QueryAllParamChangeRequest QueryAllParamChangeRequest + +func (x *QueryAllParamChangeRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllParamChangeRequest)(x) +} + +func (x *QueryAllParamChangeRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryAllParamChangeRequest_messageType fastReflection_QueryAllParamChangeRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllParamChangeRequest_messageType{} + +type fastReflection_QueryAllParamChangeRequest_messageType struct{} + +func (x fastReflection_QueryAllParamChangeRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllParamChangeRequest)(nil) +} +func (x fastReflection_QueryAllParamChangeRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllParamChangeRequest) +} +func (x fastReflection_QueryAllParamChangeRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllParamChangeRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllParamChangeRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllParamChangeRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllParamChangeRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllParamChangeRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllParamChangeRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllParamChangeRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllParamChangeRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllParamChangeRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllParamChangeRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryAllParamChangeRequest_launchID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllParamChangeRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllParamChangeRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.QueryAllParamChangeRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllParamChangeRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.QueryAllParamChangeRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllParamChangeRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllParamChangeRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.QueryAllParamChangeRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllParamChangeRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.QueryAllParamChangeRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllParamChangeRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + case "network.launch.v1.QueryAllParamChangeRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.QueryAllParamChangeRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllParamChangeRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.QueryAllParamChangeRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeRequest")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllParamChangeRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllParamChangeRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllParamChangeRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllParamChangeRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllParamChangeRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllParamChangeRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllParamChangeRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllParamChangeRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllParamChangeRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllParamChangeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllParamChangeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllParamChangeResponse_1_list)(nil) + +type _QueryAllParamChangeResponse_1_list struct { + list *[]*ParamChange +} + +func (x *_QueryAllParamChangeResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllParamChangeResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllParamChangeResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ParamChange) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllParamChangeResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ParamChange) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllParamChangeResponse_1_list) AppendMutable() protoreflect.Value { + v := new(ParamChange) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllParamChangeResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllParamChangeResponse_1_list) NewElement() protoreflect.Value { + v := new(ParamChange) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllParamChangeResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllParamChangeResponse protoreflect.MessageDescriptor + fd_QueryAllParamChangeResponse_paramChange protoreflect.FieldDescriptor + fd_QueryAllParamChangeResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_query_proto_init() + md_QueryAllParamChangeResponse = File_network_launch_v1_query_proto.Messages().ByName("QueryAllParamChangeResponse") + fd_QueryAllParamChangeResponse_paramChange = md_QueryAllParamChangeResponse.Fields().ByName("paramChange") + fd_QueryAllParamChangeResponse_pagination = md_QueryAllParamChangeResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllParamChangeResponse)(nil) + +type fastReflection_QueryAllParamChangeResponse QueryAllParamChangeResponse + +func (x *QueryAllParamChangeResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllParamChangeResponse)(x) +} + +func (x *QueryAllParamChangeResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_query_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) +} + +var _fastReflection_QueryAllParamChangeResponse_messageType fastReflection_QueryAllParamChangeResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllParamChangeResponse_messageType{} + +type fastReflection_QueryAllParamChangeResponse_messageType struct{} + +func (x fastReflection_QueryAllParamChangeResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllParamChangeResponse)(nil) +} +func (x fastReflection_QueryAllParamChangeResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllParamChangeResponse) +} +func (x fastReflection_QueryAllParamChangeResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllParamChangeResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllParamChangeResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllParamChangeResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllParamChangeResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllParamChangeResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllParamChangeResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllParamChangeResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllParamChangeResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllParamChangeResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllParamChangeResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.ParamChange) != 0 { + value := protoreflect.ValueOfList(&_QueryAllParamChangeResponse_1_list{list: &x.ParamChange}) + if !f(fd_QueryAllParamChangeResponse_paramChange, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllParamChangeResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllParamChangeResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeResponse.paramChange": + return len(x.ParamChange) != 0 + case "network.launch.v1.QueryAllParamChangeResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllParamChangeResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeResponse.paramChange": + x.ParamChange = nil + case "network.launch.v1.QueryAllParamChangeResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllParamChangeResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.QueryAllParamChangeResponse.paramChange": + if len(x.ParamChange) == 0 { + return protoreflect.ValueOfList(&_QueryAllParamChangeResponse_1_list{}) + } + listValue := &_QueryAllParamChangeResponse_1_list{list: &x.ParamChange} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.QueryAllParamChangeResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllParamChangeResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeResponse.paramChange": + lv := value.List() + clv := lv.(*_QueryAllParamChangeResponse_1_list) + x.ParamChange = *clv.list + case "network.launch.v1.QueryAllParamChangeResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllParamChangeResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeResponse.paramChange": + if x.ParamChange == nil { + x.ParamChange = []*ParamChange{} + } + value := &_QueryAllParamChangeResponse_1_list{list: &x.ParamChange} + return protoreflect.ValueOfList(value) + case "network.launch.v1.QueryAllParamChangeResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllParamChangeResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.QueryAllParamChangeResponse.paramChange": + list := []*ParamChange{} + return protoreflect.ValueOfList(&_QueryAllParamChangeResponse_1_list{list: &list}) + case "network.launch.v1.QueryAllParamChangeResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.QueryAllParamChangeResponse")) + } + panic(fmt.Errorf("message network.launch.v1.QueryAllParamChangeResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllParamChangeResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.QueryAllParamChangeResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllParamChangeResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllParamChangeResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllParamChangeResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllParamChangeResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllParamChangeResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.ParamChange) > 0 { + for _, e := range x.ParamChange { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllParamChangeResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.ParamChange) > 0 { + for iNdEx := len(x.ParamChange) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ParamChange[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllParamChangeResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllParamChangeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllParamChangeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ParamChange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ParamChange = append(x.ParamChange, &ParamChange{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ParamChange[len(x.ParamChange)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/query.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryParamsRequest) Reset() { + *x = QueryParamsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsRequest) ProtoMessage() {} + +// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{0} +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params holds all the parameters of this module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryParamsResponse) Reset() { + *x = QueryParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsResponse) ProtoMessage() {} + +// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryParamsResponse) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +type QueryGetChainRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *QueryGetChainRequest) Reset() { + *x = QueryGetChainRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetChainRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetChainRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetChainRequest.ProtoReflect.Descriptor instead. +func (*QueryGetChainRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{2} +} + +func (x *QueryGetChainRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type QueryGetChainResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Chain *Chain `protobuf:"bytes,1,opt,name=Chain,proto3" json:"Chain,omitempty"` +} + +func (x *QueryGetChainResponse) Reset() { + *x = QueryGetChainResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetChainResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetChainResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetChainResponse.ProtoReflect.Descriptor instead. +func (*QueryGetChainResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryGetChainResponse) GetChain() *Chain { + if x != nil { + return x.Chain + } + return nil +} + +type QueryAllChainRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllChainRequest) Reset() { + *x = QueryAllChainRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllChainRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllChainRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllChainRequest.ProtoReflect.Descriptor instead. +func (*QueryAllChainRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryAllChainRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllChainResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Chain []*Chain `protobuf:"bytes,1,rep,name=Chain,proto3" json:"Chain,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllChainResponse) Reset() { + *x = QueryAllChainResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllChainResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllChainResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllChainResponse.ProtoReflect.Descriptor instead. +func (*QueryAllChainResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryAllChainResponse) GetChain() []*Chain { + if x != nil { + return x.Chain + } + return nil +} + +func (x *QueryAllChainResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetGenesisAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryGetGenesisAccountRequest) Reset() { + *x = QueryGetGenesisAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetGenesisAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetGenesisAccountRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetGenesisAccountRequest.ProtoReflect.Descriptor instead. +func (*QueryGetGenesisAccountRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{6} +} + +func (x *QueryGetGenesisAccountRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryGetGenesisAccountRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryGetGenesisAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GenesisAccount *GenesisAccount `protobuf:"bytes,1,opt,name=genesisAccount,proto3" json:"genesisAccount,omitempty"` +} + +func (x *QueryGetGenesisAccountResponse) Reset() { + *x = QueryGetGenesisAccountResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetGenesisAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetGenesisAccountResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetGenesisAccountResponse.ProtoReflect.Descriptor instead. +func (*QueryGetGenesisAccountResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryGetGenesisAccountResponse) GetGenesisAccount() *GenesisAccount { + if x != nil { + return x.GenesisAccount + } + return nil +} + +type QueryAllGenesisAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllGenesisAccountRequest) Reset() { + *x = QueryAllGenesisAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllGenesisAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllGenesisAccountRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllGenesisAccountRequest.ProtoReflect.Descriptor instead. +func (*QueryAllGenesisAccountRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{8} +} + +func (x *QueryAllGenesisAccountRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryAllGenesisAccountRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllGenesisAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GenesisAccount []*GenesisAccount `protobuf:"bytes,1,rep,name=genesisAccount,proto3" json:"genesisAccount,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllGenesisAccountResponse) Reset() { + *x = QueryAllGenesisAccountResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllGenesisAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllGenesisAccountResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllGenesisAccountResponse.ProtoReflect.Descriptor instead. +func (*QueryAllGenesisAccountResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{9} +} + +func (x *QueryAllGenesisAccountResponse) GetGenesisAccount() []*GenesisAccount { + if x != nil { + return x.GenesisAccount + } + return nil +} + +func (x *QueryAllGenesisAccountResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetGenesisValidatorRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryGetGenesisValidatorRequest) Reset() { + *x = QueryGetGenesisValidatorRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetGenesisValidatorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetGenesisValidatorRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetGenesisValidatorRequest.ProtoReflect.Descriptor instead. +func (*QueryGetGenesisValidatorRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{10} +} + +func (x *QueryGetGenesisValidatorRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryGetGenesisValidatorRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryGetGenesisValidatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GenesisValidator *GenesisValidator `protobuf:"bytes,1,opt,name=genesisValidator,proto3" json:"genesisValidator,omitempty"` +} + +func (x *QueryGetGenesisValidatorResponse) Reset() { + *x = QueryGetGenesisValidatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetGenesisValidatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetGenesisValidatorResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetGenesisValidatorResponse.ProtoReflect.Descriptor instead. +func (*QueryGetGenesisValidatorResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{11} +} + +func (x *QueryGetGenesisValidatorResponse) GetGenesisValidator() *GenesisValidator { + if x != nil { + return x.GenesisValidator + } + return nil +} + +type QueryAllGenesisValidatorRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllGenesisValidatorRequest) Reset() { + *x = QueryAllGenesisValidatorRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllGenesisValidatorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllGenesisValidatorRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllGenesisValidatorRequest.ProtoReflect.Descriptor instead. +func (*QueryAllGenesisValidatorRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{12} +} + +func (x *QueryAllGenesisValidatorRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryAllGenesisValidatorRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllGenesisValidatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GenesisValidator []*GenesisValidator `protobuf:"bytes,1,rep,name=genesisValidator,proto3" json:"genesisValidator,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllGenesisValidatorResponse) Reset() { + *x = QueryAllGenesisValidatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllGenesisValidatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllGenesisValidatorResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllGenesisValidatorResponse.ProtoReflect.Descriptor instead. +func (*QueryAllGenesisValidatorResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{13} +} + +func (x *QueryAllGenesisValidatorResponse) GetGenesisValidator() []*GenesisValidator { + if x != nil { + return x.GenesisValidator + } + return nil +} + +func (x *QueryAllGenesisValidatorResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetVestingAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryGetVestingAccountRequest) Reset() { + *x = QueryGetVestingAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetVestingAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetVestingAccountRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetVestingAccountRequest.ProtoReflect.Descriptor instead. +func (*QueryGetVestingAccountRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{14} +} + +func (x *QueryGetVestingAccountRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryGetVestingAccountRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryGetVestingAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VestingAccount *VestingAccount `protobuf:"bytes,1,opt,name=vestingAccount,proto3" json:"vestingAccount,omitempty"` +} + +func (x *QueryGetVestingAccountResponse) Reset() { + *x = QueryGetVestingAccountResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetVestingAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetVestingAccountResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetVestingAccountResponse.ProtoReflect.Descriptor instead. +func (*QueryGetVestingAccountResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{15} +} + +func (x *QueryGetVestingAccountResponse) GetVestingAccount() *VestingAccount { + if x != nil { + return x.VestingAccount + } + return nil +} + +type QueryAllVestingAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllVestingAccountRequest) Reset() { + *x = QueryAllVestingAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllVestingAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllVestingAccountRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllVestingAccountRequest.ProtoReflect.Descriptor instead. +func (*QueryAllVestingAccountRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{16} +} + +func (x *QueryAllVestingAccountRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryAllVestingAccountRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllVestingAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VestingAccount []*VestingAccount `protobuf:"bytes,1,rep,name=vestingAccount,proto3" json:"vestingAccount,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllVestingAccountResponse) Reset() { + *x = QueryAllVestingAccountResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllVestingAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllVestingAccountResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllVestingAccountResponse.ProtoReflect.Descriptor instead. +func (*QueryAllVestingAccountResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{17} +} + +func (x *QueryAllVestingAccountResponse) GetVestingAccount() []*VestingAccount { + if x != nil { + return x.VestingAccount + } + return nil +} + +func (x *QueryAllVestingAccountResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetRequestRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + RequestID uint64 `protobuf:"varint,2,opt,name=requestID,proto3" json:"requestID,omitempty"` +} + +func (x *QueryGetRequestRequest) Reset() { + *x = QueryGetRequestRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetRequestRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetRequestRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetRequestRequest.ProtoReflect.Descriptor instead. +func (*QueryGetRequestRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{18} +} + +func (x *QueryGetRequestRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryGetRequestRequest) GetRequestID() uint64 { + if x != nil { + return x.RequestID + } + return 0 +} + +type QueryGetRequestResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Request *Request `protobuf:"bytes,1,opt,name=Request,proto3" json:"Request,omitempty"` +} + +func (x *QueryGetRequestResponse) Reset() { + *x = QueryGetRequestResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetRequestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetRequestResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetRequestResponse.ProtoReflect.Descriptor instead. +func (*QueryGetRequestResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{19} +} + +func (x *QueryGetRequestResponse) GetRequest() *Request { + if x != nil { + return x.Request + } + return nil +} + +type QueryAllRequestRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllRequestRequest) Reset() { + *x = QueryAllRequestRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllRequestRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllRequestRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllRequestRequest.ProtoReflect.Descriptor instead. +func (*QueryAllRequestRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{20} +} + +func (x *QueryAllRequestRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryAllRequestRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllRequestResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Request []*Request `protobuf:"bytes,1,rep,name=Request,proto3" json:"Request,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllRequestResponse) Reset() { + *x = QueryAllRequestResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllRequestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllRequestResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllRequestResponse.ProtoReflect.Descriptor instead. +func (*QueryAllRequestResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{21} +} + +func (x *QueryAllRequestResponse) GetRequest() []*Request { + if x != nil { + return x.Request + } + return nil +} + +func (x *QueryAllRequestResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllParamChangeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllParamChangeRequest) Reset() { + *x = QueryAllParamChangeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllParamChangeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllParamChangeRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllParamChangeRequest.ProtoReflect.Descriptor instead. +func (*QueryAllParamChangeRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{22} +} + +func (x *QueryAllParamChangeRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *QueryAllParamChangeRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllParamChangeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ParamChange []*ParamChange `protobuf:"bytes,1,rep,name=paramChange,proto3" json:"paramChange,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllParamChangeResponse) Reset() { + *x = QueryAllParamChangeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_query_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllParamChangeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllParamChangeResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllParamChangeResponse.ProtoReflect.Descriptor instead. +func (*QueryAllParamChangeResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_query_proto_rawDescGZIP(), []int{23} +} + +func (x *QueryAllParamChangeResponse) GetParamChange() []*ParamChange { + if x != nil { + return x.ParamChange + } + return nil +} + +func (x *QueryAllParamChangeResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +var File_network_launch_v1_query_proto protoreflect.FileDescriptor + +var file_network_launch_v1_query_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, + 0x73, 0x65, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, + 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, + 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x14, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x13, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, + 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x32, + 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x22, 0x4d, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x05, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x22, 0x5e, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x96, 0x01, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x05, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, 0x1d, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x71, 0x0a, 0x1e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, + 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, + 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x83, + 0x01, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x46, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xba, 0x01, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, + 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x71, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x22, 0x79, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, + 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x67, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x10, 0x67, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, + 0x85, 0x01, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, + 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, + 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc2, 0x01, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, + 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, + 0x00, 0x52, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, 0x1d, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x71, 0x0a, + 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4f, 0x0a, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x83, 0x01, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x56, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x46, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xba, 0x01, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x41, 0x6c, 0x6c, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x76, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x76, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x22, 0x55, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, + 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7c, + 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9e, 0x01, 0x0a, + 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x80, 0x01, + 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0xae, 0x01, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x46, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x32, 0xf7, 0x0f, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x81, 0x01, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x25, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, + 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x8e, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, + 0x12, 0x84, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x27, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x69, 0x67, 0x6e, 0x69, + 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0xbd, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x47, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x31, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x69, 0x67, 0x6e, + 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x2f, 0x7b, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xb4, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x31, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x65, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x69, 0x67, + 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x12, 0xc5, + 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, + 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x2f, 0x7b, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x32, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, + 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, + 0x12, 0x33, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x7d, 0x12, 0xbd, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, + 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x2f, 0x7b, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xb4, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x56, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x69, 0x67, 0x6e, 0x69, + 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2f, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x12, 0xa2, 0x01, 0x0a, + 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x69, 0x67, 0x6e, + 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, + 0x7d, 0x12, 0x97, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x29, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, + 0x12, 0x29, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0f, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x2d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0xc3, 0x01, 0x0a, 0x15, + 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_query_proto_rawDescOnce sync.Once + file_network_launch_v1_query_proto_rawDescData = file_network_launch_v1_query_proto_rawDesc +) + +func file_network_launch_v1_query_proto_rawDescGZIP() []byte { + file_network_launch_v1_query_proto_rawDescOnce.Do(func() { + file_network_launch_v1_query_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_query_proto_rawDescData) + }) + return file_network_launch_v1_query_proto_rawDescData +} + +var file_network_launch_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_network_launch_v1_query_proto_goTypes = []interface{}{ + (*QueryParamsRequest)(nil), // 0: network.launch.v1.QueryParamsRequest + (*QueryParamsResponse)(nil), // 1: network.launch.v1.QueryParamsResponse + (*QueryGetChainRequest)(nil), // 2: network.launch.v1.QueryGetChainRequest + (*QueryGetChainResponse)(nil), // 3: network.launch.v1.QueryGetChainResponse + (*QueryAllChainRequest)(nil), // 4: network.launch.v1.QueryAllChainRequest + (*QueryAllChainResponse)(nil), // 5: network.launch.v1.QueryAllChainResponse + (*QueryGetGenesisAccountRequest)(nil), // 6: network.launch.v1.QueryGetGenesisAccountRequest + (*QueryGetGenesisAccountResponse)(nil), // 7: network.launch.v1.QueryGetGenesisAccountResponse + (*QueryAllGenesisAccountRequest)(nil), // 8: network.launch.v1.QueryAllGenesisAccountRequest + (*QueryAllGenesisAccountResponse)(nil), // 9: network.launch.v1.QueryAllGenesisAccountResponse + (*QueryGetGenesisValidatorRequest)(nil), // 10: network.launch.v1.QueryGetGenesisValidatorRequest + (*QueryGetGenesisValidatorResponse)(nil), // 11: network.launch.v1.QueryGetGenesisValidatorResponse + (*QueryAllGenesisValidatorRequest)(nil), // 12: network.launch.v1.QueryAllGenesisValidatorRequest + (*QueryAllGenesisValidatorResponse)(nil), // 13: network.launch.v1.QueryAllGenesisValidatorResponse + (*QueryGetVestingAccountRequest)(nil), // 14: network.launch.v1.QueryGetVestingAccountRequest + (*QueryGetVestingAccountResponse)(nil), // 15: network.launch.v1.QueryGetVestingAccountResponse + (*QueryAllVestingAccountRequest)(nil), // 16: network.launch.v1.QueryAllVestingAccountRequest + (*QueryAllVestingAccountResponse)(nil), // 17: network.launch.v1.QueryAllVestingAccountResponse + (*QueryGetRequestRequest)(nil), // 18: network.launch.v1.QueryGetRequestRequest + (*QueryGetRequestResponse)(nil), // 19: network.launch.v1.QueryGetRequestResponse + (*QueryAllRequestRequest)(nil), // 20: network.launch.v1.QueryAllRequestRequest + (*QueryAllRequestResponse)(nil), // 21: network.launch.v1.QueryAllRequestResponse + (*QueryAllParamChangeRequest)(nil), // 22: network.launch.v1.QueryAllParamChangeRequest + (*QueryAllParamChangeResponse)(nil), // 23: network.launch.v1.QueryAllParamChangeResponse + (*Params)(nil), // 24: network.launch.v1.Params + (*Chain)(nil), // 25: network.launch.v1.Chain + (*v1beta1.PageRequest)(nil), // 26: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 27: cosmos.base.query.v1beta1.PageResponse + (*GenesisAccount)(nil), // 28: network.launch.v1.GenesisAccount + (*GenesisValidator)(nil), // 29: network.launch.v1.GenesisValidator + (*VestingAccount)(nil), // 30: network.launch.v1.VestingAccount + (*Request)(nil), // 31: network.launch.v1.Request + (*ParamChange)(nil), // 32: network.launch.v1.ParamChange +} +var file_network_launch_v1_query_proto_depIdxs = []int32{ + 24, // 0: network.launch.v1.QueryParamsResponse.params:type_name -> network.launch.v1.Params + 25, // 1: network.launch.v1.QueryGetChainResponse.Chain:type_name -> network.launch.v1.Chain + 26, // 2: network.launch.v1.QueryAllChainRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 25, // 3: network.launch.v1.QueryAllChainResponse.Chain:type_name -> network.launch.v1.Chain + 27, // 4: network.launch.v1.QueryAllChainResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 28, // 5: network.launch.v1.QueryGetGenesisAccountResponse.genesisAccount:type_name -> network.launch.v1.GenesisAccount + 26, // 6: network.launch.v1.QueryAllGenesisAccountRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 28, // 7: network.launch.v1.QueryAllGenesisAccountResponse.genesisAccount:type_name -> network.launch.v1.GenesisAccount + 27, // 8: network.launch.v1.QueryAllGenesisAccountResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 29, // 9: network.launch.v1.QueryGetGenesisValidatorResponse.genesisValidator:type_name -> network.launch.v1.GenesisValidator + 26, // 10: network.launch.v1.QueryAllGenesisValidatorRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 29, // 11: network.launch.v1.QueryAllGenesisValidatorResponse.genesisValidator:type_name -> network.launch.v1.GenesisValidator + 27, // 12: network.launch.v1.QueryAllGenesisValidatorResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 30, // 13: network.launch.v1.QueryGetVestingAccountResponse.vestingAccount:type_name -> network.launch.v1.VestingAccount + 26, // 14: network.launch.v1.QueryAllVestingAccountRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 30, // 15: network.launch.v1.QueryAllVestingAccountResponse.vestingAccount:type_name -> network.launch.v1.VestingAccount + 27, // 16: network.launch.v1.QueryAllVestingAccountResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 31, // 17: network.launch.v1.QueryGetRequestResponse.Request:type_name -> network.launch.v1.Request + 26, // 18: network.launch.v1.QueryAllRequestRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 31, // 19: network.launch.v1.QueryAllRequestResponse.Request:type_name -> network.launch.v1.Request + 27, // 20: network.launch.v1.QueryAllRequestResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 26, // 21: network.launch.v1.QueryAllParamChangeRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 32, // 22: network.launch.v1.QueryAllParamChangeResponse.paramChange:type_name -> network.launch.v1.ParamChange + 27, // 23: network.launch.v1.QueryAllParamChangeResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 0, // 24: network.launch.v1.Query.Params:input_type -> network.launch.v1.QueryParamsRequest + 2, // 25: network.launch.v1.Query.GetChain:input_type -> network.launch.v1.QueryGetChainRequest + 4, // 26: network.launch.v1.Query.ListChain:input_type -> network.launch.v1.QueryAllChainRequest + 6, // 27: network.launch.v1.Query.GetGenesisAccount:input_type -> network.launch.v1.QueryGetGenesisAccountRequest + 8, // 28: network.launch.v1.Query.ListGenesisAccount:input_type -> network.launch.v1.QueryAllGenesisAccountRequest + 10, // 29: network.launch.v1.Query.GetGenesisValidator:input_type -> network.launch.v1.QueryGetGenesisValidatorRequest + 12, // 30: network.launch.v1.Query.ListGenesisValidator:input_type -> network.launch.v1.QueryAllGenesisValidatorRequest + 14, // 31: network.launch.v1.Query.GetVestingAccount:input_type -> network.launch.v1.QueryGetVestingAccountRequest + 16, // 32: network.launch.v1.Query.ListVestingAccount:input_type -> network.launch.v1.QueryAllVestingAccountRequest + 18, // 33: network.launch.v1.Query.GetRequest:input_type -> network.launch.v1.QueryGetRequestRequest + 20, // 34: network.launch.v1.Query.ListRequest:input_type -> network.launch.v1.QueryAllRequestRequest + 22, // 35: network.launch.v1.Query.ListParamChange:input_type -> network.launch.v1.QueryAllParamChangeRequest + 1, // 36: network.launch.v1.Query.Params:output_type -> network.launch.v1.QueryParamsResponse + 3, // 37: network.launch.v1.Query.GetChain:output_type -> network.launch.v1.QueryGetChainResponse + 5, // 38: network.launch.v1.Query.ListChain:output_type -> network.launch.v1.QueryAllChainResponse + 7, // 39: network.launch.v1.Query.GetGenesisAccount:output_type -> network.launch.v1.QueryGetGenesisAccountResponse + 9, // 40: network.launch.v1.Query.ListGenesisAccount:output_type -> network.launch.v1.QueryAllGenesisAccountResponse + 11, // 41: network.launch.v1.Query.GetGenesisValidator:output_type -> network.launch.v1.QueryGetGenesisValidatorResponse + 13, // 42: network.launch.v1.Query.ListGenesisValidator:output_type -> network.launch.v1.QueryAllGenesisValidatorResponse + 15, // 43: network.launch.v1.Query.GetVestingAccount:output_type -> network.launch.v1.QueryGetVestingAccountResponse + 17, // 44: network.launch.v1.Query.ListVestingAccount:output_type -> network.launch.v1.QueryAllVestingAccountResponse + 19, // 45: network.launch.v1.Query.GetRequest:output_type -> network.launch.v1.QueryGetRequestResponse + 21, // 46: network.launch.v1.Query.ListRequest:output_type -> network.launch.v1.QueryAllRequestResponse + 23, // 47: network.launch.v1.Query.ListParamChange:output_type -> network.launch.v1.QueryAllParamChangeResponse + 36, // [36:48] is the sub-list for method output_type + 24, // [24:36] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name +} + +func init() { file_network_launch_v1_query_proto_init() } +func file_network_launch_v1_query_proto_init() { + if File_network_launch_v1_query_proto != nil { + return + } + file_network_launch_v1_chain_proto_init() + file_network_launch_v1_genesis_account_proto_init() + file_network_launch_v1_genesis_validator_proto_init() + file_network_launch_v1_param_change_proto_init() + file_network_launch_v1_params_proto_init() + file_network_launch_v1_request_proto_init() + file_network_launch_v1_vesting_account_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetChainRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetChainResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllChainRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllChainResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetGenesisAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetGenesisAccountResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllGenesisAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllGenesisAccountResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetGenesisValidatorRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetGenesisValidatorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllGenesisValidatorRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllGenesisValidatorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetVestingAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetVestingAccountResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllVestingAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllVestingAccountResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetRequestRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetRequestResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllRequestRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllRequestResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllParamChangeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_query_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllParamChangeResponse); 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_network_launch_v1_query_proto_rawDesc, + NumEnums: 0, + NumMessages: 24, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_launch_v1_query_proto_goTypes, + DependencyIndexes: file_network_launch_v1_query_proto_depIdxs, + MessageInfos: file_network_launch_v1_query_proto_msgTypes, + }.Build() + File_network_launch_v1_query_proto = out.File + file_network_launch_v1_query_proto_rawDesc = nil + file_network_launch_v1_query_proto_goTypes = nil + file_network_launch_v1_query_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/query_grpc.pb.go b/api/network/launch/v1/query_grpc.pb.go new file mode 100644 index 00000000..812f6735 --- /dev/null +++ b/api/network/launch/v1/query_grpc.pb.go @@ -0,0 +1,528 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/launch/v1/query.proto + +package launchv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Query_Params_FullMethodName = "/network.launch.v1.Query/Params" + Query_GetChain_FullMethodName = "/network.launch.v1.Query/GetChain" + Query_ListChain_FullMethodName = "/network.launch.v1.Query/ListChain" + Query_GetGenesisAccount_FullMethodName = "/network.launch.v1.Query/GetGenesisAccount" + Query_ListGenesisAccount_FullMethodName = "/network.launch.v1.Query/ListGenesisAccount" + Query_GetGenesisValidator_FullMethodName = "/network.launch.v1.Query/GetGenesisValidator" + Query_ListGenesisValidator_FullMethodName = "/network.launch.v1.Query/ListGenesisValidator" + Query_GetVestingAccount_FullMethodName = "/network.launch.v1.Query/GetVestingAccount" + Query_ListVestingAccount_FullMethodName = "/network.launch.v1.Query/ListVestingAccount" + Query_GetRequest_FullMethodName = "/network.launch.v1.Query/GetRequest" + Query_ListRequest_FullMethodName = "/network.launch.v1.Query/ListRequest" + Query_ListParamChange_FullMethodName = "/network.launch.v1.Query/ListParamChange" +) + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of Chain items. + GetChain(ctx context.Context, in *QueryGetChainRequest, opts ...grpc.CallOption) (*QueryGetChainResponse, error) + ListChain(ctx context.Context, in *QueryAllChainRequest, opts ...grpc.CallOption) (*QueryAllChainResponse, error) + // Queries a list of GenesisAccount items. + GetGenesisAccount(ctx context.Context, in *QueryGetGenesisAccountRequest, opts ...grpc.CallOption) (*QueryGetGenesisAccountResponse, error) + ListGenesisAccount(ctx context.Context, in *QueryAllGenesisAccountRequest, opts ...grpc.CallOption) (*QueryAllGenesisAccountResponse, error) + // Queries a list of GenesisValidator items. + GetGenesisValidator(ctx context.Context, in *QueryGetGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryGetGenesisValidatorResponse, error) + ListGenesisValidator(ctx context.Context, in *QueryAllGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryAllGenesisValidatorResponse, error) + // Queries a list of VestingAccount items. + GetVestingAccount(ctx context.Context, in *QueryGetVestingAccountRequest, opts ...grpc.CallOption) (*QueryGetVestingAccountResponse, error) + ListVestingAccount(ctx context.Context, in *QueryAllVestingAccountRequest, opts ...grpc.CallOption) (*QueryAllVestingAccountResponse, error) + // Queries a list of Request items. + GetRequest(ctx context.Context, in *QueryGetRequestRequest, opts ...grpc.CallOption) (*QueryGetRequestResponse, error) + ListRequest(ctx context.Context, in *QueryAllRequestRequest, opts ...grpc.CallOption) (*QueryAllRequestResponse, error) + ListParamChange(ctx context.Context, in *QueryAllParamChangeRequest, opts ...grpc.CallOption) (*QueryAllParamChangeResponse, error) +} + +type queryClient struct { + cc grpc.ClientConnInterface +} + +func NewQueryClient(cc grpc.ClientConnInterface) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, Query_Params_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetChain(ctx context.Context, in *QueryGetChainRequest, opts ...grpc.CallOption) (*QueryGetChainResponse, error) { + out := new(QueryGetChainResponse) + err := c.cc.Invoke(ctx, Query_GetChain_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListChain(ctx context.Context, in *QueryAllChainRequest, opts ...grpc.CallOption) (*QueryAllChainResponse, error) { + out := new(QueryAllChainResponse) + err := c.cc.Invoke(ctx, Query_ListChain_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetGenesisAccount(ctx context.Context, in *QueryGetGenesisAccountRequest, opts ...grpc.CallOption) (*QueryGetGenesisAccountResponse, error) { + out := new(QueryGetGenesisAccountResponse) + err := c.cc.Invoke(ctx, Query_GetGenesisAccount_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListGenesisAccount(ctx context.Context, in *QueryAllGenesisAccountRequest, opts ...grpc.CallOption) (*QueryAllGenesisAccountResponse, error) { + out := new(QueryAllGenesisAccountResponse) + err := c.cc.Invoke(ctx, Query_ListGenesisAccount_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetGenesisValidator(ctx context.Context, in *QueryGetGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryGetGenesisValidatorResponse, error) { + out := new(QueryGetGenesisValidatorResponse) + err := c.cc.Invoke(ctx, Query_GetGenesisValidator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListGenesisValidator(ctx context.Context, in *QueryAllGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryAllGenesisValidatorResponse, error) { + out := new(QueryAllGenesisValidatorResponse) + err := c.cc.Invoke(ctx, Query_ListGenesisValidator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetVestingAccount(ctx context.Context, in *QueryGetVestingAccountRequest, opts ...grpc.CallOption) (*QueryGetVestingAccountResponse, error) { + out := new(QueryGetVestingAccountResponse) + err := c.cc.Invoke(ctx, Query_GetVestingAccount_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListVestingAccount(ctx context.Context, in *QueryAllVestingAccountRequest, opts ...grpc.CallOption) (*QueryAllVestingAccountResponse, error) { + out := new(QueryAllVestingAccountResponse) + err := c.cc.Invoke(ctx, Query_ListVestingAccount_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetRequest(ctx context.Context, in *QueryGetRequestRequest, opts ...grpc.CallOption) (*QueryGetRequestResponse, error) { + out := new(QueryGetRequestResponse) + err := c.cc.Invoke(ctx, Query_GetRequest_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListRequest(ctx context.Context, in *QueryAllRequestRequest, opts ...grpc.CallOption) (*QueryAllRequestResponse, error) { + out := new(QueryAllRequestResponse) + err := c.cc.Invoke(ctx, Query_ListRequest_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListParamChange(ctx context.Context, in *QueryAllParamChangeRequest, opts ...grpc.CallOption) (*QueryAllParamChangeResponse, error) { + out := new(QueryAllParamChangeResponse) + err := c.cc.Invoke(ctx, Query_ListParamChange_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +// All implementations must embed UnimplementedQueryServer +// for forward compatibility +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of Chain items. + GetChain(context.Context, *QueryGetChainRequest) (*QueryGetChainResponse, error) + ListChain(context.Context, *QueryAllChainRequest) (*QueryAllChainResponse, error) + // Queries a list of GenesisAccount items. + GetGenesisAccount(context.Context, *QueryGetGenesisAccountRequest) (*QueryGetGenesisAccountResponse, error) + ListGenesisAccount(context.Context, *QueryAllGenesisAccountRequest) (*QueryAllGenesisAccountResponse, error) + // Queries a list of GenesisValidator items. + GetGenesisValidator(context.Context, *QueryGetGenesisValidatorRequest) (*QueryGetGenesisValidatorResponse, error) + ListGenesisValidator(context.Context, *QueryAllGenesisValidatorRequest) (*QueryAllGenesisValidatorResponse, error) + // Queries a list of VestingAccount items. + GetVestingAccount(context.Context, *QueryGetVestingAccountRequest) (*QueryGetVestingAccountResponse, error) + ListVestingAccount(context.Context, *QueryAllVestingAccountRequest) (*QueryAllVestingAccountResponse, error) + // Queries a list of Request items. + GetRequest(context.Context, *QueryGetRequestRequest) (*QueryGetRequestResponse, error) + ListRequest(context.Context, *QueryAllRequestRequest) (*QueryAllRequestResponse, error) + ListParamChange(context.Context, *QueryAllParamChangeRequest) (*QueryAllParamChangeResponse, error) + mustEmbedUnimplementedQueryServer() +} + +// UnimplementedQueryServer must be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (UnimplementedQueryServer) GetChain(context.Context, *QueryGetChainRequest) (*QueryGetChainResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChain not implemented") +} +func (UnimplementedQueryServer) ListChain(context.Context, *QueryAllChainRequest) (*QueryAllChainResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListChain not implemented") +} +func (UnimplementedQueryServer) GetGenesisAccount(context.Context, *QueryGetGenesisAccountRequest) (*QueryGetGenesisAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGenesisAccount not implemented") +} +func (UnimplementedQueryServer) ListGenesisAccount(context.Context, *QueryAllGenesisAccountRequest) (*QueryAllGenesisAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListGenesisAccount not implemented") +} +func (UnimplementedQueryServer) GetGenesisValidator(context.Context, *QueryGetGenesisValidatorRequest) (*QueryGetGenesisValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGenesisValidator not implemented") +} +func (UnimplementedQueryServer) ListGenesisValidator(context.Context, *QueryAllGenesisValidatorRequest) (*QueryAllGenesisValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListGenesisValidator not implemented") +} +func (UnimplementedQueryServer) GetVestingAccount(context.Context, *QueryGetVestingAccountRequest) (*QueryGetVestingAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetVestingAccount not implemented") +} +func (UnimplementedQueryServer) ListVestingAccount(context.Context, *QueryAllVestingAccountRequest) (*QueryAllVestingAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListVestingAccount not implemented") +} +func (UnimplementedQueryServer) GetRequest(context.Context, *QueryGetRequestRequest) (*QueryGetRequestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRequest not implemented") +} +func (UnimplementedQueryServer) ListRequest(context.Context, *QueryAllRequestRequest) (*QueryAllRequestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListRequest not implemented") +} +func (UnimplementedQueryServer) ListParamChange(context.Context, *QueryAllParamChangeRequest) (*QueryAllParamChangeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListParamChange not implemented") +} +func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} + +// UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to QueryServer will +// result in compilation errors. +type UnsafeQueryServer interface { + mustEmbedUnimplementedQueryServer() +} + +func RegisterQueryServer(s grpc.ServiceRegistrar, srv QueryServer) { + s.RegisterService(&Query_ServiceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_Params_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetChainRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetChain(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetChain_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetChain(ctx, req.(*QueryGetChainRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllChainRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListChain(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListChain_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListChain(ctx, req.(*QueryAllChainRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetGenesisAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetGenesisAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetGenesisAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetGenesisAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetGenesisAccount(ctx, req.(*QueryGetGenesisAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListGenesisAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllGenesisAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListGenesisAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListGenesisAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListGenesisAccount(ctx, req.(*QueryAllGenesisAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetGenesisValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetGenesisValidatorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetGenesisValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetGenesisValidator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetGenesisValidator(ctx, req.(*QueryGetGenesisValidatorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListGenesisValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllGenesisValidatorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListGenesisValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListGenesisValidator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListGenesisValidator(ctx, req.(*QueryAllGenesisValidatorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetVestingAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetVestingAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetVestingAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetVestingAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetVestingAccount(ctx, req.(*QueryGetVestingAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListVestingAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllVestingAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListVestingAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListVestingAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListVestingAccount(ctx, req.(*QueryAllVestingAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetRequestRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetRequest_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetRequest(ctx, req.(*QueryGetRequestRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllRequestRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListRequest_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListRequest(ctx, req.(*QueryAllRequestRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListParamChange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllParamChangeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListParamChange(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListParamChange_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListParamChange(ctx, req.(*QueryAllParamChangeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Query_ServiceDesc is the grpc.ServiceDesc for Query service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Query_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.launch.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetChain", + Handler: _Query_GetChain_Handler, + }, + { + MethodName: "ListChain", + Handler: _Query_ListChain_Handler, + }, + { + MethodName: "GetGenesisAccount", + Handler: _Query_GetGenesisAccount_Handler, + }, + { + MethodName: "ListGenesisAccount", + Handler: _Query_ListGenesisAccount_Handler, + }, + { + MethodName: "GetGenesisValidator", + Handler: _Query_GetGenesisValidator_Handler, + }, + { + MethodName: "ListGenesisValidator", + Handler: _Query_ListGenesisValidator_Handler, + }, + { + MethodName: "GetVestingAccount", + Handler: _Query_GetVestingAccount_Handler, + }, + { + MethodName: "ListVestingAccount", + Handler: _Query_ListVestingAccount_Handler, + }, + { + MethodName: "GetRequest", + Handler: _Query_GetRequest_Handler, + }, + { + MethodName: "ListRequest", + Handler: _Query_ListRequest_Handler, + }, + { + MethodName: "ListParamChange", + Handler: _Query_ListParamChange_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/launch/v1/query.proto", +} diff --git a/api/network/launch/v1/request.pulsar.go b/api/network/launch/v1/request.pulsar.go new file mode 100644 index 00000000..40e59820 --- /dev/null +++ b/api/network/launch/v1/request.pulsar.go @@ -0,0 +1,3097 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Request protoreflect.MessageDescriptor + fd_Request_launchID protoreflect.FieldDescriptor + fd_Request_requestID protoreflect.FieldDescriptor + fd_Request_creator protoreflect.FieldDescriptor + fd_Request_createdAt protoreflect.FieldDescriptor + fd_Request_content protoreflect.FieldDescriptor + fd_Request_status protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_request_proto_init() + md_Request = File_network_launch_v1_request_proto.Messages().ByName("Request") + fd_Request_launchID = md_Request.Fields().ByName("launchID") + fd_Request_requestID = md_Request.Fields().ByName("requestID") + fd_Request_creator = md_Request.Fields().ByName("creator") + fd_Request_createdAt = md_Request.Fields().ByName("createdAt") + fd_Request_content = md_Request.Fields().ByName("content") + fd_Request_status = md_Request.Fields().ByName("status") +} + +var _ protoreflect.Message = (*fastReflection_Request)(nil) + +type fastReflection_Request Request + +func (x *Request) ProtoReflect() protoreflect.Message { + return (*fastReflection_Request)(x) +} + +func (x *Request) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_request_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) +} + +var _fastReflection_Request_messageType fastReflection_Request_messageType +var _ protoreflect.MessageType = fastReflection_Request_messageType{} + +type fastReflection_Request_messageType struct{} + +func (x fastReflection_Request_messageType) Zero() protoreflect.Message { + return (*fastReflection_Request)(nil) +} +func (x fastReflection_Request_messageType) New() protoreflect.Message { + return new(fastReflection_Request) +} +func (x fastReflection_Request_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Request +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Request) Descriptor() protoreflect.MessageDescriptor { + return md_Request +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Request) Type() protoreflect.MessageType { + return _fastReflection_Request_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Request) New() protoreflect.Message { + return new(fastReflection_Request) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Request) Interface() protoreflect.ProtoMessage { + return (*Request)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Request) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_Request_launchID, value) { + return + } + } + if x.RequestID != uint64(0) { + value := protoreflect.ValueOfUint64(x.RequestID) + if !f(fd_Request_requestID, value) { + return + } + } + if x.Creator != "" { + value := protoreflect.ValueOfString(x.Creator) + if !f(fd_Request_creator, value) { + return + } + } + if x.CreatedAt != int64(0) { + value := protoreflect.ValueOfInt64(x.CreatedAt) + if !f(fd_Request_createdAt, value) { + return + } + } + if x.Content != nil { + value := protoreflect.ValueOfMessage(x.Content.ProtoReflect()) + if !f(fd_Request_content, value) { + return + } + } + if x.Status != 0 { + value := protoreflect.ValueOfEnum((protoreflect.EnumNumber)(x.Status)) + if !f(fd_Request_status, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Request) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.Request.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.Request.requestID": + return x.RequestID != uint64(0) + case "network.launch.v1.Request.creator": + return x.Creator != "" + case "network.launch.v1.Request.createdAt": + return x.CreatedAt != int64(0) + case "network.launch.v1.Request.content": + return x.Content != nil + case "network.launch.v1.Request.status": + return x.Status != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Request")) + } + panic(fmt.Errorf("message network.launch.v1.Request does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Request) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.Request.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.Request.requestID": + x.RequestID = uint64(0) + case "network.launch.v1.Request.creator": + x.Creator = "" + case "network.launch.v1.Request.createdAt": + x.CreatedAt = int64(0) + case "network.launch.v1.Request.content": + x.Content = nil + case "network.launch.v1.Request.status": + x.Status = 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Request")) + } + panic(fmt.Errorf("message network.launch.v1.Request does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Request) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.Request.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.Request.requestID": + value := x.RequestID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.Request.creator": + value := x.Creator + return protoreflect.ValueOfString(value) + case "network.launch.v1.Request.createdAt": + value := x.CreatedAt + return protoreflect.ValueOfInt64(value) + case "network.launch.v1.Request.content": + value := x.Content + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.Request.status": + value := x.Status + return protoreflect.ValueOfEnum((protoreflect.EnumNumber)(value)) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Request")) + } + panic(fmt.Errorf("message network.launch.v1.Request does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Request) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.Request.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.Request.requestID": + x.RequestID = value.Uint() + case "network.launch.v1.Request.creator": + x.Creator = value.Interface().(string) + case "network.launch.v1.Request.createdAt": + x.CreatedAt = value.Int() + case "network.launch.v1.Request.content": + x.Content = value.Message().Interface().(*RequestContent) + case "network.launch.v1.Request.status": + x.Status = (Request_Status)(value.Enum()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Request")) + } + panic(fmt.Errorf("message network.launch.v1.Request does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Request) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Request.content": + if x.Content == nil { + x.Content = new(RequestContent) + } + return protoreflect.ValueOfMessage(x.Content.ProtoReflect()) + case "network.launch.v1.Request.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.Request is not mutable")) + case "network.launch.v1.Request.requestID": + panic(fmt.Errorf("field requestID of message network.launch.v1.Request is not mutable")) + case "network.launch.v1.Request.creator": + panic(fmt.Errorf("field creator of message network.launch.v1.Request is not mutable")) + case "network.launch.v1.Request.createdAt": + panic(fmt.Errorf("field createdAt of message network.launch.v1.Request is not mutable")) + case "network.launch.v1.Request.status": + panic(fmt.Errorf("field status of message network.launch.v1.Request is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Request")) + } + panic(fmt.Errorf("message network.launch.v1.Request does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Request) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.Request.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.Request.requestID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.Request.creator": + return protoreflect.ValueOfString("") + case "network.launch.v1.Request.createdAt": + return protoreflect.ValueOfInt64(int64(0)) + case "network.launch.v1.Request.content": + m := new(RequestContent) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.Request.status": + return protoreflect.ValueOfEnum(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.Request")) + } + panic(fmt.Errorf("message network.launch.v1.Request does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Request) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.Request", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Request) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Request) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Request) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Request) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Request) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.RequestID != 0 { + n += 1 + runtime.Sov(uint64(x.RequestID)) + } + l = len(x.Creator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.CreatedAt != 0 { + n += 1 + runtime.Sov(uint64(x.CreatedAt)) + } + if x.Content != nil { + l = options.Size(x.Content) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Status != 0 { + n += 1 + runtime.Sov(uint64(x.Status)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Request) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Status != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.Status)) + i-- + dAtA[i] = 0x30 + } + if x.Content != nil { + encoded, err := options.Marshal(x.Content) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + } + if x.CreatedAt != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CreatedAt)) + i-- + dAtA[i] = 0x20 + } + if len(x.Creator) > 0 { + i -= len(x.Creator) + copy(dAtA[i:], x.Creator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Creator))) + i-- + dAtA[i] = 0x1a + } + if x.RequestID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RequestID)) + i-- + dAtA[i] = 0x10 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Request) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequestID", wireType) + } + x.RequestID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.RequestID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) + } + x.CreatedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CreatedAt |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Content", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Content == nil { + x.Content = &RequestContent{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Content); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + x.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.Status |= Request_Status(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_RequestContent protoreflect.MessageDescriptor + fd_RequestContent_genesisAccount protoreflect.FieldDescriptor + fd_RequestContent_vestingAccount protoreflect.FieldDescriptor + fd_RequestContent_genesisValidator protoreflect.FieldDescriptor + fd_RequestContent_accountRemoval protoreflect.FieldDescriptor + fd_RequestContent_validatorRemoval protoreflect.FieldDescriptor + fd_RequestContent_paramChange protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_request_proto_init() + md_RequestContent = File_network_launch_v1_request_proto.Messages().ByName("RequestContent") + fd_RequestContent_genesisAccount = md_RequestContent.Fields().ByName("genesisAccount") + fd_RequestContent_vestingAccount = md_RequestContent.Fields().ByName("vestingAccount") + fd_RequestContent_genesisValidator = md_RequestContent.Fields().ByName("genesisValidator") + fd_RequestContent_accountRemoval = md_RequestContent.Fields().ByName("accountRemoval") + fd_RequestContent_validatorRemoval = md_RequestContent.Fields().ByName("validatorRemoval") + fd_RequestContent_paramChange = md_RequestContent.Fields().ByName("paramChange") +} + +var _ protoreflect.Message = (*fastReflection_RequestContent)(nil) + +type fastReflection_RequestContent RequestContent + +func (x *RequestContent) ProtoReflect() protoreflect.Message { + return (*fastReflection_RequestContent)(x) +} + +func (x *RequestContent) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_request_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) +} + +var _fastReflection_RequestContent_messageType fastReflection_RequestContent_messageType +var _ protoreflect.MessageType = fastReflection_RequestContent_messageType{} + +type fastReflection_RequestContent_messageType struct{} + +func (x fastReflection_RequestContent_messageType) Zero() protoreflect.Message { + return (*fastReflection_RequestContent)(nil) +} +func (x fastReflection_RequestContent_messageType) New() protoreflect.Message { + return new(fastReflection_RequestContent) +} +func (x fastReflection_RequestContent_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_RequestContent +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_RequestContent) Descriptor() protoreflect.MessageDescriptor { + return md_RequestContent +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_RequestContent) Type() protoreflect.MessageType { + return _fastReflection_RequestContent_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_RequestContent) New() protoreflect.Message { + return new(fastReflection_RequestContent) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_RequestContent) Interface() protoreflect.ProtoMessage { + return (*RequestContent)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_RequestContent) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Content != nil { + switch o := x.Content.(type) { + case *RequestContent_GenesisAccount: + v := o.GenesisAccount + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_RequestContent_genesisAccount, value) { + return + } + case *RequestContent_VestingAccount: + v := o.VestingAccount + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_RequestContent_vestingAccount, value) { + return + } + case *RequestContent_GenesisValidator: + v := o.GenesisValidator + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_RequestContent_genesisValidator, value) { + return + } + case *RequestContent_AccountRemoval: + v := o.AccountRemoval + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_RequestContent_accountRemoval, value) { + return + } + case *RequestContent_ValidatorRemoval: + v := o.ValidatorRemoval + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_RequestContent_validatorRemoval, value) { + return + } + case *RequestContent_ParamChange: + v := o.ParamChange + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_RequestContent_paramChange, value) { + return + } + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_RequestContent) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.RequestContent.genesisAccount": + if x.Content == nil { + return false + } else if _, ok := x.Content.(*RequestContent_GenesisAccount); ok { + return true + } else { + return false + } + case "network.launch.v1.RequestContent.vestingAccount": + if x.Content == nil { + return false + } else if _, ok := x.Content.(*RequestContent_VestingAccount); ok { + return true + } else { + return false + } + case "network.launch.v1.RequestContent.genesisValidator": + if x.Content == nil { + return false + } else if _, ok := x.Content.(*RequestContent_GenesisValidator); ok { + return true + } else { + return false + } + case "network.launch.v1.RequestContent.accountRemoval": + if x.Content == nil { + return false + } else if _, ok := x.Content.(*RequestContent_AccountRemoval); ok { + return true + } else { + return false + } + case "network.launch.v1.RequestContent.validatorRemoval": + if x.Content == nil { + return false + } else if _, ok := x.Content.(*RequestContent_ValidatorRemoval); ok { + return true + } else { + return false + } + case "network.launch.v1.RequestContent.paramChange": + if x.Content == nil { + return false + } else if _, ok := x.Content.(*RequestContent_ParamChange); ok { + return true + } else { + return false + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestContent")) + } + panic(fmt.Errorf("message network.launch.v1.RequestContent does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RequestContent) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.RequestContent.genesisAccount": + x.Content = nil + case "network.launch.v1.RequestContent.vestingAccount": + x.Content = nil + case "network.launch.v1.RequestContent.genesisValidator": + x.Content = nil + case "network.launch.v1.RequestContent.accountRemoval": + x.Content = nil + case "network.launch.v1.RequestContent.validatorRemoval": + x.Content = nil + case "network.launch.v1.RequestContent.paramChange": + x.Content = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestContent")) + } + panic(fmt.Errorf("message network.launch.v1.RequestContent does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_RequestContent) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.RequestContent.genesisAccount": + if x.Content == nil { + return protoreflect.ValueOfMessage((*GenesisAccount)(nil).ProtoReflect()) + } else if v, ok := x.Content.(*RequestContent_GenesisAccount); ok { + return protoreflect.ValueOfMessage(v.GenesisAccount.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*GenesisAccount)(nil).ProtoReflect()) + } + case "network.launch.v1.RequestContent.vestingAccount": + if x.Content == nil { + return protoreflect.ValueOfMessage((*VestingAccount)(nil).ProtoReflect()) + } else if v, ok := x.Content.(*RequestContent_VestingAccount); ok { + return protoreflect.ValueOfMessage(v.VestingAccount.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*VestingAccount)(nil).ProtoReflect()) + } + case "network.launch.v1.RequestContent.genesisValidator": + if x.Content == nil { + return protoreflect.ValueOfMessage((*GenesisValidator)(nil).ProtoReflect()) + } else if v, ok := x.Content.(*RequestContent_GenesisValidator); ok { + return protoreflect.ValueOfMessage(v.GenesisValidator.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*GenesisValidator)(nil).ProtoReflect()) + } + case "network.launch.v1.RequestContent.accountRemoval": + if x.Content == nil { + return protoreflect.ValueOfMessage((*AccountRemoval)(nil).ProtoReflect()) + } else if v, ok := x.Content.(*RequestContent_AccountRemoval); ok { + return protoreflect.ValueOfMessage(v.AccountRemoval.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*AccountRemoval)(nil).ProtoReflect()) + } + case "network.launch.v1.RequestContent.validatorRemoval": + if x.Content == nil { + return protoreflect.ValueOfMessage((*ValidatorRemoval)(nil).ProtoReflect()) + } else if v, ok := x.Content.(*RequestContent_ValidatorRemoval); ok { + return protoreflect.ValueOfMessage(v.ValidatorRemoval.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*ValidatorRemoval)(nil).ProtoReflect()) + } + case "network.launch.v1.RequestContent.paramChange": + if x.Content == nil { + return protoreflect.ValueOfMessage((*ParamChange)(nil).ProtoReflect()) + } else if v, ok := x.Content.(*RequestContent_ParamChange); ok { + return protoreflect.ValueOfMessage(v.ParamChange.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*ParamChange)(nil).ProtoReflect()) + } + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestContent")) + } + panic(fmt.Errorf("message network.launch.v1.RequestContent does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RequestContent) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.RequestContent.genesisAccount": + cv := value.Message().Interface().(*GenesisAccount) + x.Content = &RequestContent_GenesisAccount{GenesisAccount: cv} + case "network.launch.v1.RequestContent.vestingAccount": + cv := value.Message().Interface().(*VestingAccount) + x.Content = &RequestContent_VestingAccount{VestingAccount: cv} + case "network.launch.v1.RequestContent.genesisValidator": + cv := value.Message().Interface().(*GenesisValidator) + x.Content = &RequestContent_GenesisValidator{GenesisValidator: cv} + case "network.launch.v1.RequestContent.accountRemoval": + cv := value.Message().Interface().(*AccountRemoval) + x.Content = &RequestContent_AccountRemoval{AccountRemoval: cv} + case "network.launch.v1.RequestContent.validatorRemoval": + cv := value.Message().Interface().(*ValidatorRemoval) + x.Content = &RequestContent_ValidatorRemoval{ValidatorRemoval: cv} + case "network.launch.v1.RequestContent.paramChange": + cv := value.Message().Interface().(*ParamChange) + x.Content = &RequestContent_ParamChange{ParamChange: cv} + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestContent")) + } + panic(fmt.Errorf("message network.launch.v1.RequestContent does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RequestContent) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.RequestContent.genesisAccount": + if x.Content == nil { + value := &GenesisAccount{} + oneofValue := &RequestContent_GenesisAccount{GenesisAccount: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Content.(type) { + case *RequestContent_GenesisAccount: + return protoreflect.ValueOfMessage(m.GenesisAccount.ProtoReflect()) + default: + value := &GenesisAccount{} + oneofValue := &RequestContent_GenesisAccount{GenesisAccount: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.RequestContent.vestingAccount": + if x.Content == nil { + value := &VestingAccount{} + oneofValue := &RequestContent_VestingAccount{VestingAccount: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Content.(type) { + case *RequestContent_VestingAccount: + return protoreflect.ValueOfMessage(m.VestingAccount.ProtoReflect()) + default: + value := &VestingAccount{} + oneofValue := &RequestContent_VestingAccount{VestingAccount: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.RequestContent.genesisValidator": + if x.Content == nil { + value := &GenesisValidator{} + oneofValue := &RequestContent_GenesisValidator{GenesisValidator: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Content.(type) { + case *RequestContent_GenesisValidator: + return protoreflect.ValueOfMessage(m.GenesisValidator.ProtoReflect()) + default: + value := &GenesisValidator{} + oneofValue := &RequestContent_GenesisValidator{GenesisValidator: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.RequestContent.accountRemoval": + if x.Content == nil { + value := &AccountRemoval{} + oneofValue := &RequestContent_AccountRemoval{AccountRemoval: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Content.(type) { + case *RequestContent_AccountRemoval: + return protoreflect.ValueOfMessage(m.AccountRemoval.ProtoReflect()) + default: + value := &AccountRemoval{} + oneofValue := &RequestContent_AccountRemoval{AccountRemoval: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.RequestContent.validatorRemoval": + if x.Content == nil { + value := &ValidatorRemoval{} + oneofValue := &RequestContent_ValidatorRemoval{ValidatorRemoval: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Content.(type) { + case *RequestContent_ValidatorRemoval: + return protoreflect.ValueOfMessage(m.ValidatorRemoval.ProtoReflect()) + default: + value := &ValidatorRemoval{} + oneofValue := &RequestContent_ValidatorRemoval{ValidatorRemoval: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + case "network.launch.v1.RequestContent.paramChange": + if x.Content == nil { + value := &ParamChange{} + oneofValue := &RequestContent_ParamChange{ParamChange: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Content.(type) { + case *RequestContent_ParamChange: + return protoreflect.ValueOfMessage(m.ParamChange.ProtoReflect()) + default: + value := &ParamChange{} + oneofValue := &RequestContent_ParamChange{ParamChange: value} + x.Content = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestContent")) + } + panic(fmt.Errorf("message network.launch.v1.RequestContent does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_RequestContent) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.RequestContent.genesisAccount": + value := &GenesisAccount{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.RequestContent.vestingAccount": + value := &VestingAccount{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.RequestContent.genesisValidator": + value := &GenesisValidator{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.RequestContent.accountRemoval": + value := &AccountRemoval{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.RequestContent.validatorRemoval": + value := &ValidatorRemoval{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.RequestContent.paramChange": + value := &ParamChange{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.RequestContent")) + } + panic(fmt.Errorf("message network.launch.v1.RequestContent does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_RequestContent) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + case "network.launch.v1.RequestContent.content": + if x.Content == nil { + return nil + } + switch x.Content.(type) { + case *RequestContent_GenesisAccount: + return x.Descriptor().Fields().ByName("genesisAccount") + case *RequestContent_VestingAccount: + return x.Descriptor().Fields().ByName("vestingAccount") + case *RequestContent_GenesisValidator: + return x.Descriptor().Fields().ByName("genesisValidator") + case *RequestContent_AccountRemoval: + return x.Descriptor().Fields().ByName("accountRemoval") + case *RequestContent_ValidatorRemoval: + return x.Descriptor().Fields().ByName("validatorRemoval") + case *RequestContent_ParamChange: + return x.Descriptor().Fields().ByName("paramChange") + } + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.RequestContent", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_RequestContent) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RequestContent) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_RequestContent) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_RequestContent) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*RequestContent) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + switch x := x.Content.(type) { + case *RequestContent_GenesisAccount: + if x == nil { + break + } + l = options.Size(x.GenesisAccount) + n += 1 + l + runtime.Sov(uint64(l)) + case *RequestContent_VestingAccount: + if x == nil { + break + } + l = options.Size(x.VestingAccount) + n += 1 + l + runtime.Sov(uint64(l)) + case *RequestContent_GenesisValidator: + if x == nil { + break + } + l = options.Size(x.GenesisValidator) + n += 1 + l + runtime.Sov(uint64(l)) + case *RequestContent_AccountRemoval: + if x == nil { + break + } + l = options.Size(x.AccountRemoval) + n += 1 + l + runtime.Sov(uint64(l)) + case *RequestContent_ValidatorRemoval: + if x == nil { + break + } + l = options.Size(x.ValidatorRemoval) + n += 1 + l + runtime.Sov(uint64(l)) + case *RequestContent_ParamChange: + if x == nil { + break + } + l = options.Size(x.ParamChange) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*RequestContent) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + switch x := x.Content.(type) { + case *RequestContent_GenesisAccount: + encoded, err := options.Marshal(x.GenesisAccount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + case *RequestContent_VestingAccount: + encoded, err := options.Marshal(x.VestingAccount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + case *RequestContent_GenesisValidator: + encoded, err := options.Marshal(x.GenesisValidator) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + case *RequestContent_AccountRemoval: + encoded, err := options.Marshal(x.AccountRemoval) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + case *RequestContent_ValidatorRemoval: + encoded, err := options.Marshal(x.ValidatorRemoval) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + case *RequestContent_ParamChange: + encoded, err := options.Marshal(x.ParamChange) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*RequestContent) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: RequestContent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: RequestContent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &GenesisAccount{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Content = &RequestContent_GenesisAccount{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VestingAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &VestingAccount{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Content = &RequestContent_VestingAccount{v} + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisValidator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &GenesisValidator{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Content = &RequestContent_GenesisValidator{v} + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AccountRemoval", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &AccountRemoval{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Content = &RequestContent_AccountRemoval{v} + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorRemoval", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &ValidatorRemoval{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Content = &RequestContent_ValidatorRemoval{v} + iNdEx = postIndex + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ParamChange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &ParamChange{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Content = &RequestContent_ParamChange{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_AccountRemoval protoreflect.MessageDescriptor + fd_AccountRemoval_address protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_request_proto_init() + md_AccountRemoval = File_network_launch_v1_request_proto.Messages().ByName("AccountRemoval") + fd_AccountRemoval_address = md_AccountRemoval.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_AccountRemoval)(nil) + +type fastReflection_AccountRemoval AccountRemoval + +func (x *AccountRemoval) ProtoReflect() protoreflect.Message { + return (*fastReflection_AccountRemoval)(x) +} + +func (x *AccountRemoval) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_request_proto_msgTypes[2] + 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) +} + +var _fastReflection_AccountRemoval_messageType fastReflection_AccountRemoval_messageType +var _ protoreflect.MessageType = fastReflection_AccountRemoval_messageType{} + +type fastReflection_AccountRemoval_messageType struct{} + +func (x fastReflection_AccountRemoval_messageType) Zero() protoreflect.Message { + return (*fastReflection_AccountRemoval)(nil) +} +func (x fastReflection_AccountRemoval_messageType) New() protoreflect.Message { + return new(fastReflection_AccountRemoval) +} +func (x fastReflection_AccountRemoval_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_AccountRemoval +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_AccountRemoval) Descriptor() protoreflect.MessageDescriptor { + return md_AccountRemoval +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_AccountRemoval) Type() protoreflect.MessageType { + return _fastReflection_AccountRemoval_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_AccountRemoval) New() protoreflect.Message { + return new(fastReflection_AccountRemoval) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_AccountRemoval) Interface() protoreflect.ProtoMessage { + return (*AccountRemoval)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_AccountRemoval) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_AccountRemoval_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_AccountRemoval) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.AccountRemoval.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.AccountRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.AccountRemoval does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AccountRemoval) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.AccountRemoval.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.AccountRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.AccountRemoval does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_AccountRemoval) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.AccountRemoval.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.AccountRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.AccountRemoval does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AccountRemoval) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.AccountRemoval.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.AccountRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.AccountRemoval does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AccountRemoval) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.AccountRemoval.address": + panic(fmt.Errorf("field address of message network.launch.v1.AccountRemoval is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.AccountRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.AccountRemoval does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_AccountRemoval) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.AccountRemoval.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.AccountRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.AccountRemoval does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_AccountRemoval) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.AccountRemoval", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_AccountRemoval) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AccountRemoval) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_AccountRemoval) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_AccountRemoval) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*AccountRemoval) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*AccountRemoval) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*AccountRemoval) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AccountRemoval: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AccountRemoval: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_ValidatorRemoval protoreflect.MessageDescriptor + fd_ValidatorRemoval_valAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_request_proto_init() + md_ValidatorRemoval = File_network_launch_v1_request_proto.Messages().ByName("ValidatorRemoval") + fd_ValidatorRemoval_valAddress = md_ValidatorRemoval.Fields().ByName("valAddress") +} + +var _ protoreflect.Message = (*fastReflection_ValidatorRemoval)(nil) + +type fastReflection_ValidatorRemoval ValidatorRemoval + +func (x *ValidatorRemoval) ProtoReflect() protoreflect.Message { + return (*fastReflection_ValidatorRemoval)(x) +} + +func (x *ValidatorRemoval) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_request_proto_msgTypes[3] + 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) +} + +var _fastReflection_ValidatorRemoval_messageType fastReflection_ValidatorRemoval_messageType +var _ protoreflect.MessageType = fastReflection_ValidatorRemoval_messageType{} + +type fastReflection_ValidatorRemoval_messageType struct{} + +func (x fastReflection_ValidatorRemoval_messageType) Zero() protoreflect.Message { + return (*fastReflection_ValidatorRemoval)(nil) +} +func (x fastReflection_ValidatorRemoval_messageType) New() protoreflect.Message { + return new(fastReflection_ValidatorRemoval) +} +func (x fastReflection_ValidatorRemoval_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ValidatorRemoval +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ValidatorRemoval) Descriptor() protoreflect.MessageDescriptor { + return md_ValidatorRemoval +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ValidatorRemoval) Type() protoreflect.MessageType { + return _fastReflection_ValidatorRemoval_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ValidatorRemoval) New() protoreflect.Message { + return new(fastReflection_ValidatorRemoval) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ValidatorRemoval) Interface() protoreflect.ProtoMessage { + return (*ValidatorRemoval)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ValidatorRemoval) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ValAddress != "" { + value := protoreflect.ValueOfString(x.ValAddress) + if !f(fd_ValidatorRemoval_valAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ValidatorRemoval) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.ValidatorRemoval.valAddress": + return x.ValAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ValidatorRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.ValidatorRemoval does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorRemoval) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.ValidatorRemoval.valAddress": + x.ValAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ValidatorRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.ValidatorRemoval does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ValidatorRemoval) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.ValidatorRemoval.valAddress": + value := x.ValAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ValidatorRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.ValidatorRemoval does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorRemoval) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.ValidatorRemoval.valAddress": + x.ValAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ValidatorRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.ValidatorRemoval does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorRemoval) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.ValidatorRemoval.valAddress": + panic(fmt.Errorf("field valAddress of message network.launch.v1.ValidatorRemoval is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ValidatorRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.ValidatorRemoval does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ValidatorRemoval) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.ValidatorRemoval.valAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.ValidatorRemoval")) + } + panic(fmt.Errorf("message network.launch.v1.ValidatorRemoval does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ValidatorRemoval) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.ValidatorRemoval", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ValidatorRemoval) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorRemoval) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ValidatorRemoval) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ValidatorRemoval) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ValidatorRemoval) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ValAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ValidatorRemoval) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ValAddress) > 0 { + i -= len(x.ValAddress) + copy(dAtA[i:], x.ValAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ValidatorRemoval) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ValidatorRemoval: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ValidatorRemoval: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ValAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/request.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Request_Status int32 + +const ( + Request_PENDING Request_Status = 0 + Request_APPROVED Request_Status = 1 + Request_REJECTED Request_Status = 2 +) + +// Enum value maps for Request_Status. +var ( + Request_Status_name = map[int32]string{ + 0: "PENDING", + 1: "APPROVED", + 2: "REJECTED", + } + Request_Status_value = map[string]int32{ + "PENDING": 0, + "APPROVED": 1, + "REJECTED": 2, + } +) + +func (x Request_Status) Enum() *Request_Status { + p := new(Request_Status) + *p = x + return p +} + +func (x Request_Status) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Request_Status) Descriptor() protoreflect.EnumDescriptor { + return file_network_launch_v1_request_proto_enumTypes[0].Descriptor() +} + +func (Request_Status) Type() protoreflect.EnumType { + return &file_network_launch_v1_request_proto_enumTypes[0] +} + +func (x Request_Status) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Request_Status.Descriptor instead. +func (Request_Status) EnumDescriptor() ([]byte, []int) { + return file_network_launch_v1_request_proto_rawDescGZIP(), []int{0, 0} +} + +type Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + RequestID uint64 `protobuf:"varint,2,opt,name=requestID,proto3" json:"requestID,omitempty"` + Creator string `protobuf:"bytes,3,opt,name=creator,proto3" json:"creator,omitempty"` + CreatedAt int64 `protobuf:"varint,4,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + Content *RequestContent `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"` + Status Request_Status `protobuf:"varint,6,opt,name=status,proto3,enum=network.launch.v1.Request_Status" json:"status,omitempty"` +} + +func (x *Request) Reset() { + *x = Request{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_request_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Request) ProtoMessage() {} + +// Deprecated: Use Request.ProtoReflect.Descriptor instead. +func (*Request) Descriptor() ([]byte, []int) { + return file_network_launch_v1_request_proto_rawDescGZIP(), []int{0} +} + +func (x *Request) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *Request) GetRequestID() uint64 { + if x != nil { + return x.RequestID + } + return 0 +} + +func (x *Request) GetCreator() string { + if x != nil { + return x.Creator + } + return "" +} + +func (x *Request) GetCreatedAt() int64 { + if x != nil { + return x.CreatedAt + } + return 0 +} + +func (x *Request) GetContent() *RequestContent { + if x != nil { + return x.Content + } + return nil +} + +func (x *Request) GetStatus() Request_Status { + if x != nil { + return x.Status + } + return Request_PENDING +} + +type RequestContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Content: + // + // *RequestContent_GenesisAccount + // *RequestContent_VestingAccount + // *RequestContent_GenesisValidator + // *RequestContent_AccountRemoval + // *RequestContent_ValidatorRemoval + // *RequestContent_ParamChange + Content isRequestContent_Content `protobuf_oneof:"content"` +} + +func (x *RequestContent) Reset() { + *x = RequestContent{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_request_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RequestContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequestContent) ProtoMessage() {} + +// Deprecated: Use RequestContent.ProtoReflect.Descriptor instead. +func (*RequestContent) Descriptor() ([]byte, []int) { + return file_network_launch_v1_request_proto_rawDescGZIP(), []int{1} +} + +func (x *RequestContent) GetContent() isRequestContent_Content { + if x != nil { + return x.Content + } + return nil +} + +func (x *RequestContent) GetGenesisAccount() *GenesisAccount { + if x, ok := x.GetContent().(*RequestContent_GenesisAccount); ok { + return x.GenesisAccount + } + return nil +} + +func (x *RequestContent) GetVestingAccount() *VestingAccount { + if x, ok := x.GetContent().(*RequestContent_VestingAccount); ok { + return x.VestingAccount + } + return nil +} + +func (x *RequestContent) GetGenesisValidator() *GenesisValidator { + if x, ok := x.GetContent().(*RequestContent_GenesisValidator); ok { + return x.GenesisValidator + } + return nil +} + +func (x *RequestContent) GetAccountRemoval() *AccountRemoval { + if x, ok := x.GetContent().(*RequestContent_AccountRemoval); ok { + return x.AccountRemoval + } + return nil +} + +func (x *RequestContent) GetValidatorRemoval() *ValidatorRemoval { + if x, ok := x.GetContent().(*RequestContent_ValidatorRemoval); ok { + return x.ValidatorRemoval + } + return nil +} + +func (x *RequestContent) GetParamChange() *ParamChange { + if x, ok := x.GetContent().(*RequestContent_ParamChange); ok { + return x.ParamChange + } + return nil +} + +type isRequestContent_Content interface { + isRequestContent_Content() +} + +type RequestContent_GenesisAccount struct { + GenesisAccount *GenesisAccount `protobuf:"bytes,1,opt,name=genesisAccount,proto3,oneof"` +} + +type RequestContent_VestingAccount struct { + VestingAccount *VestingAccount `protobuf:"bytes,2,opt,name=vestingAccount,proto3,oneof"` +} + +type RequestContent_GenesisValidator struct { + GenesisValidator *GenesisValidator `protobuf:"bytes,3,opt,name=genesisValidator,proto3,oneof"` +} + +type RequestContent_AccountRemoval struct { + AccountRemoval *AccountRemoval `protobuf:"bytes,4,opt,name=accountRemoval,proto3,oneof"` +} + +type RequestContent_ValidatorRemoval struct { + ValidatorRemoval *ValidatorRemoval `protobuf:"bytes,5,opt,name=validatorRemoval,proto3,oneof"` +} + +type RequestContent_ParamChange struct { + ParamChange *ParamChange `protobuf:"bytes,6,opt,name=paramChange,proto3,oneof"` +} + +func (*RequestContent_GenesisAccount) isRequestContent_Content() {} + +func (*RequestContent_VestingAccount) isRequestContent_Content() {} + +func (*RequestContent_GenesisValidator) isRequestContent_Content() {} + +func (*RequestContent_AccountRemoval) isRequestContent_Content() {} + +func (*RequestContent_ValidatorRemoval) isRequestContent_Content() {} + +func (*RequestContent_ParamChange) isRequestContent_Content() {} + +type AccountRemoval struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *AccountRemoval) Reset() { + *x = AccountRemoval{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_request_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountRemoval) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountRemoval) ProtoMessage() {} + +// Deprecated: Use AccountRemoval.ProtoReflect.Descriptor instead. +func (*AccountRemoval) Descriptor() ([]byte, []int) { + return file_network_launch_v1_request_proto_rawDescGZIP(), []int{2} +} + +func (x *AccountRemoval) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type ValidatorRemoval struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ValAddress string `protobuf:"bytes,1,opt,name=valAddress,proto3" json:"valAddress,omitempty"` +} + +func (x *ValidatorRemoval) Reset() { + *x = ValidatorRemoval{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_request_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatorRemoval) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatorRemoval) ProtoMessage() {} + +// Deprecated: Use ValidatorRemoval.ProtoReflect.Descriptor instead. +func (*ValidatorRemoval) Descriptor() ([]byte, []int) { + return file_network_launch_v1_request_proto_rawDescGZIP(), []int{3} +} + +func (x *ValidatorRemoval) GetValAddress() string { + if x != nil { + return x.ValAddress + } + return "" +} + +var File_network_launch_v1_request_proto protoreflect.FileDescriptor + +var file_network_launch_v1_request_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, + 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, + 0x76, 0x31, 0x2f, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x32, + 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, + 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, + 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, + 0x02, 0x22, 0xec, 0x03, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, + 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x51, + 0x0a, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, + 0x10, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x4b, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x51, + 0x0a, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x48, 0x00, 0x52, + 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, + 0x6c, 0x12, 0x42, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x22, 0x44, 0x0a, 0x0e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x4c, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x0a, 0x76, 0x61, + 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, + 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x42, 0xc5, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, + 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, + 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_request_proto_rawDescOnce sync.Once + file_network_launch_v1_request_proto_rawDescData = file_network_launch_v1_request_proto_rawDesc +) + +func file_network_launch_v1_request_proto_rawDescGZIP() []byte { + file_network_launch_v1_request_proto_rawDescOnce.Do(func() { + file_network_launch_v1_request_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_request_proto_rawDescData) + }) + return file_network_launch_v1_request_proto_rawDescData +} + +var file_network_launch_v1_request_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_network_launch_v1_request_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_network_launch_v1_request_proto_goTypes = []interface{}{ + (Request_Status)(0), // 0: network.launch.v1.Request.Status + (*Request)(nil), // 1: network.launch.v1.Request + (*RequestContent)(nil), // 2: network.launch.v1.RequestContent + (*AccountRemoval)(nil), // 3: network.launch.v1.AccountRemoval + (*ValidatorRemoval)(nil), // 4: network.launch.v1.ValidatorRemoval + (*GenesisAccount)(nil), // 5: network.launch.v1.GenesisAccount + (*VestingAccount)(nil), // 6: network.launch.v1.VestingAccount + (*GenesisValidator)(nil), // 7: network.launch.v1.GenesisValidator + (*ParamChange)(nil), // 8: network.launch.v1.ParamChange +} +var file_network_launch_v1_request_proto_depIdxs = []int32{ + 2, // 0: network.launch.v1.Request.content:type_name -> network.launch.v1.RequestContent + 0, // 1: network.launch.v1.Request.status:type_name -> network.launch.v1.Request.Status + 5, // 2: network.launch.v1.RequestContent.genesisAccount:type_name -> network.launch.v1.GenesisAccount + 6, // 3: network.launch.v1.RequestContent.vestingAccount:type_name -> network.launch.v1.VestingAccount + 7, // 4: network.launch.v1.RequestContent.genesisValidator:type_name -> network.launch.v1.GenesisValidator + 3, // 5: network.launch.v1.RequestContent.accountRemoval:type_name -> network.launch.v1.AccountRemoval + 4, // 6: network.launch.v1.RequestContent.validatorRemoval:type_name -> network.launch.v1.ValidatorRemoval + 8, // 7: network.launch.v1.RequestContent.paramChange:type_name -> network.launch.v1.ParamChange + 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 +} + +func init() { file_network_launch_v1_request_proto_init() } +func file_network_launch_v1_request_proto_init() { + if File_network_launch_v1_request_proto != nil { + return + } + file_network_launch_v1_genesis_account_proto_init() + file_network_launch_v1_genesis_validator_proto_init() + file_network_launch_v1_param_change_proto_init() + file_network_launch_v1_vesting_account_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_request_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_request_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RequestContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_request_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountRemoval); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_request_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatorRemoval); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_network_launch_v1_request_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*RequestContent_GenesisAccount)(nil), + (*RequestContent_VestingAccount)(nil), + (*RequestContent_GenesisValidator)(nil), + (*RequestContent_AccountRemoval)(nil), + (*RequestContent_ValidatorRemoval)(nil), + (*RequestContent_ParamChange)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_launch_v1_request_proto_rawDesc, + NumEnums: 1, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_request_proto_goTypes, + DependencyIndexes: file_network_launch_v1_request_proto_depIdxs, + EnumInfos: file_network_launch_v1_request_proto_enumTypes, + MessageInfos: file_network_launch_v1_request_proto_msgTypes, + }.Build() + File_network_launch_v1_request_proto = out.File + file_network_launch_v1_request_proto_rawDesc = nil + file_network_launch_v1_request_proto_goTypes = nil + file_network_launch_v1_request_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/request_content.pulsar.go b/api/network/launch/v1/request_content.pulsar.go new file mode 100644 index 00000000..3a58cef5 --- /dev/null +++ b/api/network/launch/v1/request_content.pulsar.go @@ -0,0 +1,80 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + reflect "reflect" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/request_content.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var File_network_launch_v1_request_content_proto protoreflect.FileDescriptor + +var file_network_launch_v1_request_content_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0xcc, 0x01, 0x0a, + 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, 0x02, 0x11, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, + 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_request_content_proto_goTypes = []interface{}{} + file_network_launch_v1_request_content_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 + } +) + +func init() { file_network_launch_v1_request_content_proto_init() } +func file_network_launch_v1_request_content_proto_init() { + if File_network_launch_v1_request_content_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_launch_v1_request_content_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_request_content_proto_goTypes, + DependencyIndexes: file_network_launch_v1_request_content_proto_depIdxs, + }.Build() + File_network_launch_v1_request_content_proto = out.File + file_network_launch_v1_request_content_proto_rawDesc = nil + file_network_launch_v1_request_content_proto_goTypes = nil + file_network_launch_v1_request_content_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/tx.pulsar.go b/api/network/launch/v1/tx.pulsar.go new file mode 100644 index 00000000..3788bb09 --- /dev/null +++ b/api/network/launch/v1/tx.pulsar.go @@ -0,0 +1,9277 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + _ "cosmossdk.io/api/cosmos/msg/v1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MsgUpdateParams protoreflect.MessageDescriptor + fd_MsgUpdateParams_authority protoreflect.FieldDescriptor + fd_MsgUpdateParams_params protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgUpdateParams = File_network_launch_v1_tx_proto.Messages().ByName("MsgUpdateParams") + fd_MsgUpdateParams_authority = md_MsgUpdateParams.Fields().ByName("authority") + fd_MsgUpdateParams_params = md_MsgUpdateParams.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParams)(nil) + +type fastReflection_MsgUpdateParams MsgUpdateParams + +func (x *MsgUpdateParams) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(x) +} + +func (x *MsgUpdateParams) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_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) +} + +var _fastReflection_MsgUpdateParams_messageType fastReflection_MsgUpdateParams_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParams_messageType{} + +type fastReflection_MsgUpdateParams_messageType struct{} + +func (x fastReflection_MsgUpdateParams_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(nil) +} +func (x fastReflection_MsgUpdateParams_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} +func (x fastReflection_MsgUpdateParams_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParams) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParams) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParams_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParams) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParams) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParams)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParams) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_MsgUpdateParams_authority, value) { + return + } + } + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_MsgUpdateParams_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParams) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateParams.authority": + return x.Authority != "" + case "network.launch.v1.MsgUpdateParams.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateParams.authority": + x.Authority = "" + case "network.launch.v1.MsgUpdateParams.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParams) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgUpdateParams.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgUpdateParams.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParams does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateParams.authority": + x.Authority = value.Interface().(string) + case "network.launch.v1.MsgUpdateParams.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateParams.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.launch.v1.MsgUpdateParams.authority": + panic(fmt.Errorf("field authority of message network.launch.v1.MsgUpdateParams is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParams) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateParams.authority": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgUpdateParams.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParams) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgUpdateParams", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParams) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParams) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParams) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateParamsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgUpdateParamsResponse = File_network_launch_v1_tx_proto.Messages().ByName("MsgUpdateParamsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParamsResponse)(nil) + +type fastReflection_MsgUpdateParamsResponse MsgUpdateParamsResponse + +func (x *MsgUpdateParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(x) +} + +func (x *MsgUpdateParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_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) +} + +var _fastReflection_MsgUpdateParamsResponse_messageType fastReflection_MsgUpdateParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParamsResponse_messageType{} + +type fastReflection_MsgUpdateParamsResponse_messageType struct{} + +func (x fastReflection_MsgUpdateParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(nil) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParamsResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParamsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgUpdateParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgCreateChain_8_list)(nil) + +type _MsgCreateChain_8_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgCreateChain_8_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgCreateChain_8_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgCreateChain_8_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgCreateChain_8_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgCreateChain_8_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgCreateChain_8_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgCreateChain_8_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgCreateChain_8_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgCreateChain protoreflect.MessageDescriptor + fd_MsgCreateChain_coordinator protoreflect.FieldDescriptor + fd_MsgCreateChain_genesisChainID protoreflect.FieldDescriptor + fd_MsgCreateChain_sourceURL protoreflect.FieldDescriptor + fd_MsgCreateChain_sourceHash protoreflect.FieldDescriptor + fd_MsgCreateChain_initialGenesis protoreflect.FieldDescriptor + fd_MsgCreateChain_hasProject protoreflect.FieldDescriptor + fd_MsgCreateChain_projectID protoreflect.FieldDescriptor + fd_MsgCreateChain_accountBalance protoreflect.FieldDescriptor + fd_MsgCreateChain_metadata protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgCreateChain = File_network_launch_v1_tx_proto.Messages().ByName("MsgCreateChain") + fd_MsgCreateChain_coordinator = md_MsgCreateChain.Fields().ByName("coordinator") + fd_MsgCreateChain_genesisChainID = md_MsgCreateChain.Fields().ByName("genesisChainID") + fd_MsgCreateChain_sourceURL = md_MsgCreateChain.Fields().ByName("sourceURL") + fd_MsgCreateChain_sourceHash = md_MsgCreateChain.Fields().ByName("sourceHash") + fd_MsgCreateChain_initialGenesis = md_MsgCreateChain.Fields().ByName("initialGenesis") + fd_MsgCreateChain_hasProject = md_MsgCreateChain.Fields().ByName("hasProject") + fd_MsgCreateChain_projectID = md_MsgCreateChain.Fields().ByName("projectID") + fd_MsgCreateChain_accountBalance = md_MsgCreateChain.Fields().ByName("accountBalance") + fd_MsgCreateChain_metadata = md_MsgCreateChain.Fields().ByName("metadata") +} + +var _ protoreflect.Message = (*fastReflection_MsgCreateChain)(nil) + +type fastReflection_MsgCreateChain MsgCreateChain + +func (x *MsgCreateChain) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgCreateChain)(x) +} + +func (x *MsgCreateChain) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_proto_msgTypes[2] + 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) +} + +var _fastReflection_MsgCreateChain_messageType fastReflection_MsgCreateChain_messageType +var _ protoreflect.MessageType = fastReflection_MsgCreateChain_messageType{} + +type fastReflection_MsgCreateChain_messageType struct{} + +func (x fastReflection_MsgCreateChain_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgCreateChain)(nil) +} +func (x fastReflection_MsgCreateChain_messageType) New() protoreflect.Message { + return new(fastReflection_MsgCreateChain) +} +func (x fastReflection_MsgCreateChain_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateChain +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgCreateChain) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateChain +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgCreateChain) Type() protoreflect.MessageType { + return _fastReflection_MsgCreateChain_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgCreateChain) New() protoreflect.Message { + return new(fastReflection_MsgCreateChain) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgCreateChain) Interface() protoreflect.ProtoMessage { + return (*MsgCreateChain)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgCreateChain) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgCreateChain_coordinator, value) { + return + } + } + if x.GenesisChainID != "" { + value := protoreflect.ValueOfString(x.GenesisChainID) + if !f(fd_MsgCreateChain_genesisChainID, value) { + return + } + } + if x.SourceURL != "" { + value := protoreflect.ValueOfString(x.SourceURL) + if !f(fd_MsgCreateChain_sourceURL, value) { + return + } + } + if x.SourceHash != "" { + value := protoreflect.ValueOfString(x.SourceHash) + if !f(fd_MsgCreateChain_sourceHash, value) { + return + } + } + if x.InitialGenesis != nil { + value := protoreflect.ValueOfMessage(x.InitialGenesis.ProtoReflect()) + if !f(fd_MsgCreateChain_initialGenesis, value) { + return + } + } + if x.HasProject != false { + value := protoreflect.ValueOfBool(x.HasProject) + if !f(fd_MsgCreateChain_hasProject, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgCreateChain_projectID, value) { + return + } + } + if len(x.AccountBalance) != 0 { + value := protoreflect.ValueOfList(&_MsgCreateChain_8_list{list: &x.AccountBalance}) + if !f(fd_MsgCreateChain_accountBalance, value) { + return + } + } + if len(x.Metadata) != 0 { + value := protoreflect.ValueOfBytes(x.Metadata) + if !f(fd_MsgCreateChain_metadata, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgCreateChain) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChain.coordinator": + return x.Coordinator != "" + case "network.launch.v1.MsgCreateChain.genesisChainID": + return x.GenesisChainID != "" + case "network.launch.v1.MsgCreateChain.sourceURL": + return x.SourceURL != "" + case "network.launch.v1.MsgCreateChain.sourceHash": + return x.SourceHash != "" + case "network.launch.v1.MsgCreateChain.initialGenesis": + return x.InitialGenesis != nil + case "network.launch.v1.MsgCreateChain.hasProject": + return x.HasProject != false + case "network.launch.v1.MsgCreateChain.projectID": + return x.ProjectID != uint64(0) + case "network.launch.v1.MsgCreateChain.accountBalance": + return len(x.AccountBalance) != 0 + case "network.launch.v1.MsgCreateChain.metadata": + return len(x.Metadata) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChain does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateChain) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChain.coordinator": + x.Coordinator = "" + case "network.launch.v1.MsgCreateChain.genesisChainID": + x.GenesisChainID = "" + case "network.launch.v1.MsgCreateChain.sourceURL": + x.SourceURL = "" + case "network.launch.v1.MsgCreateChain.sourceHash": + x.SourceHash = "" + case "network.launch.v1.MsgCreateChain.initialGenesis": + x.InitialGenesis = nil + case "network.launch.v1.MsgCreateChain.hasProject": + x.HasProject = false + case "network.launch.v1.MsgCreateChain.projectID": + x.ProjectID = uint64(0) + case "network.launch.v1.MsgCreateChain.accountBalance": + x.AccountBalance = nil + case "network.launch.v1.MsgCreateChain.metadata": + x.Metadata = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChain does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgCreateChain) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgCreateChain.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgCreateChain.genesisChainID": + value := x.GenesisChainID + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgCreateChain.sourceURL": + value := x.SourceURL + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgCreateChain.sourceHash": + value := x.SourceHash + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgCreateChain.initialGenesis": + value := x.InitialGenesis + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.launch.v1.MsgCreateChain.hasProject": + value := x.HasProject + return protoreflect.ValueOfBool(value) + case "network.launch.v1.MsgCreateChain.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgCreateChain.accountBalance": + if len(x.AccountBalance) == 0 { + return protoreflect.ValueOfList(&_MsgCreateChain_8_list{}) + } + listValue := &_MsgCreateChain_8_list{list: &x.AccountBalance} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.MsgCreateChain.metadata": + value := x.Metadata + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChain does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateChain) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChain.coordinator": + x.Coordinator = value.Interface().(string) + case "network.launch.v1.MsgCreateChain.genesisChainID": + x.GenesisChainID = value.Interface().(string) + case "network.launch.v1.MsgCreateChain.sourceURL": + x.SourceURL = value.Interface().(string) + case "network.launch.v1.MsgCreateChain.sourceHash": + x.SourceHash = value.Interface().(string) + case "network.launch.v1.MsgCreateChain.initialGenesis": + x.InitialGenesis = value.Message().Interface().(*InitialGenesis) + case "network.launch.v1.MsgCreateChain.hasProject": + x.HasProject = value.Bool() + case "network.launch.v1.MsgCreateChain.projectID": + x.ProjectID = value.Uint() + case "network.launch.v1.MsgCreateChain.accountBalance": + lv := value.List() + clv := lv.(*_MsgCreateChain_8_list) + x.AccountBalance = *clv.list + case "network.launch.v1.MsgCreateChain.metadata": + x.Metadata = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChain does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateChain) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChain.initialGenesis": + if x.InitialGenesis == nil { + x.InitialGenesis = new(InitialGenesis) + } + return protoreflect.ValueOfMessage(x.InitialGenesis.ProtoReflect()) + case "network.launch.v1.MsgCreateChain.accountBalance": + if x.AccountBalance == nil { + x.AccountBalance = []*v1beta1.Coin{} + } + value := &_MsgCreateChain_8_list{list: &x.AccountBalance} + return protoreflect.ValueOfList(value) + case "network.launch.v1.MsgCreateChain.coordinator": + panic(fmt.Errorf("field coordinator of message network.launch.v1.MsgCreateChain is not mutable")) + case "network.launch.v1.MsgCreateChain.genesisChainID": + panic(fmt.Errorf("field genesisChainID of message network.launch.v1.MsgCreateChain is not mutable")) + case "network.launch.v1.MsgCreateChain.sourceURL": + panic(fmt.Errorf("field sourceURL of message network.launch.v1.MsgCreateChain is not mutable")) + case "network.launch.v1.MsgCreateChain.sourceHash": + panic(fmt.Errorf("field sourceHash of message network.launch.v1.MsgCreateChain is not mutable")) + case "network.launch.v1.MsgCreateChain.hasProject": + panic(fmt.Errorf("field hasProject of message network.launch.v1.MsgCreateChain is not mutable")) + case "network.launch.v1.MsgCreateChain.projectID": + panic(fmt.Errorf("field projectID of message network.launch.v1.MsgCreateChain is not mutable")) + case "network.launch.v1.MsgCreateChain.metadata": + panic(fmt.Errorf("field metadata of message network.launch.v1.MsgCreateChain is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChain does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgCreateChain) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChain.coordinator": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgCreateChain.genesisChainID": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgCreateChain.sourceURL": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgCreateChain.sourceHash": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgCreateChain.initialGenesis": + m := new(InitialGenesis) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.launch.v1.MsgCreateChain.hasProject": + return protoreflect.ValueOfBool(false) + case "network.launch.v1.MsgCreateChain.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgCreateChain.accountBalance": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgCreateChain_8_list{list: &list}) + case "network.launch.v1.MsgCreateChain.metadata": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChain does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgCreateChain) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgCreateChain", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgCreateChain) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateChain) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgCreateChain) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgCreateChain) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgCreateChain) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.GenesisChainID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.SourceURL) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.SourceHash) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.InitialGenesis != nil { + l = options.Size(x.InitialGenesis) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.HasProject { + n += 2 + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if len(x.AccountBalance) > 0 { + for _, e := range x.AccountBalance { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + l = len(x.Metadata) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateChain) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Metadata) > 0 { + i -= len(x.Metadata) + copy(dAtA[i:], x.Metadata) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Metadata))) + i-- + dAtA[i] = 0x4a + } + if len(x.AccountBalance) > 0 { + for iNdEx := len(x.AccountBalance) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.AccountBalance[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x42 + } + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x38 + } + if x.HasProject { + i-- + if x.HasProject { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + } + if x.InitialGenesis != nil { + encoded, err := options.Marshal(x.InitialGenesis) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + } + if len(x.SourceHash) > 0 { + i -= len(x.SourceHash) + copy(dAtA[i:], x.SourceHash) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SourceHash))) + i-- + dAtA[i] = 0x22 + } + if len(x.SourceURL) > 0 { + i -= len(x.SourceURL) + copy(dAtA[i:], x.SourceURL) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SourceURL))) + i-- + dAtA[i] = 0x1a + } + if len(x.GenesisChainID) > 0 { + i -= len(x.GenesisChainID) + copy(dAtA[i:], x.GenesisChainID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GenesisChainID))) + i-- + dAtA[i] = 0x12 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateChain) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateChain: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateChain: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisChainID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisChainID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SourceURL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SourceURL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SourceHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SourceHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field InitialGenesis", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.InitialGenesis == nil { + x.InitialGenesis = &InitialGenesis{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.InitialGenesis); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field HasProject", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.HasProject = bool(v != 0) + case 7: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AccountBalance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.AccountBalance = append(x.AccountBalance, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AccountBalance[len(x.AccountBalance)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Metadata = append(x.Metadata[:0], dAtA[iNdEx:postIndex]...) + if x.Metadata == nil { + x.Metadata = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgCreateChainResponse protoreflect.MessageDescriptor + fd_MsgCreateChainResponse_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgCreateChainResponse = File_network_launch_v1_tx_proto.Messages().ByName("MsgCreateChainResponse") + fd_MsgCreateChainResponse_launchID = md_MsgCreateChainResponse.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_MsgCreateChainResponse)(nil) + +type fastReflection_MsgCreateChainResponse MsgCreateChainResponse + +func (x *MsgCreateChainResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgCreateChainResponse)(x) +} + +func (x *MsgCreateChainResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_proto_msgTypes[3] + 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) +} + +var _fastReflection_MsgCreateChainResponse_messageType fastReflection_MsgCreateChainResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgCreateChainResponse_messageType{} + +type fastReflection_MsgCreateChainResponse_messageType struct{} + +func (x fastReflection_MsgCreateChainResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgCreateChainResponse)(nil) +} +func (x fastReflection_MsgCreateChainResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgCreateChainResponse) +} +func (x fastReflection_MsgCreateChainResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateChainResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgCreateChainResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateChainResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgCreateChainResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgCreateChainResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgCreateChainResponse) New() protoreflect.Message { + return new(fastReflection_MsgCreateChainResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgCreateChainResponse) Interface() protoreflect.ProtoMessage { + return (*MsgCreateChainResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgCreateChainResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgCreateChainResponse_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgCreateChainResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChainResponse.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChainResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateChainResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChainResponse.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChainResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgCreateChainResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgCreateChainResponse.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChainResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateChainResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChainResponse.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChainResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateChainResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChainResponse.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.MsgCreateChainResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChainResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgCreateChainResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgCreateChainResponse.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgCreateChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgCreateChainResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgCreateChainResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgCreateChainResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgCreateChainResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateChainResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgCreateChainResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgCreateChainResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgCreateChainResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateChainResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateChainResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateChainResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateChainResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgEditChain protoreflect.MessageDescriptor + fd_MsgEditChain_coordinator protoreflect.FieldDescriptor + fd_MsgEditChain_launchID protoreflect.FieldDescriptor + fd_MsgEditChain_setProjectID protoreflect.FieldDescriptor + fd_MsgEditChain_projectID protoreflect.FieldDescriptor + fd_MsgEditChain_metadata protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgEditChain = File_network_launch_v1_tx_proto.Messages().ByName("MsgEditChain") + fd_MsgEditChain_coordinator = md_MsgEditChain.Fields().ByName("coordinator") + fd_MsgEditChain_launchID = md_MsgEditChain.Fields().ByName("launchID") + fd_MsgEditChain_setProjectID = md_MsgEditChain.Fields().ByName("setProjectID") + fd_MsgEditChain_projectID = md_MsgEditChain.Fields().ByName("projectID") + fd_MsgEditChain_metadata = md_MsgEditChain.Fields().ByName("metadata") +} + +var _ protoreflect.Message = (*fastReflection_MsgEditChain)(nil) + +type fastReflection_MsgEditChain MsgEditChain + +func (x *MsgEditChain) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgEditChain)(x) +} + +func (x *MsgEditChain) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_proto_msgTypes[4] + 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) +} + +var _fastReflection_MsgEditChain_messageType fastReflection_MsgEditChain_messageType +var _ protoreflect.MessageType = fastReflection_MsgEditChain_messageType{} + +type fastReflection_MsgEditChain_messageType struct{} + +func (x fastReflection_MsgEditChain_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgEditChain)(nil) +} +func (x fastReflection_MsgEditChain_messageType) New() protoreflect.Message { + return new(fastReflection_MsgEditChain) +} +func (x fastReflection_MsgEditChain_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEditChain +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgEditChain) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEditChain +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgEditChain) Type() protoreflect.MessageType { + return _fastReflection_MsgEditChain_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgEditChain) New() protoreflect.Message { + return new(fastReflection_MsgEditChain) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgEditChain) Interface() protoreflect.ProtoMessage { + return (*MsgEditChain)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgEditChain) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgEditChain_coordinator, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgEditChain_launchID, value) { + return + } + } + if x.SetProjectID != false { + value := protoreflect.ValueOfBool(x.SetProjectID) + if !f(fd_MsgEditChain_setProjectID, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgEditChain_projectID, value) { + return + } + } + if len(x.Metadata) != 0 { + value := protoreflect.ValueOfBytes(x.Metadata) + if !f(fd_MsgEditChain_metadata, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgEditChain) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgEditChain.coordinator": + return x.Coordinator != "" + case "network.launch.v1.MsgEditChain.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.MsgEditChain.setProjectID": + return x.SetProjectID != false + case "network.launch.v1.MsgEditChain.projectID": + return x.ProjectID != uint64(0) + case "network.launch.v1.MsgEditChain.metadata": + return len(x.Metadata) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChain does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditChain) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgEditChain.coordinator": + x.Coordinator = "" + case "network.launch.v1.MsgEditChain.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.MsgEditChain.setProjectID": + x.SetProjectID = false + case "network.launch.v1.MsgEditChain.projectID": + x.ProjectID = uint64(0) + case "network.launch.v1.MsgEditChain.metadata": + x.Metadata = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChain does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgEditChain) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgEditChain.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgEditChain.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgEditChain.setProjectID": + value := x.SetProjectID + return protoreflect.ValueOfBool(value) + case "network.launch.v1.MsgEditChain.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgEditChain.metadata": + value := x.Metadata + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChain does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditChain) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgEditChain.coordinator": + x.Coordinator = value.Interface().(string) + case "network.launch.v1.MsgEditChain.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.MsgEditChain.setProjectID": + x.SetProjectID = value.Bool() + case "network.launch.v1.MsgEditChain.projectID": + x.ProjectID = value.Uint() + case "network.launch.v1.MsgEditChain.metadata": + x.Metadata = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChain does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditChain) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgEditChain.coordinator": + panic(fmt.Errorf("field coordinator of message network.launch.v1.MsgEditChain is not mutable")) + case "network.launch.v1.MsgEditChain.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.MsgEditChain is not mutable")) + case "network.launch.v1.MsgEditChain.setProjectID": + panic(fmt.Errorf("field setProjectID of message network.launch.v1.MsgEditChain is not mutable")) + case "network.launch.v1.MsgEditChain.projectID": + panic(fmt.Errorf("field projectID of message network.launch.v1.MsgEditChain is not mutable")) + case "network.launch.v1.MsgEditChain.metadata": + panic(fmt.Errorf("field metadata of message network.launch.v1.MsgEditChain is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChain does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgEditChain) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgEditChain.coordinator": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgEditChain.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgEditChain.setProjectID": + return protoreflect.ValueOfBool(false) + case "network.launch.v1.MsgEditChain.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgEditChain.metadata": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChain")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChain does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgEditChain) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgEditChain", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgEditChain) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditChain) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgEditChain) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgEditChain) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgEditChain) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.SetProjectID { + n += 2 + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Metadata) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgEditChain) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Metadata) > 0 { + i -= len(x.Metadata) + copy(dAtA[i:], x.Metadata) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Metadata))) + i-- + dAtA[i] = 0x2a + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x20 + } + if x.SetProjectID { + i-- + if x.SetProjectID { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgEditChain) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEditChain: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEditChain: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SetProjectID", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.SetProjectID = bool(v != 0) + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Metadata = append(x.Metadata[:0], dAtA[iNdEx:postIndex]...) + if x.Metadata == nil { + x.Metadata = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgEditChainResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgEditChainResponse = File_network_launch_v1_tx_proto.Messages().ByName("MsgEditChainResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgEditChainResponse)(nil) + +type fastReflection_MsgEditChainResponse MsgEditChainResponse + +func (x *MsgEditChainResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgEditChainResponse)(x) +} + +func (x *MsgEditChainResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_proto_msgTypes[5] + 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) +} + +var _fastReflection_MsgEditChainResponse_messageType fastReflection_MsgEditChainResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgEditChainResponse_messageType{} + +type fastReflection_MsgEditChainResponse_messageType struct{} + +func (x fastReflection_MsgEditChainResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgEditChainResponse)(nil) +} +func (x fastReflection_MsgEditChainResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgEditChainResponse) +} +func (x fastReflection_MsgEditChainResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEditChainResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgEditChainResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEditChainResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgEditChainResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgEditChainResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgEditChainResponse) New() protoreflect.Message { + return new(fastReflection_MsgEditChainResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgEditChainResponse) Interface() protoreflect.ProtoMessage { + return (*MsgEditChainResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgEditChainResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgEditChainResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChainResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditChainResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChainResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgEditChainResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChainResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditChainResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChainResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditChainResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChainResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgEditChainResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgEditChainResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgEditChainResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgEditChainResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgEditChainResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgEditChainResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditChainResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgEditChainResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgEditChainResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgEditChainResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgEditChainResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgEditChainResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEditChainResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEditChainResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateLaunchInformation protoreflect.MessageDescriptor + fd_MsgUpdateLaunchInformation_coordinator protoreflect.FieldDescriptor + fd_MsgUpdateLaunchInformation_launchID protoreflect.FieldDescriptor + fd_MsgUpdateLaunchInformation_genesisChainID protoreflect.FieldDescriptor + fd_MsgUpdateLaunchInformation_sourceURL protoreflect.FieldDescriptor + fd_MsgUpdateLaunchInformation_sourceHash protoreflect.FieldDescriptor + fd_MsgUpdateLaunchInformation_initialGenesis protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgUpdateLaunchInformation = File_network_launch_v1_tx_proto.Messages().ByName("MsgUpdateLaunchInformation") + fd_MsgUpdateLaunchInformation_coordinator = md_MsgUpdateLaunchInformation.Fields().ByName("coordinator") + fd_MsgUpdateLaunchInformation_launchID = md_MsgUpdateLaunchInformation.Fields().ByName("launchID") + fd_MsgUpdateLaunchInformation_genesisChainID = md_MsgUpdateLaunchInformation.Fields().ByName("genesisChainID") + fd_MsgUpdateLaunchInformation_sourceURL = md_MsgUpdateLaunchInformation.Fields().ByName("sourceURL") + fd_MsgUpdateLaunchInformation_sourceHash = md_MsgUpdateLaunchInformation.Fields().ByName("sourceHash") + fd_MsgUpdateLaunchInformation_initialGenesis = md_MsgUpdateLaunchInformation.Fields().ByName("initialGenesis") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateLaunchInformation)(nil) + +type fastReflection_MsgUpdateLaunchInformation MsgUpdateLaunchInformation + +func (x *MsgUpdateLaunchInformation) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateLaunchInformation)(x) +} + +func (x *MsgUpdateLaunchInformation) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_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) +} + +var _fastReflection_MsgUpdateLaunchInformation_messageType fastReflection_MsgUpdateLaunchInformation_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateLaunchInformation_messageType{} + +type fastReflection_MsgUpdateLaunchInformation_messageType struct{} + +func (x fastReflection_MsgUpdateLaunchInformation_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateLaunchInformation)(nil) +} +func (x fastReflection_MsgUpdateLaunchInformation_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateLaunchInformation) +} +func (x fastReflection_MsgUpdateLaunchInformation_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateLaunchInformation +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateLaunchInformation) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateLaunchInformation +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateLaunchInformation) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateLaunchInformation_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateLaunchInformation) New() protoreflect.Message { + return new(fastReflection_MsgUpdateLaunchInformation) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateLaunchInformation) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateLaunchInformation)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateLaunchInformation) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgUpdateLaunchInformation_coordinator, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgUpdateLaunchInformation_launchID, value) { + return + } + } + if x.GenesisChainID != "" { + value := protoreflect.ValueOfString(x.GenesisChainID) + if !f(fd_MsgUpdateLaunchInformation_genesisChainID, value) { + return + } + } + if x.SourceURL != "" { + value := protoreflect.ValueOfString(x.SourceURL) + if !f(fd_MsgUpdateLaunchInformation_sourceURL, value) { + return + } + } + if x.SourceHash != "" { + value := protoreflect.ValueOfString(x.SourceHash) + if !f(fd_MsgUpdateLaunchInformation_sourceHash, value) { + return + } + } + if x.InitialGenesis != nil { + value := protoreflect.ValueOfMessage(x.InitialGenesis.ProtoReflect()) + if !f(fd_MsgUpdateLaunchInformation_initialGenesis, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateLaunchInformation) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateLaunchInformation.coordinator": + return x.Coordinator != "" + case "network.launch.v1.MsgUpdateLaunchInformation.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.MsgUpdateLaunchInformation.genesisChainID": + return x.GenesisChainID != "" + case "network.launch.v1.MsgUpdateLaunchInformation.sourceURL": + return x.SourceURL != "" + case "network.launch.v1.MsgUpdateLaunchInformation.sourceHash": + return x.SourceHash != "" + case "network.launch.v1.MsgUpdateLaunchInformation.initialGenesis": + return x.InitialGenesis != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformation")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformation does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateLaunchInformation) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateLaunchInformation.coordinator": + x.Coordinator = "" + case "network.launch.v1.MsgUpdateLaunchInformation.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.MsgUpdateLaunchInformation.genesisChainID": + x.GenesisChainID = "" + case "network.launch.v1.MsgUpdateLaunchInformation.sourceURL": + x.SourceURL = "" + case "network.launch.v1.MsgUpdateLaunchInformation.sourceHash": + x.SourceHash = "" + case "network.launch.v1.MsgUpdateLaunchInformation.initialGenesis": + x.InitialGenesis = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformation")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformation does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateLaunchInformation) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgUpdateLaunchInformation.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgUpdateLaunchInformation.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgUpdateLaunchInformation.genesisChainID": + value := x.GenesisChainID + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgUpdateLaunchInformation.sourceURL": + value := x.SourceURL + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgUpdateLaunchInformation.sourceHash": + value := x.SourceHash + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgUpdateLaunchInformation.initialGenesis": + value := x.InitialGenesis + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformation")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformation does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateLaunchInformation) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateLaunchInformation.coordinator": + x.Coordinator = value.Interface().(string) + case "network.launch.v1.MsgUpdateLaunchInformation.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.MsgUpdateLaunchInformation.genesisChainID": + x.GenesisChainID = value.Interface().(string) + case "network.launch.v1.MsgUpdateLaunchInformation.sourceURL": + x.SourceURL = value.Interface().(string) + case "network.launch.v1.MsgUpdateLaunchInformation.sourceHash": + x.SourceHash = value.Interface().(string) + case "network.launch.v1.MsgUpdateLaunchInformation.initialGenesis": + x.InitialGenesis = value.Message().Interface().(*InitialGenesis) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformation")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformation does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateLaunchInformation) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateLaunchInformation.initialGenesis": + if x.InitialGenesis == nil { + x.InitialGenesis = new(InitialGenesis) + } + return protoreflect.ValueOfMessage(x.InitialGenesis.ProtoReflect()) + case "network.launch.v1.MsgUpdateLaunchInformation.coordinator": + panic(fmt.Errorf("field coordinator of message network.launch.v1.MsgUpdateLaunchInformation is not mutable")) + case "network.launch.v1.MsgUpdateLaunchInformation.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.MsgUpdateLaunchInformation is not mutable")) + case "network.launch.v1.MsgUpdateLaunchInformation.genesisChainID": + panic(fmt.Errorf("field genesisChainID of message network.launch.v1.MsgUpdateLaunchInformation is not mutable")) + case "network.launch.v1.MsgUpdateLaunchInformation.sourceURL": + panic(fmt.Errorf("field sourceURL of message network.launch.v1.MsgUpdateLaunchInformation is not mutable")) + case "network.launch.v1.MsgUpdateLaunchInformation.sourceHash": + panic(fmt.Errorf("field sourceHash of message network.launch.v1.MsgUpdateLaunchInformation is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformation")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformation does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateLaunchInformation) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgUpdateLaunchInformation.coordinator": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgUpdateLaunchInformation.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgUpdateLaunchInformation.genesisChainID": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgUpdateLaunchInformation.sourceURL": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgUpdateLaunchInformation.sourceHash": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgUpdateLaunchInformation.initialGenesis": + m := new(InitialGenesis) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformation")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformation does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateLaunchInformation) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgUpdateLaunchInformation", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateLaunchInformation) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateLaunchInformation) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateLaunchInformation) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateLaunchInformation) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateLaunchInformation) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.GenesisChainID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.SourceURL) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.SourceHash) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.InitialGenesis != nil { + l = options.Size(x.InitialGenesis) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateLaunchInformation) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.InitialGenesis != nil { + encoded, err := options.Marshal(x.InitialGenesis) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + if len(x.SourceHash) > 0 { + i -= len(x.SourceHash) + copy(dAtA[i:], x.SourceHash) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SourceHash))) + i-- + dAtA[i] = 0x2a + } + if len(x.SourceURL) > 0 { + i -= len(x.SourceURL) + copy(dAtA[i:], x.SourceURL) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SourceURL))) + i-- + dAtA[i] = 0x22 + } + if len(x.GenesisChainID) > 0 { + i -= len(x.GenesisChainID) + copy(dAtA[i:], x.GenesisChainID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.GenesisChainID))) + i-- + dAtA[i] = 0x1a + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateLaunchInformation) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateLaunchInformation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateLaunchInformation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisChainID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisChainID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SourceURL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SourceURL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SourceHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SourceHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field InitialGenesis", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.InitialGenesis == nil { + x.InitialGenesis = &InitialGenesis{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.InitialGenesis); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateLaunchInformationResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgUpdateLaunchInformationResponse = File_network_launch_v1_tx_proto.Messages().ByName("MsgUpdateLaunchInformationResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateLaunchInformationResponse)(nil) + +type fastReflection_MsgUpdateLaunchInformationResponse MsgUpdateLaunchInformationResponse + +func (x *MsgUpdateLaunchInformationResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateLaunchInformationResponse)(x) +} + +func (x *MsgUpdateLaunchInformationResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_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) +} + +var _fastReflection_MsgUpdateLaunchInformationResponse_messageType fastReflection_MsgUpdateLaunchInformationResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateLaunchInformationResponse_messageType{} + +type fastReflection_MsgUpdateLaunchInformationResponse_messageType struct{} + +func (x fastReflection_MsgUpdateLaunchInformationResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateLaunchInformationResponse)(nil) +} +func (x fastReflection_MsgUpdateLaunchInformationResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateLaunchInformationResponse) +} +func (x fastReflection_MsgUpdateLaunchInformationResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateLaunchInformationResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateLaunchInformationResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateLaunchInformationResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateLaunchInformationResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateLaunchInformationResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformationResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformationResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformationResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformationResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformationResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformationResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformationResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformationResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformationResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformationResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgUpdateLaunchInformationResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgUpdateLaunchInformationResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgUpdateLaunchInformationResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateLaunchInformationResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateLaunchInformationResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateLaunchInformationResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateLaunchInformationResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateLaunchInformationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateLaunchInformationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgSendRequest protoreflect.MessageDescriptor + fd_MsgSendRequest_creator protoreflect.FieldDescriptor + fd_MsgSendRequest_launchID protoreflect.FieldDescriptor + fd_MsgSendRequest_content protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgSendRequest = File_network_launch_v1_tx_proto.Messages().ByName("MsgSendRequest") + fd_MsgSendRequest_creator = md_MsgSendRequest.Fields().ByName("creator") + fd_MsgSendRequest_launchID = md_MsgSendRequest.Fields().ByName("launchID") + fd_MsgSendRequest_content = md_MsgSendRequest.Fields().ByName("content") +} + +var _ protoreflect.Message = (*fastReflection_MsgSendRequest)(nil) + +type fastReflection_MsgSendRequest MsgSendRequest + +func (x *MsgSendRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgSendRequest)(x) +} + +func (x *MsgSendRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_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) +} + +var _fastReflection_MsgSendRequest_messageType fastReflection_MsgSendRequest_messageType +var _ protoreflect.MessageType = fastReflection_MsgSendRequest_messageType{} + +type fastReflection_MsgSendRequest_messageType struct{} + +func (x fastReflection_MsgSendRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgSendRequest)(nil) +} +func (x fastReflection_MsgSendRequest_messageType) New() protoreflect.Message { + return new(fastReflection_MsgSendRequest) +} +func (x fastReflection_MsgSendRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSendRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgSendRequest) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSendRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgSendRequest) Type() protoreflect.MessageType { + return _fastReflection_MsgSendRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgSendRequest) New() protoreflect.Message { + return new(fastReflection_MsgSendRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgSendRequest) Interface() protoreflect.ProtoMessage { + return (*MsgSendRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgSendRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Creator != "" { + value := protoreflect.ValueOfString(x.Creator) + if !f(fd_MsgSendRequest_creator, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgSendRequest_launchID, value) { + return + } + } + if x.Content != nil { + value := protoreflect.ValueOfMessage(x.Content.ProtoReflect()) + if !f(fd_MsgSendRequest_content, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgSendRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequest.creator": + return x.Creator != "" + case "network.launch.v1.MsgSendRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.MsgSendRequest.content": + return x.Content != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSendRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequest.creator": + x.Creator = "" + case "network.launch.v1.MsgSendRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.MsgSendRequest.content": + x.Content = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgSendRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgSendRequest.creator": + value := x.Creator + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgSendRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgSendRequest.content": + value := x.Content + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSendRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequest.creator": + x.Creator = value.Interface().(string) + case "network.launch.v1.MsgSendRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.MsgSendRequest.content": + x.Content = value.Message().Interface().(*RequestContent) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSendRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequest.content": + if x.Content == nil { + x.Content = new(RequestContent) + } + return protoreflect.ValueOfMessage(x.Content.ProtoReflect()) + case "network.launch.v1.MsgSendRequest.creator": + panic(fmt.Errorf("field creator of message network.launch.v1.MsgSendRequest is not mutable")) + case "network.launch.v1.MsgSendRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.MsgSendRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgSendRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequest.creator": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgSendRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgSendRequest.content": + m := new(RequestContent) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgSendRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgSendRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgSendRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSendRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgSendRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgSendRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgSendRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Creator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.Content != nil { + l = options.Size(x.Content) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgSendRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Content != nil { + encoded, err := options.Marshal(x.Content) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Creator) > 0 { + i -= len(x.Creator) + copy(dAtA[i:], x.Creator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Creator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgSendRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSendRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSendRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Content", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Content == nil { + x.Content = &RequestContent{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Content); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgSendRequestResponse protoreflect.MessageDescriptor + fd_MsgSendRequestResponse_requestID protoreflect.FieldDescriptor + fd_MsgSendRequestResponse_autoApproved protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgSendRequestResponse = File_network_launch_v1_tx_proto.Messages().ByName("MsgSendRequestResponse") + fd_MsgSendRequestResponse_requestID = md_MsgSendRequestResponse.Fields().ByName("requestID") + fd_MsgSendRequestResponse_autoApproved = md_MsgSendRequestResponse.Fields().ByName("autoApproved") +} + +var _ protoreflect.Message = (*fastReflection_MsgSendRequestResponse)(nil) + +type fastReflection_MsgSendRequestResponse MsgSendRequestResponse + +func (x *MsgSendRequestResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgSendRequestResponse)(x) +} + +func (x *MsgSendRequestResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_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) +} + +var _fastReflection_MsgSendRequestResponse_messageType fastReflection_MsgSendRequestResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgSendRequestResponse_messageType{} + +type fastReflection_MsgSendRequestResponse_messageType struct{} + +func (x fastReflection_MsgSendRequestResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgSendRequestResponse)(nil) +} +func (x fastReflection_MsgSendRequestResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgSendRequestResponse) +} +func (x fastReflection_MsgSendRequestResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSendRequestResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgSendRequestResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSendRequestResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgSendRequestResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgSendRequestResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgSendRequestResponse) New() protoreflect.Message { + return new(fastReflection_MsgSendRequestResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgSendRequestResponse) Interface() protoreflect.ProtoMessage { + return (*MsgSendRequestResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgSendRequestResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.RequestID != uint64(0) { + value := protoreflect.ValueOfUint64(x.RequestID) + if !f(fd_MsgSendRequestResponse_requestID, value) { + return + } + } + if x.AutoApproved != false { + value := protoreflect.ValueOfBool(x.AutoApproved) + if !f(fd_MsgSendRequestResponse_autoApproved, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgSendRequestResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequestResponse.requestID": + return x.RequestID != uint64(0) + case "network.launch.v1.MsgSendRequestResponse.autoApproved": + return x.AutoApproved != false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSendRequestResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequestResponse.requestID": + x.RequestID = uint64(0) + case "network.launch.v1.MsgSendRequestResponse.autoApproved": + x.AutoApproved = false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgSendRequestResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgSendRequestResponse.requestID": + value := x.RequestID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgSendRequestResponse.autoApproved": + value := x.AutoApproved + return protoreflect.ValueOfBool(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequestResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSendRequestResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequestResponse.requestID": + x.RequestID = value.Uint() + case "network.launch.v1.MsgSendRequestResponse.autoApproved": + x.AutoApproved = value.Bool() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSendRequestResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequestResponse.requestID": + panic(fmt.Errorf("field requestID of message network.launch.v1.MsgSendRequestResponse is not mutable")) + case "network.launch.v1.MsgSendRequestResponse.autoApproved": + panic(fmt.Errorf("field autoApproved of message network.launch.v1.MsgSendRequestResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequestResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgSendRequestResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgSendRequestResponse.requestID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgSendRequestResponse.autoApproved": + return protoreflect.ValueOfBool(false) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSendRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSendRequestResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgSendRequestResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgSendRequestResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgSendRequestResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSendRequestResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgSendRequestResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgSendRequestResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgSendRequestResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.RequestID != 0 { + n += 1 + runtime.Sov(uint64(x.RequestID)) + } + if x.AutoApproved { + n += 2 + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgSendRequestResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.AutoApproved { + i-- + if x.AutoApproved { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if x.RequestID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RequestID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgSendRequestResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSendRequestResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSendRequestResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequestID", wireType) + } + x.RequestID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.RequestID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AutoApproved", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.AutoApproved = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgSettleRequest protoreflect.MessageDescriptor + fd_MsgSettleRequest_signer protoreflect.FieldDescriptor + fd_MsgSettleRequest_launchID protoreflect.FieldDescriptor + fd_MsgSettleRequest_requestID protoreflect.FieldDescriptor + fd_MsgSettleRequest_approve protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgSettleRequest = File_network_launch_v1_tx_proto.Messages().ByName("MsgSettleRequest") + fd_MsgSettleRequest_signer = md_MsgSettleRequest.Fields().ByName("signer") + fd_MsgSettleRequest_launchID = md_MsgSettleRequest.Fields().ByName("launchID") + fd_MsgSettleRequest_requestID = md_MsgSettleRequest.Fields().ByName("requestID") + fd_MsgSettleRequest_approve = md_MsgSettleRequest.Fields().ByName("approve") +} + +var _ protoreflect.Message = (*fastReflection_MsgSettleRequest)(nil) + +type fastReflection_MsgSettleRequest MsgSettleRequest + +func (x *MsgSettleRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgSettleRequest)(x) +} + +func (x *MsgSettleRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_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) +} + +var _fastReflection_MsgSettleRequest_messageType fastReflection_MsgSettleRequest_messageType +var _ protoreflect.MessageType = fastReflection_MsgSettleRequest_messageType{} + +type fastReflection_MsgSettleRequest_messageType struct{} + +func (x fastReflection_MsgSettleRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgSettleRequest)(nil) +} +func (x fastReflection_MsgSettleRequest_messageType) New() protoreflect.Message { + return new(fastReflection_MsgSettleRequest) +} +func (x fastReflection_MsgSettleRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSettleRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgSettleRequest) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSettleRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgSettleRequest) Type() protoreflect.MessageType { + return _fastReflection_MsgSettleRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgSettleRequest) New() protoreflect.Message { + return new(fastReflection_MsgSettleRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgSettleRequest) Interface() protoreflect.ProtoMessage { + return (*MsgSettleRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgSettleRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Signer != "" { + value := protoreflect.ValueOfString(x.Signer) + if !f(fd_MsgSettleRequest_signer, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgSettleRequest_launchID, value) { + return + } + } + if x.RequestID != uint64(0) { + value := protoreflect.ValueOfUint64(x.RequestID) + if !f(fd_MsgSettleRequest_requestID, value) { + return + } + } + if x.Approve != false { + value := protoreflect.ValueOfBool(x.Approve) + if !f(fd_MsgSettleRequest_approve, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgSettleRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgSettleRequest.signer": + return x.Signer != "" + case "network.launch.v1.MsgSettleRequest.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.MsgSettleRequest.requestID": + return x.RequestID != uint64(0) + case "network.launch.v1.MsgSettleRequest.approve": + return x.Approve != false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSettleRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgSettleRequest.signer": + x.Signer = "" + case "network.launch.v1.MsgSettleRequest.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.MsgSettleRequest.requestID": + x.RequestID = uint64(0) + case "network.launch.v1.MsgSettleRequest.approve": + x.Approve = false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgSettleRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgSettleRequest.signer": + value := x.Signer + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgSettleRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgSettleRequest.requestID": + value := x.RequestID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgSettleRequest.approve": + value := x.Approve + return protoreflect.ValueOfBool(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSettleRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgSettleRequest.signer": + x.Signer = value.Interface().(string) + case "network.launch.v1.MsgSettleRequest.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.MsgSettleRequest.requestID": + x.RequestID = value.Uint() + case "network.launch.v1.MsgSettleRequest.approve": + x.Approve = value.Bool() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSettleRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgSettleRequest.signer": + panic(fmt.Errorf("field signer of message network.launch.v1.MsgSettleRequest is not mutable")) + case "network.launch.v1.MsgSettleRequest.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.MsgSettleRequest is not mutable")) + case "network.launch.v1.MsgSettleRequest.requestID": + panic(fmt.Errorf("field requestID of message network.launch.v1.MsgSettleRequest is not mutable")) + case "network.launch.v1.MsgSettleRequest.approve": + panic(fmt.Errorf("field approve of message network.launch.v1.MsgSettleRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgSettleRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgSettleRequest.signer": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgSettleRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgSettleRequest.requestID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgSettleRequest.approve": + return protoreflect.ValueOfBool(false) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequest")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgSettleRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgSettleRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgSettleRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSettleRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgSettleRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgSettleRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgSettleRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Signer) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.RequestID != 0 { + n += 1 + runtime.Sov(uint64(x.RequestID)) + } + if x.Approve { + n += 2 + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgSettleRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Approve { + i-- + if x.Approve { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if x.RequestID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RequestID)) + i-- + dAtA[i] = 0x18 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Signer) > 0 { + i -= len(x.Signer) + copy(dAtA[i:], x.Signer) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Signer))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgSettleRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSettleRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSettleRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequestID", wireType) + } + x.RequestID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.RequestID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Approve", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Approve = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgSettleRequestResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgSettleRequestResponse = File_network_launch_v1_tx_proto.Messages().ByName("MsgSettleRequestResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgSettleRequestResponse)(nil) + +type fastReflection_MsgSettleRequestResponse MsgSettleRequestResponse + +func (x *MsgSettleRequestResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgSettleRequestResponse)(x) +} + +func (x *MsgSettleRequestResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_proto_msgTypes[11] + 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) +} + +var _fastReflection_MsgSettleRequestResponse_messageType fastReflection_MsgSettleRequestResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgSettleRequestResponse_messageType{} + +type fastReflection_MsgSettleRequestResponse_messageType struct{} + +func (x fastReflection_MsgSettleRequestResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgSettleRequestResponse)(nil) +} +func (x fastReflection_MsgSettleRequestResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgSettleRequestResponse) +} +func (x fastReflection_MsgSettleRequestResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSettleRequestResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgSettleRequestResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSettleRequestResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgSettleRequestResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgSettleRequestResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgSettleRequestResponse) New() protoreflect.Message { + return new(fastReflection_MsgSettleRequestResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgSettleRequestResponse) Interface() protoreflect.ProtoMessage { + return (*MsgSettleRequestResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgSettleRequestResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgSettleRequestResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSettleRequestResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgSettleRequestResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequestResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSettleRequestResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequestResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSettleRequestResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequestResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgSettleRequestResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgSettleRequestResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgSettleRequestResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgSettleRequestResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgSettleRequestResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgSettleRequestResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSettleRequestResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgSettleRequestResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgSettleRequestResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgSettleRequestResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgSettleRequestResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgSettleRequestResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSettleRequestResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSettleRequestResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgTriggerLaunch protoreflect.MessageDescriptor + fd_MsgTriggerLaunch_coordinator protoreflect.FieldDescriptor + fd_MsgTriggerLaunch_launchID protoreflect.FieldDescriptor + fd_MsgTriggerLaunch_launchTime protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgTriggerLaunch = File_network_launch_v1_tx_proto.Messages().ByName("MsgTriggerLaunch") + fd_MsgTriggerLaunch_coordinator = md_MsgTriggerLaunch.Fields().ByName("coordinator") + fd_MsgTriggerLaunch_launchID = md_MsgTriggerLaunch.Fields().ByName("launchID") + fd_MsgTriggerLaunch_launchTime = md_MsgTriggerLaunch.Fields().ByName("launchTime") +} + +var _ protoreflect.Message = (*fastReflection_MsgTriggerLaunch)(nil) + +type fastReflection_MsgTriggerLaunch MsgTriggerLaunch + +func (x *MsgTriggerLaunch) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgTriggerLaunch)(x) +} + +func (x *MsgTriggerLaunch) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_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) +} + +var _fastReflection_MsgTriggerLaunch_messageType fastReflection_MsgTriggerLaunch_messageType +var _ protoreflect.MessageType = fastReflection_MsgTriggerLaunch_messageType{} + +type fastReflection_MsgTriggerLaunch_messageType struct{} + +func (x fastReflection_MsgTriggerLaunch_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgTriggerLaunch)(nil) +} +func (x fastReflection_MsgTriggerLaunch_messageType) New() protoreflect.Message { + return new(fastReflection_MsgTriggerLaunch) +} +func (x fastReflection_MsgTriggerLaunch_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTriggerLaunch +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgTriggerLaunch) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTriggerLaunch +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgTriggerLaunch) Type() protoreflect.MessageType { + return _fastReflection_MsgTriggerLaunch_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgTriggerLaunch) New() protoreflect.Message { + return new(fastReflection_MsgTriggerLaunch) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgTriggerLaunch) Interface() protoreflect.ProtoMessage { + return (*MsgTriggerLaunch)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgTriggerLaunch) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgTriggerLaunch_coordinator, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgTriggerLaunch_launchID, value) { + return + } + } + if x.LaunchTime != nil { + value := protoreflect.ValueOfMessage(x.LaunchTime.ProtoReflect()) + if !f(fd_MsgTriggerLaunch_launchTime, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgTriggerLaunch) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgTriggerLaunch.coordinator": + return x.Coordinator != "" + case "network.launch.v1.MsgTriggerLaunch.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.MsgTriggerLaunch.launchTime": + return x.LaunchTime != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunch does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgTriggerLaunch) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgTriggerLaunch.coordinator": + x.Coordinator = "" + case "network.launch.v1.MsgTriggerLaunch.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.MsgTriggerLaunch.launchTime": + x.LaunchTime = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunch does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgTriggerLaunch) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgTriggerLaunch.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgTriggerLaunch.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.MsgTriggerLaunch.launchTime": + value := x.LaunchTime + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunch does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgTriggerLaunch) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgTriggerLaunch.coordinator": + x.Coordinator = value.Interface().(string) + case "network.launch.v1.MsgTriggerLaunch.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.MsgTriggerLaunch.launchTime": + x.LaunchTime = value.Message().Interface().(*timestamppb.Timestamp) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunch does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgTriggerLaunch) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgTriggerLaunch.launchTime": + if x.LaunchTime == nil { + x.LaunchTime = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.LaunchTime.ProtoReflect()) + case "network.launch.v1.MsgTriggerLaunch.coordinator": + panic(fmt.Errorf("field coordinator of message network.launch.v1.MsgTriggerLaunch is not mutable")) + case "network.launch.v1.MsgTriggerLaunch.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.MsgTriggerLaunch is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunch does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgTriggerLaunch) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgTriggerLaunch.coordinator": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgTriggerLaunch.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.MsgTriggerLaunch.launchTime": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunch does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgTriggerLaunch) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgTriggerLaunch", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgTriggerLaunch) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgTriggerLaunch) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgTriggerLaunch) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgTriggerLaunch) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgTriggerLaunch) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.LaunchTime != nil { + l = options.Size(x.LaunchTime) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgTriggerLaunch) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchTime != nil { + encoded, err := options.Marshal(x.LaunchTime) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgTriggerLaunch) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgTriggerLaunch: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgTriggerLaunch: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.LaunchTime == nil { + x.LaunchTime = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.LaunchTime); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgTriggerLaunchResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgTriggerLaunchResponse = File_network_launch_v1_tx_proto.Messages().ByName("MsgTriggerLaunchResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgTriggerLaunchResponse)(nil) + +type fastReflection_MsgTriggerLaunchResponse MsgTriggerLaunchResponse + +func (x *MsgTriggerLaunchResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgTriggerLaunchResponse)(x) +} + +func (x *MsgTriggerLaunchResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_proto_msgTypes[13] + 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) +} + +var _fastReflection_MsgTriggerLaunchResponse_messageType fastReflection_MsgTriggerLaunchResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgTriggerLaunchResponse_messageType{} + +type fastReflection_MsgTriggerLaunchResponse_messageType struct{} + +func (x fastReflection_MsgTriggerLaunchResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgTriggerLaunchResponse)(nil) +} +func (x fastReflection_MsgTriggerLaunchResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgTriggerLaunchResponse) +} +func (x fastReflection_MsgTriggerLaunchResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTriggerLaunchResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgTriggerLaunchResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgTriggerLaunchResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgTriggerLaunchResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgTriggerLaunchResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgTriggerLaunchResponse) New() protoreflect.Message { + return new(fastReflection_MsgTriggerLaunchResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgTriggerLaunchResponse) Interface() protoreflect.ProtoMessage { + return (*MsgTriggerLaunchResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgTriggerLaunchResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgTriggerLaunchResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgTriggerLaunchResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgTriggerLaunchResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunchResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgTriggerLaunchResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgTriggerLaunchResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgTriggerLaunchResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgTriggerLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgTriggerLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgTriggerLaunchResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgTriggerLaunchResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgTriggerLaunchResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgTriggerLaunchResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgTriggerLaunchResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgTriggerLaunchResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgTriggerLaunchResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgTriggerLaunchResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgTriggerLaunchResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgTriggerLaunchResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgTriggerLaunchResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgRevertLaunch protoreflect.MessageDescriptor + fd_MsgRevertLaunch_coordinator protoreflect.FieldDescriptor + fd_MsgRevertLaunch_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgRevertLaunch = File_network_launch_v1_tx_proto.Messages().ByName("MsgRevertLaunch") + fd_MsgRevertLaunch_coordinator = md_MsgRevertLaunch.Fields().ByName("coordinator") + fd_MsgRevertLaunch_launchID = md_MsgRevertLaunch.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_MsgRevertLaunch)(nil) + +type fastReflection_MsgRevertLaunch MsgRevertLaunch + +func (x *MsgRevertLaunch) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgRevertLaunch)(x) +} + +func (x *MsgRevertLaunch) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_proto_msgTypes[14] + 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) +} + +var _fastReflection_MsgRevertLaunch_messageType fastReflection_MsgRevertLaunch_messageType +var _ protoreflect.MessageType = fastReflection_MsgRevertLaunch_messageType{} + +type fastReflection_MsgRevertLaunch_messageType struct{} + +func (x fastReflection_MsgRevertLaunch_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgRevertLaunch)(nil) +} +func (x fastReflection_MsgRevertLaunch_messageType) New() protoreflect.Message { + return new(fastReflection_MsgRevertLaunch) +} +func (x fastReflection_MsgRevertLaunch_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRevertLaunch +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgRevertLaunch) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRevertLaunch +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgRevertLaunch) Type() protoreflect.MessageType { + return _fastReflection_MsgRevertLaunch_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgRevertLaunch) New() protoreflect.Message { + return new(fastReflection_MsgRevertLaunch) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgRevertLaunch) Interface() protoreflect.ProtoMessage { + return (*MsgRevertLaunch)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgRevertLaunch) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgRevertLaunch_coordinator, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgRevertLaunch_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgRevertLaunch) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.MsgRevertLaunch.coordinator": + return x.Coordinator != "" + case "network.launch.v1.MsgRevertLaunch.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunch does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRevertLaunch) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.MsgRevertLaunch.coordinator": + x.Coordinator = "" + case "network.launch.v1.MsgRevertLaunch.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunch does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgRevertLaunch) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.MsgRevertLaunch.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.launch.v1.MsgRevertLaunch.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunch does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRevertLaunch) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.MsgRevertLaunch.coordinator": + x.Coordinator = value.Interface().(string) + case "network.launch.v1.MsgRevertLaunch.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunch does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRevertLaunch) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgRevertLaunch.coordinator": + panic(fmt.Errorf("field coordinator of message network.launch.v1.MsgRevertLaunch is not mutable")) + case "network.launch.v1.MsgRevertLaunch.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.MsgRevertLaunch is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunch does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgRevertLaunch) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.MsgRevertLaunch.coordinator": + return protoreflect.ValueOfString("") + case "network.launch.v1.MsgRevertLaunch.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunch")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunch does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgRevertLaunch) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgRevertLaunch", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgRevertLaunch) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRevertLaunch) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgRevertLaunch) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgRevertLaunch) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgRevertLaunch) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgRevertLaunch) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgRevertLaunch) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRevertLaunch: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRevertLaunch: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgRevertLaunchResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_launch_v1_tx_proto_init() + md_MsgRevertLaunchResponse = File_network_launch_v1_tx_proto.Messages().ByName("MsgRevertLaunchResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgRevertLaunchResponse)(nil) + +type fastReflection_MsgRevertLaunchResponse MsgRevertLaunchResponse + +func (x *MsgRevertLaunchResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgRevertLaunchResponse)(x) +} + +func (x *MsgRevertLaunchResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_tx_proto_msgTypes[15] + 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) +} + +var _fastReflection_MsgRevertLaunchResponse_messageType fastReflection_MsgRevertLaunchResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgRevertLaunchResponse_messageType{} + +type fastReflection_MsgRevertLaunchResponse_messageType struct{} + +func (x fastReflection_MsgRevertLaunchResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgRevertLaunchResponse)(nil) +} +func (x fastReflection_MsgRevertLaunchResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgRevertLaunchResponse) +} +func (x fastReflection_MsgRevertLaunchResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRevertLaunchResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgRevertLaunchResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRevertLaunchResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgRevertLaunchResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgRevertLaunchResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgRevertLaunchResponse) New() protoreflect.Message { + return new(fastReflection_MsgRevertLaunchResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgRevertLaunchResponse) Interface() protoreflect.ProtoMessage { + return (*MsgRevertLaunchResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgRevertLaunchResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgRevertLaunchResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRevertLaunchResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgRevertLaunchResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunchResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRevertLaunchResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRevertLaunchResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgRevertLaunchResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.MsgRevertLaunchResponse")) + } + panic(fmt.Errorf("message network.launch.v1.MsgRevertLaunchResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgRevertLaunchResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.MsgRevertLaunchResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgRevertLaunchResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRevertLaunchResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgRevertLaunchResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgRevertLaunchResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgRevertLaunchResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgRevertLaunchResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgRevertLaunchResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRevertLaunchResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRevertLaunchResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/tx.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *MsgUpdateParams) Reset() { + *x = MsgUpdateParams{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParams) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgUpdateParams) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +func (x *MsgUpdateParams) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateParamsResponse) Reset() { + *x = MsgUpdateParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParamsResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{1} +} + +type MsgCreateChain struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + GenesisChainID string `protobuf:"bytes,2,opt,name=genesisChainID,proto3" json:"genesisChainID,omitempty"` + SourceURL string `protobuf:"bytes,3,opt,name=sourceURL,proto3" json:"sourceURL,omitempty"` + SourceHash string `protobuf:"bytes,4,opt,name=sourceHash,proto3" json:"sourceHash,omitempty"` + InitialGenesis *InitialGenesis `protobuf:"bytes,5,opt,name=initialGenesis,proto3" json:"initialGenesis,omitempty"` + HasProject bool `protobuf:"varint,6,opt,name=hasProject,proto3" json:"hasProject,omitempty"` + ProjectID uint64 `protobuf:"varint,7,opt,name=projectID,proto3" json:"projectID,omitempty"` + AccountBalance []*v1beta1.Coin `protobuf:"bytes,8,rep,name=accountBalance,proto3" json:"accountBalance,omitempty"` + Metadata []byte `protobuf:"bytes,9,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *MsgCreateChain) Reset() { + *x = MsgCreateChain{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateChain) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateChain) ProtoMessage() {} + +// Deprecated: Use MsgCreateChain.ProtoReflect.Descriptor instead. +func (*MsgCreateChain) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{2} +} + +func (x *MsgCreateChain) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgCreateChain) GetGenesisChainID() string { + if x != nil { + return x.GenesisChainID + } + return "" +} + +func (x *MsgCreateChain) GetSourceURL() string { + if x != nil { + return x.SourceURL + } + return "" +} + +func (x *MsgCreateChain) GetSourceHash() string { + if x != nil { + return x.SourceHash + } + return "" +} + +func (x *MsgCreateChain) GetInitialGenesis() *InitialGenesis { + if x != nil { + return x.InitialGenesis + } + return nil +} + +func (x *MsgCreateChain) GetHasProject() bool { + if x != nil { + return x.HasProject + } + return false +} + +func (x *MsgCreateChain) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgCreateChain) GetAccountBalance() []*v1beta1.Coin { + if x != nil { + return x.AccountBalance + } + return nil +} + +func (x *MsgCreateChain) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +type MsgCreateChainResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *MsgCreateChainResponse) Reset() { + *x = MsgCreateChainResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateChainResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateChainResponse) ProtoMessage() {} + +// Deprecated: Use MsgCreateChainResponse.ProtoReflect.Descriptor instead. +func (*MsgCreateChainResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{3} +} + +func (x *MsgCreateChainResponse) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type MsgEditChain struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + SetProjectID bool `protobuf:"varint,3,opt,name=setProjectID,proto3" json:"setProjectID,omitempty"` + ProjectID uint64 `protobuf:"varint,4,opt,name=projectID,proto3" json:"projectID,omitempty"` + Metadata []byte `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *MsgEditChain) Reset() { + *x = MsgEditChain{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgEditChain) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgEditChain) ProtoMessage() {} + +// Deprecated: Use MsgEditChain.ProtoReflect.Descriptor instead. +func (*MsgEditChain) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{4} +} + +func (x *MsgEditChain) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgEditChain) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *MsgEditChain) GetSetProjectID() bool { + if x != nil { + return x.SetProjectID + } + return false +} + +func (x *MsgEditChain) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgEditChain) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +type MsgEditChainResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgEditChainResponse) Reset() { + *x = MsgEditChainResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgEditChainResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgEditChainResponse) ProtoMessage() {} + +// Deprecated: Use MsgEditChainResponse.ProtoReflect.Descriptor instead. +func (*MsgEditChainResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{5} +} + +type MsgUpdateLaunchInformation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + GenesisChainID string `protobuf:"bytes,3,opt,name=genesisChainID,proto3" json:"genesisChainID,omitempty"` + SourceURL string `protobuf:"bytes,4,opt,name=sourceURL,proto3" json:"sourceURL,omitempty"` + SourceHash string `protobuf:"bytes,5,opt,name=sourceHash,proto3" json:"sourceHash,omitempty"` + InitialGenesis *InitialGenesis `protobuf:"bytes,6,opt,name=initialGenesis,proto3" json:"initialGenesis,omitempty"` +} + +func (x *MsgUpdateLaunchInformation) Reset() { + *x = MsgUpdateLaunchInformation{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateLaunchInformation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateLaunchInformation) ProtoMessage() {} + +// Deprecated: Use MsgUpdateLaunchInformation.ProtoReflect.Descriptor instead. +func (*MsgUpdateLaunchInformation) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{6} +} + +func (x *MsgUpdateLaunchInformation) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgUpdateLaunchInformation) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *MsgUpdateLaunchInformation) GetGenesisChainID() string { + if x != nil { + return x.GenesisChainID + } + return "" +} + +func (x *MsgUpdateLaunchInformation) GetSourceURL() string { + if x != nil { + return x.SourceURL + } + return "" +} + +func (x *MsgUpdateLaunchInformation) GetSourceHash() string { + if x != nil { + return x.SourceHash + } + return "" +} + +func (x *MsgUpdateLaunchInformation) GetInitialGenesis() *InitialGenesis { + if x != nil { + return x.InitialGenesis + } + return nil +} + +type MsgUpdateLaunchInformationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateLaunchInformationResponse) Reset() { + *x = MsgUpdateLaunchInformationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateLaunchInformationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateLaunchInformationResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateLaunchInformationResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateLaunchInformationResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{7} +} + +type MsgSendRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + Content *RequestContent `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *MsgSendRequest) Reset() { + *x = MsgSendRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgSendRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgSendRequest) ProtoMessage() {} + +// Deprecated: Use MsgSendRequest.ProtoReflect.Descriptor instead. +func (*MsgSendRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{8} +} + +func (x *MsgSendRequest) GetCreator() string { + if x != nil { + return x.Creator + } + return "" +} + +func (x *MsgSendRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *MsgSendRequest) GetContent() *RequestContent { + if x != nil { + return x.Content + } + return nil +} + +type MsgSendRequestResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequestID uint64 `protobuf:"varint,1,opt,name=requestID,proto3" json:"requestID,omitempty"` + AutoApproved bool `protobuf:"varint,2,opt,name=autoApproved,proto3" json:"autoApproved,omitempty"` +} + +func (x *MsgSendRequestResponse) Reset() { + *x = MsgSendRequestResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgSendRequestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgSendRequestResponse) ProtoMessage() {} + +// Deprecated: Use MsgSendRequestResponse.ProtoReflect.Descriptor instead. +func (*MsgSendRequestResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{9} +} + +func (x *MsgSendRequestResponse) GetRequestID() uint64 { + if x != nil { + return x.RequestID + } + return 0 +} + +func (x *MsgSendRequestResponse) GetAutoApproved() bool { + if x != nil { + return x.AutoApproved + } + return false +} + +type MsgSettleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + RequestID uint64 `protobuf:"varint,3,opt,name=requestID,proto3" json:"requestID,omitempty"` + Approve bool `protobuf:"varint,4,opt,name=approve,proto3" json:"approve,omitempty"` +} + +func (x *MsgSettleRequest) Reset() { + *x = MsgSettleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgSettleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgSettleRequest) ProtoMessage() {} + +// Deprecated: Use MsgSettleRequest.ProtoReflect.Descriptor instead. +func (*MsgSettleRequest) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{10} +} + +func (x *MsgSettleRequest) GetSigner() string { + if x != nil { + return x.Signer + } + return "" +} + +func (x *MsgSettleRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *MsgSettleRequest) GetRequestID() uint64 { + if x != nil { + return x.RequestID + } + return 0 +} + +func (x *MsgSettleRequest) GetApprove() bool { + if x != nil { + return x.Approve + } + return false +} + +type MsgSettleRequestResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgSettleRequestResponse) Reset() { + *x = MsgSettleRequestResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgSettleRequestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgSettleRequestResponse) ProtoMessage() {} + +// Deprecated: Use MsgSettleRequestResponse.ProtoReflect.Descriptor instead. +func (*MsgSettleRequestResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{11} +} + +type MsgTriggerLaunch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + LaunchTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=launchTime,proto3" json:"launchTime,omitempty"` +} + +func (x *MsgTriggerLaunch) Reset() { + *x = MsgTriggerLaunch{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgTriggerLaunch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgTriggerLaunch) ProtoMessage() {} + +// Deprecated: Use MsgTriggerLaunch.ProtoReflect.Descriptor instead. +func (*MsgTriggerLaunch) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{12} +} + +func (x *MsgTriggerLaunch) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgTriggerLaunch) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *MsgTriggerLaunch) GetLaunchTime() *timestamppb.Timestamp { + if x != nil { + return x.LaunchTime + } + return nil +} + +type MsgTriggerLaunchResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgTriggerLaunchResponse) Reset() { + *x = MsgTriggerLaunchResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgTriggerLaunchResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgTriggerLaunchResponse) ProtoMessage() {} + +// Deprecated: Use MsgTriggerLaunchResponse.ProtoReflect.Descriptor instead. +func (*MsgTriggerLaunchResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{13} +} + +type MsgRevertLaunch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *MsgRevertLaunch) Reset() { + *x = MsgRevertLaunch{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgRevertLaunch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgRevertLaunch) ProtoMessage() {} + +// Deprecated: Use MsgRevertLaunch.ProtoReflect.Descriptor instead. +func (*MsgRevertLaunch) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{14} +} + +func (x *MsgRevertLaunch) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgRevertLaunch) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type MsgRevertLaunchResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgRevertLaunchResponse) Reset() { + *x = MsgRevertLaunchResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_tx_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgRevertLaunchResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgRevertLaunchResponse) ProtoMessage() {} + +// Deprecated: Use MsgRevertLaunchResponse.ProtoReflect.Descriptor instead. +func (*MsgRevertLaunchResponse) Descriptor() ([]byte, []int) { + return file_network_launch_v1_tx_proto_rawDescGZIP(), []int{15} +} + +var File_network_launch_v1_tx_proto protoreflect.FileDescriptor + +var file_network_launch_v1_tx_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x1a, + 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, 0x2f, 0x76, + 0x31, 0x2f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbc, 0x01, + 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x33, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x20, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x4d, 0x73, 0x67, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, + 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x04, 0x0a, 0x0e, 0x4d, 0x73, 0x67, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1e, 0x0a, 0x0a, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x4f, 0x0a, 0x0e, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x12, 0x1e, 0x0a, + 0x0a, 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0xb4, 0x01, 0x0a, 0x0e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, + 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, + 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, + 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x10, + 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x22, 0x34, 0x0a, 0x16, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x22, 0xd6, 0x01, 0x0a, 0x0c, 0x4d, 0x73, 0x67, 0x45, 0x64, + 0x69, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, + 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, + 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x10, 0x82, + 0xe7, 0xb0, 0x2a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, + 0x16, 0x0a, 0x14, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb7, 0x02, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x26, + 0x0a, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x55, 0x52, 0x4c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x49, 0x0a, 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x52, + 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x3a, + 0x10, 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x22, 0x24, 0x0a, 0x22, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x0e, 0x4d, 0x73, 0x67, 0x53, + 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3a, 0x0c, 0x82, + 0xe7, 0xb0, 0x2a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x5a, 0x0a, 0x16, 0x4d, + 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x75, 0x74, 0x6f, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x6f, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x22, 0xa5, 0x01, 0x0a, 0x10, 0x4d, 0x73, 0x67, 0x53, + 0x65, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x06, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, + 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x65, 0x3a, 0x0b, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, + 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc2, 0x01, 0x0a, 0x10, + 0x4d, 0x73, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x44, 0x0a, 0x0a, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, + 0x1f, 0x01, 0x52, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x3a, 0x10, + 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x22, 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7b, 0x0a, 0x0f, + 0x4d, 0x73, 0x67, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x12, + 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, + 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x3a, 0x10, 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, + 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa4, 0x06, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x5e, 0x0a, 0x0c, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x1a, 0x2a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0b, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x1a, 0x29, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x09, 0x45, 0x64, 0x69, + 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, + 0x69, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x1a, 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, + 0x64, 0x69, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x7f, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x35, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, + 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x74, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x61, 0x0a, 0x0d, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x12, 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x12, 0x22, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x76, 0x65, + 0x72, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x1a, 0x2a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xc0, 0x01, 0x0a, 0x15, + 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, + 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, + 0x31, 0x3b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, + 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_tx_proto_rawDescOnce sync.Once + file_network_launch_v1_tx_proto_rawDescData = file_network_launch_v1_tx_proto_rawDesc +) + +func file_network_launch_v1_tx_proto_rawDescGZIP() []byte { + file_network_launch_v1_tx_proto_rawDescOnce.Do(func() { + file_network_launch_v1_tx_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_tx_proto_rawDescData) + }) + return file_network_launch_v1_tx_proto_rawDescData +} + +var file_network_launch_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_network_launch_v1_tx_proto_goTypes = []interface{}{ + (*MsgUpdateParams)(nil), // 0: network.launch.v1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 1: network.launch.v1.MsgUpdateParamsResponse + (*MsgCreateChain)(nil), // 2: network.launch.v1.MsgCreateChain + (*MsgCreateChainResponse)(nil), // 3: network.launch.v1.MsgCreateChainResponse + (*MsgEditChain)(nil), // 4: network.launch.v1.MsgEditChain + (*MsgEditChainResponse)(nil), // 5: network.launch.v1.MsgEditChainResponse + (*MsgUpdateLaunchInformation)(nil), // 6: network.launch.v1.MsgUpdateLaunchInformation + (*MsgUpdateLaunchInformationResponse)(nil), // 7: network.launch.v1.MsgUpdateLaunchInformationResponse + (*MsgSendRequest)(nil), // 8: network.launch.v1.MsgSendRequest + (*MsgSendRequestResponse)(nil), // 9: network.launch.v1.MsgSendRequestResponse + (*MsgSettleRequest)(nil), // 10: network.launch.v1.MsgSettleRequest + (*MsgSettleRequestResponse)(nil), // 11: network.launch.v1.MsgSettleRequestResponse + (*MsgTriggerLaunch)(nil), // 12: network.launch.v1.MsgTriggerLaunch + (*MsgTriggerLaunchResponse)(nil), // 13: network.launch.v1.MsgTriggerLaunchResponse + (*MsgRevertLaunch)(nil), // 14: network.launch.v1.MsgRevertLaunch + (*MsgRevertLaunchResponse)(nil), // 15: network.launch.v1.MsgRevertLaunchResponse + (*Params)(nil), // 16: network.launch.v1.Params + (*InitialGenesis)(nil), // 17: network.launch.v1.InitialGenesis + (*v1beta1.Coin)(nil), // 18: cosmos.base.v1beta1.Coin + (*RequestContent)(nil), // 19: network.launch.v1.RequestContent + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp +} +var file_network_launch_v1_tx_proto_depIdxs = []int32{ + 16, // 0: network.launch.v1.MsgUpdateParams.params:type_name -> network.launch.v1.Params + 17, // 1: network.launch.v1.MsgCreateChain.initialGenesis:type_name -> network.launch.v1.InitialGenesis + 18, // 2: network.launch.v1.MsgCreateChain.accountBalance:type_name -> cosmos.base.v1beta1.Coin + 17, // 3: network.launch.v1.MsgUpdateLaunchInformation.initialGenesis:type_name -> network.launch.v1.InitialGenesis + 19, // 4: network.launch.v1.MsgSendRequest.content:type_name -> network.launch.v1.RequestContent + 20, // 5: network.launch.v1.MsgTriggerLaunch.launchTime:type_name -> google.protobuf.Timestamp + 0, // 6: network.launch.v1.Msg.UpdateParams:input_type -> network.launch.v1.MsgUpdateParams + 2, // 7: network.launch.v1.Msg.CreateChain:input_type -> network.launch.v1.MsgCreateChain + 4, // 8: network.launch.v1.Msg.EditChain:input_type -> network.launch.v1.MsgEditChain + 6, // 9: network.launch.v1.Msg.UpdateLaunchInformation:input_type -> network.launch.v1.MsgUpdateLaunchInformation + 8, // 10: network.launch.v1.Msg.SendRequest:input_type -> network.launch.v1.MsgSendRequest + 10, // 11: network.launch.v1.Msg.SettleRequest:input_type -> network.launch.v1.MsgSettleRequest + 12, // 12: network.launch.v1.Msg.TriggerLaunch:input_type -> network.launch.v1.MsgTriggerLaunch + 14, // 13: network.launch.v1.Msg.RevertLaunch:input_type -> network.launch.v1.MsgRevertLaunch + 1, // 14: network.launch.v1.Msg.UpdateParams:output_type -> network.launch.v1.MsgUpdateParamsResponse + 3, // 15: network.launch.v1.Msg.CreateChain:output_type -> network.launch.v1.MsgCreateChainResponse + 5, // 16: network.launch.v1.Msg.EditChain:output_type -> network.launch.v1.MsgEditChainResponse + 7, // 17: network.launch.v1.Msg.UpdateLaunchInformation:output_type -> network.launch.v1.MsgUpdateLaunchInformationResponse + 9, // 18: network.launch.v1.Msg.SendRequest:output_type -> network.launch.v1.MsgSendRequestResponse + 11, // 19: network.launch.v1.Msg.SettleRequest:output_type -> network.launch.v1.MsgSettleRequestResponse + 13, // 20: network.launch.v1.Msg.TriggerLaunch:output_type -> network.launch.v1.MsgTriggerLaunchResponse + 15, // 21: network.launch.v1.Msg.RevertLaunch:output_type -> network.launch.v1.MsgRevertLaunchResponse + 14, // [14:22] is the sub-list for method output_type + 6, // [6:14] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_network_launch_v1_tx_proto_init() } +func file_network_launch_v1_tx_proto_init() { + if File_network_launch_v1_tx_proto != nil { + return + } + file_network_launch_v1_chain_proto_init() + file_network_launch_v1_params_proto_init() + file_network_launch_v1_request_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_tx_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgCreateChain); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgCreateChainResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgEditChain); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgEditChainResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateLaunchInformation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateLaunchInformationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSendRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSendRequestResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSettleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSettleRequestResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgTriggerLaunch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgTriggerLaunchResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgRevertLaunch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_tx_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgRevertLaunchResponse); 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_network_launch_v1_tx_proto_rawDesc, + NumEnums: 0, + NumMessages: 16, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_launch_v1_tx_proto_goTypes, + DependencyIndexes: file_network_launch_v1_tx_proto_depIdxs, + MessageInfos: file_network_launch_v1_tx_proto_msgTypes, + }.Build() + File_network_launch_v1_tx_proto = out.File + file_network_launch_v1_tx_proto_rawDesc = nil + file_network_launch_v1_tx_proto_goTypes = nil + file_network_launch_v1_tx_proto_depIdxs = nil +} diff --git a/api/network/launch/v1/tx_grpc.pb.go b/api/network/launch/v1/tx_grpc.pb.go new file mode 100644 index 00000000..2c743eac --- /dev/null +++ b/api/network/launch/v1/tx_grpc.pb.go @@ -0,0 +1,372 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/launch/v1/tx.proto + +package launchv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Msg_UpdateParams_FullMethodName = "/network.launch.v1.Msg/UpdateParams" + Msg_CreateChain_FullMethodName = "/network.launch.v1.Msg/CreateChain" + Msg_EditChain_FullMethodName = "/network.launch.v1.Msg/EditChain" + Msg_UpdateLaunchInformation_FullMethodName = "/network.launch.v1.Msg/UpdateLaunchInformation" + Msg_SendRequest_FullMethodName = "/network.launch.v1.Msg/SendRequest" + Msg_SettleRequest_FullMethodName = "/network.launch.v1.Msg/SettleRequest" + Msg_TriggerLaunch_FullMethodName = "/network.launch.v1.Msg/TriggerLaunch" + Msg_RevertLaunch_FullMethodName = "/network.launch.v1.Msg/RevertLaunch" +) + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + CreateChain(ctx context.Context, in *MsgCreateChain, opts ...grpc.CallOption) (*MsgCreateChainResponse, error) + EditChain(ctx context.Context, in *MsgEditChain, opts ...grpc.CallOption) (*MsgEditChainResponse, error) + UpdateLaunchInformation(ctx context.Context, in *MsgUpdateLaunchInformation, opts ...grpc.CallOption) (*MsgUpdateLaunchInformationResponse, error) + SendRequest(ctx context.Context, in *MsgSendRequest, opts ...grpc.CallOption) (*MsgSendRequestResponse, error) + SettleRequest(ctx context.Context, in *MsgSettleRequest, opts ...grpc.CallOption) (*MsgSettleRequestResponse, error) + TriggerLaunch(ctx context.Context, in *MsgTriggerLaunch, opts ...grpc.CallOption) (*MsgTriggerLaunchResponse, error) + RevertLaunch(ctx context.Context, in *MsgRevertLaunch, opts ...grpc.CallOption) (*MsgRevertLaunchResponse, error) +} + +type msgClient struct { + cc grpc.ClientConnInterface +} + +func NewMsgClient(cc grpc.ClientConnInterface) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, Msg_UpdateParams_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CreateChain(ctx context.Context, in *MsgCreateChain, opts ...grpc.CallOption) (*MsgCreateChainResponse, error) { + out := new(MsgCreateChainResponse) + err := c.cc.Invoke(ctx, Msg_CreateChain_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) EditChain(ctx context.Context, in *MsgEditChain, opts ...grpc.CallOption) (*MsgEditChainResponse, error) { + out := new(MsgEditChainResponse) + err := c.cc.Invoke(ctx, Msg_EditChain_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateLaunchInformation(ctx context.Context, in *MsgUpdateLaunchInformation, opts ...grpc.CallOption) (*MsgUpdateLaunchInformationResponse, error) { + out := new(MsgUpdateLaunchInformationResponse) + err := c.cc.Invoke(ctx, Msg_UpdateLaunchInformation_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SendRequest(ctx context.Context, in *MsgSendRequest, opts ...grpc.CallOption) (*MsgSendRequestResponse, error) { + out := new(MsgSendRequestResponse) + err := c.cc.Invoke(ctx, Msg_SendRequest_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SettleRequest(ctx context.Context, in *MsgSettleRequest, opts ...grpc.CallOption) (*MsgSettleRequestResponse, error) { + out := new(MsgSettleRequestResponse) + err := c.cc.Invoke(ctx, Msg_SettleRequest_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) TriggerLaunch(ctx context.Context, in *MsgTriggerLaunch, opts ...grpc.CallOption) (*MsgTriggerLaunchResponse, error) { + out := new(MsgTriggerLaunchResponse) + err := c.cc.Invoke(ctx, Msg_TriggerLaunch_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RevertLaunch(ctx context.Context, in *MsgRevertLaunch, opts ...grpc.CallOption) (*MsgRevertLaunchResponse, error) { + out := new(MsgRevertLaunchResponse) + err := c.cc.Invoke(ctx, Msg_RevertLaunch_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +// All implementations must embed UnimplementedMsgServer +// for forward compatibility +type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + CreateChain(context.Context, *MsgCreateChain) (*MsgCreateChainResponse, error) + EditChain(context.Context, *MsgEditChain) (*MsgEditChainResponse, error) + UpdateLaunchInformation(context.Context, *MsgUpdateLaunchInformation) (*MsgUpdateLaunchInformationResponse, error) + SendRequest(context.Context, *MsgSendRequest) (*MsgSendRequestResponse, error) + SettleRequest(context.Context, *MsgSettleRequest) (*MsgSettleRequestResponse, error) + TriggerLaunch(context.Context, *MsgTriggerLaunch) (*MsgTriggerLaunchResponse, error) + RevertLaunch(context.Context, *MsgRevertLaunch) (*MsgRevertLaunchResponse, error) + mustEmbedUnimplementedMsgServer() +} + +// UnimplementedMsgServer must be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} +func (UnimplementedMsgServer) CreateChain(context.Context, *MsgCreateChain) (*MsgCreateChainResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateChain not implemented") +} +func (UnimplementedMsgServer) EditChain(context.Context, *MsgEditChain) (*MsgEditChainResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EditChain not implemented") +} +func (UnimplementedMsgServer) UpdateLaunchInformation(context.Context, *MsgUpdateLaunchInformation) (*MsgUpdateLaunchInformationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateLaunchInformation not implemented") +} +func (UnimplementedMsgServer) SendRequest(context.Context, *MsgSendRequest) (*MsgSendRequestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendRequest not implemented") +} +func (UnimplementedMsgServer) SettleRequest(context.Context, *MsgSettleRequest) (*MsgSettleRequestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SettleRequest not implemented") +} +func (UnimplementedMsgServer) TriggerLaunch(context.Context, *MsgTriggerLaunch) (*MsgTriggerLaunchResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TriggerLaunch not implemented") +} +func (UnimplementedMsgServer) RevertLaunch(context.Context, *MsgRevertLaunch) (*MsgRevertLaunchResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RevertLaunch not implemented") +} +func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} + +// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MsgServer will +// result in compilation errors. +type UnsafeMsgServer interface { + mustEmbedUnimplementedMsgServer() +} + +func RegisterMsgServer(s grpc.ServiceRegistrar, srv MsgServer) { + s.RegisterService(&Msg_ServiceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateParams_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CreateChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateChain) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateChain(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_CreateChain_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateChain(ctx, req.(*MsgCreateChain)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_EditChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgEditChain) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).EditChain(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_EditChain_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).EditChain(ctx, req.(*MsgEditChain)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateLaunchInformation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateLaunchInformation) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateLaunchInformation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateLaunchInformation_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateLaunchInformation(ctx, req.(*MsgUpdateLaunchInformation)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SendRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSendRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SendRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_SendRequest_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SendRequest(ctx, req.(*MsgSendRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SettleRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSettleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SettleRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_SettleRequest_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SettleRequest(ctx, req.(*MsgSettleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_TriggerLaunch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgTriggerLaunch) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).TriggerLaunch(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_TriggerLaunch_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).TriggerLaunch(ctx, req.(*MsgTriggerLaunch)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RevertLaunch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRevertLaunch) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RevertLaunch(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_RevertLaunch_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RevertLaunch(ctx, req.(*MsgRevertLaunch)) + } + return interceptor(ctx, in, info, handler) +} + +// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Msg_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.launch.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + { + MethodName: "CreateChain", + Handler: _Msg_CreateChain_Handler, + }, + { + MethodName: "EditChain", + Handler: _Msg_EditChain_Handler, + }, + { + MethodName: "UpdateLaunchInformation", + Handler: _Msg_UpdateLaunchInformation_Handler, + }, + { + MethodName: "SendRequest", + Handler: _Msg_SendRequest_Handler, + }, + { + MethodName: "SettleRequest", + Handler: _Msg_SettleRequest_Handler, + }, + { + MethodName: "TriggerLaunch", + Handler: _Msg_TriggerLaunch_Handler, + }, + { + MethodName: "RevertLaunch", + Handler: _Msg_RevertLaunch_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/launch/v1/tx.proto", +} diff --git a/api/network/launch/v1/vesting_account.pulsar.go b/api/network/launch/v1/vesting_account.pulsar.go new file mode 100644 index 00000000..30313171 --- /dev/null +++ b/api/network/launch/v1/vesting_account.pulsar.go @@ -0,0 +1,2098 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package launchv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_VestingAccount protoreflect.MessageDescriptor + fd_VestingAccount_launchID protoreflect.FieldDescriptor + fd_VestingAccount_address protoreflect.FieldDescriptor + fd_VestingAccount_vestingOptions protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_vesting_account_proto_init() + md_VestingAccount = File_network_launch_v1_vesting_account_proto.Messages().ByName("VestingAccount") + fd_VestingAccount_launchID = md_VestingAccount.Fields().ByName("launchID") + fd_VestingAccount_address = md_VestingAccount.Fields().ByName("address") + fd_VestingAccount_vestingOptions = md_VestingAccount.Fields().ByName("vestingOptions") +} + +var _ protoreflect.Message = (*fastReflection_VestingAccount)(nil) + +type fastReflection_VestingAccount VestingAccount + +func (x *VestingAccount) ProtoReflect() protoreflect.Message { + return (*fastReflection_VestingAccount)(x) +} + +func (x *VestingAccount) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_vesting_account_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) +} + +var _fastReflection_VestingAccount_messageType fastReflection_VestingAccount_messageType +var _ protoreflect.MessageType = fastReflection_VestingAccount_messageType{} + +type fastReflection_VestingAccount_messageType struct{} + +func (x fastReflection_VestingAccount_messageType) Zero() protoreflect.Message { + return (*fastReflection_VestingAccount)(nil) +} +func (x fastReflection_VestingAccount_messageType) New() protoreflect.Message { + return new(fastReflection_VestingAccount) +} +func (x fastReflection_VestingAccount_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_VestingAccount +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_VestingAccount) Descriptor() protoreflect.MessageDescriptor { + return md_VestingAccount +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_VestingAccount) Type() protoreflect.MessageType { + return _fastReflection_VestingAccount_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_VestingAccount) New() protoreflect.Message { + return new(fastReflection_VestingAccount) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_VestingAccount) Interface() protoreflect.ProtoMessage { + return (*VestingAccount)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_VestingAccount) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_VestingAccount_launchID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_VestingAccount_address, value) { + return + } + } + if x.VestingOptions != nil { + value := protoreflect.ValueOfMessage(x.VestingOptions.ProtoReflect()) + if !f(fd_VestingAccount_vestingOptions, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_VestingAccount) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.VestingAccount.launchID": + return x.LaunchID != uint64(0) + case "network.launch.v1.VestingAccount.address": + return x.Address != "" + case "network.launch.v1.VestingAccount.vestingOptions": + return x.VestingOptions != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingAccount")) + } + panic(fmt.Errorf("message network.launch.v1.VestingAccount does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VestingAccount) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.VestingAccount.launchID": + x.LaunchID = uint64(0) + case "network.launch.v1.VestingAccount.address": + x.Address = "" + case "network.launch.v1.VestingAccount.vestingOptions": + x.VestingOptions = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingAccount")) + } + panic(fmt.Errorf("message network.launch.v1.VestingAccount does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_VestingAccount) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.VestingAccount.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.launch.v1.VestingAccount.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.launch.v1.VestingAccount.vestingOptions": + value := x.VestingOptions + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingAccount")) + } + panic(fmt.Errorf("message network.launch.v1.VestingAccount does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VestingAccount) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.VestingAccount.launchID": + x.LaunchID = value.Uint() + case "network.launch.v1.VestingAccount.address": + x.Address = value.Interface().(string) + case "network.launch.v1.VestingAccount.vestingOptions": + x.VestingOptions = value.Message().Interface().(*VestingOptions) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingAccount")) + } + panic(fmt.Errorf("message network.launch.v1.VestingAccount does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VestingAccount) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.VestingAccount.vestingOptions": + if x.VestingOptions == nil { + x.VestingOptions = new(VestingOptions) + } + return protoreflect.ValueOfMessage(x.VestingOptions.ProtoReflect()) + case "network.launch.v1.VestingAccount.launchID": + panic(fmt.Errorf("field launchID of message network.launch.v1.VestingAccount is not mutable")) + case "network.launch.v1.VestingAccount.address": + panic(fmt.Errorf("field address of message network.launch.v1.VestingAccount is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingAccount")) + } + panic(fmt.Errorf("message network.launch.v1.VestingAccount does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_VestingAccount) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.VestingAccount.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.launch.v1.VestingAccount.address": + return protoreflect.ValueOfString("") + case "network.launch.v1.VestingAccount.vestingOptions": + m := new(VestingOptions) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingAccount")) + } + panic(fmt.Errorf("message network.launch.v1.VestingAccount does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_VestingAccount) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.VestingAccount", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_VestingAccount) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VestingAccount) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_VestingAccount) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_VestingAccount) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*VestingAccount) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.VestingOptions != nil { + l = options.Size(x.VestingOptions) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*VestingAccount) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.VestingOptions != nil { + encoded, err := options.Marshal(x.VestingOptions) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*VestingAccount) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: VestingAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: VestingAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VestingOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.VestingOptions == nil { + x.VestingOptions = &VestingOptions{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VestingOptions); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_VestingOptions protoreflect.MessageDescriptor + fd_VestingOptions_delayedVesting protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_vesting_account_proto_init() + md_VestingOptions = File_network_launch_v1_vesting_account_proto.Messages().ByName("VestingOptions") + fd_VestingOptions_delayedVesting = md_VestingOptions.Fields().ByName("delayedVesting") +} + +var _ protoreflect.Message = (*fastReflection_VestingOptions)(nil) + +type fastReflection_VestingOptions VestingOptions + +func (x *VestingOptions) ProtoReflect() protoreflect.Message { + return (*fastReflection_VestingOptions)(x) +} + +func (x *VestingOptions) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_vesting_account_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) +} + +var _fastReflection_VestingOptions_messageType fastReflection_VestingOptions_messageType +var _ protoreflect.MessageType = fastReflection_VestingOptions_messageType{} + +type fastReflection_VestingOptions_messageType struct{} + +func (x fastReflection_VestingOptions_messageType) Zero() protoreflect.Message { + return (*fastReflection_VestingOptions)(nil) +} +func (x fastReflection_VestingOptions_messageType) New() protoreflect.Message { + return new(fastReflection_VestingOptions) +} +func (x fastReflection_VestingOptions_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_VestingOptions +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_VestingOptions) Descriptor() protoreflect.MessageDescriptor { + return md_VestingOptions +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_VestingOptions) Type() protoreflect.MessageType { + return _fastReflection_VestingOptions_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_VestingOptions) New() protoreflect.Message { + return new(fastReflection_VestingOptions) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_VestingOptions) Interface() protoreflect.ProtoMessage { + return (*VestingOptions)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_VestingOptions) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Options != nil { + switch o := x.Options.(type) { + case *VestingOptions_DelayedVesting: + v := o.DelayedVesting + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_VestingOptions_delayedVesting, value) { + return + } + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_VestingOptions) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.VestingOptions.delayedVesting": + if x.Options == nil { + return false + } else if _, ok := x.Options.(*VestingOptions_DelayedVesting); ok { + return true + } else { + return false + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingOptions")) + } + panic(fmt.Errorf("message network.launch.v1.VestingOptions does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VestingOptions) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.VestingOptions.delayedVesting": + x.Options = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingOptions")) + } + panic(fmt.Errorf("message network.launch.v1.VestingOptions does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_VestingOptions) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.VestingOptions.delayedVesting": + if x.Options == nil { + return protoreflect.ValueOfMessage((*DelayedVesting)(nil).ProtoReflect()) + } else if v, ok := x.Options.(*VestingOptions_DelayedVesting); ok { + return protoreflect.ValueOfMessage(v.DelayedVesting.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*DelayedVesting)(nil).ProtoReflect()) + } + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingOptions")) + } + panic(fmt.Errorf("message network.launch.v1.VestingOptions does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VestingOptions) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.VestingOptions.delayedVesting": + cv := value.Message().Interface().(*DelayedVesting) + x.Options = &VestingOptions_DelayedVesting{DelayedVesting: cv} + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingOptions")) + } + panic(fmt.Errorf("message network.launch.v1.VestingOptions does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VestingOptions) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.VestingOptions.delayedVesting": + if x.Options == nil { + value := &DelayedVesting{} + oneofValue := &VestingOptions_DelayedVesting{DelayedVesting: value} + x.Options = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Options.(type) { + case *VestingOptions_DelayedVesting: + return protoreflect.ValueOfMessage(m.DelayedVesting.ProtoReflect()) + default: + value := &DelayedVesting{} + oneofValue := &VestingOptions_DelayedVesting{DelayedVesting: value} + x.Options = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingOptions")) + } + panic(fmt.Errorf("message network.launch.v1.VestingOptions does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_VestingOptions) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.VestingOptions.delayedVesting": + value := &DelayedVesting{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.VestingOptions")) + } + panic(fmt.Errorf("message network.launch.v1.VestingOptions does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_VestingOptions) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + case "network.launch.v1.VestingOptions.options": + if x.Options == nil { + return nil + } + switch x.Options.(type) { + case *VestingOptions_DelayedVesting: + return x.Descriptor().Fields().ByName("delayedVesting") + } + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.VestingOptions", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_VestingOptions) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VestingOptions) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_VestingOptions) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_VestingOptions) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*VestingOptions) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + switch x := x.Options.(type) { + case *VestingOptions_DelayedVesting: + if x == nil { + break + } + l = options.Size(x.DelayedVesting) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*VestingOptions) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + switch x := x.Options.(type) { + case *VestingOptions_DelayedVesting: + encoded, err := options.Marshal(x.DelayedVesting) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*VestingOptions) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: VestingOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: VestingOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DelayedVesting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &DelayedVesting{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Options = &VestingOptions_DelayedVesting{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_DelayedVesting_1_list)(nil) + +type _DelayedVesting_1_list struct { + list *[]*v1beta1.Coin +} + +func (x *_DelayedVesting_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_DelayedVesting_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_DelayedVesting_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_DelayedVesting_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_DelayedVesting_1_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_DelayedVesting_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_DelayedVesting_1_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_DelayedVesting_1_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_DelayedVesting_2_list)(nil) + +type _DelayedVesting_2_list struct { + list *[]*v1beta1.Coin +} + +func (x *_DelayedVesting_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_DelayedVesting_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_DelayedVesting_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_DelayedVesting_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_DelayedVesting_2_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_DelayedVesting_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_DelayedVesting_2_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_DelayedVesting_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_DelayedVesting protoreflect.MessageDescriptor + fd_DelayedVesting_totalBalance protoreflect.FieldDescriptor + fd_DelayedVesting_vesting protoreflect.FieldDescriptor + fd_DelayedVesting_endTime protoreflect.FieldDescriptor +) + +func init() { + file_network_launch_v1_vesting_account_proto_init() + md_DelayedVesting = File_network_launch_v1_vesting_account_proto.Messages().ByName("DelayedVesting") + fd_DelayedVesting_totalBalance = md_DelayedVesting.Fields().ByName("totalBalance") + fd_DelayedVesting_vesting = md_DelayedVesting.Fields().ByName("vesting") + fd_DelayedVesting_endTime = md_DelayedVesting.Fields().ByName("endTime") +} + +var _ protoreflect.Message = (*fastReflection_DelayedVesting)(nil) + +type fastReflection_DelayedVesting DelayedVesting + +func (x *DelayedVesting) ProtoReflect() protoreflect.Message { + return (*fastReflection_DelayedVesting)(x) +} + +func (x *DelayedVesting) slowProtoReflect() protoreflect.Message { + mi := &file_network_launch_v1_vesting_account_proto_msgTypes[2] + 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) +} + +var _fastReflection_DelayedVesting_messageType fastReflection_DelayedVesting_messageType +var _ protoreflect.MessageType = fastReflection_DelayedVesting_messageType{} + +type fastReflection_DelayedVesting_messageType struct{} + +func (x fastReflection_DelayedVesting_messageType) Zero() protoreflect.Message { + return (*fastReflection_DelayedVesting)(nil) +} +func (x fastReflection_DelayedVesting_messageType) New() protoreflect.Message { + return new(fastReflection_DelayedVesting) +} +func (x fastReflection_DelayedVesting_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_DelayedVesting +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_DelayedVesting) Descriptor() protoreflect.MessageDescriptor { + return md_DelayedVesting +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_DelayedVesting) Type() protoreflect.MessageType { + return _fastReflection_DelayedVesting_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_DelayedVesting) New() protoreflect.Message { + return new(fastReflection_DelayedVesting) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_DelayedVesting) Interface() protoreflect.ProtoMessage { + return (*DelayedVesting)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_DelayedVesting) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.TotalBalance) != 0 { + value := protoreflect.ValueOfList(&_DelayedVesting_1_list{list: &x.TotalBalance}) + if !f(fd_DelayedVesting_totalBalance, value) { + return + } + } + if len(x.Vesting) != 0 { + value := protoreflect.ValueOfList(&_DelayedVesting_2_list{list: &x.Vesting}) + if !f(fd_DelayedVesting_vesting, value) { + return + } + } + if x.EndTime != nil { + value := protoreflect.ValueOfMessage(x.EndTime.ProtoReflect()) + if !f(fd_DelayedVesting_endTime, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_DelayedVesting) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.launch.v1.DelayedVesting.totalBalance": + return len(x.TotalBalance) != 0 + case "network.launch.v1.DelayedVesting.vesting": + return len(x.Vesting) != 0 + case "network.launch.v1.DelayedVesting.endTime": + return x.EndTime != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DelayedVesting")) + } + panic(fmt.Errorf("message network.launch.v1.DelayedVesting does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_DelayedVesting) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.launch.v1.DelayedVesting.totalBalance": + x.TotalBalance = nil + case "network.launch.v1.DelayedVesting.vesting": + x.Vesting = nil + case "network.launch.v1.DelayedVesting.endTime": + x.EndTime = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DelayedVesting")) + } + panic(fmt.Errorf("message network.launch.v1.DelayedVesting does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_DelayedVesting) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.launch.v1.DelayedVesting.totalBalance": + if len(x.TotalBalance) == 0 { + return protoreflect.ValueOfList(&_DelayedVesting_1_list{}) + } + listValue := &_DelayedVesting_1_list{list: &x.TotalBalance} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.DelayedVesting.vesting": + if len(x.Vesting) == 0 { + return protoreflect.ValueOfList(&_DelayedVesting_2_list{}) + } + listValue := &_DelayedVesting_2_list{list: &x.Vesting} + return protoreflect.ValueOfList(listValue) + case "network.launch.v1.DelayedVesting.endTime": + value := x.EndTime + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DelayedVesting")) + } + panic(fmt.Errorf("message network.launch.v1.DelayedVesting does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_DelayedVesting) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.launch.v1.DelayedVesting.totalBalance": + lv := value.List() + clv := lv.(*_DelayedVesting_1_list) + x.TotalBalance = *clv.list + case "network.launch.v1.DelayedVesting.vesting": + lv := value.List() + clv := lv.(*_DelayedVesting_2_list) + x.Vesting = *clv.list + case "network.launch.v1.DelayedVesting.endTime": + x.EndTime = value.Message().Interface().(*timestamppb.Timestamp) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DelayedVesting")) + } + panic(fmt.Errorf("message network.launch.v1.DelayedVesting does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_DelayedVesting) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.DelayedVesting.totalBalance": + if x.TotalBalance == nil { + x.TotalBalance = []*v1beta1.Coin{} + } + value := &_DelayedVesting_1_list{list: &x.TotalBalance} + return protoreflect.ValueOfList(value) + case "network.launch.v1.DelayedVesting.vesting": + if x.Vesting == nil { + x.Vesting = []*v1beta1.Coin{} + } + value := &_DelayedVesting_2_list{list: &x.Vesting} + return protoreflect.ValueOfList(value) + case "network.launch.v1.DelayedVesting.endTime": + if x.EndTime == nil { + x.EndTime = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.EndTime.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DelayedVesting")) + } + panic(fmt.Errorf("message network.launch.v1.DelayedVesting does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_DelayedVesting) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.launch.v1.DelayedVesting.totalBalance": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_DelayedVesting_1_list{list: &list}) + case "network.launch.v1.DelayedVesting.vesting": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_DelayedVesting_2_list{list: &list}) + case "network.launch.v1.DelayedVesting.endTime": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.launch.v1.DelayedVesting")) + } + panic(fmt.Errorf("message network.launch.v1.DelayedVesting does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_DelayedVesting) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.launch.v1.DelayedVesting", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_DelayedVesting) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_DelayedVesting) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_DelayedVesting) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_DelayedVesting) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*DelayedVesting) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.TotalBalance) > 0 { + for _, e := range x.TotalBalance { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.Vesting) > 0 { + for _, e := range x.Vesting { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.EndTime != nil { + l = options.Size(x.EndTime) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*DelayedVesting) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.EndTime != nil { + encoded, err := options.Marshal(x.EndTime) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Vesting) > 0 { + for iNdEx := len(x.Vesting) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Vesting[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.TotalBalance) > 0 { + for iNdEx := len(x.TotalBalance) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.TotalBalance[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*DelayedVesting) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: DelayedVesting: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: DelayedVesting: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalBalance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TotalBalance = append(x.TotalBalance, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TotalBalance[len(x.TotalBalance)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Vesting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Vesting = append(x.Vesting, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Vesting[len(x.Vesting)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.EndTime == nil { + x.EndTime = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.EndTime); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/launch/v1/vesting_account.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type VestingAccount struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + VestingOptions *VestingOptions `protobuf:"bytes,3,opt,name=vestingOptions,proto3" json:"vestingOptions,omitempty"` +} + +func (x *VestingAccount) Reset() { + *x = VestingAccount{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_vesting_account_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VestingAccount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VestingAccount) ProtoMessage() {} + +// Deprecated: Use VestingAccount.ProtoReflect.Descriptor instead. +func (*VestingAccount) Descriptor() ([]byte, []int) { + return file_network_launch_v1_vesting_account_proto_rawDescGZIP(), []int{0} +} + +func (x *VestingAccount) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *VestingAccount) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *VestingAccount) GetVestingOptions() *VestingOptions { + if x != nil { + return x.VestingOptions + } + return nil +} + +type VestingOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Options: + // + // *VestingOptions_DelayedVesting + Options isVestingOptions_Options `protobuf_oneof:"options"` +} + +func (x *VestingOptions) Reset() { + *x = VestingOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_vesting_account_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VestingOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VestingOptions) ProtoMessage() {} + +// Deprecated: Use VestingOptions.ProtoReflect.Descriptor instead. +func (*VestingOptions) Descriptor() ([]byte, []int) { + return file_network_launch_v1_vesting_account_proto_rawDescGZIP(), []int{1} +} + +func (x *VestingOptions) GetOptions() isVestingOptions_Options { + if x != nil { + return x.Options + } + return nil +} + +func (x *VestingOptions) GetDelayedVesting() *DelayedVesting { + if x, ok := x.GetOptions().(*VestingOptions_DelayedVesting); ok { + return x.DelayedVesting + } + return nil +} + +type isVestingOptions_Options interface { + isVestingOptions_Options() +} + +type VestingOptions_DelayedVesting struct { + DelayedVesting *DelayedVesting `protobuf:"bytes,1,opt,name=delayedVesting,proto3,oneof"` +} + +func (*VestingOptions_DelayedVesting) isVestingOptions_Options() {} + +// DelayedVesting represents options for delayed vesting +// Delayed vesting is the type of vesting where all vesting coins are vested +// once end time is reached +type DelayedVesting struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TotalBalance []*v1beta1.Coin `protobuf:"bytes,1,rep,name=totalBalance,proto3" json:"totalBalance,omitempty"` + Vesting []*v1beta1.Coin `protobuf:"bytes,2,rep,name=vesting,proto3" json:"vesting,omitempty"` + EndTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=endTime,proto3" json:"endTime,omitempty"` +} + +func (x *DelayedVesting) Reset() { + *x = DelayedVesting{} + if protoimpl.UnsafeEnabled { + mi := &file_network_launch_v1_vesting_account_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DelayedVesting) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DelayedVesting) ProtoMessage() {} + +// Deprecated: Use DelayedVesting.ProtoReflect.Descriptor instead. +func (*DelayedVesting) Descriptor() ([]byte, []int) { + return file_network_launch_v1_vesting_account_proto_rawDescGZIP(), []int{2} +} + +func (x *DelayedVesting) GetTotalBalance() []*v1beta1.Coin { + if x != nil { + return x.TotalBalance + } + return nil +} + +func (x *DelayedVesting) GetVesting() []*v1beta1.Coin { + if x != nil { + return x.Vesting + } + return nil +} + +func (x *DelayedVesting) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + +var File_network_launch_v1_vesting_account_proto protoreflect.FileDescriptor + +var file_network_launch_v1_vesting_account_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, + 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xb1, 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x68, 0x0a, 0x0e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4b, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, + 0x65, 0x64, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x56, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x56, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0xac, 0x03, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x56, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x12, 0xb0, 0x01, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, + 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, + 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, + 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x3e, + 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, + 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x42, 0xcc, + 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, + 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x2f, 0x76, 0x31, + 0x3b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4c, 0x58, 0xaa, + 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x3a, 0x3a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_launch_v1_vesting_account_proto_rawDescOnce sync.Once + file_network_launch_v1_vesting_account_proto_rawDescData = file_network_launch_v1_vesting_account_proto_rawDesc +) + +func file_network_launch_v1_vesting_account_proto_rawDescGZIP() []byte { + file_network_launch_v1_vesting_account_proto_rawDescOnce.Do(func() { + file_network_launch_v1_vesting_account_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_launch_v1_vesting_account_proto_rawDescData) + }) + return file_network_launch_v1_vesting_account_proto_rawDescData +} + +var file_network_launch_v1_vesting_account_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_network_launch_v1_vesting_account_proto_goTypes = []interface{}{ + (*VestingAccount)(nil), // 0: network.launch.v1.VestingAccount + (*VestingOptions)(nil), // 1: network.launch.v1.VestingOptions + (*DelayedVesting)(nil), // 2: network.launch.v1.DelayedVesting + (*v1beta1.Coin)(nil), // 3: cosmos.base.v1beta1.Coin + (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp +} +var file_network_launch_v1_vesting_account_proto_depIdxs = []int32{ + 1, // 0: network.launch.v1.VestingAccount.vestingOptions:type_name -> network.launch.v1.VestingOptions + 2, // 1: network.launch.v1.VestingOptions.delayedVesting:type_name -> network.launch.v1.DelayedVesting + 3, // 2: network.launch.v1.DelayedVesting.totalBalance:type_name -> cosmos.base.v1beta1.Coin + 3, // 3: network.launch.v1.DelayedVesting.vesting:type_name -> cosmos.base.v1beta1.Coin + 4, // 4: network.launch.v1.DelayedVesting.endTime:type_name -> google.protobuf.Timestamp + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_network_launch_v1_vesting_account_proto_init() } +func file_network_launch_v1_vesting_account_proto_init() { + if File_network_launch_v1_vesting_account_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_launch_v1_vesting_account_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VestingAccount); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_vesting_account_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VestingOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_launch_v1_vesting_account_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DelayedVesting); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_network_launch_v1_vesting_account_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*VestingOptions_DelayedVesting)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_launch_v1_vesting_account_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_launch_v1_vesting_account_proto_goTypes, + DependencyIndexes: file_network_launch_v1_vesting_account_proto_depIdxs, + MessageInfos: file_network_launch_v1_vesting_account_proto_msgTypes, + }.Build() + File_network_launch_v1_vesting_account_proto = out.File + file_network_launch_v1_vesting_account_proto_rawDesc = nil + file_network_launch_v1_vesting_account_proto_goTypes = nil + file_network_launch_v1_vesting_account_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/module/v1/module.pulsar.go b/api/network/monitoringc/module/v1/module.pulsar.go new file mode 100644 index 00000000..e807a412 --- /dev/null +++ b/api/network/monitoringc/module/v1/module.pulsar.go @@ -0,0 +1,582 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package modulev1 + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Module protoreflect.MessageDescriptor + fd_Module_authority protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_module_v1_module_proto_init() + md_Module = File_network_monitoringc_module_v1_module_proto.Messages().ByName("Module") + fd_Module_authority = md_Module.Fields().ByName("authority") +} + +var _ protoreflect.Message = (*fastReflection_Module)(nil) + +type fastReflection_Module Module + +func (x *Module) ProtoReflect() protoreflect.Message { + return (*fastReflection_Module)(x) +} + +func (x *Module) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_module_v1_module_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) +} + +var _fastReflection_Module_messageType fastReflection_Module_messageType +var _ protoreflect.MessageType = fastReflection_Module_messageType{} + +type fastReflection_Module_messageType struct{} + +func (x fastReflection_Module_messageType) Zero() protoreflect.Message { + return (*fastReflection_Module)(nil) +} +func (x fastReflection_Module_messageType) New() protoreflect.Message { + return new(fastReflection_Module) +} +func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Module) Type() protoreflect.MessageType { + return _fastReflection_Module_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Module) New() protoreflect.Message { + return new(fastReflection_Module) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage { + return (*Module)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_Module_authority, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.module.v1.Module.authority": + return x.Authority != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringc.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.module.v1.Module.authority": + x.Authority = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringc.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.module.v1.Module.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringc.module.v1.Module does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.module.v1.Module.authority": + x.Authority = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringc.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.module.v1.Module.authority": + panic(fmt.Errorf("field authority of message network.monitoringc.module.v1.Module is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringc.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.module.v1.Module.authority": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringc.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.module.v1.Module", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Module) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/module/v1/module.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Module is the config object for the module. +type Module struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (x *Module) Reset() { + *x = Module{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_module_v1_module_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Module) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Module) ProtoMessage() {} + +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { + return file_network_monitoringc_module_v1_module_proto_rawDescGZIP(), []int{0} +} + +func (x *Module) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +var File_network_monitoringc_module_v1_module_proto protoreflect.FileDescriptor + +var file_network_monitoringc_module_v1_module_proto_rawDesc = []byte{ + 0x0a, 0x2a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x63, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x57, 0x0a, + 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x2f, 0xba, 0xc0, 0x96, 0xda, 0x01, 0x29, 0x0a, 0x27, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x42, 0x8d, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x44, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x4d, 0xaa, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x29, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_module_v1_module_proto_rawDescOnce sync.Once + file_network_monitoringc_module_v1_module_proto_rawDescData = file_network_monitoringc_module_v1_module_proto_rawDesc +) + +func file_network_monitoringc_module_v1_module_proto_rawDescGZIP() []byte { + file_network_monitoringc_module_v1_module_proto_rawDescOnce.Do(func() { + file_network_monitoringc_module_v1_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_module_v1_module_proto_rawDescData) + }) + return file_network_monitoringc_module_v1_module_proto_rawDescData +} + +var file_network_monitoringc_module_v1_module_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringc_module_v1_module_proto_goTypes = []interface{}{ + (*Module)(nil), // 0: network.monitoringc.module.v1.Module +} +var file_network_monitoringc_module_v1_module_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 +} + +func init() { file_network_monitoringc_module_v1_module_proto_init() } +func file_network_monitoringc_module_v1_module_proto_init() { + if File_network_monitoringc_module_v1_module_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_module_v1_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Module); 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_network_monitoringc_module_v1_module_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_module_v1_module_proto_goTypes, + DependencyIndexes: file_network_monitoringc_module_v1_module_proto_depIdxs, + MessageInfos: file_network_monitoringc_module_v1_module_proto_msgTypes, + }.Build() + File_network_monitoringc_module_v1_module_proto = out.File + file_network_monitoringc_module_v1_module_proto_rawDesc = nil + file_network_monitoringc_module_v1_module_proto_goTypes = nil + file_network_monitoringc_module_v1_module_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/genesis.pulsar.go b/api/network/monitoringc/v1/genesis.pulsar.go new file mode 100644 index 00000000..59722033 --- /dev/null +++ b/api/network/monitoringc/v1/genesis.pulsar.go @@ -0,0 +1,1471 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_GenesisState_3_list)(nil) + +type _GenesisState_3_list struct { + list *[]*LaunchIDFromChannelID +} + +func (x *_GenesisState_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*LaunchIDFromChannelID) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*LaunchIDFromChannelID) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_3_list) AppendMutable() protoreflect.Value { + v := new(LaunchIDFromChannelID) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_3_list) NewElement() protoreflect.Value { + v := new(LaunchIDFromChannelID) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_3_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_4_list)(nil) + +type _GenesisState_4_list struct { + list *[]*LaunchIDFromVerifiedClientID +} + +func (x *_GenesisState_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*LaunchIDFromVerifiedClientID) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*LaunchIDFromVerifiedClientID) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_4_list) AppendMutable() protoreflect.Value { + v := new(LaunchIDFromVerifiedClientID) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_4_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_4_list) NewElement() protoreflect.Value { + v := new(LaunchIDFromVerifiedClientID) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_4_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_5_list)(nil) + +type _GenesisState_5_list struct { + list *[]*MonitoringHistory +} + +func (x *_GenesisState_5_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_5_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_5_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*MonitoringHistory) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_5_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*MonitoringHistory) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_5_list) AppendMutable() protoreflect.Value { + v := new(MonitoringHistory) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_5_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_5_list) NewElement() protoreflect.Value { + v := new(MonitoringHistory) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_5_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_6_list)(nil) + +type _GenesisState_6_list struct { + list *[]*VerifiedClientID +} + +func (x *_GenesisState_6_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_6_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_6_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*VerifiedClientID) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_6_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*VerifiedClientID) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_6_list) AppendMutable() protoreflect.Value { + v := new(VerifiedClientID) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_6_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_6_list) NewElement() protoreflect.Value { + v := new(VerifiedClientID) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_6_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_7_list)(nil) + +type _GenesisState_7_list struct { + list *[]*ProviderClientID +} + +func (x *_GenesisState_7_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_7_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_7_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ProviderClientID) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_7_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ProviderClientID) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_7_list) AppendMutable() protoreflect.Value { + v := new(ProviderClientID) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_7_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_7_list) NewElement() protoreflect.Value { + v := new(ProviderClientID) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_7_list) IsValid() bool { + return x.list != nil +} + +var ( + md_GenesisState protoreflect.MessageDescriptor + fd_GenesisState_params protoreflect.FieldDescriptor + fd_GenesisState_portID protoreflect.FieldDescriptor + fd_GenesisState_launchIDFromChannelIDList protoreflect.FieldDescriptor + fd_GenesisState_launchIDFromVerifiedClientIDList protoreflect.FieldDescriptor + fd_GenesisState_monitoringHistoryList protoreflect.FieldDescriptor + fd_GenesisState_verifiedClientIDList protoreflect.FieldDescriptor + fd_GenesisState_providerClientIDList protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_genesis_proto_init() + md_GenesisState = File_network_monitoringc_v1_genesis_proto.Messages().ByName("GenesisState") + fd_GenesisState_params = md_GenesisState.Fields().ByName("params") + fd_GenesisState_portID = md_GenesisState.Fields().ByName("portID") + fd_GenesisState_launchIDFromChannelIDList = md_GenesisState.Fields().ByName("launchIDFromChannelIDList") + fd_GenesisState_launchIDFromVerifiedClientIDList = md_GenesisState.Fields().ByName("launchIDFromVerifiedClientIDList") + fd_GenesisState_monitoringHistoryList = md_GenesisState.Fields().ByName("monitoringHistoryList") + fd_GenesisState_verifiedClientIDList = md_GenesisState.Fields().ByName("verifiedClientIDList") + fd_GenesisState_providerClientIDList = md_GenesisState.Fields().ByName("providerClientIDList") +} + +var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) + +type fastReflection_GenesisState GenesisState + +func (x *GenesisState) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisState)(x) +} + +func (x *GenesisState) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_genesis_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) +} + +var _fastReflection_GenesisState_messageType fastReflection_GenesisState_messageType +var _ protoreflect.MessageType = fastReflection_GenesisState_messageType{} + +type fastReflection_GenesisState_messageType struct{} + +func (x fastReflection_GenesisState_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisState)(nil) +} +func (x fastReflection_GenesisState_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} +func (x fastReflection_GenesisState_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisState) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisState) Type() protoreflect.MessageType { + return _fastReflection_GenesisState_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisState) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisState) Interface() protoreflect.ProtoMessage { + return (*GenesisState)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_GenesisState_params, value) { + return + } + } + if x.PortID != "" { + value := protoreflect.ValueOfString(x.PortID) + if !f(fd_GenesisState_portID, value) { + return + } + } + if len(x.LaunchIDFromChannelIDList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_3_list{list: &x.LaunchIDFromChannelIDList}) + if !f(fd_GenesisState_launchIDFromChannelIDList, value) { + return + } + } + if len(x.LaunchIDFromVerifiedClientIDList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_4_list{list: &x.LaunchIDFromVerifiedClientIDList}) + if !f(fd_GenesisState_launchIDFromVerifiedClientIDList, value) { + return + } + } + if len(x.MonitoringHistoryList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_5_list{list: &x.MonitoringHistoryList}) + if !f(fd_GenesisState_monitoringHistoryList, value) { + return + } + } + if len(x.VerifiedClientIDList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_6_list{list: &x.VerifiedClientIDList}) + if !f(fd_GenesisState_verifiedClientIDList, value) { + return + } + } + if len(x.ProviderClientIDList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_7_list{list: &x.ProviderClientIDList}) + if !f(fd_GenesisState_providerClientIDList, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.GenesisState.params": + return x.Params != nil + case "network.monitoringc.v1.GenesisState.portID": + return x.PortID != "" + case "network.monitoringc.v1.GenesisState.launchIDFromChannelIDList": + return len(x.LaunchIDFromChannelIDList) != 0 + case "network.monitoringc.v1.GenesisState.launchIDFromVerifiedClientIDList": + return len(x.LaunchIDFromVerifiedClientIDList) != 0 + case "network.monitoringc.v1.GenesisState.monitoringHistoryList": + return len(x.MonitoringHistoryList) != 0 + case "network.monitoringc.v1.GenesisState.verifiedClientIDList": + return len(x.VerifiedClientIDList) != 0 + case "network.monitoringc.v1.GenesisState.providerClientIDList": + return len(x.ProviderClientIDList) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringc.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.GenesisState.params": + x.Params = nil + case "network.monitoringc.v1.GenesisState.portID": + x.PortID = "" + case "network.monitoringc.v1.GenesisState.launchIDFromChannelIDList": + x.LaunchIDFromChannelIDList = nil + case "network.monitoringc.v1.GenesisState.launchIDFromVerifiedClientIDList": + x.LaunchIDFromVerifiedClientIDList = nil + case "network.monitoringc.v1.GenesisState.monitoringHistoryList": + x.MonitoringHistoryList = nil + case "network.monitoringc.v1.GenesisState.verifiedClientIDList": + x.VerifiedClientIDList = nil + case "network.monitoringc.v1.GenesisState.providerClientIDList": + x.ProviderClientIDList = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringc.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.GenesisState.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.monitoringc.v1.GenesisState.portID": + value := x.PortID + return protoreflect.ValueOfString(value) + case "network.monitoringc.v1.GenesisState.launchIDFromChannelIDList": + if len(x.LaunchIDFromChannelIDList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_3_list{}) + } + listValue := &_GenesisState_3_list{list: &x.LaunchIDFromChannelIDList} + return protoreflect.ValueOfList(listValue) + case "network.monitoringc.v1.GenesisState.launchIDFromVerifiedClientIDList": + if len(x.LaunchIDFromVerifiedClientIDList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_4_list{}) + } + listValue := &_GenesisState_4_list{list: &x.LaunchIDFromVerifiedClientIDList} + return protoreflect.ValueOfList(listValue) + case "network.monitoringc.v1.GenesisState.monitoringHistoryList": + if len(x.MonitoringHistoryList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_5_list{}) + } + listValue := &_GenesisState_5_list{list: &x.MonitoringHistoryList} + return protoreflect.ValueOfList(listValue) + case "network.monitoringc.v1.GenesisState.verifiedClientIDList": + if len(x.VerifiedClientIDList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_6_list{}) + } + listValue := &_GenesisState_6_list{list: &x.VerifiedClientIDList} + return protoreflect.ValueOfList(listValue) + case "network.monitoringc.v1.GenesisState.providerClientIDList": + if len(x.ProviderClientIDList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_7_list{}) + } + listValue := &_GenesisState_7_list{list: &x.ProviderClientIDList} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringc.v1.GenesisState does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.GenesisState.params": + x.Params = value.Message().Interface().(*Params) + case "network.monitoringc.v1.GenesisState.portID": + x.PortID = value.Interface().(string) + case "network.monitoringc.v1.GenesisState.launchIDFromChannelIDList": + lv := value.List() + clv := lv.(*_GenesisState_3_list) + x.LaunchIDFromChannelIDList = *clv.list + case "network.monitoringc.v1.GenesisState.launchIDFromVerifiedClientIDList": + lv := value.List() + clv := lv.(*_GenesisState_4_list) + x.LaunchIDFromVerifiedClientIDList = *clv.list + case "network.monitoringc.v1.GenesisState.monitoringHistoryList": + lv := value.List() + clv := lv.(*_GenesisState_5_list) + x.MonitoringHistoryList = *clv.list + case "network.monitoringc.v1.GenesisState.verifiedClientIDList": + lv := value.List() + clv := lv.(*_GenesisState_6_list) + x.VerifiedClientIDList = *clv.list + case "network.monitoringc.v1.GenesisState.providerClientIDList": + lv := value.List() + clv := lv.(*_GenesisState_7_list) + x.ProviderClientIDList = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringc.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.GenesisState.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.monitoringc.v1.GenesisState.launchIDFromChannelIDList": + if x.LaunchIDFromChannelIDList == nil { + x.LaunchIDFromChannelIDList = []*LaunchIDFromChannelID{} + } + value := &_GenesisState_3_list{list: &x.LaunchIDFromChannelIDList} + return protoreflect.ValueOfList(value) + case "network.monitoringc.v1.GenesisState.launchIDFromVerifiedClientIDList": + if x.LaunchIDFromVerifiedClientIDList == nil { + x.LaunchIDFromVerifiedClientIDList = []*LaunchIDFromVerifiedClientID{} + } + value := &_GenesisState_4_list{list: &x.LaunchIDFromVerifiedClientIDList} + return protoreflect.ValueOfList(value) + case "network.monitoringc.v1.GenesisState.monitoringHistoryList": + if x.MonitoringHistoryList == nil { + x.MonitoringHistoryList = []*MonitoringHistory{} + } + value := &_GenesisState_5_list{list: &x.MonitoringHistoryList} + return protoreflect.ValueOfList(value) + case "network.monitoringc.v1.GenesisState.verifiedClientIDList": + if x.VerifiedClientIDList == nil { + x.VerifiedClientIDList = []*VerifiedClientID{} + } + value := &_GenesisState_6_list{list: &x.VerifiedClientIDList} + return protoreflect.ValueOfList(value) + case "network.monitoringc.v1.GenesisState.providerClientIDList": + if x.ProviderClientIDList == nil { + x.ProviderClientIDList = []*ProviderClientID{} + } + value := &_GenesisState_7_list{list: &x.ProviderClientIDList} + return protoreflect.ValueOfList(value) + case "network.monitoringc.v1.GenesisState.portID": + panic(fmt.Errorf("field portID of message network.monitoringc.v1.GenesisState is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringc.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.GenesisState.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.monitoringc.v1.GenesisState.portID": + return protoreflect.ValueOfString("") + case "network.monitoringc.v1.GenesisState.launchIDFromChannelIDList": + list := []*LaunchIDFromChannelID{} + return protoreflect.ValueOfList(&_GenesisState_3_list{list: &list}) + case "network.monitoringc.v1.GenesisState.launchIDFromVerifiedClientIDList": + list := []*LaunchIDFromVerifiedClientID{} + return protoreflect.ValueOfList(&_GenesisState_4_list{list: &list}) + case "network.monitoringc.v1.GenesisState.monitoringHistoryList": + list := []*MonitoringHistory{} + return protoreflect.ValueOfList(&_GenesisState_5_list{list: &list}) + case "network.monitoringc.v1.GenesisState.verifiedClientIDList": + list := []*VerifiedClientID{} + return protoreflect.ValueOfList(&_GenesisState_6_list{list: &list}) + case "network.monitoringc.v1.GenesisState.providerClientIDList": + list := []*ProviderClientID{} + return protoreflect.ValueOfList(&_GenesisState_7_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringc.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisState) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.GenesisState", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisState) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisState) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.PortID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.LaunchIDFromChannelIDList) > 0 { + for _, e := range x.LaunchIDFromChannelIDList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.LaunchIDFromVerifiedClientIDList) > 0 { + for _, e := range x.LaunchIDFromVerifiedClientIDList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.MonitoringHistoryList) > 0 { + for _, e := range x.MonitoringHistoryList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.VerifiedClientIDList) > 0 { + for _, e := range x.VerifiedClientIDList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.ProviderClientIDList) > 0 { + for _, e := range x.ProviderClientIDList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ProviderClientIDList) > 0 { + for iNdEx := len(x.ProviderClientIDList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ProviderClientIDList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x3a + } + } + if len(x.VerifiedClientIDList) > 0 { + for iNdEx := len(x.VerifiedClientIDList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.VerifiedClientIDList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + } + if len(x.MonitoringHistoryList) > 0 { + for iNdEx := len(x.MonitoringHistoryList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.MonitoringHistoryList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + } + } + if len(x.LaunchIDFromVerifiedClientIDList) > 0 { + for iNdEx := len(x.LaunchIDFromVerifiedClientIDList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.LaunchIDFromVerifiedClientIDList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + } + if len(x.LaunchIDFromChannelIDList) > 0 { + for iNdEx := len(x.LaunchIDFromChannelIDList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.LaunchIDFromChannelIDList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.PortID) > 0 { + i -= len(x.PortID) + copy(dAtA[i:], x.PortID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PortID))) + i-- + dAtA[i] = 0x12 + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PortID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.PortID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromChannelIDList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.LaunchIDFromChannelIDList = append(x.LaunchIDFromChannelIDList, &LaunchIDFromChannelID{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.LaunchIDFromChannelIDList[len(x.LaunchIDFromChannelIDList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromVerifiedClientIDList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.LaunchIDFromVerifiedClientIDList = append(x.LaunchIDFromVerifiedClientIDList, &LaunchIDFromVerifiedClientID{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.LaunchIDFromVerifiedClientIDList[len(x.LaunchIDFromVerifiedClientIDList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MonitoringHistoryList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MonitoringHistoryList = append(x.MonitoringHistoryList, &MonitoringHistory{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MonitoringHistoryList[len(x.MonitoringHistoryList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VerifiedClientIDList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.VerifiedClientIDList = append(x.VerifiedClientIDList, &VerifiedClientID{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VerifiedClientIDList[len(x.VerifiedClientIDList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProviderClientIDList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProviderClientIDList = append(x.ProviderClientIDList, &ProviderClientID{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ProviderClientIDList[len(x.ProviderClientIDList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/genesis.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// GenesisState defines the monitoringc module's genesis state. +type GenesisState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params defines all the parameters of the module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + PortID string `protobuf:"bytes,2,opt,name=portID,proto3" json:"portID,omitempty"` + LaunchIDFromChannelIDList []*LaunchIDFromChannelID `protobuf:"bytes,3,rep,name=launchIDFromChannelIDList,proto3" json:"launchIDFromChannelIDList,omitempty"` + LaunchIDFromVerifiedClientIDList []*LaunchIDFromVerifiedClientID `protobuf:"bytes,4,rep,name=launchIDFromVerifiedClientIDList,proto3" json:"launchIDFromVerifiedClientIDList,omitempty"` + MonitoringHistoryList []*MonitoringHistory `protobuf:"bytes,5,rep,name=monitoringHistoryList,proto3" json:"monitoringHistoryList,omitempty"` + VerifiedClientIDList []*VerifiedClientID `protobuf:"bytes,6,rep,name=verifiedClientIDList,proto3" json:"verifiedClientIDList,omitempty"` + ProviderClientIDList []*ProviderClientID `protobuf:"bytes,7,rep,name=providerClientIDList,proto3" json:"providerClientIDList,omitempty"` +} + +func (x *GenesisState) Reset() { + *x = GenesisState{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_genesis_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisState) ProtoMessage() {} + +// Deprecated: Use GenesisState.ProtoReflect.Descriptor instead. +func (*GenesisState) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_genesis_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisState) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +func (x *GenesisState) GetPortID() string { + if x != nil { + return x.PortID + } + return "" +} + +func (x *GenesisState) GetLaunchIDFromChannelIDList() []*LaunchIDFromChannelID { + if x != nil { + return x.LaunchIDFromChannelIDList + } + return nil +} + +func (x *GenesisState) GetLaunchIDFromVerifiedClientIDList() []*LaunchIDFromVerifiedClientID { + if x != nil { + return x.LaunchIDFromVerifiedClientIDList + } + return nil +} + +func (x *GenesisState) GetMonitoringHistoryList() []*MonitoringHistory { + if x != nil { + return x.MonitoringHistoryList + } + return nil +} + +func (x *GenesisState) GetVerifiedClientIDList() []*VerifiedClientID { + if x != nil { + return x.VerifiedClientIDList + } + return nil +} + +func (x *GenesisState) GetProviderClientIDList() []*ProviderClientID { + if x != nil { + return x.ProviderClientIDList + } + return nil +} + +var File_network_monitoringc_v1_genesis_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_genesis_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x1a, 0x11, + 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x3e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x69, + 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x76, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x94, 0x05, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x6f, 0x72, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x72, + 0x74, 0x49, 0x44, 0x12, 0x71, 0x0a, 0x19, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, + 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x19, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x86, 0x01, 0x0a, 0x20, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x20, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x65, 0x0a, 0x15, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, + 0x15, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x62, 0x0a, 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x62, 0x0a, 0x14, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x4c, 0x69, + 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x4c, 0x69, 0x73, 0x74, 0x42, 0xe8, + 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x47, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, + 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x56, 0x31, + 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, + 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_monitoringc_v1_genesis_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_genesis_proto_rawDescData = file_network_monitoringc_v1_genesis_proto_rawDesc +) + +func file_network_monitoringc_v1_genesis_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_genesis_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_genesis_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_genesis_proto_rawDescData) + }) + return file_network_monitoringc_v1_genesis_proto_rawDescData +} + +var file_network_monitoringc_v1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringc_v1_genesis_proto_goTypes = []interface{}{ + (*GenesisState)(nil), // 0: network.monitoringc.v1.GenesisState + (*Params)(nil), // 1: network.monitoringc.v1.Params + (*LaunchIDFromChannelID)(nil), // 2: network.monitoringc.v1.LaunchIDFromChannelID + (*LaunchIDFromVerifiedClientID)(nil), // 3: network.monitoringc.v1.LaunchIDFromVerifiedClientID + (*MonitoringHistory)(nil), // 4: network.monitoringc.v1.MonitoringHistory + (*VerifiedClientID)(nil), // 5: network.monitoringc.v1.VerifiedClientID + (*ProviderClientID)(nil), // 6: network.monitoringc.v1.ProviderClientID +} +var file_network_monitoringc_v1_genesis_proto_depIdxs = []int32{ + 1, // 0: network.monitoringc.v1.GenesisState.params:type_name -> network.monitoringc.v1.Params + 2, // 1: network.monitoringc.v1.GenesisState.launchIDFromChannelIDList:type_name -> network.monitoringc.v1.LaunchIDFromChannelID + 3, // 2: network.monitoringc.v1.GenesisState.launchIDFromVerifiedClientIDList:type_name -> network.monitoringc.v1.LaunchIDFromVerifiedClientID + 4, // 3: network.monitoringc.v1.GenesisState.monitoringHistoryList:type_name -> network.monitoringc.v1.MonitoringHistory + 5, // 4: network.monitoringc.v1.GenesisState.verifiedClientIDList:type_name -> network.monitoringc.v1.VerifiedClientID + 6, // 5: network.monitoringc.v1.GenesisState.providerClientIDList:type_name -> network.monitoringc.v1.ProviderClientID + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_network_monitoringc_v1_genesis_proto_init() } +func file_network_monitoringc_v1_genesis_proto_init() { + if File_network_monitoringc_v1_genesis_proto != nil { + return + } + file_network_monitoringc_v1_launch_id_from_channel_id_proto_init() + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_init() + file_network_monitoringc_v1_monitoring_history_proto_init() + file_network_monitoringc_v1_params_proto_init() + file_network_monitoringc_v1_provider_client_id_proto_init() + file_network_monitoringc_v1_verified_client_id_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_genesis_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisState); 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_network_monitoringc_v1_genesis_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_v1_genesis_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_genesis_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_genesis_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_genesis_proto = out.File + file_network_monitoringc_v1_genesis_proto_rawDesc = nil + file_network_monitoringc_v1_genesis_proto_goTypes = nil + file_network_monitoringc_v1_genesis_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/launch_id_from_channel_id.pulsar.go b/api/network/monitoringc/v1/launch_id_from_channel_id.pulsar.go new file mode 100644 index 00000000..fe1dbfb5 --- /dev/null +++ b/api/network/monitoringc/v1/launch_id_from_channel_id.pulsar.go @@ -0,0 +1,632 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_LaunchIDFromChannelID protoreflect.MessageDescriptor + fd_LaunchIDFromChannelID_channelID protoreflect.FieldDescriptor + fd_LaunchIDFromChannelID_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_launch_id_from_channel_id_proto_init() + md_LaunchIDFromChannelID = File_network_monitoringc_v1_launch_id_from_channel_id_proto.Messages().ByName("LaunchIDFromChannelID") + fd_LaunchIDFromChannelID_channelID = md_LaunchIDFromChannelID.Fields().ByName("channelID") + fd_LaunchIDFromChannelID_launchID = md_LaunchIDFromChannelID.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_LaunchIDFromChannelID)(nil) + +type fastReflection_LaunchIDFromChannelID LaunchIDFromChannelID + +func (x *LaunchIDFromChannelID) ProtoReflect() protoreflect.Message { + return (*fastReflection_LaunchIDFromChannelID)(x) +} + +func (x *LaunchIDFromChannelID) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_launch_id_from_channel_id_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) +} + +var _fastReflection_LaunchIDFromChannelID_messageType fastReflection_LaunchIDFromChannelID_messageType +var _ protoreflect.MessageType = fastReflection_LaunchIDFromChannelID_messageType{} + +type fastReflection_LaunchIDFromChannelID_messageType struct{} + +func (x fastReflection_LaunchIDFromChannelID_messageType) Zero() protoreflect.Message { + return (*fastReflection_LaunchIDFromChannelID)(nil) +} +func (x fastReflection_LaunchIDFromChannelID_messageType) New() protoreflect.Message { + return new(fastReflection_LaunchIDFromChannelID) +} +func (x fastReflection_LaunchIDFromChannelID_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_LaunchIDFromChannelID +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_LaunchIDFromChannelID) Descriptor() protoreflect.MessageDescriptor { + return md_LaunchIDFromChannelID +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_LaunchIDFromChannelID) Type() protoreflect.MessageType { + return _fastReflection_LaunchIDFromChannelID_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_LaunchIDFromChannelID) New() protoreflect.Message { + return new(fastReflection_LaunchIDFromChannelID) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_LaunchIDFromChannelID) Interface() protoreflect.ProtoMessage { + return (*LaunchIDFromChannelID)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_LaunchIDFromChannelID) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ChannelID != "" { + value := protoreflect.ValueOfString(x.ChannelID) + if !f(fd_LaunchIDFromChannelID_channelID, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_LaunchIDFromChannelID_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_LaunchIDFromChannelID) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromChannelID.channelID": + return x.ChannelID != "" + case "network.monitoringc.v1.LaunchIDFromChannelID.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromChannelID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromChannelID does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchIDFromChannelID) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromChannelID.channelID": + x.ChannelID = "" + case "network.monitoringc.v1.LaunchIDFromChannelID.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromChannelID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromChannelID does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_LaunchIDFromChannelID) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.LaunchIDFromChannelID.channelID": + value := x.ChannelID + return protoreflect.ValueOfString(value) + case "network.monitoringc.v1.LaunchIDFromChannelID.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromChannelID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromChannelID does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchIDFromChannelID) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromChannelID.channelID": + x.ChannelID = value.Interface().(string) + case "network.monitoringc.v1.LaunchIDFromChannelID.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromChannelID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromChannelID does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchIDFromChannelID) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromChannelID.channelID": + panic(fmt.Errorf("field channelID of message network.monitoringc.v1.LaunchIDFromChannelID is not mutable")) + case "network.monitoringc.v1.LaunchIDFromChannelID.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.LaunchIDFromChannelID is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromChannelID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromChannelID does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_LaunchIDFromChannelID) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromChannelID.channelID": + return protoreflect.ValueOfString("") + case "network.monitoringc.v1.LaunchIDFromChannelID.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromChannelID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromChannelID does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_LaunchIDFromChannelID) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.LaunchIDFromChannelID", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_LaunchIDFromChannelID) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchIDFromChannelID) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_LaunchIDFromChannelID) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_LaunchIDFromChannelID) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*LaunchIDFromChannelID) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ChannelID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*LaunchIDFromChannelID) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.ChannelID) > 0 { + i -= len(x.ChannelID) + copy(dAtA[i:], x.ChannelID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ChannelID))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*LaunchIDFromChannelID) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: LaunchIDFromChannelID: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: LaunchIDFromChannelID: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ChannelID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ChannelID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/launch_id_from_channel_id.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type LaunchIDFromChannelID struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChannelID string `protobuf:"bytes,1,opt,name=channelID,proto3" json:"channelID,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *LaunchIDFromChannelID) Reset() { + *x = LaunchIDFromChannelID{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_launch_id_from_channel_id_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LaunchIDFromChannelID) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LaunchIDFromChannelID) ProtoMessage() {} + +// Deprecated: Use LaunchIDFromChannelID.ProtoReflect.Descriptor instead. +func (*LaunchIDFromChannelID) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDescGZIP(), []int{0} +} + +func (x *LaunchIDFromChannelID) GetChannelID() string { + if x != nil { + return x.ChannelID + } + return "" +} + +func (x *LaunchIDFromChannelID) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +var File_network_monitoringc_v1_launch_id_from_channel_id_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDesc = []byte{ + 0x0a, 0x36, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, + 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, + 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, + 0x22, 0x51, 0x0a, 0x15, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x42, 0xf6, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, + 0x76, 0x31, 0x42, 0x1a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x64, 0x46, 0x72, 0x6f, 0x6d, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, + 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDescData = file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDesc +) + +func file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDescData) + }) + return file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDescData +} + +var file_network_monitoringc_v1_launch_id_from_channel_id_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringc_v1_launch_id_from_channel_id_proto_goTypes = []interface{}{ + (*LaunchIDFromChannelID)(nil), // 0: network.monitoringc.v1.LaunchIDFromChannelID +} +var file_network_monitoringc_v1_launch_id_from_channel_id_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 +} + +func init() { file_network_monitoringc_v1_launch_id_from_channel_id_proto_init() } +func file_network_monitoringc_v1_launch_id_from_channel_id_proto_init() { + if File_network_monitoringc_v1_launch_id_from_channel_id_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_launch_id_from_channel_id_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LaunchIDFromChannelID); 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_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_v1_launch_id_from_channel_id_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_launch_id_from_channel_id_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_launch_id_from_channel_id_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_launch_id_from_channel_id_proto = out.File + file_network_monitoringc_v1_launch_id_from_channel_id_proto_rawDesc = nil + file_network_monitoringc_v1_launch_id_from_channel_id_proto_goTypes = nil + file_network_monitoringc_v1_launch_id_from_channel_id_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/launch_id_from_verified_client_id.pulsar.go b/api/network/monitoringc/v1/launch_id_from_verified_client_id.pulsar.go new file mode 100644 index 00000000..c5de4bd0 --- /dev/null +++ b/api/network/monitoringc/v1/launch_id_from_verified_client_id.pulsar.go @@ -0,0 +1,633 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_LaunchIDFromVerifiedClientID protoreflect.MessageDescriptor + fd_LaunchIDFromVerifiedClientID_clientID protoreflect.FieldDescriptor + fd_LaunchIDFromVerifiedClientID_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_init() + md_LaunchIDFromVerifiedClientID = File_network_monitoringc_v1_launch_id_from_verified_client_id_proto.Messages().ByName("LaunchIDFromVerifiedClientID") + fd_LaunchIDFromVerifiedClientID_clientID = md_LaunchIDFromVerifiedClientID.Fields().ByName("clientID") + fd_LaunchIDFromVerifiedClientID_launchID = md_LaunchIDFromVerifiedClientID.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_LaunchIDFromVerifiedClientID)(nil) + +type fastReflection_LaunchIDFromVerifiedClientID LaunchIDFromVerifiedClientID + +func (x *LaunchIDFromVerifiedClientID) ProtoReflect() protoreflect.Message { + return (*fastReflection_LaunchIDFromVerifiedClientID)(x) +} + +func (x *LaunchIDFromVerifiedClientID) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_launch_id_from_verified_client_id_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) +} + +var _fastReflection_LaunchIDFromVerifiedClientID_messageType fastReflection_LaunchIDFromVerifiedClientID_messageType +var _ protoreflect.MessageType = fastReflection_LaunchIDFromVerifiedClientID_messageType{} + +type fastReflection_LaunchIDFromVerifiedClientID_messageType struct{} + +func (x fastReflection_LaunchIDFromVerifiedClientID_messageType) Zero() protoreflect.Message { + return (*fastReflection_LaunchIDFromVerifiedClientID)(nil) +} +func (x fastReflection_LaunchIDFromVerifiedClientID_messageType) New() protoreflect.Message { + return new(fastReflection_LaunchIDFromVerifiedClientID) +} +func (x fastReflection_LaunchIDFromVerifiedClientID_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_LaunchIDFromVerifiedClientID +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Descriptor() protoreflect.MessageDescriptor { + return md_LaunchIDFromVerifiedClientID +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Type() protoreflect.MessageType { + return _fastReflection_LaunchIDFromVerifiedClientID_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_LaunchIDFromVerifiedClientID) New() protoreflect.Message { + return new(fastReflection_LaunchIDFromVerifiedClientID) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Interface() protoreflect.ProtoMessage { + return (*LaunchIDFromVerifiedClientID)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ClientID != "" { + value := protoreflect.ValueOfString(x.ClientID) + if !f(fd_LaunchIDFromVerifiedClientID_clientID, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_LaunchIDFromVerifiedClientID_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.clientID": + return x.ClientID != "" + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromVerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromVerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.clientID": + x.ClientID = "" + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromVerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromVerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.clientID": + value := x.ClientID + return protoreflect.ValueOfString(value) + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromVerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromVerifiedClientID does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.clientID": + x.ClientID = value.Interface().(string) + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromVerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromVerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchIDFromVerifiedClientID) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.clientID": + panic(fmt.Errorf("field clientID of message network.monitoringc.v1.LaunchIDFromVerifiedClientID is not mutable")) + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.LaunchIDFromVerifiedClientID is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromVerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromVerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_LaunchIDFromVerifiedClientID) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.clientID": + return protoreflect.ValueOfString("") + case "network.monitoringc.v1.LaunchIDFromVerifiedClientID.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.LaunchIDFromVerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.LaunchIDFromVerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_LaunchIDFromVerifiedClientID) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.LaunchIDFromVerifiedClientID", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_LaunchIDFromVerifiedClientID) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_LaunchIDFromVerifiedClientID) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_LaunchIDFromVerifiedClientID) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_LaunchIDFromVerifiedClientID) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*LaunchIDFromVerifiedClientID) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ClientID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*LaunchIDFromVerifiedClientID) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.ClientID) > 0 { + i -= len(x.ClientID) + copy(dAtA[i:], x.ClientID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ClientID))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*LaunchIDFromVerifiedClientID) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: LaunchIDFromVerifiedClientID: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: LaunchIDFromVerifiedClientID: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ClientID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/launch_id_from_verified_client_id.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type LaunchIDFromVerifiedClientID struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClientID string `protobuf:"bytes,1,opt,name=clientID,proto3" json:"clientID,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *LaunchIDFromVerifiedClientID) Reset() { + *x = LaunchIDFromVerifiedClientID{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LaunchIDFromVerifiedClientID) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LaunchIDFromVerifiedClientID) ProtoMessage() {} + +// Deprecated: Use LaunchIDFromVerifiedClientID.ProtoReflect.Descriptor instead. +func (*LaunchIDFromVerifiedClientID) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDescGZIP(), []int{0} +} + +func (x *LaunchIDFromVerifiedClientID) GetClientID() string { + if x != nil { + return x.ClientID + } + return "" +} + +func (x *LaunchIDFromVerifiedClientID) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +var File_network_monitoringc_v1_launch_id_from_verified_client_id_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDesc = []byte{ + 0x0a, 0x3e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, + 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x22, 0x56, 0x0a, 0x1c, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x42, 0xfd, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x42, + 0x21, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, + 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, + 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDescData = file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDesc +) + +func file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDescData) + }) + return file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDescData +} + +var file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_goTypes = []interface{}{ + (*LaunchIDFromVerifiedClientID)(nil), // 0: network.monitoringc.v1.LaunchIDFromVerifiedClientID +} +var file_network_monitoringc_v1_launch_id_from_verified_client_id_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 +} + +func init() { file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_init() } +func file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_init() { + if File_network_monitoringc_v1_launch_id_from_verified_client_id_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LaunchIDFromVerifiedClientID); 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_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_launch_id_from_verified_client_id_proto = out.File + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_rawDesc = nil + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_goTypes = nil + file_network_monitoringc_v1_launch_id_from_verified_client_id_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/monitoring_history.pulsar.go b/api/network/monitoringc/v1/monitoring_history.pulsar.go new file mode 100644 index 00000000..4dbe17ab --- /dev/null +++ b/api/network/monitoringc/v1/monitoring_history.pulsar.go @@ -0,0 +1,632 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MonitoringHistory protoreflect.MessageDescriptor + fd_MonitoringHistory_launchID protoreflect.FieldDescriptor + fd_MonitoringHistory_latestMonitoringPacket protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_monitoring_history_proto_init() + md_MonitoringHistory = File_network_monitoringc_v1_monitoring_history_proto.Messages().ByName("MonitoringHistory") + fd_MonitoringHistory_launchID = md_MonitoringHistory.Fields().ByName("launchID") + fd_MonitoringHistory_latestMonitoringPacket = md_MonitoringHistory.Fields().ByName("latestMonitoringPacket") +} + +var _ protoreflect.Message = (*fastReflection_MonitoringHistory)(nil) + +type fastReflection_MonitoringHistory MonitoringHistory + +func (x *MonitoringHistory) ProtoReflect() protoreflect.Message { + return (*fastReflection_MonitoringHistory)(x) +} + +func (x *MonitoringHistory) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_monitoring_history_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) +} + +var _fastReflection_MonitoringHistory_messageType fastReflection_MonitoringHistory_messageType +var _ protoreflect.MessageType = fastReflection_MonitoringHistory_messageType{} + +type fastReflection_MonitoringHistory_messageType struct{} + +func (x fastReflection_MonitoringHistory_messageType) Zero() protoreflect.Message { + return (*fastReflection_MonitoringHistory)(nil) +} +func (x fastReflection_MonitoringHistory_messageType) New() protoreflect.Message { + return new(fastReflection_MonitoringHistory) +} +func (x fastReflection_MonitoringHistory_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringHistory +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MonitoringHistory) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringHistory +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MonitoringHistory) Type() protoreflect.MessageType { + return _fastReflection_MonitoringHistory_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MonitoringHistory) New() protoreflect.Message { + return new(fastReflection_MonitoringHistory) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MonitoringHistory) Interface() protoreflect.ProtoMessage { + return (*MonitoringHistory)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MonitoringHistory) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MonitoringHistory_launchID, value) { + return + } + } + if x.LatestMonitoringPacket != "" { + value := protoreflect.ValueOfString(x.LatestMonitoringPacket) + if !f(fd_MonitoringHistory_latestMonitoringPacket, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MonitoringHistory) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringHistory.launchID": + return x.LaunchID != uint64(0) + case "network.monitoringc.v1.MonitoringHistory.latestMonitoringPacket": + return x.LatestMonitoringPacket != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringHistory")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringHistory does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringHistory) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringHistory.launchID": + x.LaunchID = uint64(0) + case "network.monitoringc.v1.MonitoringHistory.latestMonitoringPacket": + x.LatestMonitoringPacket = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringHistory")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringHistory does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MonitoringHistory) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.MonitoringHistory.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.monitoringc.v1.MonitoringHistory.latestMonitoringPacket": + value := x.LatestMonitoringPacket + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringHistory")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringHistory does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringHistory) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringHistory.launchID": + x.LaunchID = value.Uint() + case "network.monitoringc.v1.MonitoringHistory.latestMonitoringPacket": + x.LatestMonitoringPacket = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringHistory")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringHistory does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringHistory) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringHistory.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.MonitoringHistory is not mutable")) + case "network.monitoringc.v1.MonitoringHistory.latestMonitoringPacket": + panic(fmt.Errorf("field latestMonitoringPacket of message network.monitoringc.v1.MonitoringHistory is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringHistory")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringHistory does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MonitoringHistory) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringHistory.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.monitoringc.v1.MonitoringHistory.latestMonitoringPacket": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringHistory")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringHistory does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MonitoringHistory) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.MonitoringHistory", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MonitoringHistory) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringHistory) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MonitoringHistory) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MonitoringHistory) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MonitoringHistory) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.LatestMonitoringPacket) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MonitoringHistory) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.LatestMonitoringPacket) > 0 { + i -= len(x.LatestMonitoringPacket) + copy(dAtA[i:], x.LatestMonitoringPacket) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.LatestMonitoringPacket))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MonitoringHistory) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringHistory: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringHistory: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LatestMonitoringPacket", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.LatestMonitoringPacket = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/monitoring_history.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type MonitoringHistory struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + LatestMonitoringPacket string `protobuf:"bytes,2,opt,name=latestMonitoringPacket,proto3" json:"latestMonitoringPacket,omitempty"` +} + +func (x *MonitoringHistory) Reset() { + *x = MonitoringHistory{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_monitoring_history_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitoringHistory) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitoringHistory) ProtoMessage() {} + +// Deprecated: Use MonitoringHistory.ProtoReflect.Descriptor instead. +func (*MonitoringHistory) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_monitoring_history_proto_rawDescGZIP(), []int{0} +} + +func (x *MonitoringHistory) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *MonitoringHistory) GetLatestMonitoringPacket() string { + if x != nil { + return x.LatestMonitoringPacket + } + return "" +} + +var File_network_monitoringc_v1_monitoring_history_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_monitoring_history_proto_rawDesc = []byte{ + 0x0a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x22, 0x67, 0x0a, 0x11, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x36, 0x0a, 0x16, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x42, 0xf2, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, + 0x31, 0x42, 0x16, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, + 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x76, 0x31, 0xa2, + 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_v1_monitoring_history_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_monitoring_history_proto_rawDescData = file_network_monitoringc_v1_monitoring_history_proto_rawDesc +) + +func file_network_monitoringc_v1_monitoring_history_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_monitoring_history_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_monitoring_history_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_monitoring_history_proto_rawDescData) + }) + return file_network_monitoringc_v1_monitoring_history_proto_rawDescData +} + +var file_network_monitoringc_v1_monitoring_history_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringc_v1_monitoring_history_proto_goTypes = []interface{}{ + (*MonitoringHistory)(nil), // 0: network.monitoringc.v1.MonitoringHistory +} +var file_network_monitoringc_v1_monitoring_history_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 +} + +func init() { file_network_monitoringc_v1_monitoring_history_proto_init() } +func file_network_monitoringc_v1_monitoring_history_proto_init() { + if File_network_monitoringc_v1_monitoring_history_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_monitoring_history_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MonitoringHistory); 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_network_monitoringc_v1_monitoring_history_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_v1_monitoring_history_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_monitoring_history_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_monitoring_history_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_monitoring_history_proto = out.File + file_network_monitoringc_v1_monitoring_history_proto_rawDesc = nil + file_network_monitoringc_v1_monitoring_history_proto_goTypes = nil + file_network_monitoringc_v1_monitoring_history_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/packet.pulsar.go b/api/network/monitoringc/v1/packet.pulsar.go new file mode 100644 index 00000000..ab4c9e9d --- /dev/null +++ b/api/network/monitoringc/v1/packet.pulsar.go @@ -0,0 +1,1048 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MonitoringcPacketData protoreflect.MessageDescriptor + fd_MonitoringcPacketData_noData protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_packet_proto_init() + md_MonitoringcPacketData = File_network_monitoringc_v1_packet_proto.Messages().ByName("MonitoringcPacketData") + fd_MonitoringcPacketData_noData = md_MonitoringcPacketData.Fields().ByName("noData") +} + +var _ protoreflect.Message = (*fastReflection_MonitoringcPacketData)(nil) + +type fastReflection_MonitoringcPacketData MonitoringcPacketData + +func (x *MonitoringcPacketData) ProtoReflect() protoreflect.Message { + return (*fastReflection_MonitoringcPacketData)(x) +} + +func (x *MonitoringcPacketData) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_packet_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) +} + +var _fastReflection_MonitoringcPacketData_messageType fastReflection_MonitoringcPacketData_messageType +var _ protoreflect.MessageType = fastReflection_MonitoringcPacketData_messageType{} + +type fastReflection_MonitoringcPacketData_messageType struct{} + +func (x fastReflection_MonitoringcPacketData_messageType) Zero() protoreflect.Message { + return (*fastReflection_MonitoringcPacketData)(nil) +} +func (x fastReflection_MonitoringcPacketData_messageType) New() protoreflect.Message { + return new(fastReflection_MonitoringcPacketData) +} +func (x fastReflection_MonitoringcPacketData_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringcPacketData +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MonitoringcPacketData) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringcPacketData +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MonitoringcPacketData) Type() protoreflect.MessageType { + return _fastReflection_MonitoringcPacketData_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MonitoringcPacketData) New() protoreflect.Message { + return new(fastReflection_MonitoringcPacketData) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MonitoringcPacketData) Interface() protoreflect.ProtoMessage { + return (*MonitoringcPacketData)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MonitoringcPacketData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Packet != nil { + switch o := x.Packet.(type) { + case *MonitoringcPacketData_NoData: + v := o.NoData + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_MonitoringcPacketData_noData, value) { + return + } + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MonitoringcPacketData) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringcPacketData.noData": + if x.Packet == nil { + return false + } else if _, ok := x.Packet.(*MonitoringcPacketData_NoData); ok { + return true + } else { + return false + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringcPacketData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringcPacketData does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringcPacketData) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringcPacketData.noData": + x.Packet = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringcPacketData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringcPacketData does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MonitoringcPacketData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.MonitoringcPacketData.noData": + if x.Packet == nil { + return protoreflect.ValueOfMessage((*NoData)(nil).ProtoReflect()) + } else if v, ok := x.Packet.(*MonitoringcPacketData_NoData); ok { + return protoreflect.ValueOfMessage(v.NoData.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*NoData)(nil).ProtoReflect()) + } + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringcPacketData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringcPacketData does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringcPacketData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringcPacketData.noData": + cv := value.Message().Interface().(*NoData) + x.Packet = &MonitoringcPacketData_NoData{NoData: cv} + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringcPacketData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringcPacketData does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringcPacketData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringcPacketData.noData": + if x.Packet == nil { + value := &NoData{} + oneofValue := &MonitoringcPacketData_NoData{NoData: value} + x.Packet = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Packet.(type) { + case *MonitoringcPacketData_NoData: + return protoreflect.ValueOfMessage(m.NoData.ProtoReflect()) + default: + value := &NoData{} + oneofValue := &MonitoringcPacketData_NoData{NoData: value} + x.Packet = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringcPacketData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringcPacketData does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MonitoringcPacketData) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MonitoringcPacketData.noData": + value := &NoData{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MonitoringcPacketData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MonitoringcPacketData does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MonitoringcPacketData) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + case "network.monitoringc.v1.MonitoringcPacketData.packet": + if x.Packet == nil { + return nil + } + switch x.Packet.(type) { + case *MonitoringcPacketData_NoData: + return x.Descriptor().Fields().ByName("noData") + } + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.MonitoringcPacketData", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MonitoringcPacketData) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringcPacketData) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MonitoringcPacketData) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MonitoringcPacketData) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MonitoringcPacketData) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + switch x := x.Packet.(type) { + case *MonitoringcPacketData_NoData: + if x == nil { + break + } + l = options.Size(x.NoData) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MonitoringcPacketData) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + switch x := x.Packet.(type) { + case *MonitoringcPacketData_NoData: + encoded, err := options.Marshal(x.NoData) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MonitoringcPacketData) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringcPacketData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringcPacketData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NoData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &NoData{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Packet = &MonitoringcPacketData_NoData{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_NoData protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringc_v1_packet_proto_init() + md_NoData = File_network_monitoringc_v1_packet_proto.Messages().ByName("NoData") +} + +var _ protoreflect.Message = (*fastReflection_NoData)(nil) + +type fastReflection_NoData NoData + +func (x *NoData) ProtoReflect() protoreflect.Message { + return (*fastReflection_NoData)(x) +} + +func (x *NoData) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_packet_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) +} + +var _fastReflection_NoData_messageType fastReflection_NoData_messageType +var _ protoreflect.MessageType = fastReflection_NoData_messageType{} + +type fastReflection_NoData_messageType struct{} + +func (x fastReflection_NoData_messageType) Zero() protoreflect.Message { + return (*fastReflection_NoData)(nil) +} +func (x fastReflection_NoData_messageType) New() protoreflect.Message { + return new(fastReflection_NoData) +} +func (x fastReflection_NoData_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_NoData +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_NoData) Descriptor() protoreflect.MessageDescriptor { + return md_NoData +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_NoData) Type() protoreflect.MessageType { + return _fastReflection_NoData_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_NoData) New() protoreflect.Message { + return new(fastReflection_NoData) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_NoData) Interface() protoreflect.ProtoMessage { + return (*NoData)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_NoData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_NoData) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_NoData) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_NoData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.NoData does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_NoData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_NoData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_NoData) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringc.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_NoData) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.NoData", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_NoData) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_NoData) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_NoData) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_NoData) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*NoData) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*NoData) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*NoData) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: NoData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: NoData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/packet.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type MonitoringcPacketData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Packet: + // + // *MonitoringcPacketData_NoData + Packet isMonitoringcPacketData_Packet `protobuf_oneof:"packet"` +} + +func (x *MonitoringcPacketData) Reset() { + *x = MonitoringcPacketData{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_packet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitoringcPacketData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitoringcPacketData) ProtoMessage() {} + +// Deprecated: Use MonitoringcPacketData.ProtoReflect.Descriptor instead. +func (*MonitoringcPacketData) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_packet_proto_rawDescGZIP(), []int{0} +} + +func (x *MonitoringcPacketData) GetPacket() isMonitoringcPacketData_Packet { + if x != nil { + return x.Packet + } + return nil +} + +func (x *MonitoringcPacketData) GetNoData() *NoData { + if x, ok := x.GetPacket().(*MonitoringcPacketData_NoData); ok { + return x.NoData + } + return nil +} + +type isMonitoringcPacketData_Packet interface { + isMonitoringcPacketData_Packet() +} + +type MonitoringcPacketData_NoData struct { + NoData *NoData `protobuf:"bytes,1,opt,name=noData,proto3,oneof"` +} + +func (*MonitoringcPacketData_NoData) isMonitoringcPacketData_Packet() {} + +type NoData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *NoData) Reset() { + *x = NoData{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_packet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NoData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NoData) ProtoMessage() {} + +// Deprecated: Use NoData.ProtoReflect.Descriptor instead. +func (*NoData) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_packet_proto_rawDescGZIP(), []int{1} +} + +var File_network_monitoringc_v1_packet_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_packet_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x22, 0x5b, 0x0a, + 0x15, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x06, 0x6e, 0x6f, 0x44, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x61, 0x74, 0x61, + 0x42, 0x08, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x08, 0x0a, 0x06, 0x4e, 0x6f, + 0x44, 0x61, 0x74, 0x61, 0x42, 0xe7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, + 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, + 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0xe2, 0x02, + 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_v1_packet_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_packet_proto_rawDescData = file_network_monitoringc_v1_packet_proto_rawDesc +) + +func file_network_monitoringc_v1_packet_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_packet_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_packet_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_packet_proto_rawDescData) + }) + return file_network_monitoringc_v1_packet_proto_rawDescData +} + +var file_network_monitoringc_v1_packet_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_monitoringc_v1_packet_proto_goTypes = []interface{}{ + (*MonitoringcPacketData)(nil), // 0: network.monitoringc.v1.MonitoringcPacketData + (*NoData)(nil), // 1: network.monitoringc.v1.NoData +} +var file_network_monitoringc_v1_packet_proto_depIdxs = []int32{ + 1, // 0: network.monitoringc.v1.MonitoringcPacketData.noData:type_name -> network.monitoringc.v1.NoData + 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_network_monitoringc_v1_packet_proto_init() } +func file_network_monitoringc_v1_packet_proto_init() { + if File_network_monitoringc_v1_packet_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_packet_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MonitoringcPacketData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_packet_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NoData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_network_monitoringc_v1_packet_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*MonitoringcPacketData_NoData)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_monitoringc_v1_packet_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_v1_packet_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_packet_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_packet_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_packet_proto = out.File + file_network_monitoringc_v1_packet_proto_rawDesc = nil + file_network_monitoringc_v1_packet_proto_goTypes = nil + file_network_monitoringc_v1_packet_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/params.pulsar.go b/api/network/monitoringc/v1/params.pulsar.go new file mode 100644 index 00000000..85c771d8 --- /dev/null +++ b/api/network/monitoringc/v1/params.pulsar.go @@ -0,0 +1,504 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Params protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringc_v1_params_proto_init() + md_Params = File_network_monitoringc_v1_params_proto.Messages().ByName("Params") +} + +var _ protoreflect.Message = (*fastReflection_Params)(nil) + +type fastReflection_Params Params + +func (x *Params) ProtoReflect() protoreflect.Message { + return (*fastReflection_Params)(x) +} + +func (x *Params) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_params_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) +} + +var _fastReflection_Params_messageType fastReflection_Params_messageType +var _ protoreflect.MessageType = fastReflection_Params_messageType{} + +type fastReflection_Params_messageType struct{} + +func (x fastReflection_Params_messageType) Zero() protoreflect.Message { + return (*fastReflection_Params)(nil) +} +func (x fastReflection_Params_messageType) New() protoreflect.Message { + return new(fastReflection_Params) +} +func (x fastReflection_Params_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Params) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Params) Type() protoreflect.MessageType { + return _fastReflection_Params_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Params) New() protoreflect.Message { + return new(fastReflection_Params) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Params) Interface() protoreflect.ProtoMessage { + return (*Params)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringc.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringc.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringc.v1.Params does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringc.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringc.v1.Params does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringc.v1.Params does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Params) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.Params", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Params) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Params) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/params.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Params defines the parameters for the module. +type Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Params) Reset() { + *x = Params{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_params_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Params) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Params) ProtoMessage() {} + +// Deprecated: Use Params.ProtoReflect.Descriptor instead. +func (*Params) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_params_proto_rawDescGZIP(), []int{0} +} + +var File_network_monitoringc_v1_params_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_params_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, + 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2f, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x3a, 0x25, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1c, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, + 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xe7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, + 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_v1_params_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_params_proto_rawDescData = file_network_monitoringc_v1_params_proto_rawDesc +) + +func file_network_monitoringc_v1_params_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_params_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_params_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_params_proto_rawDescData) + }) + return file_network_monitoringc_v1_params_proto_rawDescData +} + +var file_network_monitoringc_v1_params_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringc_v1_params_proto_goTypes = []interface{}{ + (*Params)(nil), // 0: network.monitoringc.v1.Params +} +var file_network_monitoringc_v1_params_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 +} + +func init() { file_network_monitoringc_v1_params_proto_init() } +func file_network_monitoringc_v1_params_proto_init() { + if File_network_monitoringc_v1_params_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_params_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Params); 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_network_monitoringc_v1_params_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_v1_params_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_params_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_params_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_params_proto = out.File + file_network_monitoringc_v1_params_proto_rawDesc = nil + file_network_monitoringc_v1_params_proto_goTypes = nil + file_network_monitoringc_v1_params_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/provider_client_id.pulsar.go b/api/network/monitoringc/v1/provider_client_id.pulsar.go new file mode 100644 index 00000000..1f48eae2 --- /dev/null +++ b/api/network/monitoringc/v1/provider_client_id.pulsar.go @@ -0,0 +1,631 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_ProviderClientID protoreflect.MessageDescriptor + fd_ProviderClientID_launchID protoreflect.FieldDescriptor + fd_ProviderClientID_clientID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_provider_client_id_proto_init() + md_ProviderClientID = File_network_monitoringc_v1_provider_client_id_proto.Messages().ByName("ProviderClientID") + fd_ProviderClientID_launchID = md_ProviderClientID.Fields().ByName("launchID") + fd_ProviderClientID_clientID = md_ProviderClientID.Fields().ByName("clientID") +} + +var _ protoreflect.Message = (*fastReflection_ProviderClientID)(nil) + +type fastReflection_ProviderClientID ProviderClientID + +func (x *ProviderClientID) ProtoReflect() protoreflect.Message { + return (*fastReflection_ProviderClientID)(x) +} + +func (x *ProviderClientID) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_provider_client_id_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) +} + +var _fastReflection_ProviderClientID_messageType fastReflection_ProviderClientID_messageType +var _ protoreflect.MessageType = fastReflection_ProviderClientID_messageType{} + +type fastReflection_ProviderClientID_messageType struct{} + +func (x fastReflection_ProviderClientID_messageType) Zero() protoreflect.Message { + return (*fastReflection_ProviderClientID)(nil) +} +func (x fastReflection_ProviderClientID_messageType) New() protoreflect.Message { + return new(fastReflection_ProviderClientID) +} +func (x fastReflection_ProviderClientID_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ProviderClientID +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ProviderClientID) Descriptor() protoreflect.MessageDescriptor { + return md_ProviderClientID +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ProviderClientID) Type() protoreflect.MessageType { + return _fastReflection_ProviderClientID_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ProviderClientID) New() protoreflect.Message { + return new(fastReflection_ProviderClientID) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ProviderClientID) Interface() protoreflect.ProtoMessage { + return (*ProviderClientID)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ProviderClientID) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_ProviderClientID_launchID, value) { + return + } + } + if x.ClientID != "" { + value := protoreflect.ValueOfString(x.ClientID) + if !f(fd_ProviderClientID_clientID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ProviderClientID) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.ProviderClientID.launchID": + return x.LaunchID != uint64(0) + case "network.monitoringc.v1.ProviderClientID.clientID": + return x.ClientID != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.ProviderClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.ProviderClientID does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ProviderClientID) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.ProviderClientID.launchID": + x.LaunchID = uint64(0) + case "network.monitoringc.v1.ProviderClientID.clientID": + x.ClientID = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.ProviderClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.ProviderClientID does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ProviderClientID) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.ProviderClientID.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.monitoringc.v1.ProviderClientID.clientID": + value := x.ClientID + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.ProviderClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.ProviderClientID does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ProviderClientID) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.ProviderClientID.launchID": + x.LaunchID = value.Uint() + case "network.monitoringc.v1.ProviderClientID.clientID": + x.ClientID = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.ProviderClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.ProviderClientID does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ProviderClientID) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.ProviderClientID.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.ProviderClientID is not mutable")) + case "network.monitoringc.v1.ProviderClientID.clientID": + panic(fmt.Errorf("field clientID of message network.monitoringc.v1.ProviderClientID is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.ProviderClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.ProviderClientID does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ProviderClientID) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.ProviderClientID.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.monitoringc.v1.ProviderClientID.clientID": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.ProviderClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.ProviderClientID does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ProviderClientID) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.ProviderClientID", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ProviderClientID) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ProviderClientID) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ProviderClientID) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ProviderClientID) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ProviderClientID) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.ClientID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ProviderClientID) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ClientID) > 0 { + i -= len(x.ClientID) + copy(dAtA[i:], x.ClientID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ClientID))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ProviderClientID) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ProviderClientID: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ProviderClientID: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ClientID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/provider_client_id.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ProviderClientID struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + ClientID string `protobuf:"bytes,2,opt,name=clientID,proto3" json:"clientID,omitempty"` +} + +func (x *ProviderClientID) Reset() { + *x = ProviderClientID{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_provider_client_id_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProviderClientID) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProviderClientID) ProtoMessage() {} + +// Deprecated: Use ProviderClientID.ProtoReflect.Descriptor instead. +func (*ProviderClientID) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_provider_client_id_proto_rawDescGZIP(), []int{0} +} + +func (x *ProviderClientID) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *ProviderClientID) GetClientID() string { + if x != nil { + return x.ClientID + } + return "" +} + +var File_network_monitoringc_v1_provider_client_id_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_provider_client_id_proto_rawDesc = []byte{ + 0x0a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x22, 0x4a, 0x0a, 0x10, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1a, 0x0a, + 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x44, 0x42, 0xf1, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x63, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, + 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x56, 0x31, + 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, + 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_monitoringc_v1_provider_client_id_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_provider_client_id_proto_rawDescData = file_network_monitoringc_v1_provider_client_id_proto_rawDesc +) + +func file_network_monitoringc_v1_provider_client_id_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_provider_client_id_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_provider_client_id_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_provider_client_id_proto_rawDescData) + }) + return file_network_monitoringc_v1_provider_client_id_proto_rawDescData +} + +var file_network_monitoringc_v1_provider_client_id_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringc_v1_provider_client_id_proto_goTypes = []interface{}{ + (*ProviderClientID)(nil), // 0: network.monitoringc.v1.ProviderClientID +} +var file_network_monitoringc_v1_provider_client_id_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 +} + +func init() { file_network_monitoringc_v1_provider_client_id_proto_init() } +func file_network_monitoringc_v1_provider_client_id_proto_init() { + if File_network_monitoringc_v1_provider_client_id_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_provider_client_id_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProviderClientID); 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_network_monitoringc_v1_provider_client_id_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_v1_provider_client_id_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_provider_client_id_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_provider_client_id_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_provider_client_id_proto = out.File + file_network_monitoringc_v1_provider_client_id_proto_rawDesc = nil + file_network_monitoringc_v1_provider_client_id_proto_goTypes = nil + file_network_monitoringc_v1_provider_client_id_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/query.pulsar.go b/api/network/monitoringc/v1/query.pulsar.go new file mode 100644 index 00000000..058232ba --- /dev/null +++ b/api/network/monitoringc/v1/query.pulsar.go @@ -0,0 +1,7210 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_QueryParamsRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryParamsRequest = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryParamsRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsRequest)(nil) + +type fastReflection_QueryParamsRequest QueryParamsRequest + +func (x *QueryParamsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(x) +} + +func (x *QueryParamsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_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) +} + +var _fastReflection_QueryParamsRequest_messageType fastReflection_QueryParamsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsRequest_messageType{} + +type fastReflection_QueryParamsRequest_messageType struct{} + +func (x fastReflection_QueryParamsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(nil) +} +func (x fastReflection_QueryParamsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} +func (x fastReflection_QueryParamsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsRequest) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryParamsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryParamsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryParamsResponse protoreflect.MessageDescriptor + fd_QueryParamsResponse_params protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryParamsResponse = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryParamsResponse") + fd_QueryParamsResponse_params = md_QueryParamsResponse.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsResponse)(nil) + +type fastReflection_QueryParamsResponse QueryParamsResponse + +func (x *QueryParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(x) +} + +func (x *QueryParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_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) +} + +var _fastReflection_QueryParamsResponse_messageType fastReflection_QueryParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsResponse_messageType{} + +type fastReflection_QueryParamsResponse_messageType struct{} + +func (x fastReflection_QueryParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(nil) +} +func (x fastReflection_QueryParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} +func (x fastReflection_QueryParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsResponse) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_QueryParamsResponse_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryParamsResponse.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryParamsResponse.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryParamsResponse.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryParamsResponse.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryParamsResponse.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryParamsResponse.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetLaunchIDFromChannelIDRequest protoreflect.MessageDescriptor + fd_QueryGetLaunchIDFromChannelIDRequest_channelID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryGetLaunchIDFromChannelIDRequest = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryGetLaunchIDFromChannelIDRequest") + fd_QueryGetLaunchIDFromChannelIDRequest_channelID = md_QueryGetLaunchIDFromChannelIDRequest.Fields().ByName("channelID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetLaunchIDFromChannelIDRequest)(nil) + +type fastReflection_QueryGetLaunchIDFromChannelIDRequest QueryGetLaunchIDFromChannelIDRequest + +func (x *QueryGetLaunchIDFromChannelIDRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetLaunchIDFromChannelIDRequest)(x) +} + +func (x *QueryGetLaunchIDFromChannelIDRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[2] + 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) +} + +var _fastReflection_QueryGetLaunchIDFromChannelIDRequest_messageType fastReflection_QueryGetLaunchIDFromChannelIDRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetLaunchIDFromChannelIDRequest_messageType{} + +type fastReflection_QueryGetLaunchIDFromChannelIDRequest_messageType struct{} + +func (x fastReflection_QueryGetLaunchIDFromChannelIDRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetLaunchIDFromChannelIDRequest)(nil) +} +func (x fastReflection_QueryGetLaunchIDFromChannelIDRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetLaunchIDFromChannelIDRequest) +} +func (x fastReflection_QueryGetLaunchIDFromChannelIDRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetLaunchIDFromChannelIDRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetLaunchIDFromChannelIDRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetLaunchIDFromChannelIDRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetLaunchIDFromChannelIDRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetLaunchIDFromChannelIDRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ChannelID != "" { + value := protoreflect.ValueOfString(x.ChannelID) + if !f(fd_QueryGetLaunchIDFromChannelIDRequest_channelID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest.channelID": + return x.ChannelID != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest.channelID": + x.ChannelID = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest.channelID": + value := x.ChannelID + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest.channelID": + x.ChannelID = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest.channelID": + panic(fmt.Errorf("field channelID of message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest.channelID": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetLaunchIDFromChannelIDRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ChannelID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetLaunchIDFromChannelIDRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ChannelID) > 0 { + i -= len(x.ChannelID) + copy(dAtA[i:], x.ChannelID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ChannelID))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetLaunchIDFromChannelIDRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ChannelID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ChannelID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetLaunchIDFromChannelIDResponse protoreflect.MessageDescriptor + fd_QueryGetLaunchIDFromChannelIDResponse_launchIDFromChannelID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryGetLaunchIDFromChannelIDResponse = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryGetLaunchIDFromChannelIDResponse") + fd_QueryGetLaunchIDFromChannelIDResponse_launchIDFromChannelID = md_QueryGetLaunchIDFromChannelIDResponse.Fields().ByName("launchIDFromChannelID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetLaunchIDFromChannelIDResponse)(nil) + +type fastReflection_QueryGetLaunchIDFromChannelIDResponse QueryGetLaunchIDFromChannelIDResponse + +func (x *QueryGetLaunchIDFromChannelIDResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetLaunchIDFromChannelIDResponse)(x) +} + +func (x *QueryGetLaunchIDFromChannelIDResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[3] + 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) +} + +var _fastReflection_QueryGetLaunchIDFromChannelIDResponse_messageType fastReflection_QueryGetLaunchIDFromChannelIDResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetLaunchIDFromChannelIDResponse_messageType{} + +type fastReflection_QueryGetLaunchIDFromChannelIDResponse_messageType struct{} + +func (x fastReflection_QueryGetLaunchIDFromChannelIDResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetLaunchIDFromChannelIDResponse)(nil) +} +func (x fastReflection_QueryGetLaunchIDFromChannelIDResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetLaunchIDFromChannelIDResponse) +} +func (x fastReflection_QueryGetLaunchIDFromChannelIDResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetLaunchIDFromChannelIDResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetLaunchIDFromChannelIDResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetLaunchIDFromChannelIDResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetLaunchIDFromChannelIDResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetLaunchIDFromChannelIDResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchIDFromChannelID != nil { + value := protoreflect.ValueOfMessage(x.LaunchIDFromChannelID.ProtoReflect()) + if !f(fd_QueryGetLaunchIDFromChannelIDResponse_launchIDFromChannelID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse.launchIDFromChannelID": + return x.LaunchIDFromChannelID != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse.launchIDFromChannelID": + x.LaunchIDFromChannelID = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse.launchIDFromChannelID": + value := x.LaunchIDFromChannelID + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse.launchIDFromChannelID": + x.LaunchIDFromChannelID = value.Message().Interface().(*LaunchIDFromChannelID) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse.launchIDFromChannelID": + if x.LaunchIDFromChannelID == nil { + x.LaunchIDFromChannelID = new(LaunchIDFromChannelID) + } + return protoreflect.ValueOfMessage(x.LaunchIDFromChannelID.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse.launchIDFromChannelID": + m := new(LaunchIDFromChannelID) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetLaunchIDFromChannelIDResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetLaunchIDFromChannelIDResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchIDFromChannelID != nil { + l = options.Size(x.LaunchIDFromChannelID) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetLaunchIDFromChannelIDResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchIDFromChannelID != nil { + encoded, err := options.Marshal(x.LaunchIDFromChannelID) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetLaunchIDFromChannelIDResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromChannelID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.LaunchIDFromChannelID == nil { + x.LaunchIDFromChannelID = &LaunchIDFromChannelID{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.LaunchIDFromChannelID); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllLaunchIDFromChannelIDRequest protoreflect.MessageDescriptor + fd_QueryAllLaunchIDFromChannelIDRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryAllLaunchIDFromChannelIDRequest = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryAllLaunchIDFromChannelIDRequest") + fd_QueryAllLaunchIDFromChannelIDRequest_pagination = md_QueryAllLaunchIDFromChannelIDRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllLaunchIDFromChannelIDRequest)(nil) + +type fastReflection_QueryAllLaunchIDFromChannelIDRequest QueryAllLaunchIDFromChannelIDRequest + +func (x *QueryAllLaunchIDFromChannelIDRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllLaunchIDFromChannelIDRequest)(x) +} + +func (x *QueryAllLaunchIDFromChannelIDRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[4] + 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) +} + +var _fastReflection_QueryAllLaunchIDFromChannelIDRequest_messageType fastReflection_QueryAllLaunchIDFromChannelIDRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllLaunchIDFromChannelIDRequest_messageType{} + +type fastReflection_QueryAllLaunchIDFromChannelIDRequest_messageType struct{} + +func (x fastReflection_QueryAllLaunchIDFromChannelIDRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllLaunchIDFromChannelIDRequest)(nil) +} +func (x fastReflection_QueryAllLaunchIDFromChannelIDRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllLaunchIDFromChannelIDRequest) +} +func (x fastReflection_QueryAllLaunchIDFromChannelIDRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllLaunchIDFromChannelIDRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllLaunchIDFromChannelIDRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllLaunchIDFromChannelIDRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllLaunchIDFromChannelIDRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllLaunchIDFromChannelIDRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllLaunchIDFromChannelIDRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllLaunchIDFromChannelIDRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllLaunchIDFromChannelIDRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllLaunchIDFromChannelIDRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllLaunchIDFromChannelIDResponse_1_list)(nil) + +type _QueryAllLaunchIDFromChannelIDResponse_1_list struct { + list *[]*LaunchIDFromChannelID +} + +func (x *_QueryAllLaunchIDFromChannelIDResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllLaunchIDFromChannelIDResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllLaunchIDFromChannelIDResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*LaunchIDFromChannelID) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllLaunchIDFromChannelIDResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*LaunchIDFromChannelID) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllLaunchIDFromChannelIDResponse_1_list) AppendMutable() protoreflect.Value { + v := new(LaunchIDFromChannelID) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllLaunchIDFromChannelIDResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllLaunchIDFromChannelIDResponse_1_list) NewElement() protoreflect.Value { + v := new(LaunchIDFromChannelID) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllLaunchIDFromChannelIDResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllLaunchIDFromChannelIDResponse protoreflect.MessageDescriptor + fd_QueryAllLaunchIDFromChannelIDResponse_launchIDFromChannelID protoreflect.FieldDescriptor + fd_QueryAllLaunchIDFromChannelIDResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryAllLaunchIDFromChannelIDResponse = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryAllLaunchIDFromChannelIDResponse") + fd_QueryAllLaunchIDFromChannelIDResponse_launchIDFromChannelID = md_QueryAllLaunchIDFromChannelIDResponse.Fields().ByName("launchIDFromChannelID") + fd_QueryAllLaunchIDFromChannelIDResponse_pagination = md_QueryAllLaunchIDFromChannelIDResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllLaunchIDFromChannelIDResponse)(nil) + +type fastReflection_QueryAllLaunchIDFromChannelIDResponse QueryAllLaunchIDFromChannelIDResponse + +func (x *QueryAllLaunchIDFromChannelIDResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllLaunchIDFromChannelIDResponse)(x) +} + +func (x *QueryAllLaunchIDFromChannelIDResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[5] + 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) +} + +var _fastReflection_QueryAllLaunchIDFromChannelIDResponse_messageType fastReflection_QueryAllLaunchIDFromChannelIDResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllLaunchIDFromChannelIDResponse_messageType{} + +type fastReflection_QueryAllLaunchIDFromChannelIDResponse_messageType struct{} + +func (x fastReflection_QueryAllLaunchIDFromChannelIDResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllLaunchIDFromChannelIDResponse)(nil) +} +func (x fastReflection_QueryAllLaunchIDFromChannelIDResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllLaunchIDFromChannelIDResponse) +} +func (x fastReflection_QueryAllLaunchIDFromChannelIDResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllLaunchIDFromChannelIDResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllLaunchIDFromChannelIDResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllLaunchIDFromChannelIDResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllLaunchIDFromChannelIDResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllLaunchIDFromChannelIDResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.LaunchIDFromChannelID) != 0 { + value := protoreflect.ValueOfList(&_QueryAllLaunchIDFromChannelIDResponse_1_list{list: &x.LaunchIDFromChannelID}) + if !f(fd_QueryAllLaunchIDFromChannelIDResponse_launchIDFromChannelID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllLaunchIDFromChannelIDResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.launchIDFromChannelID": + return len(x.LaunchIDFromChannelID) != 0 + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.launchIDFromChannelID": + x.LaunchIDFromChannelID = nil + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.launchIDFromChannelID": + if len(x.LaunchIDFromChannelID) == 0 { + return protoreflect.ValueOfList(&_QueryAllLaunchIDFromChannelIDResponse_1_list{}) + } + listValue := &_QueryAllLaunchIDFromChannelIDResponse_1_list{list: &x.LaunchIDFromChannelID} + return protoreflect.ValueOfList(listValue) + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.launchIDFromChannelID": + lv := value.List() + clv := lv.(*_QueryAllLaunchIDFromChannelIDResponse_1_list) + x.LaunchIDFromChannelID = *clv.list + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.launchIDFromChannelID": + if x.LaunchIDFromChannelID == nil { + x.LaunchIDFromChannelID = []*LaunchIDFromChannelID{} + } + value := &_QueryAllLaunchIDFromChannelIDResponse_1_list{list: &x.LaunchIDFromChannelID} + return protoreflect.ValueOfList(value) + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.launchIDFromChannelID": + list := []*LaunchIDFromChannelID{} + return protoreflect.ValueOfList(&_QueryAllLaunchIDFromChannelIDResponse_1_list{list: &list}) + case "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllLaunchIDFromChannelIDResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllLaunchIDFromChannelIDResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.LaunchIDFromChannelID) > 0 { + for _, e := range x.LaunchIDFromChannelID { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllLaunchIDFromChannelIDResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.LaunchIDFromChannelID) > 0 { + for iNdEx := len(x.LaunchIDFromChannelID) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.LaunchIDFromChannelID[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllLaunchIDFromChannelIDResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromChannelID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.LaunchIDFromChannelID = append(x.LaunchIDFromChannelID, &LaunchIDFromChannelID{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.LaunchIDFromChannelID[len(x.LaunchIDFromChannelID)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetMonitoringHistoryRequest protoreflect.MessageDescriptor + fd_QueryGetMonitoringHistoryRequest_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryGetMonitoringHistoryRequest = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryGetMonitoringHistoryRequest") + fd_QueryGetMonitoringHistoryRequest_launchID = md_QueryGetMonitoringHistoryRequest.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetMonitoringHistoryRequest)(nil) + +type fastReflection_QueryGetMonitoringHistoryRequest QueryGetMonitoringHistoryRequest + +func (x *QueryGetMonitoringHistoryRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetMonitoringHistoryRequest)(x) +} + +func (x *QueryGetMonitoringHistoryRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_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) +} + +var _fastReflection_QueryGetMonitoringHistoryRequest_messageType fastReflection_QueryGetMonitoringHistoryRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetMonitoringHistoryRequest_messageType{} + +type fastReflection_QueryGetMonitoringHistoryRequest_messageType struct{} + +func (x fastReflection_QueryGetMonitoringHistoryRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetMonitoringHistoryRequest)(nil) +} +func (x fastReflection_QueryGetMonitoringHistoryRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetMonitoringHistoryRequest) +} +func (x fastReflection_QueryGetMonitoringHistoryRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMonitoringHistoryRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMonitoringHistoryRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetMonitoringHistoryRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetMonitoringHistoryRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetMonitoringHistoryRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetMonitoringHistoryRequest_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryRequest.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryRequest.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryRequest.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryRequest.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.QueryGetMonitoringHistoryRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryGetMonitoringHistoryRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetMonitoringHistoryRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetMonitoringHistoryRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMonitoringHistoryRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMonitoringHistoryRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMonitoringHistoryRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMonitoringHistoryRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetMonitoringHistoryResponse protoreflect.MessageDescriptor + fd_QueryGetMonitoringHistoryResponse_monitoringHistory protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryGetMonitoringHistoryResponse = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryGetMonitoringHistoryResponse") + fd_QueryGetMonitoringHistoryResponse_monitoringHistory = md_QueryGetMonitoringHistoryResponse.Fields().ByName("monitoringHistory") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetMonitoringHistoryResponse)(nil) + +type fastReflection_QueryGetMonitoringHistoryResponse QueryGetMonitoringHistoryResponse + +func (x *QueryGetMonitoringHistoryResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetMonitoringHistoryResponse)(x) +} + +func (x *QueryGetMonitoringHistoryResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_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) +} + +var _fastReflection_QueryGetMonitoringHistoryResponse_messageType fastReflection_QueryGetMonitoringHistoryResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetMonitoringHistoryResponse_messageType{} + +type fastReflection_QueryGetMonitoringHistoryResponse_messageType struct{} + +func (x fastReflection_QueryGetMonitoringHistoryResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetMonitoringHistoryResponse)(nil) +} +func (x fastReflection_QueryGetMonitoringHistoryResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetMonitoringHistoryResponse) +} +func (x fastReflection_QueryGetMonitoringHistoryResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMonitoringHistoryResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMonitoringHistoryResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetMonitoringHistoryResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetMonitoringHistoryResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetMonitoringHistoryResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.MonitoringHistory != nil { + value := protoreflect.ValueOfMessage(x.MonitoringHistory.ProtoReflect()) + if !f(fd_QueryGetMonitoringHistoryResponse_monitoringHistory, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryResponse.monitoringHistory": + return x.MonitoringHistory != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryResponse.monitoringHistory": + x.MonitoringHistory = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryResponse.monitoringHistory": + value := x.MonitoringHistory + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryResponse.monitoringHistory": + x.MonitoringHistory = value.Message().Interface().(*MonitoringHistory) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryResponse.monitoringHistory": + if x.MonitoringHistory == nil { + x.MonitoringHistory = new(MonitoringHistory) + } + return protoreflect.ValueOfMessage(x.MonitoringHistory.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetMonitoringHistoryResponse.monitoringHistory": + m := new(MonitoringHistory) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetMonitoringHistoryResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetMonitoringHistoryResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryGetMonitoringHistoryResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetMonitoringHistoryResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetMonitoringHistoryResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.MonitoringHistory != nil { + l = options.Size(x.MonitoringHistory) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMonitoringHistoryResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MonitoringHistory != nil { + encoded, err := options.Marshal(x.MonitoringHistory) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMonitoringHistoryResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMonitoringHistoryResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMonitoringHistoryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MonitoringHistory", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.MonitoringHistory == nil { + x.MonitoringHistory = &MonitoringHistory{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MonitoringHistory); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetVerifiedClientIDRequest protoreflect.MessageDescriptor + fd_QueryGetVerifiedClientIDRequest_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryGetVerifiedClientIDRequest = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryGetVerifiedClientIDRequest") + fd_QueryGetVerifiedClientIDRequest_launchID = md_QueryGetVerifiedClientIDRequest.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetVerifiedClientIDRequest)(nil) + +type fastReflection_QueryGetVerifiedClientIDRequest QueryGetVerifiedClientIDRequest + +func (x *QueryGetVerifiedClientIDRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetVerifiedClientIDRequest)(x) +} + +func (x *QueryGetVerifiedClientIDRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_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) +} + +var _fastReflection_QueryGetVerifiedClientIDRequest_messageType fastReflection_QueryGetVerifiedClientIDRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetVerifiedClientIDRequest_messageType{} + +type fastReflection_QueryGetVerifiedClientIDRequest_messageType struct{} + +func (x fastReflection_QueryGetVerifiedClientIDRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetVerifiedClientIDRequest)(nil) +} +func (x fastReflection_QueryGetVerifiedClientIDRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetVerifiedClientIDRequest) +} +func (x fastReflection_QueryGetVerifiedClientIDRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetVerifiedClientIDRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetVerifiedClientIDRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetVerifiedClientIDRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetVerifiedClientIDRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetVerifiedClientIDRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetVerifiedClientIDRequest_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDRequest.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDRequest.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDRequest.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDRequest.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.QueryGetVerifiedClientIDRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryGetVerifiedClientIDRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetVerifiedClientIDRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetVerifiedClientIDRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetVerifiedClientIDRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetVerifiedClientIDRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetVerifiedClientIDRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetVerifiedClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetVerifiedClientIDResponse protoreflect.MessageDescriptor + fd_QueryGetVerifiedClientIDResponse_verifiedClientID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryGetVerifiedClientIDResponse = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryGetVerifiedClientIDResponse") + fd_QueryGetVerifiedClientIDResponse_verifiedClientID = md_QueryGetVerifiedClientIDResponse.Fields().ByName("verifiedClientID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetVerifiedClientIDResponse)(nil) + +type fastReflection_QueryGetVerifiedClientIDResponse QueryGetVerifiedClientIDResponse + +func (x *QueryGetVerifiedClientIDResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetVerifiedClientIDResponse)(x) +} + +func (x *QueryGetVerifiedClientIDResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_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) +} + +var _fastReflection_QueryGetVerifiedClientIDResponse_messageType fastReflection_QueryGetVerifiedClientIDResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetVerifiedClientIDResponse_messageType{} + +type fastReflection_QueryGetVerifiedClientIDResponse_messageType struct{} + +func (x fastReflection_QueryGetVerifiedClientIDResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetVerifiedClientIDResponse)(nil) +} +func (x fastReflection_QueryGetVerifiedClientIDResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetVerifiedClientIDResponse) +} +func (x fastReflection_QueryGetVerifiedClientIDResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetVerifiedClientIDResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetVerifiedClientIDResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetVerifiedClientIDResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetVerifiedClientIDResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetVerifiedClientIDResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.VerifiedClientID != nil { + value := protoreflect.ValueOfMessage(x.VerifiedClientID.ProtoReflect()) + if !f(fd_QueryGetVerifiedClientIDResponse_verifiedClientID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDResponse.verifiedClientID": + return x.VerifiedClientID != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDResponse.verifiedClientID": + x.VerifiedClientID = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDResponse.verifiedClientID": + value := x.VerifiedClientID + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDResponse.verifiedClientID": + x.VerifiedClientID = value.Message().Interface().(*VerifiedClientID) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDResponse.verifiedClientID": + if x.VerifiedClientID == nil { + x.VerifiedClientID = new(VerifiedClientID) + } + return protoreflect.ValueOfMessage(x.VerifiedClientID.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetVerifiedClientIDResponse.verifiedClientID": + m := new(VerifiedClientID) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetVerifiedClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetVerifiedClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryGetVerifiedClientIDResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetVerifiedClientIDResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetVerifiedClientIDResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.VerifiedClientID != nil { + l = options.Size(x.VerifiedClientID) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetVerifiedClientIDResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.VerifiedClientID != nil { + encoded, err := options.Marshal(x.VerifiedClientID) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetVerifiedClientIDResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetVerifiedClientIDResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetVerifiedClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VerifiedClientID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.VerifiedClientID == nil { + x.VerifiedClientID = &VerifiedClientID{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VerifiedClientID); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetProviderClientIDRequest protoreflect.MessageDescriptor + fd_QueryGetProviderClientIDRequest_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryGetProviderClientIDRequest = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryGetProviderClientIDRequest") + fd_QueryGetProviderClientIDRequest_launchID = md_QueryGetProviderClientIDRequest.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetProviderClientIDRequest)(nil) + +type fastReflection_QueryGetProviderClientIDRequest QueryGetProviderClientIDRequest + +func (x *QueryGetProviderClientIDRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetProviderClientIDRequest)(x) +} + +func (x *QueryGetProviderClientIDRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_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) +} + +var _fastReflection_QueryGetProviderClientIDRequest_messageType fastReflection_QueryGetProviderClientIDRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetProviderClientIDRequest_messageType{} + +type fastReflection_QueryGetProviderClientIDRequest_messageType struct{} + +func (x fastReflection_QueryGetProviderClientIDRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetProviderClientIDRequest)(nil) +} +func (x fastReflection_QueryGetProviderClientIDRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetProviderClientIDRequest) +} +func (x fastReflection_QueryGetProviderClientIDRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProviderClientIDRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetProviderClientIDRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProviderClientIDRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetProviderClientIDRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetProviderClientIDRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetProviderClientIDRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetProviderClientIDRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetProviderClientIDRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetProviderClientIDRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetProviderClientIDRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetProviderClientIDRequest_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetProviderClientIDRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDRequest.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProviderClientIDRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDRequest.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetProviderClientIDRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProviderClientIDRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDRequest.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProviderClientIDRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDRequest.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.QueryGetProviderClientIDRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetProviderClientIDRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetProviderClientIDRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryGetProviderClientIDRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetProviderClientIDRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProviderClientIDRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetProviderClientIDRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetProviderClientIDRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetProviderClientIDRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProviderClientIDRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProviderClientIDRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProviderClientIDRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProviderClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetProviderClientIDResponse protoreflect.MessageDescriptor + fd_QueryGetProviderClientIDResponse_providerClientID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryGetProviderClientIDResponse = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryGetProviderClientIDResponse") + fd_QueryGetProviderClientIDResponse_providerClientID = md_QueryGetProviderClientIDResponse.Fields().ByName("providerClientID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetProviderClientIDResponse)(nil) + +type fastReflection_QueryGetProviderClientIDResponse QueryGetProviderClientIDResponse + +func (x *QueryGetProviderClientIDResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetProviderClientIDResponse)(x) +} + +func (x *QueryGetProviderClientIDResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[11] + 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) +} + +var _fastReflection_QueryGetProviderClientIDResponse_messageType fastReflection_QueryGetProviderClientIDResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetProviderClientIDResponse_messageType{} + +type fastReflection_QueryGetProviderClientIDResponse_messageType struct{} + +func (x fastReflection_QueryGetProviderClientIDResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetProviderClientIDResponse)(nil) +} +func (x fastReflection_QueryGetProviderClientIDResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetProviderClientIDResponse) +} +func (x fastReflection_QueryGetProviderClientIDResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProviderClientIDResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetProviderClientIDResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProviderClientIDResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetProviderClientIDResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetProviderClientIDResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetProviderClientIDResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetProviderClientIDResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetProviderClientIDResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetProviderClientIDResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetProviderClientIDResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProviderClientID != nil { + value := protoreflect.ValueOfMessage(x.ProviderClientID.ProtoReflect()) + if !f(fd_QueryGetProviderClientIDResponse_providerClientID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetProviderClientIDResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDResponse.providerClientID": + return x.ProviderClientID != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProviderClientIDResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDResponse.providerClientID": + x.ProviderClientID = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetProviderClientIDResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDResponse.providerClientID": + value := x.ProviderClientID + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProviderClientIDResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDResponse.providerClientID": + x.ProviderClientID = value.Message().Interface().(*ProviderClientID) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProviderClientIDResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDResponse.providerClientID": + if x.ProviderClientID == nil { + x.ProviderClientID = new(ProviderClientID) + } + return protoreflect.ValueOfMessage(x.ProviderClientID.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetProviderClientIDResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryGetProviderClientIDResponse.providerClientID": + m := new(ProviderClientID) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryGetProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryGetProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetProviderClientIDResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryGetProviderClientIDResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetProviderClientIDResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProviderClientIDResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetProviderClientIDResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetProviderClientIDResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetProviderClientIDResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProviderClientID != nil { + l = options.Size(x.ProviderClientID) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProviderClientIDResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ProviderClientID != nil { + encoded, err := options.Marshal(x.ProviderClientID) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProviderClientIDResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProviderClientIDResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProviderClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProviderClientID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ProviderClientID == nil { + x.ProviderClientID = &ProviderClientID{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ProviderClientID); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllProviderClientIDRequest protoreflect.MessageDescriptor + fd_QueryAllProviderClientIDRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryAllProviderClientIDRequest = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryAllProviderClientIDRequest") + fd_QueryAllProviderClientIDRequest_pagination = md_QueryAllProviderClientIDRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllProviderClientIDRequest)(nil) + +type fastReflection_QueryAllProviderClientIDRequest QueryAllProviderClientIDRequest + +func (x *QueryAllProviderClientIDRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllProviderClientIDRequest)(x) +} + +func (x *QueryAllProviderClientIDRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_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) +} + +var _fastReflection_QueryAllProviderClientIDRequest_messageType fastReflection_QueryAllProviderClientIDRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllProviderClientIDRequest_messageType{} + +type fastReflection_QueryAllProviderClientIDRequest_messageType struct{} + +func (x fastReflection_QueryAllProviderClientIDRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllProviderClientIDRequest)(nil) +} +func (x fastReflection_QueryAllProviderClientIDRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllProviderClientIDRequest) +} +func (x fastReflection_QueryAllProviderClientIDRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllProviderClientIDRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllProviderClientIDRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllProviderClientIDRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllProviderClientIDRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllProviderClientIDRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllProviderClientIDRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllProviderClientIDRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllProviderClientIDRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllProviderClientIDRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllProviderClientIDRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllProviderClientIDRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllProviderClientIDRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProviderClientIDRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllProviderClientIDRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProviderClientIDRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProviderClientIDRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllProviderClientIDRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllProviderClientIDRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryAllProviderClientIDRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllProviderClientIDRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProviderClientIDRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllProviderClientIDRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllProviderClientIDRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllProviderClientIDRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllProviderClientIDRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllProviderClientIDRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllProviderClientIDRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllProviderClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllProviderClientIDResponse_1_list)(nil) + +type _QueryAllProviderClientIDResponse_1_list struct { + list *[]*ProviderClientID +} + +func (x *_QueryAllProviderClientIDResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllProviderClientIDResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllProviderClientIDResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ProviderClientID) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllProviderClientIDResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ProviderClientID) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllProviderClientIDResponse_1_list) AppendMutable() protoreflect.Value { + v := new(ProviderClientID) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllProviderClientIDResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllProviderClientIDResponse_1_list) NewElement() protoreflect.Value { + v := new(ProviderClientID) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllProviderClientIDResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllProviderClientIDResponse protoreflect.MessageDescriptor + fd_QueryAllProviderClientIDResponse_providerClientID protoreflect.FieldDescriptor + fd_QueryAllProviderClientIDResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_query_proto_init() + md_QueryAllProviderClientIDResponse = File_network_monitoringc_v1_query_proto.Messages().ByName("QueryAllProviderClientIDResponse") + fd_QueryAllProviderClientIDResponse_providerClientID = md_QueryAllProviderClientIDResponse.Fields().ByName("providerClientID") + fd_QueryAllProviderClientIDResponse_pagination = md_QueryAllProviderClientIDResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllProviderClientIDResponse)(nil) + +type fastReflection_QueryAllProviderClientIDResponse QueryAllProviderClientIDResponse + +func (x *QueryAllProviderClientIDResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllProviderClientIDResponse)(x) +} + +func (x *QueryAllProviderClientIDResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[13] + 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) +} + +var _fastReflection_QueryAllProviderClientIDResponse_messageType fastReflection_QueryAllProviderClientIDResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllProviderClientIDResponse_messageType{} + +type fastReflection_QueryAllProviderClientIDResponse_messageType struct{} + +func (x fastReflection_QueryAllProviderClientIDResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllProviderClientIDResponse)(nil) +} +func (x fastReflection_QueryAllProviderClientIDResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllProviderClientIDResponse) +} +func (x fastReflection_QueryAllProviderClientIDResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllProviderClientIDResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllProviderClientIDResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllProviderClientIDResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllProviderClientIDResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllProviderClientIDResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllProviderClientIDResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllProviderClientIDResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllProviderClientIDResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllProviderClientIDResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllProviderClientIDResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.ProviderClientID) != 0 { + value := protoreflect.ValueOfList(&_QueryAllProviderClientIDResponse_1_list{list: &x.ProviderClientID}) + if !f(fd_QueryAllProviderClientIDResponse_providerClientID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllProviderClientIDResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllProviderClientIDResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.providerClientID": + return len(x.ProviderClientID) != 0 + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProviderClientIDResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.providerClientID": + x.ProviderClientID = nil + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllProviderClientIDResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.providerClientID": + if len(x.ProviderClientID) == 0 { + return protoreflect.ValueOfList(&_QueryAllProviderClientIDResponse_1_list{}) + } + listValue := &_QueryAllProviderClientIDResponse_1_list{list: &x.ProviderClientID} + return protoreflect.ValueOfList(listValue) + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProviderClientIDResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.providerClientID": + lv := value.List() + clv := lv.(*_QueryAllProviderClientIDResponse_1_list) + x.ProviderClientID = *clv.list + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProviderClientIDResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.providerClientID": + if x.ProviderClientID == nil { + x.ProviderClientID = []*ProviderClientID{} + } + value := &_QueryAllProviderClientIDResponse_1_list{list: &x.ProviderClientID} + return protoreflect.ValueOfList(value) + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllProviderClientIDResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.providerClientID": + list := []*ProviderClientID{} + return protoreflect.ValueOfList(&_QueryAllProviderClientIDResponse_1_list{list: &list}) + case "network.monitoringc.v1.QueryAllProviderClientIDResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.QueryAllProviderClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.QueryAllProviderClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllProviderClientIDResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.QueryAllProviderClientIDResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllProviderClientIDResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProviderClientIDResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllProviderClientIDResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllProviderClientIDResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllProviderClientIDResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.ProviderClientID) > 0 { + for _, e := range x.ProviderClientID { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllProviderClientIDResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.ProviderClientID) > 0 { + for iNdEx := len(x.ProviderClientID) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ProviderClientID[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllProviderClientIDResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllProviderClientIDResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllProviderClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProviderClientID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProviderClientID = append(x.ProviderClientID, &ProviderClientID{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ProviderClientID[len(x.ProviderClientID)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/query.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryParamsRequest) Reset() { + *x = QueryParamsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsRequest) ProtoMessage() {} + +// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{0} +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params holds all the parameters of this module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryParamsResponse) Reset() { + *x = QueryParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsResponse) ProtoMessage() {} + +// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryParamsResponse) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +type QueryGetLaunchIDFromChannelIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChannelID string `protobuf:"bytes,1,opt,name=channelID,proto3" json:"channelID,omitempty"` +} + +func (x *QueryGetLaunchIDFromChannelIDRequest) Reset() { + *x = QueryGetLaunchIDFromChannelIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetLaunchIDFromChannelIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetLaunchIDFromChannelIDRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetLaunchIDFromChannelIDRequest.ProtoReflect.Descriptor instead. +func (*QueryGetLaunchIDFromChannelIDRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{2} +} + +func (x *QueryGetLaunchIDFromChannelIDRequest) GetChannelID() string { + if x != nil { + return x.ChannelID + } + return "" +} + +type QueryGetLaunchIDFromChannelIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchIDFromChannelID *LaunchIDFromChannelID `protobuf:"bytes,1,opt,name=launchIDFromChannelID,proto3" json:"launchIDFromChannelID,omitempty"` +} + +func (x *QueryGetLaunchIDFromChannelIDResponse) Reset() { + *x = QueryGetLaunchIDFromChannelIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetLaunchIDFromChannelIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetLaunchIDFromChannelIDResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetLaunchIDFromChannelIDResponse.ProtoReflect.Descriptor instead. +func (*QueryGetLaunchIDFromChannelIDResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryGetLaunchIDFromChannelIDResponse) GetLaunchIDFromChannelID() *LaunchIDFromChannelID { + if x != nil { + return x.LaunchIDFromChannelID + } + return nil +} + +type QueryAllLaunchIDFromChannelIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllLaunchIDFromChannelIDRequest) Reset() { + *x = QueryAllLaunchIDFromChannelIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllLaunchIDFromChannelIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllLaunchIDFromChannelIDRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllLaunchIDFromChannelIDRequest.ProtoReflect.Descriptor instead. +func (*QueryAllLaunchIDFromChannelIDRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryAllLaunchIDFromChannelIDRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllLaunchIDFromChannelIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchIDFromChannelID []*LaunchIDFromChannelID `protobuf:"bytes,1,rep,name=launchIDFromChannelID,proto3" json:"launchIDFromChannelID,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllLaunchIDFromChannelIDResponse) Reset() { + *x = QueryAllLaunchIDFromChannelIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllLaunchIDFromChannelIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllLaunchIDFromChannelIDResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllLaunchIDFromChannelIDResponse.ProtoReflect.Descriptor instead. +func (*QueryAllLaunchIDFromChannelIDResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryAllLaunchIDFromChannelIDResponse) GetLaunchIDFromChannelID() []*LaunchIDFromChannelID { + if x != nil { + return x.LaunchIDFromChannelID + } + return nil +} + +func (x *QueryAllLaunchIDFromChannelIDResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetMonitoringHistoryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *QueryGetMonitoringHistoryRequest) Reset() { + *x = QueryGetMonitoringHistoryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetMonitoringHistoryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetMonitoringHistoryRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetMonitoringHistoryRequest.ProtoReflect.Descriptor instead. +func (*QueryGetMonitoringHistoryRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{6} +} + +func (x *QueryGetMonitoringHistoryRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type QueryGetMonitoringHistoryResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MonitoringHistory *MonitoringHistory `protobuf:"bytes,1,opt,name=monitoringHistory,proto3" json:"monitoringHistory,omitempty"` +} + +func (x *QueryGetMonitoringHistoryResponse) Reset() { + *x = QueryGetMonitoringHistoryResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetMonitoringHistoryResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetMonitoringHistoryResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetMonitoringHistoryResponse.ProtoReflect.Descriptor instead. +func (*QueryGetMonitoringHistoryResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryGetMonitoringHistoryResponse) GetMonitoringHistory() *MonitoringHistory { + if x != nil { + return x.MonitoringHistory + } + return nil +} + +type QueryGetVerifiedClientIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *QueryGetVerifiedClientIDRequest) Reset() { + *x = QueryGetVerifiedClientIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetVerifiedClientIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetVerifiedClientIDRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetVerifiedClientIDRequest.ProtoReflect.Descriptor instead. +func (*QueryGetVerifiedClientIDRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{8} +} + +func (x *QueryGetVerifiedClientIDRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type QueryGetVerifiedClientIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VerifiedClientID *VerifiedClientID `protobuf:"bytes,1,opt,name=verifiedClientID,proto3" json:"verifiedClientID,omitempty"` +} + +func (x *QueryGetVerifiedClientIDResponse) Reset() { + *x = QueryGetVerifiedClientIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetVerifiedClientIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetVerifiedClientIDResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetVerifiedClientIDResponse.ProtoReflect.Descriptor instead. +func (*QueryGetVerifiedClientIDResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{9} +} + +func (x *QueryGetVerifiedClientIDResponse) GetVerifiedClientID() *VerifiedClientID { + if x != nil { + return x.VerifiedClientID + } + return nil +} + +type QueryGetProviderClientIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *QueryGetProviderClientIDRequest) Reset() { + *x = QueryGetProviderClientIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetProviderClientIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetProviderClientIDRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetProviderClientIDRequest.ProtoReflect.Descriptor instead. +func (*QueryGetProviderClientIDRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{10} +} + +func (x *QueryGetProviderClientIDRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type QueryGetProviderClientIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProviderClientID *ProviderClientID `protobuf:"bytes,1,opt,name=providerClientID,proto3" json:"providerClientID,omitempty"` +} + +func (x *QueryGetProviderClientIDResponse) Reset() { + *x = QueryGetProviderClientIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetProviderClientIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetProviderClientIDResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetProviderClientIDResponse.ProtoReflect.Descriptor instead. +func (*QueryGetProviderClientIDResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{11} +} + +func (x *QueryGetProviderClientIDResponse) GetProviderClientID() *ProviderClientID { + if x != nil { + return x.ProviderClientID + } + return nil +} + +type QueryAllProviderClientIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllProviderClientIDRequest) Reset() { + *x = QueryAllProviderClientIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllProviderClientIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllProviderClientIDRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllProviderClientIDRequest.ProtoReflect.Descriptor instead. +func (*QueryAllProviderClientIDRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{12} +} + +func (x *QueryAllProviderClientIDRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllProviderClientIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProviderClientID []*ProviderClientID `protobuf:"bytes,1,rep,name=providerClientID,proto3" json:"providerClientID,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllProviderClientIDResponse) Reset() { + *x = QueryAllProviderClientIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_query_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllProviderClientIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllProviderClientIDResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllProviderClientIDResponse.ProtoReflect.Descriptor instead. +func (*QueryAllProviderClientIDResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_query_proto_rawDescGZIP(), []int{13} +} + +func (x *QueryAllProviderClientIDResponse) GetProviderClientID() []*ProviderClientID { + if x != nil { + return x.ProviderClientID + } + return nil +} + +func (x *QueryAllProviderClientIDResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +var File_network_monitoringc_v1_query_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_query_proto_rawDesc = []byte{ + 0x0a, 0x22, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, + 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, + 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x36, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x69, + 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, + 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x14, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, + 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0x44, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x22, 0x92, 0x01, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, + 0x65, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x69, 0x0a, 0x15, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x42, 0x04, 0xc8, + 0xde, 0x1f, 0x00, 0x52, 0x15, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, + 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x22, 0x6e, 0x0a, 0x24, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, + 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xdb, 0x01, 0x0a, 0x25, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, + 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x15, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, + 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x49, 0x44, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x15, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x12, + 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, + 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x22, 0x82, 0x01, 0x0a, 0x21, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, + 0x0a, 0x11, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x11, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x3d, 0x0a, + 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x22, 0x7e, 0x0a, 0x20, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5a, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, + 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x22, 0x3d, 0x0a, 0x1f, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x22, 0x7e, 0x0a, 0x20, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5a, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x44, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x22, 0x69, 0x0a, 0x1f, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc7, 0x01, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x10, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x42, + 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x32, 0x8a, 0x0b, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x90, 0x01, 0x0a, 0x06, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0xe2, 0x01, + 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, + 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x12, 0x3c, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, + 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, + 0x41, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, + 0x44, 0x7d, 0x12, 0xd7, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, + 0x12, 0x3c, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, + 0x6c, 0x6c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, + 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x2f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, + 0x6d, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0xce, 0x01, 0x0a, + 0x14, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x38, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x39, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, + 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x12, 0xcb, 0x01, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x37, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, + 0x12, 0x39, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x2f, 0x7b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x44, 0x12, 0x37, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2f, 0x7b, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x12, 0xc1, 0x01, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x12, 0x37, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, + 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x42, 0xe6, 0x01, + 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, + 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x76, 0x31, 0xa2, 0x02, + 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_v1_query_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_query_proto_rawDescData = file_network_monitoringc_v1_query_proto_rawDesc +) + +func file_network_monitoringc_v1_query_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_query_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_query_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_query_proto_rawDescData) + }) + return file_network_monitoringc_v1_query_proto_rawDescData +} + +var file_network_monitoringc_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_network_monitoringc_v1_query_proto_goTypes = []interface{}{ + (*QueryParamsRequest)(nil), // 0: network.monitoringc.v1.QueryParamsRequest + (*QueryParamsResponse)(nil), // 1: network.monitoringc.v1.QueryParamsResponse + (*QueryGetLaunchIDFromChannelIDRequest)(nil), // 2: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest + (*QueryGetLaunchIDFromChannelIDResponse)(nil), // 3: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse + (*QueryAllLaunchIDFromChannelIDRequest)(nil), // 4: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest + (*QueryAllLaunchIDFromChannelIDResponse)(nil), // 5: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse + (*QueryGetMonitoringHistoryRequest)(nil), // 6: network.monitoringc.v1.QueryGetMonitoringHistoryRequest + (*QueryGetMonitoringHistoryResponse)(nil), // 7: network.monitoringc.v1.QueryGetMonitoringHistoryResponse + (*QueryGetVerifiedClientIDRequest)(nil), // 8: network.monitoringc.v1.QueryGetVerifiedClientIDRequest + (*QueryGetVerifiedClientIDResponse)(nil), // 9: network.monitoringc.v1.QueryGetVerifiedClientIDResponse + (*QueryGetProviderClientIDRequest)(nil), // 10: network.monitoringc.v1.QueryGetProviderClientIDRequest + (*QueryGetProviderClientIDResponse)(nil), // 11: network.monitoringc.v1.QueryGetProviderClientIDResponse + (*QueryAllProviderClientIDRequest)(nil), // 12: network.monitoringc.v1.QueryAllProviderClientIDRequest + (*QueryAllProviderClientIDResponse)(nil), // 13: network.monitoringc.v1.QueryAllProviderClientIDResponse + (*Params)(nil), // 14: network.monitoringc.v1.Params + (*LaunchIDFromChannelID)(nil), // 15: network.monitoringc.v1.LaunchIDFromChannelID + (*v1beta1.PageRequest)(nil), // 16: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 17: cosmos.base.query.v1beta1.PageResponse + (*MonitoringHistory)(nil), // 18: network.monitoringc.v1.MonitoringHistory + (*VerifiedClientID)(nil), // 19: network.monitoringc.v1.VerifiedClientID + (*ProviderClientID)(nil), // 20: network.monitoringc.v1.ProviderClientID +} +var file_network_monitoringc_v1_query_proto_depIdxs = []int32{ + 14, // 0: network.monitoringc.v1.QueryParamsResponse.params:type_name -> network.monitoringc.v1.Params + 15, // 1: network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse.launchIDFromChannelID:type_name -> network.monitoringc.v1.LaunchIDFromChannelID + 16, // 2: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 15, // 3: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.launchIDFromChannelID:type_name -> network.monitoringc.v1.LaunchIDFromChannelID + 17, // 4: network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 18, // 5: network.monitoringc.v1.QueryGetMonitoringHistoryResponse.monitoringHistory:type_name -> network.monitoringc.v1.MonitoringHistory + 19, // 6: network.monitoringc.v1.QueryGetVerifiedClientIDResponse.verifiedClientID:type_name -> network.monitoringc.v1.VerifiedClientID + 20, // 7: network.monitoringc.v1.QueryGetProviderClientIDResponse.providerClientID:type_name -> network.monitoringc.v1.ProviderClientID + 16, // 8: network.monitoringc.v1.QueryAllProviderClientIDRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 20, // 9: network.monitoringc.v1.QueryAllProviderClientIDResponse.providerClientID:type_name -> network.monitoringc.v1.ProviderClientID + 17, // 10: network.monitoringc.v1.QueryAllProviderClientIDResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 0, // 11: network.monitoringc.v1.Query.Params:input_type -> network.monitoringc.v1.QueryParamsRequest + 2, // 12: network.monitoringc.v1.Query.GetLaunchIDFromChannelID:input_type -> network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest + 4, // 13: network.monitoringc.v1.Query.ListLaunchIDFromChannelID:input_type -> network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest + 6, // 14: network.monitoringc.v1.Query.GetMonitoringHistory:input_type -> network.monitoringc.v1.QueryGetMonitoringHistoryRequest + 8, // 15: network.monitoringc.v1.Query.GetVerifiedClientID:input_type -> network.monitoringc.v1.QueryGetVerifiedClientIDRequest + 10, // 16: network.monitoringc.v1.Query.GetProviderClientID:input_type -> network.monitoringc.v1.QueryGetProviderClientIDRequest + 12, // 17: network.monitoringc.v1.Query.ListProviderClientID:input_type -> network.monitoringc.v1.QueryAllProviderClientIDRequest + 1, // 18: network.monitoringc.v1.Query.Params:output_type -> network.monitoringc.v1.QueryParamsResponse + 3, // 19: network.monitoringc.v1.Query.GetLaunchIDFromChannelID:output_type -> network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse + 5, // 20: network.monitoringc.v1.Query.ListLaunchIDFromChannelID:output_type -> network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse + 7, // 21: network.monitoringc.v1.Query.GetMonitoringHistory:output_type -> network.monitoringc.v1.QueryGetMonitoringHistoryResponse + 9, // 22: network.monitoringc.v1.Query.GetVerifiedClientID:output_type -> network.monitoringc.v1.QueryGetVerifiedClientIDResponse + 11, // 23: network.monitoringc.v1.Query.GetProviderClientID:output_type -> network.monitoringc.v1.QueryGetProviderClientIDResponse + 13, // 24: network.monitoringc.v1.Query.ListProviderClientID:output_type -> network.monitoringc.v1.QueryAllProviderClientIDResponse + 18, // [18:25] is the sub-list for method output_type + 11, // [11:18] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name +} + +func init() { file_network_monitoringc_v1_query_proto_init() } +func file_network_monitoringc_v1_query_proto_init() { + if File_network_monitoringc_v1_query_proto != nil { + return + } + file_network_monitoringc_v1_launch_id_from_channel_id_proto_init() + file_network_monitoringc_v1_monitoring_history_proto_init() + file_network_monitoringc_v1_params_proto_init() + file_network_monitoringc_v1_provider_client_id_proto_init() + file_network_monitoringc_v1_verified_client_id_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetLaunchIDFromChannelIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetLaunchIDFromChannelIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllLaunchIDFromChannelIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllLaunchIDFromChannelIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetMonitoringHistoryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetMonitoringHistoryResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetVerifiedClientIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetVerifiedClientIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetProviderClientIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetProviderClientIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllProviderClientIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_query_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllProviderClientIDResponse); 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_network_monitoringc_v1_query_proto_rawDesc, + NumEnums: 0, + NumMessages: 14, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_monitoringc_v1_query_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_query_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_query_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_query_proto = out.File + file_network_monitoringc_v1_query_proto_rawDesc = nil + file_network_monitoringc_v1_query_proto_goTypes = nil + file_network_monitoringc_v1_query_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/query_grpc.pb.go b/api/network/monitoringc/v1/query_grpc.pb.go new file mode 100644 index 00000000..629e8dea --- /dev/null +++ b/api/network/monitoringc/v1/query_grpc.pb.go @@ -0,0 +1,341 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/monitoringc/v1/query.proto + +package monitoringcv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Query_Params_FullMethodName = "/network.monitoringc.v1.Query/Params" + Query_GetLaunchIDFromChannelID_FullMethodName = "/network.monitoringc.v1.Query/GetLaunchIDFromChannelID" + Query_ListLaunchIDFromChannelID_FullMethodName = "/network.monitoringc.v1.Query/ListLaunchIDFromChannelID" + Query_GetMonitoringHistory_FullMethodName = "/network.monitoringc.v1.Query/GetMonitoringHistory" + Query_GetVerifiedClientID_FullMethodName = "/network.monitoringc.v1.Query/GetVerifiedClientID" + Query_GetProviderClientID_FullMethodName = "/network.monitoringc.v1.Query/GetProviderClientID" + Query_ListProviderClientID_FullMethodName = "/network.monitoringc.v1.Query/ListProviderClientID" +) + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of LaunchIDFromChannelID items. + GetLaunchIDFromChannelID(ctx context.Context, in *QueryGetLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryGetLaunchIDFromChannelIDResponse, error) + ListLaunchIDFromChannelID(ctx context.Context, in *QueryAllLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryAllLaunchIDFromChannelIDResponse, error) + // Queries a list of MonitoringHistory items. + GetMonitoringHistory(ctx context.Context, in *QueryGetMonitoringHistoryRequest, opts ...grpc.CallOption) (*QueryGetMonitoringHistoryResponse, error) + // Queries a list of VerifiedClientID items. + GetVerifiedClientID(ctx context.Context, in *QueryGetVerifiedClientIDRequest, opts ...grpc.CallOption) (*QueryGetVerifiedClientIDResponse, error) + // Queries a list of ProviderClientID items. + GetProviderClientID(ctx context.Context, in *QueryGetProviderClientIDRequest, opts ...grpc.CallOption) (*QueryGetProviderClientIDResponse, error) + ListProviderClientID(ctx context.Context, in *QueryAllProviderClientIDRequest, opts ...grpc.CallOption) (*QueryAllProviderClientIDResponse, error) +} + +type queryClient struct { + cc grpc.ClientConnInterface +} + +func NewQueryClient(cc grpc.ClientConnInterface) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, Query_Params_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetLaunchIDFromChannelID(ctx context.Context, in *QueryGetLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryGetLaunchIDFromChannelIDResponse, error) { + out := new(QueryGetLaunchIDFromChannelIDResponse) + err := c.cc.Invoke(ctx, Query_GetLaunchIDFromChannelID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListLaunchIDFromChannelID(ctx context.Context, in *QueryAllLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryAllLaunchIDFromChannelIDResponse, error) { + out := new(QueryAllLaunchIDFromChannelIDResponse) + err := c.cc.Invoke(ctx, Query_ListLaunchIDFromChannelID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetMonitoringHistory(ctx context.Context, in *QueryGetMonitoringHistoryRequest, opts ...grpc.CallOption) (*QueryGetMonitoringHistoryResponse, error) { + out := new(QueryGetMonitoringHistoryResponse) + err := c.cc.Invoke(ctx, Query_GetMonitoringHistory_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetVerifiedClientID(ctx context.Context, in *QueryGetVerifiedClientIDRequest, opts ...grpc.CallOption) (*QueryGetVerifiedClientIDResponse, error) { + out := new(QueryGetVerifiedClientIDResponse) + err := c.cc.Invoke(ctx, Query_GetVerifiedClientID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetProviderClientID(ctx context.Context, in *QueryGetProviderClientIDRequest, opts ...grpc.CallOption) (*QueryGetProviderClientIDResponse, error) { + out := new(QueryGetProviderClientIDResponse) + err := c.cc.Invoke(ctx, Query_GetProviderClientID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListProviderClientID(ctx context.Context, in *QueryAllProviderClientIDRequest, opts ...grpc.CallOption) (*QueryAllProviderClientIDResponse, error) { + out := new(QueryAllProviderClientIDResponse) + err := c.cc.Invoke(ctx, Query_ListProviderClientID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +// All implementations must embed UnimplementedQueryServer +// for forward compatibility +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of LaunchIDFromChannelID items. + GetLaunchIDFromChannelID(context.Context, *QueryGetLaunchIDFromChannelIDRequest) (*QueryGetLaunchIDFromChannelIDResponse, error) + ListLaunchIDFromChannelID(context.Context, *QueryAllLaunchIDFromChannelIDRequest) (*QueryAllLaunchIDFromChannelIDResponse, error) + // Queries a list of MonitoringHistory items. + GetMonitoringHistory(context.Context, *QueryGetMonitoringHistoryRequest) (*QueryGetMonitoringHistoryResponse, error) + // Queries a list of VerifiedClientID items. + GetVerifiedClientID(context.Context, *QueryGetVerifiedClientIDRequest) (*QueryGetVerifiedClientIDResponse, error) + // Queries a list of ProviderClientID items. + GetProviderClientID(context.Context, *QueryGetProviderClientIDRequest) (*QueryGetProviderClientIDResponse, error) + ListProviderClientID(context.Context, *QueryAllProviderClientIDRequest) (*QueryAllProviderClientIDResponse, error) + mustEmbedUnimplementedQueryServer() +} + +// UnimplementedQueryServer must be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (UnimplementedQueryServer) GetLaunchIDFromChannelID(context.Context, *QueryGetLaunchIDFromChannelIDRequest) (*QueryGetLaunchIDFromChannelIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetLaunchIDFromChannelID not implemented") +} +func (UnimplementedQueryServer) ListLaunchIDFromChannelID(context.Context, *QueryAllLaunchIDFromChannelIDRequest) (*QueryAllLaunchIDFromChannelIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListLaunchIDFromChannelID not implemented") +} +func (UnimplementedQueryServer) GetMonitoringHistory(context.Context, *QueryGetMonitoringHistoryRequest) (*QueryGetMonitoringHistoryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMonitoringHistory not implemented") +} +func (UnimplementedQueryServer) GetVerifiedClientID(context.Context, *QueryGetVerifiedClientIDRequest) (*QueryGetVerifiedClientIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetVerifiedClientID not implemented") +} +func (UnimplementedQueryServer) GetProviderClientID(context.Context, *QueryGetProviderClientIDRequest) (*QueryGetProviderClientIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProviderClientID not implemented") +} +func (UnimplementedQueryServer) ListProviderClientID(context.Context, *QueryAllProviderClientIDRequest) (*QueryAllProviderClientIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListProviderClientID not implemented") +} +func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} + +// UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to QueryServer will +// result in compilation errors. +type UnsafeQueryServer interface { + mustEmbedUnimplementedQueryServer() +} + +func RegisterQueryServer(s grpc.ServiceRegistrar, srv QueryServer) { + s.RegisterService(&Query_ServiceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_Params_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetLaunchIDFromChannelID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetLaunchIDFromChannelIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetLaunchIDFromChannelID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetLaunchIDFromChannelID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetLaunchIDFromChannelID(ctx, req.(*QueryGetLaunchIDFromChannelIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListLaunchIDFromChannelID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllLaunchIDFromChannelIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListLaunchIDFromChannelID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListLaunchIDFromChannelID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListLaunchIDFromChannelID(ctx, req.(*QueryAllLaunchIDFromChannelIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetMonitoringHistory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetMonitoringHistoryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetMonitoringHistory(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetMonitoringHistory_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetMonitoringHistory(ctx, req.(*QueryGetMonitoringHistoryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetVerifiedClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetVerifiedClientIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetVerifiedClientID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetVerifiedClientID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetVerifiedClientID(ctx, req.(*QueryGetVerifiedClientIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetProviderClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetProviderClientIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetProviderClientID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetProviderClientID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetProviderClientID(ctx, req.(*QueryGetProviderClientIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListProviderClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllProviderClientIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListProviderClientID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListProviderClientID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListProviderClientID(ctx, req.(*QueryAllProviderClientIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Query_ServiceDesc is the grpc.ServiceDesc for Query service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Query_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.monitoringc.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetLaunchIDFromChannelID", + Handler: _Query_GetLaunchIDFromChannelID_Handler, + }, + { + MethodName: "ListLaunchIDFromChannelID", + Handler: _Query_ListLaunchIDFromChannelID_Handler, + }, + { + MethodName: "GetMonitoringHistory", + Handler: _Query_GetMonitoringHistory_Handler, + }, + { + MethodName: "GetVerifiedClientID", + Handler: _Query_GetVerifiedClientID_Handler, + }, + { + MethodName: "GetProviderClientID", + Handler: _Query_GetProviderClientID_Handler, + }, + { + MethodName: "ListProviderClientID", + Handler: _Query_ListProviderClientID_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/monitoringc/v1/query.proto", +} diff --git a/api/network/monitoringc/v1/tx.pulsar.go b/api/network/monitoringc/v1/tx.pulsar.go new file mode 100644 index 00000000..d5236f4e --- /dev/null +++ b/api/network/monitoringc/v1/tx.pulsar.go @@ -0,0 +1,2412 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + _ "cosmossdk.io/api/amino" + _ "cosmossdk.io/api/cosmos/msg/v1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + types "github.com/ignite/network/api/network/types" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MsgUpdateParams protoreflect.MessageDescriptor + fd_MsgUpdateParams_authority protoreflect.FieldDescriptor + fd_MsgUpdateParams_params protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_tx_proto_init() + md_MsgUpdateParams = File_network_monitoringc_v1_tx_proto.Messages().ByName("MsgUpdateParams") + fd_MsgUpdateParams_authority = md_MsgUpdateParams.Fields().ByName("authority") + fd_MsgUpdateParams_params = md_MsgUpdateParams.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParams)(nil) + +type fastReflection_MsgUpdateParams MsgUpdateParams + +func (x *MsgUpdateParams) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(x) +} + +func (x *MsgUpdateParams) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_tx_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) +} + +var _fastReflection_MsgUpdateParams_messageType fastReflection_MsgUpdateParams_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParams_messageType{} + +type fastReflection_MsgUpdateParams_messageType struct{} + +func (x fastReflection_MsgUpdateParams_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(nil) +} +func (x fastReflection_MsgUpdateParams_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} +func (x fastReflection_MsgUpdateParams_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParams) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParams) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParams_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParams) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParams) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParams)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParams) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_MsgUpdateParams_authority, value) { + return + } + } + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_MsgUpdateParams_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParams) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.MsgUpdateParams.authority": + return x.Authority != "" + case "network.monitoringc.v1.MsgUpdateParams.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.MsgUpdateParams.authority": + x.Authority = "" + case "network.monitoringc.v1.MsgUpdateParams.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParams) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.MsgUpdateParams.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + case "network.monitoringc.v1.MsgUpdateParams.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParams does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.MsgUpdateParams.authority": + x.Authority = value.Interface().(string) + case "network.monitoringc.v1.MsgUpdateParams.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MsgUpdateParams.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.monitoringc.v1.MsgUpdateParams.authority": + panic(fmt.Errorf("field authority of message network.monitoringc.v1.MsgUpdateParams is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParams) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MsgUpdateParams.authority": + return protoreflect.ValueOfString("") + case "network.monitoringc.v1.MsgUpdateParams.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParams) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.MsgUpdateParams", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParams) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParams) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParams) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateParamsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringc_v1_tx_proto_init() + md_MsgUpdateParamsResponse = File_network_monitoringc_v1_tx_proto.Messages().ByName("MsgUpdateParamsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParamsResponse)(nil) + +type fastReflection_MsgUpdateParamsResponse MsgUpdateParamsResponse + +func (x *MsgUpdateParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(x) +} + +func (x *MsgUpdateParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_tx_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) +} + +var _fastReflection_MsgUpdateParamsResponse_messageType fastReflection_MsgUpdateParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParamsResponse_messageType{} + +type fastReflection_MsgUpdateParamsResponse_messageType struct{} + +func (x fastReflection_MsgUpdateParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(nil) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParamsResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParamsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.MsgUpdateParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgCreateClient protoreflect.MessageDescriptor + fd_MsgCreateClient_creator protoreflect.FieldDescriptor + fd_MsgCreateClient_launchID protoreflect.FieldDescriptor + fd_MsgCreateClient_consensusState protoreflect.FieldDescriptor + fd_MsgCreateClient_validatorSet protoreflect.FieldDescriptor + fd_MsgCreateClient_unbondingPeriod protoreflect.FieldDescriptor + fd_MsgCreateClient_revisionHeight protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_tx_proto_init() + md_MsgCreateClient = File_network_monitoringc_v1_tx_proto.Messages().ByName("MsgCreateClient") + fd_MsgCreateClient_creator = md_MsgCreateClient.Fields().ByName("creator") + fd_MsgCreateClient_launchID = md_MsgCreateClient.Fields().ByName("launchID") + fd_MsgCreateClient_consensusState = md_MsgCreateClient.Fields().ByName("consensusState") + fd_MsgCreateClient_validatorSet = md_MsgCreateClient.Fields().ByName("validatorSet") + fd_MsgCreateClient_unbondingPeriod = md_MsgCreateClient.Fields().ByName("unbondingPeriod") + fd_MsgCreateClient_revisionHeight = md_MsgCreateClient.Fields().ByName("revisionHeight") +} + +var _ protoreflect.Message = (*fastReflection_MsgCreateClient)(nil) + +type fastReflection_MsgCreateClient MsgCreateClient + +func (x *MsgCreateClient) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgCreateClient)(x) +} + +func (x *MsgCreateClient) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_tx_proto_msgTypes[2] + 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) +} + +var _fastReflection_MsgCreateClient_messageType fastReflection_MsgCreateClient_messageType +var _ protoreflect.MessageType = fastReflection_MsgCreateClient_messageType{} + +type fastReflection_MsgCreateClient_messageType struct{} + +func (x fastReflection_MsgCreateClient_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgCreateClient)(nil) +} +func (x fastReflection_MsgCreateClient_messageType) New() protoreflect.Message { + return new(fastReflection_MsgCreateClient) +} +func (x fastReflection_MsgCreateClient_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateClient +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgCreateClient) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateClient +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgCreateClient) Type() protoreflect.MessageType { + return _fastReflection_MsgCreateClient_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgCreateClient) New() protoreflect.Message { + return new(fastReflection_MsgCreateClient) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgCreateClient) Interface() protoreflect.ProtoMessage { + return (*MsgCreateClient)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgCreateClient) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Creator != "" { + value := protoreflect.ValueOfString(x.Creator) + if !f(fd_MsgCreateClient_creator, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgCreateClient_launchID, value) { + return + } + } + if x.ConsensusState != nil { + value := protoreflect.ValueOfMessage(x.ConsensusState.ProtoReflect()) + if !f(fd_MsgCreateClient_consensusState, value) { + return + } + } + if x.ValidatorSet != nil { + value := protoreflect.ValueOfMessage(x.ValidatorSet.ProtoReflect()) + if !f(fd_MsgCreateClient_validatorSet, value) { + return + } + } + if x.UnbondingPeriod != int64(0) { + value := protoreflect.ValueOfInt64(x.UnbondingPeriod) + if !f(fd_MsgCreateClient_unbondingPeriod, value) { + return + } + } + if x.RevisionHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.RevisionHeight) + if !f(fd_MsgCreateClient_revisionHeight, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgCreateClient) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClient.creator": + return x.Creator != "" + case "network.monitoringc.v1.MsgCreateClient.launchID": + return x.LaunchID != uint64(0) + case "network.monitoringc.v1.MsgCreateClient.consensusState": + return x.ConsensusState != nil + case "network.monitoringc.v1.MsgCreateClient.validatorSet": + return x.ValidatorSet != nil + case "network.monitoringc.v1.MsgCreateClient.unbondingPeriod": + return x.UnbondingPeriod != int64(0) + case "network.monitoringc.v1.MsgCreateClient.revisionHeight": + return x.RevisionHeight != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClient")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClient does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateClient) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClient.creator": + x.Creator = "" + case "network.monitoringc.v1.MsgCreateClient.launchID": + x.LaunchID = uint64(0) + case "network.monitoringc.v1.MsgCreateClient.consensusState": + x.ConsensusState = nil + case "network.monitoringc.v1.MsgCreateClient.validatorSet": + x.ValidatorSet = nil + case "network.monitoringc.v1.MsgCreateClient.unbondingPeriod": + x.UnbondingPeriod = int64(0) + case "network.monitoringc.v1.MsgCreateClient.revisionHeight": + x.RevisionHeight = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClient")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClient does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgCreateClient) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.MsgCreateClient.creator": + value := x.Creator + return protoreflect.ValueOfString(value) + case "network.monitoringc.v1.MsgCreateClient.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.monitoringc.v1.MsgCreateClient.consensusState": + value := x.ConsensusState + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.monitoringc.v1.MsgCreateClient.validatorSet": + value := x.ValidatorSet + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.monitoringc.v1.MsgCreateClient.unbondingPeriod": + value := x.UnbondingPeriod + return protoreflect.ValueOfInt64(value) + case "network.monitoringc.v1.MsgCreateClient.revisionHeight": + value := x.RevisionHeight + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClient")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClient does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateClient) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClient.creator": + x.Creator = value.Interface().(string) + case "network.monitoringc.v1.MsgCreateClient.launchID": + x.LaunchID = value.Uint() + case "network.monitoringc.v1.MsgCreateClient.consensusState": + x.ConsensusState = value.Message().Interface().(*types.ConsensusState) + case "network.monitoringc.v1.MsgCreateClient.validatorSet": + x.ValidatorSet = value.Message().Interface().(*types.ValidatorSet) + case "network.monitoringc.v1.MsgCreateClient.unbondingPeriod": + x.UnbondingPeriod = value.Int() + case "network.monitoringc.v1.MsgCreateClient.revisionHeight": + x.RevisionHeight = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClient")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClient does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateClient) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClient.consensusState": + if x.ConsensusState == nil { + x.ConsensusState = new(types.ConsensusState) + } + return protoreflect.ValueOfMessage(x.ConsensusState.ProtoReflect()) + case "network.monitoringc.v1.MsgCreateClient.validatorSet": + if x.ValidatorSet == nil { + x.ValidatorSet = new(types.ValidatorSet) + } + return protoreflect.ValueOfMessage(x.ValidatorSet.ProtoReflect()) + case "network.monitoringc.v1.MsgCreateClient.creator": + panic(fmt.Errorf("field creator of message network.monitoringc.v1.MsgCreateClient is not mutable")) + case "network.monitoringc.v1.MsgCreateClient.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.MsgCreateClient is not mutable")) + case "network.monitoringc.v1.MsgCreateClient.unbondingPeriod": + panic(fmt.Errorf("field unbondingPeriod of message network.monitoringc.v1.MsgCreateClient is not mutable")) + case "network.monitoringc.v1.MsgCreateClient.revisionHeight": + panic(fmt.Errorf("field revisionHeight of message network.monitoringc.v1.MsgCreateClient is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClient")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClient does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgCreateClient) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClient.creator": + return protoreflect.ValueOfString("") + case "network.monitoringc.v1.MsgCreateClient.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.monitoringc.v1.MsgCreateClient.consensusState": + m := new(types.ConsensusState) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.monitoringc.v1.MsgCreateClient.validatorSet": + m := new(types.ValidatorSet) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.monitoringc.v1.MsgCreateClient.unbondingPeriod": + return protoreflect.ValueOfInt64(int64(0)) + case "network.monitoringc.v1.MsgCreateClient.revisionHeight": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClient")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClient does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgCreateClient) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.MsgCreateClient", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgCreateClient) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateClient) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgCreateClient) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgCreateClient) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgCreateClient) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Creator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.ConsensusState != nil { + l = options.Size(x.ConsensusState) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ValidatorSet != nil { + l = options.Size(x.ValidatorSet) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.UnbondingPeriod != 0 { + n += 1 + runtime.Sov(uint64(x.UnbondingPeriod)) + } + if x.RevisionHeight != 0 { + n += 1 + runtime.Sov(uint64(x.RevisionHeight)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateClient) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.RevisionHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RevisionHeight)) + i-- + dAtA[i] = 0x30 + } + if x.UnbondingPeriod != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.UnbondingPeriod)) + i-- + dAtA[i] = 0x28 + } + if x.ValidatorSet != nil { + encoded, err := options.Marshal(x.ValidatorSet) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + if x.ConsensusState != nil { + encoded, err := options.Marshal(x.ConsensusState) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Creator) > 0 { + i -= len(x.Creator) + copy(dAtA[i:], x.Creator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Creator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateClient) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateClient: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateClient: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsensusState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ConsensusState == nil { + x.ConsensusState = &types.ConsensusState{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ConsensusState); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorSet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ValidatorSet == nil { + x.ValidatorSet = &types.ValidatorSet{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ValidatorSet); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field UnbondingPeriod", wireType) + } + x.UnbondingPeriod = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.UnbondingPeriod |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RevisionHeight", wireType) + } + x.RevisionHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.RevisionHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgCreateClientResponse protoreflect.MessageDescriptor + fd_MsgCreateClientResponse_clientID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_tx_proto_init() + md_MsgCreateClientResponse = File_network_monitoringc_v1_tx_proto.Messages().ByName("MsgCreateClientResponse") + fd_MsgCreateClientResponse_clientID = md_MsgCreateClientResponse.Fields().ByName("clientID") +} + +var _ protoreflect.Message = (*fastReflection_MsgCreateClientResponse)(nil) + +type fastReflection_MsgCreateClientResponse MsgCreateClientResponse + +func (x *MsgCreateClientResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgCreateClientResponse)(x) +} + +func (x *MsgCreateClientResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_tx_proto_msgTypes[3] + 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) +} + +var _fastReflection_MsgCreateClientResponse_messageType fastReflection_MsgCreateClientResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgCreateClientResponse_messageType{} + +type fastReflection_MsgCreateClientResponse_messageType struct{} + +func (x fastReflection_MsgCreateClientResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgCreateClientResponse)(nil) +} +func (x fastReflection_MsgCreateClientResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgCreateClientResponse) +} +func (x fastReflection_MsgCreateClientResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateClientResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgCreateClientResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateClientResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgCreateClientResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgCreateClientResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgCreateClientResponse) New() protoreflect.Message { + return new(fastReflection_MsgCreateClientResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgCreateClientResponse) Interface() protoreflect.ProtoMessage { + return (*MsgCreateClientResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgCreateClientResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ClientID != "" { + value := protoreflect.ValueOfString(x.ClientID) + if !f(fd_MsgCreateClientResponse_clientID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgCreateClientResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClientResponse.clientID": + return x.ClientID != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClientResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClientResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateClientResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClientResponse.clientID": + x.ClientID = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClientResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClientResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgCreateClientResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.MsgCreateClientResponse.clientID": + value := x.ClientID + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClientResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClientResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateClientResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClientResponse.clientID": + x.ClientID = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClientResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClientResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateClientResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClientResponse.clientID": + panic(fmt.Errorf("field clientID of message network.monitoringc.v1.MsgCreateClientResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClientResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClientResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgCreateClientResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.MsgCreateClientResponse.clientID": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.MsgCreateClientResponse")) + } + panic(fmt.Errorf("message network.monitoringc.v1.MsgCreateClientResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgCreateClientResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.MsgCreateClientResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgCreateClientResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateClientResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgCreateClientResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgCreateClientResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgCreateClientResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ClientID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateClientResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ClientID) > 0 { + i -= len(x.ClientID) + copy(dAtA[i:], x.ClientID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ClientID))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateClientResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateClientResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateClientResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ClientID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/tx.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *MsgUpdateParams) Reset() { + *x = MsgUpdateParams{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_tx_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParams) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_tx_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgUpdateParams) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +func (x *MsgUpdateParams) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateParamsResponse) Reset() { + *x = MsgUpdateParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_tx_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParamsResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_tx_proto_rawDescGZIP(), []int{1} +} + +type MsgCreateClient struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + ConsensusState *types.ConsensusState `protobuf:"bytes,3,opt,name=consensusState,proto3" json:"consensusState,omitempty"` + ValidatorSet *types.ValidatorSet `protobuf:"bytes,4,opt,name=validatorSet,proto3" json:"validatorSet,omitempty"` + UnbondingPeriod int64 `protobuf:"varint,5,opt,name=unbondingPeriod,proto3" json:"unbondingPeriod,omitempty"` + RevisionHeight uint64 `protobuf:"varint,6,opt,name=revisionHeight,proto3" json:"revisionHeight,omitempty"` +} + +func (x *MsgCreateClient) Reset() { + *x = MsgCreateClient{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_tx_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateClient) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateClient) ProtoMessage() {} + +// Deprecated: Use MsgCreateClient.ProtoReflect.Descriptor instead. +func (*MsgCreateClient) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_tx_proto_rawDescGZIP(), []int{2} +} + +func (x *MsgCreateClient) GetCreator() string { + if x != nil { + return x.Creator + } + return "" +} + +func (x *MsgCreateClient) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *MsgCreateClient) GetConsensusState() *types.ConsensusState { + if x != nil { + return x.ConsensusState + } + return nil +} + +func (x *MsgCreateClient) GetValidatorSet() *types.ValidatorSet { + if x != nil { + return x.ValidatorSet + } + return nil +} + +func (x *MsgCreateClient) GetUnbondingPeriod() int64 { + if x != nil { + return x.UnbondingPeriod + } + return 0 +} + +func (x *MsgCreateClient) GetRevisionHeight() uint64 { + if x != nil { + return x.RevisionHeight + } + return 0 +} + +type MsgCreateClientResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClientID string `protobuf:"bytes,1,opt,name=clientID,proto3" json:"clientID,omitempty"` +} + +func (x *MsgCreateClientResponse) Reset() { + *x = MsgCreateClientResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_tx_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateClientResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateClientResponse) ProtoMessage() {} + +// Deprecated: Use MsgCreateClientResponse.ProtoReflect.Descriptor instead. +func (*MsgCreateClientResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_tx_proto_rawDescGZIP(), []int{3} +} + +func (x *MsgCreateClientResponse) GetClientID() string { + if x != nil { + return x.ClientID + } + return "" +} + +var File_network_monitoringc_v1_tx_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_tx_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, + 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x73, 0x67, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, 0x01, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x3a, 0x38, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x25, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x78, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x4d, 0x73, + 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, + 0x17, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd5, 0x02, 0x0a, 0x0f, 0x4d, 0x73, 0x67, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x4b, 0x0a, 0x0e, + 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x65, + 0x6e, 0x73, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, + 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x3a, 0x0c, 0x82, 0xe7, 0xb0, 0x2a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, + 0x22, 0x35, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x32, 0xe0, 0x01, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, + 0x68, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x1a, 0x2f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xe3, 0x01, 0x0a, 0x1a, 0x63, + 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, + 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, + 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_v1_tx_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_tx_proto_rawDescData = file_network_monitoringc_v1_tx_proto_rawDesc +) + +func file_network_monitoringc_v1_tx_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_tx_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_tx_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_tx_proto_rawDescData) + }) + return file_network_monitoringc_v1_tx_proto_rawDescData +} + +var file_network_monitoringc_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_network_monitoringc_v1_tx_proto_goTypes = []interface{}{ + (*MsgUpdateParams)(nil), // 0: network.monitoringc.v1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 1: network.monitoringc.v1.MsgUpdateParamsResponse + (*MsgCreateClient)(nil), // 2: network.monitoringc.v1.MsgCreateClient + (*MsgCreateClientResponse)(nil), // 3: network.monitoringc.v1.MsgCreateClientResponse + (*Params)(nil), // 4: network.monitoringc.v1.Params + (*types.ConsensusState)(nil), // 5: network.types.ConsensusState + (*types.ValidatorSet)(nil), // 6: network.types.ValidatorSet +} +var file_network_monitoringc_v1_tx_proto_depIdxs = []int32{ + 4, // 0: network.monitoringc.v1.MsgUpdateParams.params:type_name -> network.monitoringc.v1.Params + 5, // 1: network.monitoringc.v1.MsgCreateClient.consensusState:type_name -> network.types.ConsensusState + 6, // 2: network.monitoringc.v1.MsgCreateClient.validatorSet:type_name -> network.types.ValidatorSet + 0, // 3: network.monitoringc.v1.Msg.UpdateParams:input_type -> network.monitoringc.v1.MsgUpdateParams + 2, // 4: network.monitoringc.v1.Msg.CreateClient:input_type -> network.monitoringc.v1.MsgCreateClient + 1, // 5: network.monitoringc.v1.Msg.UpdateParams:output_type -> network.monitoringc.v1.MsgUpdateParamsResponse + 3, // 6: network.monitoringc.v1.Msg.CreateClient:output_type -> network.monitoringc.v1.MsgCreateClientResponse + 5, // [5:7] is the sub-list for method output_type + 3, // [3:5] 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 +} + +func init() { file_network_monitoringc_v1_tx_proto_init() } +func file_network_monitoringc_v1_tx_proto_init() { + if File_network_monitoringc_v1_tx_proto != nil { + return + } + file_network_monitoringc_v1_params_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_tx_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_tx_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_tx_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgCreateClient); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringc_v1_tx_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgCreateClientResponse); 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_network_monitoringc_v1_tx_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_monitoringc_v1_tx_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_tx_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_tx_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_tx_proto = out.File + file_network_monitoringc_v1_tx_proto_rawDesc = nil + file_network_monitoringc_v1_tx_proto_goTypes = nil + file_network_monitoringc_v1_tx_proto_depIdxs = nil +} diff --git a/api/network/monitoringc/v1/tx_grpc.pb.go b/api/network/monitoringc/v1/tx_grpc.pb.go new file mode 100644 index 00000000..866b2664 --- /dev/null +++ b/api/network/monitoringc/v1/tx_grpc.pb.go @@ -0,0 +1,150 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/monitoringc/v1/tx.proto + +package monitoringcv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Msg_UpdateParams_FullMethodName = "/network.monitoringc.v1.Msg/UpdateParams" + Msg_CreateClient_FullMethodName = "/network.monitoringc.v1.Msg/CreateClient" +) + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + CreateClient(ctx context.Context, in *MsgCreateClient, opts ...grpc.CallOption) (*MsgCreateClientResponse, error) +} + +type msgClient struct { + cc grpc.ClientConnInterface +} + +func NewMsgClient(cc grpc.ClientConnInterface) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, Msg_UpdateParams_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CreateClient(ctx context.Context, in *MsgCreateClient, opts ...grpc.CallOption) (*MsgCreateClientResponse, error) { + out := new(MsgCreateClientResponse) + err := c.cc.Invoke(ctx, Msg_CreateClient_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +// All implementations must embed UnimplementedMsgServer +// for forward compatibility +type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + CreateClient(context.Context, *MsgCreateClient) (*MsgCreateClientResponse, error) + mustEmbedUnimplementedMsgServer() +} + +// UnimplementedMsgServer must be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} +func (UnimplementedMsgServer) CreateClient(context.Context, *MsgCreateClient) (*MsgCreateClientResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateClient not implemented") +} +func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} + +// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MsgServer will +// result in compilation errors. +type UnsafeMsgServer interface { + mustEmbedUnimplementedMsgServer() +} + +func RegisterMsgServer(s grpc.ServiceRegistrar, srv MsgServer) { + s.RegisterService(&Msg_ServiceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateParams_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CreateClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateClient) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateClient(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_CreateClient_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateClient(ctx, req.(*MsgCreateClient)) + } + return interceptor(ctx, in, info, handler) +} + +// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Msg_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.monitoringc.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + { + MethodName: "CreateClient", + Handler: _Msg_CreateClient_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/monitoringc/v1/tx.proto", +} diff --git a/api/network/monitoringc/v1/verified_client_id.pulsar.go b/api/network/monitoringc/v1/verified_client_id.pulsar.go new file mode 100644 index 00000000..84fddb9d --- /dev/null +++ b/api/network/monitoringc/v1/verified_client_id.pulsar.go @@ -0,0 +1,691 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringcv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_VerifiedClientID_2_list)(nil) + +type _VerifiedClientID_2_list struct { + list *[]string +} + +func (x *_VerifiedClientID_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_VerifiedClientID_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_VerifiedClientID_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_VerifiedClientID_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_VerifiedClientID_2_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message VerifiedClientID at list field ClientIDs as it is not of Message kind")) +} + +func (x *_VerifiedClientID_2_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_VerifiedClientID_2_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_VerifiedClientID_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_VerifiedClientID protoreflect.MessageDescriptor + fd_VerifiedClientID_launchID protoreflect.FieldDescriptor + fd_VerifiedClientID_clientIDs protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringc_v1_verified_client_id_proto_init() + md_VerifiedClientID = File_network_monitoringc_v1_verified_client_id_proto.Messages().ByName("VerifiedClientID") + fd_VerifiedClientID_launchID = md_VerifiedClientID.Fields().ByName("launchID") + fd_VerifiedClientID_clientIDs = md_VerifiedClientID.Fields().ByName("clientIDs") +} + +var _ protoreflect.Message = (*fastReflection_VerifiedClientID)(nil) + +type fastReflection_VerifiedClientID VerifiedClientID + +func (x *VerifiedClientID) ProtoReflect() protoreflect.Message { + return (*fastReflection_VerifiedClientID)(x) +} + +func (x *VerifiedClientID) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringc_v1_verified_client_id_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) +} + +var _fastReflection_VerifiedClientID_messageType fastReflection_VerifiedClientID_messageType +var _ protoreflect.MessageType = fastReflection_VerifiedClientID_messageType{} + +type fastReflection_VerifiedClientID_messageType struct{} + +func (x fastReflection_VerifiedClientID_messageType) Zero() protoreflect.Message { + return (*fastReflection_VerifiedClientID)(nil) +} +func (x fastReflection_VerifiedClientID_messageType) New() protoreflect.Message { + return new(fastReflection_VerifiedClientID) +} +func (x fastReflection_VerifiedClientID_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_VerifiedClientID +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_VerifiedClientID) Descriptor() protoreflect.MessageDescriptor { + return md_VerifiedClientID +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_VerifiedClientID) Type() protoreflect.MessageType { + return _fastReflection_VerifiedClientID_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_VerifiedClientID) New() protoreflect.Message { + return new(fastReflection_VerifiedClientID) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_VerifiedClientID) Interface() protoreflect.ProtoMessage { + return (*VerifiedClientID)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_VerifiedClientID) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_VerifiedClientID_launchID, value) { + return + } + } + if len(x.ClientIDs) != 0 { + value := protoreflect.ValueOfList(&_VerifiedClientID_2_list{list: &x.ClientIDs}) + if !f(fd_VerifiedClientID_clientIDs, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_VerifiedClientID) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringc.v1.VerifiedClientID.launchID": + return x.LaunchID != uint64(0) + case "network.monitoringc.v1.VerifiedClientID.clientIDs": + return len(x.ClientIDs) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.VerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.VerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VerifiedClientID) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringc.v1.VerifiedClientID.launchID": + x.LaunchID = uint64(0) + case "network.monitoringc.v1.VerifiedClientID.clientIDs": + x.ClientIDs = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.VerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.VerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_VerifiedClientID) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringc.v1.VerifiedClientID.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.monitoringc.v1.VerifiedClientID.clientIDs": + if len(x.ClientIDs) == 0 { + return protoreflect.ValueOfList(&_VerifiedClientID_2_list{}) + } + listValue := &_VerifiedClientID_2_list{list: &x.ClientIDs} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.VerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.VerifiedClientID does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VerifiedClientID) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringc.v1.VerifiedClientID.launchID": + x.LaunchID = value.Uint() + case "network.monitoringc.v1.VerifiedClientID.clientIDs": + lv := value.List() + clv := lv.(*_VerifiedClientID_2_list) + x.ClientIDs = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.VerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.VerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VerifiedClientID) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.VerifiedClientID.clientIDs": + if x.ClientIDs == nil { + x.ClientIDs = []string{} + } + value := &_VerifiedClientID_2_list{list: &x.ClientIDs} + return protoreflect.ValueOfList(value) + case "network.monitoringc.v1.VerifiedClientID.launchID": + panic(fmt.Errorf("field launchID of message network.monitoringc.v1.VerifiedClientID is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.VerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.VerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_VerifiedClientID) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringc.v1.VerifiedClientID.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.monitoringc.v1.VerifiedClientID.clientIDs": + list := []string{} + return protoreflect.ValueOfList(&_VerifiedClientID_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringc.v1.VerifiedClientID")) + } + panic(fmt.Errorf("message network.monitoringc.v1.VerifiedClientID does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_VerifiedClientID) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringc.v1.VerifiedClientID", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_VerifiedClientID) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_VerifiedClientID) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_VerifiedClientID) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_VerifiedClientID) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*VerifiedClientID) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if len(x.ClientIDs) > 0 { + for _, s := range x.ClientIDs { + l = len(s) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*VerifiedClientID) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ClientIDs) > 0 { + for iNdEx := len(x.ClientIDs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.ClientIDs[iNdEx]) + copy(dAtA[i:], x.ClientIDs[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ClientIDs[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*VerifiedClientID) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: VerifiedClientID: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: VerifiedClientID: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ClientIDs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ClientIDs = append(x.ClientIDs, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringc/v1/verified_client_id.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type VerifiedClientID struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + ClientIDs []string `protobuf:"bytes,2,rep,name=clientIDs,proto3" json:"clientIDs,omitempty"` +} + +func (x *VerifiedClientID) Reset() { + *x = VerifiedClientID{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringc_v1_verified_client_id_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifiedClientID) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifiedClientID) ProtoMessage() {} + +// Deprecated: Use VerifiedClientID.ProtoReflect.Descriptor instead. +func (*VerifiedClientID) Descriptor() ([]byte, []int) { + return file_network_monitoringc_v1_verified_client_id_proto_rawDescGZIP(), []int{0} +} + +func (x *VerifiedClientID) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *VerifiedClientID) GetClientIDs() []string { + if x != nil { + return x.ClientIDs + } + return nil +} + +var File_network_monitoringc_v1_verified_client_id_proto protoreflect.FileDescriptor + +var file_network_monitoringc_v1_verified_client_id_proto_rawDesc = []byte{ + 0x0a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x22, 0x4c, 0x0a, 0x10, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1a, 0x0a, + 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x42, 0xf1, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x63, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, + 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x63, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x63, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x63, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringc_v1_verified_client_id_proto_rawDescOnce sync.Once + file_network_monitoringc_v1_verified_client_id_proto_rawDescData = file_network_monitoringc_v1_verified_client_id_proto_rawDesc +) + +func file_network_monitoringc_v1_verified_client_id_proto_rawDescGZIP() []byte { + file_network_monitoringc_v1_verified_client_id_proto_rawDescOnce.Do(func() { + file_network_monitoringc_v1_verified_client_id_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringc_v1_verified_client_id_proto_rawDescData) + }) + return file_network_monitoringc_v1_verified_client_id_proto_rawDescData +} + +var file_network_monitoringc_v1_verified_client_id_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringc_v1_verified_client_id_proto_goTypes = []interface{}{ + (*VerifiedClientID)(nil), // 0: network.monitoringc.v1.VerifiedClientID +} +var file_network_monitoringc_v1_verified_client_id_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 +} + +func init() { file_network_monitoringc_v1_verified_client_id_proto_init() } +func file_network_monitoringc_v1_verified_client_id_proto_init() { + if File_network_monitoringc_v1_verified_client_id_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringc_v1_verified_client_id_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifiedClientID); 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_network_monitoringc_v1_verified_client_id_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringc_v1_verified_client_id_proto_goTypes, + DependencyIndexes: file_network_monitoringc_v1_verified_client_id_proto_depIdxs, + MessageInfos: file_network_monitoringc_v1_verified_client_id_proto_msgTypes, + }.Build() + File_network_monitoringc_v1_verified_client_id_proto = out.File + file_network_monitoringc_v1_verified_client_id_proto_rawDesc = nil + file_network_monitoringc_v1_verified_client_id_proto_goTypes = nil + file_network_monitoringc_v1_verified_client_id_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/module/v1/module.pulsar.go b/api/network/monitoringp/module/v1/module.pulsar.go new file mode 100644 index 00000000..90847d30 --- /dev/null +++ b/api/network/monitoringp/module/v1/module.pulsar.go @@ -0,0 +1,582 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package modulev1 + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Module protoreflect.MessageDescriptor + fd_Module_authority protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_module_v1_module_proto_init() + md_Module = File_network_monitoringp_module_v1_module_proto.Messages().ByName("Module") + fd_Module_authority = md_Module.Fields().ByName("authority") +} + +var _ protoreflect.Message = (*fastReflection_Module)(nil) + +type fastReflection_Module Module + +func (x *Module) ProtoReflect() protoreflect.Message { + return (*fastReflection_Module)(x) +} + +func (x *Module) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_module_v1_module_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) +} + +var _fastReflection_Module_messageType fastReflection_Module_messageType +var _ protoreflect.MessageType = fastReflection_Module_messageType{} + +type fastReflection_Module_messageType struct{} + +func (x fastReflection_Module_messageType) Zero() protoreflect.Message { + return (*fastReflection_Module)(nil) +} +func (x fastReflection_Module_messageType) New() protoreflect.Message { + return new(fastReflection_Module) +} +func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Module) Type() protoreflect.MessageType { + return _fastReflection_Module_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Module) New() protoreflect.Message { + return new(fastReflection_Module) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage { + return (*Module)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_Module_authority, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.module.v1.Module.authority": + return x.Authority != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringp.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.module.v1.Module.authority": + x.Authority = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringp.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.module.v1.Module.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringp.module.v1.Module does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.module.v1.Module.authority": + x.Authority = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringp.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.module.v1.Module.authority": + panic(fmt.Errorf("field authority of message network.monitoringp.module.v1.Module is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringp.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.module.v1.Module.authority": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.module.v1.Module")) + } + panic(fmt.Errorf("message network.monitoringp.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.module.v1.Module", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Module) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/module/v1/module.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Module is the config object for the module. +type Module struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (x *Module) Reset() { + *x = Module{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_module_v1_module_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Module) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Module) ProtoMessage() {} + +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { + return file_network_monitoringp_module_v1_module_proto_rawDescGZIP(), []int{0} +} + +func (x *Module) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +var File_network_monitoringp_module_v1_module_proto protoreflect.FileDescriptor + +var file_network_monitoringp_module_v1_module_proto_rawDesc = []byte{ + 0x0a, 0x2a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x57, 0x0a, + 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x2f, 0xba, 0xc0, 0x96, 0xda, 0x01, 0x29, 0x0a, 0x27, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x42, 0x8d, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x70, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x44, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x4d, 0xaa, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x29, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_module_v1_module_proto_rawDescOnce sync.Once + file_network_monitoringp_module_v1_module_proto_rawDescData = file_network_monitoringp_module_v1_module_proto_rawDesc +) + +func file_network_monitoringp_module_v1_module_proto_rawDescGZIP() []byte { + file_network_monitoringp_module_v1_module_proto_rawDescOnce.Do(func() { + file_network_monitoringp_module_v1_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_module_v1_module_proto_rawDescData) + }) + return file_network_monitoringp_module_v1_module_proto_rawDescData +} + +var file_network_monitoringp_module_v1_module_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringp_module_v1_module_proto_goTypes = []interface{}{ + (*Module)(nil), // 0: network.monitoringp.module.v1.Module +} +var file_network_monitoringp_module_v1_module_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 +} + +func init() { file_network_monitoringp_module_v1_module_proto_init() } +func file_network_monitoringp_module_v1_module_proto_init() { + if File_network_monitoringp_module_v1_module_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_module_v1_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Module); 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_network_monitoringp_module_v1_module_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringp_module_v1_module_proto_goTypes, + DependencyIndexes: file_network_monitoringp_module_v1_module_proto_depIdxs, + MessageInfos: file_network_monitoringp_module_v1_module_proto_msgTypes, + }.Build() + File_network_monitoringp_module_v1_module_proto = out.File + file_network_monitoringp_module_v1_module_proto_rawDesc = nil + file_network_monitoringp_module_v1_module_proto_goTypes = nil + file_network_monitoringp_module_v1_module_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/connection_channel_id.pulsar.go b/api/network/monitoringp/v1/connection_channel_id.pulsar.go new file mode 100644 index 00000000..4918cfed --- /dev/null +++ b/api/network/monitoringp/v1/connection_channel_id.pulsar.go @@ -0,0 +1,573 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringpv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_ConnectionChannelID protoreflect.MessageDescriptor + fd_ConnectionChannelID_channelID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_connection_channel_id_proto_init() + md_ConnectionChannelID = File_network_monitoringp_v1_connection_channel_id_proto.Messages().ByName("ConnectionChannelID") + fd_ConnectionChannelID_channelID = md_ConnectionChannelID.Fields().ByName("channelID") +} + +var _ protoreflect.Message = (*fastReflection_ConnectionChannelID)(nil) + +type fastReflection_ConnectionChannelID ConnectionChannelID + +func (x *ConnectionChannelID) ProtoReflect() protoreflect.Message { + return (*fastReflection_ConnectionChannelID)(x) +} + +func (x *ConnectionChannelID) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_connection_channel_id_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) +} + +var _fastReflection_ConnectionChannelID_messageType fastReflection_ConnectionChannelID_messageType +var _ protoreflect.MessageType = fastReflection_ConnectionChannelID_messageType{} + +type fastReflection_ConnectionChannelID_messageType struct{} + +func (x fastReflection_ConnectionChannelID_messageType) Zero() protoreflect.Message { + return (*fastReflection_ConnectionChannelID)(nil) +} +func (x fastReflection_ConnectionChannelID_messageType) New() protoreflect.Message { + return new(fastReflection_ConnectionChannelID) +} +func (x fastReflection_ConnectionChannelID_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ConnectionChannelID +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ConnectionChannelID) Descriptor() protoreflect.MessageDescriptor { + return md_ConnectionChannelID +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ConnectionChannelID) Type() protoreflect.MessageType { + return _fastReflection_ConnectionChannelID_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ConnectionChannelID) New() protoreflect.Message { + return new(fastReflection_ConnectionChannelID) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ConnectionChannelID) Interface() protoreflect.ProtoMessage { + return (*ConnectionChannelID)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ConnectionChannelID) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ChannelID != "" { + value := protoreflect.ValueOfString(x.ChannelID) + if !f(fd_ConnectionChannelID_channelID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ConnectionChannelID) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.ConnectionChannelID.channelID": + return x.ChannelID != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConnectionChannelID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConnectionChannelID does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConnectionChannelID) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.ConnectionChannelID.channelID": + x.ChannelID = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConnectionChannelID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConnectionChannelID does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ConnectionChannelID) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.ConnectionChannelID.channelID": + value := x.ChannelID + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConnectionChannelID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConnectionChannelID does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConnectionChannelID) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.ConnectionChannelID.channelID": + x.ChannelID = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConnectionChannelID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConnectionChannelID does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConnectionChannelID) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.ConnectionChannelID.channelID": + panic(fmt.Errorf("field channelID of message network.monitoringp.v1.ConnectionChannelID is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConnectionChannelID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConnectionChannelID does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ConnectionChannelID) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.ConnectionChannelID.channelID": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConnectionChannelID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConnectionChannelID does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ConnectionChannelID) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.ConnectionChannelID", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ConnectionChannelID) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConnectionChannelID) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ConnectionChannelID) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ConnectionChannelID) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ConnectionChannelID) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ChannelID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ConnectionChannelID) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ChannelID) > 0 { + i -= len(x.ChannelID) + copy(dAtA[i:], x.ChannelID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ChannelID))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ConnectionChannelID) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ConnectionChannelID: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ConnectionChannelID: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ChannelID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ChannelID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/v1/connection_channel_id.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ConnectionChannelID struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChannelID string `protobuf:"bytes,1,opt,name=channelID,proto3" json:"channelID,omitempty"` +} + +func (x *ConnectionChannelID) Reset() { + *x = ConnectionChannelID{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_connection_channel_id_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConnectionChannelID) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnectionChannelID) ProtoMessage() {} + +// Deprecated: Use ConnectionChannelID.ProtoReflect.Descriptor instead. +func (*ConnectionChannelID) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_connection_channel_id_proto_rawDescGZIP(), []int{0} +} + +func (x *ConnectionChannelID) GetChannelID() string { + if x != nil { + return x.ChannelID + } + return "" +} + +var File_network_monitoringp_v1_connection_channel_id_proto protoreflect.FileDescriptor + +var file_network_monitoringp_v1_connection_channel_id_proto_rawDesc = []byte{ + 0x0a, 0x32, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x22, 0x33, 0x0a, 0x13, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, + 0x44, 0x42, 0xf4, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, + 0x42, 0x18, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, + 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x56, 0x31, 0xca, + 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_v1_connection_channel_id_proto_rawDescOnce sync.Once + file_network_monitoringp_v1_connection_channel_id_proto_rawDescData = file_network_monitoringp_v1_connection_channel_id_proto_rawDesc +) + +func file_network_monitoringp_v1_connection_channel_id_proto_rawDescGZIP() []byte { + file_network_monitoringp_v1_connection_channel_id_proto_rawDescOnce.Do(func() { + file_network_monitoringp_v1_connection_channel_id_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_v1_connection_channel_id_proto_rawDescData) + }) + return file_network_monitoringp_v1_connection_channel_id_proto_rawDescData +} + +var file_network_monitoringp_v1_connection_channel_id_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringp_v1_connection_channel_id_proto_goTypes = []interface{}{ + (*ConnectionChannelID)(nil), // 0: network.monitoringp.v1.ConnectionChannelID +} +var file_network_monitoringp_v1_connection_channel_id_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 +} + +func init() { file_network_monitoringp_v1_connection_channel_id_proto_init() } +func file_network_monitoringp_v1_connection_channel_id_proto_init() { + if File_network_monitoringp_v1_connection_channel_id_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_v1_connection_channel_id_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConnectionChannelID); 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_network_monitoringp_v1_connection_channel_id_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringp_v1_connection_channel_id_proto_goTypes, + DependencyIndexes: file_network_monitoringp_v1_connection_channel_id_proto_depIdxs, + MessageInfos: file_network_monitoringp_v1_connection_channel_id_proto_msgTypes, + }.Build() + File_network_monitoringp_v1_connection_channel_id_proto = out.File + file_network_monitoringp_v1_connection_channel_id_proto_rawDesc = nil + file_network_monitoringp_v1_connection_channel_id_proto_goTypes = nil + file_network_monitoringp_v1_connection_channel_id_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/consumer_client_id.pulsar.go b/api/network/monitoringp/v1/consumer_client_id.pulsar.go new file mode 100644 index 00000000..21eb51f3 --- /dev/null +++ b/api/network/monitoringp/v1/consumer_client_id.pulsar.go @@ -0,0 +1,573 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringpv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_ConsumerClientID protoreflect.MessageDescriptor + fd_ConsumerClientID_clientID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_consumer_client_id_proto_init() + md_ConsumerClientID = File_network_monitoringp_v1_consumer_client_id_proto.Messages().ByName("ConsumerClientID") + fd_ConsumerClientID_clientID = md_ConsumerClientID.Fields().ByName("clientID") +} + +var _ protoreflect.Message = (*fastReflection_ConsumerClientID)(nil) + +type fastReflection_ConsumerClientID ConsumerClientID + +func (x *ConsumerClientID) ProtoReflect() protoreflect.Message { + return (*fastReflection_ConsumerClientID)(x) +} + +func (x *ConsumerClientID) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_consumer_client_id_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) +} + +var _fastReflection_ConsumerClientID_messageType fastReflection_ConsumerClientID_messageType +var _ protoreflect.MessageType = fastReflection_ConsumerClientID_messageType{} + +type fastReflection_ConsumerClientID_messageType struct{} + +func (x fastReflection_ConsumerClientID_messageType) Zero() protoreflect.Message { + return (*fastReflection_ConsumerClientID)(nil) +} +func (x fastReflection_ConsumerClientID_messageType) New() protoreflect.Message { + return new(fastReflection_ConsumerClientID) +} +func (x fastReflection_ConsumerClientID_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ConsumerClientID +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ConsumerClientID) Descriptor() protoreflect.MessageDescriptor { + return md_ConsumerClientID +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ConsumerClientID) Type() protoreflect.MessageType { + return _fastReflection_ConsumerClientID_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ConsumerClientID) New() protoreflect.Message { + return new(fastReflection_ConsumerClientID) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ConsumerClientID) Interface() protoreflect.ProtoMessage { + return (*ConsumerClientID)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ConsumerClientID) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ClientID != "" { + value := protoreflect.ValueOfString(x.ClientID) + if !f(fd_ConsumerClientID_clientID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ConsumerClientID) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.ConsumerClientID.clientID": + return x.ClientID != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConsumerClientID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConsumerClientID does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsumerClientID) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.ConsumerClientID.clientID": + x.ClientID = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConsumerClientID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConsumerClientID does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ConsumerClientID) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.ConsumerClientID.clientID": + value := x.ClientID + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConsumerClientID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConsumerClientID does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsumerClientID) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.ConsumerClientID.clientID": + x.ClientID = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConsumerClientID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConsumerClientID does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsumerClientID) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.ConsumerClientID.clientID": + panic(fmt.Errorf("field clientID of message network.monitoringp.v1.ConsumerClientID is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConsumerClientID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConsumerClientID does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ConsumerClientID) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.ConsumerClientID.clientID": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.ConsumerClientID")) + } + panic(fmt.Errorf("message network.monitoringp.v1.ConsumerClientID does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ConsumerClientID) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.ConsumerClientID", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ConsumerClientID) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsumerClientID) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ConsumerClientID) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ConsumerClientID) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ConsumerClientID) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ClientID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ConsumerClientID) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ClientID) > 0 { + i -= len(x.ClientID) + copy(dAtA[i:], x.ClientID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ClientID))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ConsumerClientID) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ConsumerClientID: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ConsumerClientID: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ClientID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/v1/consumer_client_id.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ConsumerClientID struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClientID string `protobuf:"bytes,1,opt,name=clientID,proto3" json:"clientID,omitempty"` +} + +func (x *ConsumerClientID) Reset() { + *x = ConsumerClientID{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_consumer_client_id_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConsumerClientID) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConsumerClientID) ProtoMessage() {} + +// Deprecated: Use ConsumerClientID.ProtoReflect.Descriptor instead. +func (*ConsumerClientID) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_consumer_client_id_proto_rawDescGZIP(), []int{0} +} + +func (x *ConsumerClientID) GetClientID() string { + if x != nil { + return x.ClientID + } + return "" +} + +var File_network_monitoringp_v1_consumer_client_id_proto protoreflect.FileDescriptor + +var file_network_monitoringp_v1_consumer_client_id_proto_rawDesc = []byte{ + 0x0a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x22, 0x2e, 0x0a, 0x10, 0x43, 0x6f, 0x6e, + 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x42, 0xf1, 0x01, 0x0a, 0x1a, 0x63, 0x6f, + 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, + 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, + 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x70, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_v1_consumer_client_id_proto_rawDescOnce sync.Once + file_network_monitoringp_v1_consumer_client_id_proto_rawDescData = file_network_monitoringp_v1_consumer_client_id_proto_rawDesc +) + +func file_network_monitoringp_v1_consumer_client_id_proto_rawDescGZIP() []byte { + file_network_monitoringp_v1_consumer_client_id_proto_rawDescOnce.Do(func() { + file_network_monitoringp_v1_consumer_client_id_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_v1_consumer_client_id_proto_rawDescData) + }) + return file_network_monitoringp_v1_consumer_client_id_proto_rawDescData +} + +var file_network_monitoringp_v1_consumer_client_id_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringp_v1_consumer_client_id_proto_goTypes = []interface{}{ + (*ConsumerClientID)(nil), // 0: network.monitoringp.v1.ConsumerClientID +} +var file_network_monitoringp_v1_consumer_client_id_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 +} + +func init() { file_network_monitoringp_v1_consumer_client_id_proto_init() } +func file_network_monitoringp_v1_consumer_client_id_proto_init() { + if File_network_monitoringp_v1_consumer_client_id_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_v1_consumer_client_id_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConsumerClientID); 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_network_monitoringp_v1_consumer_client_id_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringp_v1_consumer_client_id_proto_goTypes, + DependencyIndexes: file_network_monitoringp_v1_consumer_client_id_proto_depIdxs, + MessageInfos: file_network_monitoringp_v1_consumer_client_id_proto_msgTypes, + }.Build() + File_network_monitoringp_v1_consumer_client_id_proto = out.File + file_network_monitoringp_v1_consumer_client_id_proto_rawDesc = nil + file_network_monitoringp_v1_consumer_client_id_proto_goTypes = nil + file_network_monitoringp_v1_consumer_client_id_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/genesis.pulsar.go b/api/network/monitoringp/v1/genesis.pulsar.go new file mode 100644 index 00000000..a1780240 --- /dev/null +++ b/api/network/monitoringp/v1/genesis.pulsar.go @@ -0,0 +1,970 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringpv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_GenesisState protoreflect.MessageDescriptor + fd_GenesisState_params protoreflect.FieldDescriptor + fd_GenesisState_portID protoreflect.FieldDescriptor + fd_GenesisState_monitoringInfo protoreflect.FieldDescriptor + fd_GenesisState_connectionChannelID protoreflect.FieldDescriptor + fd_GenesisState_consumerClientID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_genesis_proto_init() + md_GenesisState = File_network_monitoringp_v1_genesis_proto.Messages().ByName("GenesisState") + fd_GenesisState_params = md_GenesisState.Fields().ByName("params") + fd_GenesisState_portID = md_GenesisState.Fields().ByName("portID") + fd_GenesisState_monitoringInfo = md_GenesisState.Fields().ByName("monitoringInfo") + fd_GenesisState_connectionChannelID = md_GenesisState.Fields().ByName("connectionChannelID") + fd_GenesisState_consumerClientID = md_GenesisState.Fields().ByName("consumerClientID") +} + +var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) + +type fastReflection_GenesisState GenesisState + +func (x *GenesisState) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisState)(x) +} + +func (x *GenesisState) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_genesis_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) +} + +var _fastReflection_GenesisState_messageType fastReflection_GenesisState_messageType +var _ protoreflect.MessageType = fastReflection_GenesisState_messageType{} + +type fastReflection_GenesisState_messageType struct{} + +func (x fastReflection_GenesisState_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisState)(nil) +} +func (x fastReflection_GenesisState_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} +func (x fastReflection_GenesisState_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisState) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisState) Type() protoreflect.MessageType { + return _fastReflection_GenesisState_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisState) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisState) Interface() protoreflect.ProtoMessage { + return (*GenesisState)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_GenesisState_params, value) { + return + } + } + if x.PortID != "" { + value := protoreflect.ValueOfString(x.PortID) + if !f(fd_GenesisState_portID, value) { + return + } + } + if x.MonitoringInfo != nil { + value := protoreflect.ValueOfMessage(x.MonitoringInfo.ProtoReflect()) + if !f(fd_GenesisState_monitoringInfo, value) { + return + } + } + if x.ConnectionChannelID != nil { + value := protoreflect.ValueOfMessage(x.ConnectionChannelID.ProtoReflect()) + if !f(fd_GenesisState_connectionChannelID, value) { + return + } + } + if x.ConsumerClientID != nil { + value := protoreflect.ValueOfMessage(x.ConsumerClientID.ProtoReflect()) + if !f(fd_GenesisState_consumerClientID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.GenesisState.params": + return x.Params != nil + case "network.monitoringp.v1.GenesisState.portID": + return x.PortID != "" + case "network.monitoringp.v1.GenesisState.monitoringInfo": + return x.MonitoringInfo != nil + case "network.monitoringp.v1.GenesisState.connectionChannelID": + return x.ConnectionChannelID != nil + case "network.monitoringp.v1.GenesisState.consumerClientID": + return x.ConsumerClientID != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringp.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.GenesisState.params": + x.Params = nil + case "network.monitoringp.v1.GenesisState.portID": + x.PortID = "" + case "network.monitoringp.v1.GenesisState.monitoringInfo": + x.MonitoringInfo = nil + case "network.monitoringp.v1.GenesisState.connectionChannelID": + x.ConnectionChannelID = nil + case "network.monitoringp.v1.GenesisState.consumerClientID": + x.ConsumerClientID = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringp.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.GenesisState.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.portID": + value := x.PortID + return protoreflect.ValueOfString(value) + case "network.monitoringp.v1.GenesisState.monitoringInfo": + value := x.MonitoringInfo + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.connectionChannelID": + value := x.ConnectionChannelID + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.consumerClientID": + value := x.ConsumerClientID + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringp.v1.GenesisState does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.GenesisState.params": + x.Params = value.Message().Interface().(*Params) + case "network.monitoringp.v1.GenesisState.portID": + x.PortID = value.Interface().(string) + case "network.monitoringp.v1.GenesisState.monitoringInfo": + x.MonitoringInfo = value.Message().Interface().(*MonitoringInfo) + case "network.monitoringp.v1.GenesisState.connectionChannelID": + x.ConnectionChannelID = value.Message().Interface().(*ConnectionChannelID) + case "network.monitoringp.v1.GenesisState.consumerClientID": + x.ConsumerClientID = value.Message().Interface().(*ConsumerClientID) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringp.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.GenesisState.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.monitoringInfo": + if x.MonitoringInfo == nil { + x.MonitoringInfo = new(MonitoringInfo) + } + return protoreflect.ValueOfMessage(x.MonitoringInfo.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.connectionChannelID": + if x.ConnectionChannelID == nil { + x.ConnectionChannelID = new(ConnectionChannelID) + } + return protoreflect.ValueOfMessage(x.ConnectionChannelID.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.consumerClientID": + if x.ConsumerClientID == nil { + x.ConsumerClientID = new(ConsumerClientID) + } + return protoreflect.ValueOfMessage(x.ConsumerClientID.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.portID": + panic(fmt.Errorf("field portID of message network.monitoringp.v1.GenesisState is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringp.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.GenesisState.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.portID": + return protoreflect.ValueOfString("") + case "network.monitoringp.v1.GenesisState.monitoringInfo": + m := new(MonitoringInfo) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.connectionChannelID": + m := new(ConnectionChannelID) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.monitoringp.v1.GenesisState.consumerClientID": + m := new(ConsumerClientID) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.GenesisState")) + } + panic(fmt.Errorf("message network.monitoringp.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisState) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.GenesisState", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisState) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisState) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.PortID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.MonitoringInfo != nil { + l = options.Size(x.MonitoringInfo) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ConnectionChannelID != nil { + l = options.Size(x.ConnectionChannelID) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ConsumerClientID != nil { + l = options.Size(x.ConsumerClientID) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ConsumerClientID != nil { + encoded, err := options.Marshal(x.ConsumerClientID) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + } + if x.ConnectionChannelID != nil { + encoded, err := options.Marshal(x.ConnectionChannelID) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + if x.MonitoringInfo != nil { + encoded, err := options.Marshal(x.MonitoringInfo) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.PortID) > 0 { + i -= len(x.PortID) + copy(dAtA[i:], x.PortID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PortID))) + i-- + dAtA[i] = 0x12 + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PortID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.PortID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MonitoringInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.MonitoringInfo == nil { + x.MonitoringInfo = &MonitoringInfo{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MonitoringInfo); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConnectionChannelID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ConnectionChannelID == nil { + x.ConnectionChannelID = &ConnectionChannelID{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ConnectionChannelID); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsumerClientID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ConsumerClientID == nil { + x.ConsumerClientID = &ConsumerClientID{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ConsumerClientID); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/v1/genesis.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// GenesisState defines the monitoringp module's genesis state. +type GenesisState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params defines all the parameters of the module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + PortID string `protobuf:"bytes,2,opt,name=portID,proto3" json:"portID,omitempty"` + MonitoringInfo *MonitoringInfo `protobuf:"bytes,3,opt,name=monitoringInfo,proto3" json:"monitoringInfo,omitempty"` + ConnectionChannelID *ConnectionChannelID `protobuf:"bytes,4,opt,name=connectionChannelID,proto3" json:"connectionChannelID,omitempty"` + ConsumerClientID *ConsumerClientID `protobuf:"bytes,5,opt,name=consumerClientID,proto3" json:"consumerClientID,omitempty"` +} + +func (x *GenesisState) Reset() { + *x = GenesisState{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_genesis_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisState) ProtoMessage() {} + +// Deprecated: Use GenesisState.ProtoReflect.Descriptor instead. +func (*GenesisState) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_genesis_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisState) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +func (x *GenesisState) GetPortID() string { + if x != nil { + return x.PortID + } + return "" +} + +func (x *GenesisState) GetMonitoringInfo() *MonitoringInfo { + if x != nil { + return x.MonitoringInfo + } + return nil +} + +func (x *GenesisState) GetConnectionChannelID() *ConnectionChannelID { + if x != nil { + return x.ConnectionChannelID + } + return nil +} + +func (x *GenesisState) GetConsumerClientID() *ConsumerClientID { + if x != nil { + return x.ConsumerClientID + } + return nil +} + +var File_network_monitoringp_v1_genesis_proto protoreflect.FileDescriptor + +var file_network_monitoringp_v1_genesis_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x1a, 0x11, + 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xee, 0x02, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x72, 0x74, 0x49, 0x44, 0x12, 0x4e, 0x0a, 0x0e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x6d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x5d, 0x0a, 0x13, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x12, 0x54, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x10, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, + 0x42, 0xe8, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x42, + 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, + 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x70, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_v1_genesis_proto_rawDescOnce sync.Once + file_network_monitoringp_v1_genesis_proto_rawDescData = file_network_monitoringp_v1_genesis_proto_rawDesc +) + +func file_network_monitoringp_v1_genesis_proto_rawDescGZIP() []byte { + file_network_monitoringp_v1_genesis_proto_rawDescOnce.Do(func() { + file_network_monitoringp_v1_genesis_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_v1_genesis_proto_rawDescData) + }) + return file_network_monitoringp_v1_genesis_proto_rawDescData +} + +var file_network_monitoringp_v1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringp_v1_genesis_proto_goTypes = []interface{}{ + (*GenesisState)(nil), // 0: network.monitoringp.v1.GenesisState + (*Params)(nil), // 1: network.monitoringp.v1.Params + (*MonitoringInfo)(nil), // 2: network.monitoringp.v1.MonitoringInfo + (*ConnectionChannelID)(nil), // 3: network.monitoringp.v1.ConnectionChannelID + (*ConsumerClientID)(nil), // 4: network.monitoringp.v1.ConsumerClientID +} +var file_network_monitoringp_v1_genesis_proto_depIdxs = []int32{ + 1, // 0: network.monitoringp.v1.GenesisState.params:type_name -> network.monitoringp.v1.Params + 2, // 1: network.monitoringp.v1.GenesisState.monitoringInfo:type_name -> network.monitoringp.v1.MonitoringInfo + 3, // 2: network.monitoringp.v1.GenesisState.connectionChannelID:type_name -> network.monitoringp.v1.ConnectionChannelID + 4, // 3: network.monitoringp.v1.GenesisState.consumerClientID:type_name -> network.monitoringp.v1.ConsumerClientID + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] 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_network_monitoringp_v1_genesis_proto_init() } +func file_network_monitoringp_v1_genesis_proto_init() { + if File_network_monitoringp_v1_genesis_proto != nil { + return + } + file_network_monitoringp_v1_connection_channel_id_proto_init() + file_network_monitoringp_v1_consumer_client_id_proto_init() + file_network_monitoringp_v1_monitoring_info_proto_init() + file_network_monitoringp_v1_params_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_v1_genesis_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisState); 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_network_monitoringp_v1_genesis_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringp_v1_genesis_proto_goTypes, + DependencyIndexes: file_network_monitoringp_v1_genesis_proto_depIdxs, + MessageInfos: file_network_monitoringp_v1_genesis_proto_msgTypes, + }.Build() + File_network_monitoringp_v1_genesis_proto = out.File + file_network_monitoringp_v1_genesis_proto_rawDesc = nil + file_network_monitoringp_v1_genesis_proto_goTypes = nil + file_network_monitoringp_v1_genesis_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/monitoring_info.pulsar.go b/api/network/monitoringp/v1/monitoring_info.pulsar.go new file mode 100644 index 00000000..d7e626f8 --- /dev/null +++ b/api/network/monitoringp/v1/monitoring_info.pulsar.go @@ -0,0 +1,662 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringpv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + types "github.com/ignite/network/api/network/types" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MonitoringInfo protoreflect.MessageDescriptor + fd_MonitoringInfo_transmitted protoreflect.FieldDescriptor + fd_MonitoringInfo_signatureCounts protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_monitoring_info_proto_init() + md_MonitoringInfo = File_network_monitoringp_v1_monitoring_info_proto.Messages().ByName("MonitoringInfo") + fd_MonitoringInfo_transmitted = md_MonitoringInfo.Fields().ByName("transmitted") + fd_MonitoringInfo_signatureCounts = md_MonitoringInfo.Fields().ByName("signatureCounts") +} + +var _ protoreflect.Message = (*fastReflection_MonitoringInfo)(nil) + +type fastReflection_MonitoringInfo MonitoringInfo + +func (x *MonitoringInfo) ProtoReflect() protoreflect.Message { + return (*fastReflection_MonitoringInfo)(x) +} + +func (x *MonitoringInfo) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_monitoring_info_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) +} + +var _fastReflection_MonitoringInfo_messageType fastReflection_MonitoringInfo_messageType +var _ protoreflect.MessageType = fastReflection_MonitoringInfo_messageType{} + +type fastReflection_MonitoringInfo_messageType struct{} + +func (x fastReflection_MonitoringInfo_messageType) Zero() protoreflect.Message { + return (*fastReflection_MonitoringInfo)(nil) +} +func (x fastReflection_MonitoringInfo_messageType) New() protoreflect.Message { + return new(fastReflection_MonitoringInfo) +} +func (x fastReflection_MonitoringInfo_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringInfo +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MonitoringInfo) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringInfo +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MonitoringInfo) Type() protoreflect.MessageType { + return _fastReflection_MonitoringInfo_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MonitoringInfo) New() protoreflect.Message { + return new(fastReflection_MonitoringInfo) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MonitoringInfo) Interface() protoreflect.ProtoMessage { + return (*MonitoringInfo)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MonitoringInfo) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Transmitted != false { + value := protoreflect.ValueOfBool(x.Transmitted) + if !f(fd_MonitoringInfo_transmitted, value) { + return + } + } + if x.SignatureCounts != nil { + value := protoreflect.ValueOfMessage(x.SignatureCounts.ProtoReflect()) + if !f(fd_MonitoringInfo_signatureCounts, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MonitoringInfo) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringInfo.transmitted": + return x.Transmitted != false + case "network.monitoringp.v1.MonitoringInfo.signatureCounts": + return x.SignatureCounts != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringInfo")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringInfo does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringInfo) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringInfo.transmitted": + x.Transmitted = false + case "network.monitoringp.v1.MonitoringInfo.signatureCounts": + x.SignatureCounts = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringInfo")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringInfo does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MonitoringInfo) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.MonitoringInfo.transmitted": + value := x.Transmitted + return protoreflect.ValueOfBool(value) + case "network.monitoringp.v1.MonitoringInfo.signatureCounts": + value := x.SignatureCounts + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringInfo")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringInfo does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringInfo) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringInfo.transmitted": + x.Transmitted = value.Bool() + case "network.monitoringp.v1.MonitoringInfo.signatureCounts": + x.SignatureCounts = value.Message().Interface().(*types.SignatureCounts) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringInfo")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringInfo does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringInfo) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringInfo.signatureCounts": + if x.SignatureCounts == nil { + x.SignatureCounts = new(types.SignatureCounts) + } + return protoreflect.ValueOfMessage(x.SignatureCounts.ProtoReflect()) + case "network.monitoringp.v1.MonitoringInfo.transmitted": + panic(fmt.Errorf("field transmitted of message network.monitoringp.v1.MonitoringInfo is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringInfo")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringInfo does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MonitoringInfo) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringInfo.transmitted": + return protoreflect.ValueOfBool(false) + case "network.monitoringp.v1.MonitoringInfo.signatureCounts": + m := new(types.SignatureCounts) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringInfo")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringInfo does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MonitoringInfo) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.MonitoringInfo", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MonitoringInfo) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringInfo) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MonitoringInfo) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MonitoringInfo) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MonitoringInfo) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Transmitted { + n += 2 + } + if x.SignatureCounts != nil { + l = options.Size(x.SignatureCounts) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MonitoringInfo) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.SignatureCounts != nil { + encoded, err := options.Marshal(x.SignatureCounts) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.Transmitted { + i-- + if x.Transmitted { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MonitoringInfo) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Transmitted", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Transmitted = bool(v != 0) + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SignatureCounts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.SignatureCounts == nil { + x.SignatureCounts = &types.SignatureCounts{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.SignatureCounts); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/v1/monitoring_info.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type MonitoringInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Transmitted bool `protobuf:"varint,1,opt,name=transmitted,proto3" json:"transmitted,omitempty"` + SignatureCounts *types.SignatureCounts `protobuf:"bytes,2,opt,name=signatureCounts,proto3" json:"signatureCounts,omitempty"` +} + +func (x *MonitoringInfo) Reset() { + *x = MonitoringInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_monitoring_info_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitoringInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitoringInfo) ProtoMessage() {} + +// Deprecated: Use MonitoringInfo.ProtoReflect.Descriptor instead. +func (*MonitoringInfo) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_monitoring_info_proto_rawDescGZIP(), []int{0} +} + +func (x *MonitoringInfo) GetTransmitted() bool { + if x != nil { + return x.Transmitted + } + return false +} + +func (x *MonitoringInfo) GetSignatureCounts() *types.SignatureCounts { + if x != nil { + return x.SignatureCounts + } + return nil +} + +var File_network_monitoringp_v1_monitoring_info_proto protoreflect.FileDescriptor + +var file_network_monitoringp_v1_monitoring_info_proto_rawDesc = []byte{ + 0x0a, 0x2c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x01, 0x0a, + 0x0e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x20, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x64, 0x12, 0x4e, 0x0a, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x42, 0xef, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, + 0x42, 0x13, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, + 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_v1_monitoring_info_proto_rawDescOnce sync.Once + file_network_monitoringp_v1_monitoring_info_proto_rawDescData = file_network_monitoringp_v1_monitoring_info_proto_rawDesc +) + +func file_network_monitoringp_v1_monitoring_info_proto_rawDescGZIP() []byte { + file_network_monitoringp_v1_monitoring_info_proto_rawDescOnce.Do(func() { + file_network_monitoringp_v1_monitoring_info_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_v1_monitoring_info_proto_rawDescData) + }) + return file_network_monitoringp_v1_monitoring_info_proto_rawDescData +} + +var file_network_monitoringp_v1_monitoring_info_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringp_v1_monitoring_info_proto_goTypes = []interface{}{ + (*MonitoringInfo)(nil), // 0: network.monitoringp.v1.MonitoringInfo + (*types.SignatureCounts)(nil), // 1: network.types.SignatureCounts +} +var file_network_monitoringp_v1_monitoring_info_proto_depIdxs = []int32{ + 1, // 0: network.monitoringp.v1.MonitoringInfo.signatureCounts:type_name -> network.types.SignatureCounts + 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_network_monitoringp_v1_monitoring_info_proto_init() } +func file_network_monitoringp_v1_monitoring_info_proto_init() { + if File_network_monitoringp_v1_monitoring_info_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_v1_monitoring_info_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MonitoringInfo); 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_network_monitoringp_v1_monitoring_info_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringp_v1_monitoring_info_proto_goTypes, + DependencyIndexes: file_network_monitoringp_v1_monitoring_info_proto_depIdxs, + MessageInfos: file_network_monitoringp_v1_monitoring_info_proto_msgTypes, + }.Build() + File_network_monitoringp_v1_monitoring_info_proto = out.File + file_network_monitoringp_v1_monitoring_info_proto_rawDesc = nil + file_network_monitoringp_v1_monitoring_info_proto_goTypes = nil + file_network_monitoringp_v1_monitoring_info_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/packet.pulsar.go b/api/network/monitoringp/v1/packet.pulsar.go new file mode 100644 index 00000000..f407d3f3 --- /dev/null +++ b/api/network/monitoringp/v1/packet.pulsar.go @@ -0,0 +1,1048 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringpv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MonitoringpPacketData protoreflect.MessageDescriptor + fd_MonitoringpPacketData_noData protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_packet_proto_init() + md_MonitoringpPacketData = File_network_monitoringp_v1_packet_proto.Messages().ByName("MonitoringpPacketData") + fd_MonitoringpPacketData_noData = md_MonitoringpPacketData.Fields().ByName("noData") +} + +var _ protoreflect.Message = (*fastReflection_MonitoringpPacketData)(nil) + +type fastReflection_MonitoringpPacketData MonitoringpPacketData + +func (x *MonitoringpPacketData) ProtoReflect() protoreflect.Message { + return (*fastReflection_MonitoringpPacketData)(x) +} + +func (x *MonitoringpPacketData) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_packet_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) +} + +var _fastReflection_MonitoringpPacketData_messageType fastReflection_MonitoringpPacketData_messageType +var _ protoreflect.MessageType = fastReflection_MonitoringpPacketData_messageType{} + +type fastReflection_MonitoringpPacketData_messageType struct{} + +func (x fastReflection_MonitoringpPacketData_messageType) Zero() protoreflect.Message { + return (*fastReflection_MonitoringpPacketData)(nil) +} +func (x fastReflection_MonitoringpPacketData_messageType) New() protoreflect.Message { + return new(fastReflection_MonitoringpPacketData) +} +func (x fastReflection_MonitoringpPacketData_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringpPacketData +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MonitoringpPacketData) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringpPacketData +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MonitoringpPacketData) Type() protoreflect.MessageType { + return _fastReflection_MonitoringpPacketData_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MonitoringpPacketData) New() protoreflect.Message { + return new(fastReflection_MonitoringpPacketData) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MonitoringpPacketData) Interface() protoreflect.ProtoMessage { + return (*MonitoringpPacketData)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MonitoringpPacketData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Packet != nil { + switch o := x.Packet.(type) { + case *MonitoringpPacketData_NoData: + v := o.NoData + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_MonitoringpPacketData_noData, value) { + return + } + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MonitoringpPacketData) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringpPacketData.noData": + if x.Packet == nil { + return false + } else if _, ok := x.Packet.(*MonitoringpPacketData_NoData); ok { + return true + } else { + return false + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringpPacketData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringpPacketData does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringpPacketData) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringpPacketData.noData": + x.Packet = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringpPacketData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringpPacketData does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MonitoringpPacketData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.MonitoringpPacketData.noData": + if x.Packet == nil { + return protoreflect.ValueOfMessage((*NoData)(nil).ProtoReflect()) + } else if v, ok := x.Packet.(*MonitoringpPacketData_NoData); ok { + return protoreflect.ValueOfMessage(v.NoData.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*NoData)(nil).ProtoReflect()) + } + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringpPacketData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringpPacketData does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringpPacketData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringpPacketData.noData": + cv := value.Message().Interface().(*NoData) + x.Packet = &MonitoringpPacketData_NoData{NoData: cv} + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringpPacketData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringpPacketData does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringpPacketData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringpPacketData.noData": + if x.Packet == nil { + value := &NoData{} + oneofValue := &MonitoringpPacketData_NoData{NoData: value} + x.Packet = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Packet.(type) { + case *MonitoringpPacketData_NoData: + return protoreflect.ValueOfMessage(m.NoData.ProtoReflect()) + default: + value := &NoData{} + oneofValue := &MonitoringpPacketData_NoData{NoData: value} + x.Packet = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringpPacketData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringpPacketData does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MonitoringpPacketData) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.MonitoringpPacketData.noData": + value := &NoData{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MonitoringpPacketData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MonitoringpPacketData does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MonitoringpPacketData) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + case "network.monitoringp.v1.MonitoringpPacketData.packet": + if x.Packet == nil { + return nil + } + switch x.Packet.(type) { + case *MonitoringpPacketData_NoData: + return x.Descriptor().Fields().ByName("noData") + } + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.MonitoringpPacketData", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MonitoringpPacketData) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringpPacketData) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MonitoringpPacketData) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MonitoringpPacketData) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MonitoringpPacketData) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + switch x := x.Packet.(type) { + case *MonitoringpPacketData_NoData: + if x == nil { + break + } + l = options.Size(x.NoData) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MonitoringpPacketData) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + switch x := x.Packet.(type) { + case *MonitoringpPacketData_NoData: + encoded, err := options.Marshal(x.NoData) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MonitoringpPacketData) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringpPacketData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringpPacketData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NoData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &NoData{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Packet = &MonitoringpPacketData_NoData{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_NoData protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringp_v1_packet_proto_init() + md_NoData = File_network_monitoringp_v1_packet_proto.Messages().ByName("NoData") +} + +var _ protoreflect.Message = (*fastReflection_NoData)(nil) + +type fastReflection_NoData NoData + +func (x *NoData) ProtoReflect() protoreflect.Message { + return (*fastReflection_NoData)(x) +} + +func (x *NoData) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_packet_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) +} + +var _fastReflection_NoData_messageType fastReflection_NoData_messageType +var _ protoreflect.MessageType = fastReflection_NoData_messageType{} + +type fastReflection_NoData_messageType struct{} + +func (x fastReflection_NoData_messageType) Zero() protoreflect.Message { + return (*fastReflection_NoData)(nil) +} +func (x fastReflection_NoData_messageType) New() protoreflect.Message { + return new(fastReflection_NoData) +} +func (x fastReflection_NoData_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_NoData +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_NoData) Descriptor() protoreflect.MessageDescriptor { + return md_NoData +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_NoData) Type() protoreflect.MessageType { + return _fastReflection_NoData_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_NoData) New() protoreflect.Message { + return new(fastReflection_NoData) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_NoData) Interface() protoreflect.ProtoMessage { + return (*NoData)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_NoData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_NoData) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_NoData) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_NoData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.NoData does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_NoData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_NoData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_NoData) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.NoData")) + } + panic(fmt.Errorf("message network.monitoringp.v1.NoData does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_NoData) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.NoData", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_NoData) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_NoData) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_NoData) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_NoData) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*NoData) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*NoData) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*NoData) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: NoData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: NoData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/v1/packet.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type MonitoringpPacketData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Packet: + // + // *MonitoringpPacketData_NoData + Packet isMonitoringpPacketData_Packet `protobuf_oneof:"packet"` +} + +func (x *MonitoringpPacketData) Reset() { + *x = MonitoringpPacketData{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_packet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitoringpPacketData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitoringpPacketData) ProtoMessage() {} + +// Deprecated: Use MonitoringpPacketData.ProtoReflect.Descriptor instead. +func (*MonitoringpPacketData) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_packet_proto_rawDescGZIP(), []int{0} +} + +func (x *MonitoringpPacketData) GetPacket() isMonitoringpPacketData_Packet { + if x != nil { + return x.Packet + } + return nil +} + +func (x *MonitoringpPacketData) GetNoData() *NoData { + if x, ok := x.GetPacket().(*MonitoringpPacketData_NoData); ok { + return x.NoData + } + return nil +} + +type isMonitoringpPacketData_Packet interface { + isMonitoringpPacketData_Packet() +} + +type MonitoringpPacketData_NoData struct { + NoData *NoData `protobuf:"bytes,1,opt,name=noData,proto3,oneof"` +} + +func (*MonitoringpPacketData_NoData) isMonitoringpPacketData_Packet() {} + +type NoData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *NoData) Reset() { + *x = NoData{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_packet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NoData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NoData) ProtoMessage() {} + +// Deprecated: Use NoData.ProtoReflect.Descriptor instead. +func (*NoData) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_packet_proto_rawDescGZIP(), []int{1} +} + +var File_network_monitoringp_v1_packet_proto protoreflect.FileDescriptor + +var file_network_monitoringp_v1_packet_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x22, 0x5b, 0x0a, + 0x15, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x06, 0x6e, 0x6f, 0x44, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x61, 0x74, 0x61, + 0x42, 0x08, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x08, 0x0a, 0x06, 0x4e, 0x6f, + 0x44, 0x61, 0x74, 0x61, 0x42, 0xe7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, + 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, + 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x70, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, + 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_v1_packet_proto_rawDescOnce sync.Once + file_network_monitoringp_v1_packet_proto_rawDescData = file_network_monitoringp_v1_packet_proto_rawDesc +) + +func file_network_monitoringp_v1_packet_proto_rawDescGZIP() []byte { + file_network_monitoringp_v1_packet_proto_rawDescOnce.Do(func() { + file_network_monitoringp_v1_packet_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_v1_packet_proto_rawDescData) + }) + return file_network_monitoringp_v1_packet_proto_rawDescData +} + +var file_network_monitoringp_v1_packet_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_monitoringp_v1_packet_proto_goTypes = []interface{}{ + (*MonitoringpPacketData)(nil), // 0: network.monitoringp.v1.MonitoringpPacketData + (*NoData)(nil), // 1: network.monitoringp.v1.NoData +} +var file_network_monitoringp_v1_packet_proto_depIdxs = []int32{ + 1, // 0: network.monitoringp.v1.MonitoringpPacketData.noData:type_name -> network.monitoringp.v1.NoData + 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_network_monitoringp_v1_packet_proto_init() } +func file_network_monitoringp_v1_packet_proto_init() { + if File_network_monitoringp_v1_packet_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_v1_packet_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MonitoringpPacketData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_packet_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NoData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_network_monitoringp_v1_packet_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*MonitoringpPacketData_NoData)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_monitoringp_v1_packet_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringp_v1_packet_proto_goTypes, + DependencyIndexes: file_network_monitoringp_v1_packet_proto_depIdxs, + MessageInfos: file_network_monitoringp_v1_packet_proto_msgTypes, + }.Build() + File_network_monitoringp_v1_packet_proto = out.File + file_network_monitoringp_v1_packet_proto_rawDesc = nil + file_network_monitoringp_v1_packet_proto_goTypes = nil + file_network_monitoringp_v1_packet_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/params.pulsar.go b/api/network/monitoringp/v1/params.pulsar.go new file mode 100644 index 00000000..086250b1 --- /dev/null +++ b/api/network/monitoringp/v1/params.pulsar.go @@ -0,0 +1,855 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringpv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + types "github.com/ignite/network/api/network/types" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Params protoreflect.MessageDescriptor + fd_Params_lastBlockHeight protoreflect.FieldDescriptor + fd_Params_consumerChainID protoreflect.FieldDescriptor + fd_Params_consumerConsensusState protoreflect.FieldDescriptor + fd_Params_consumerUnbondingPeriod protoreflect.FieldDescriptor + fd_Params_consumerRevisionHeight protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_params_proto_init() + md_Params = File_network_monitoringp_v1_params_proto.Messages().ByName("Params") + fd_Params_lastBlockHeight = md_Params.Fields().ByName("lastBlockHeight") + fd_Params_consumerChainID = md_Params.Fields().ByName("consumerChainID") + fd_Params_consumerConsensusState = md_Params.Fields().ByName("consumerConsensusState") + fd_Params_consumerUnbondingPeriod = md_Params.Fields().ByName("consumerUnbondingPeriod") + fd_Params_consumerRevisionHeight = md_Params.Fields().ByName("consumerRevisionHeight") +} + +var _ protoreflect.Message = (*fastReflection_Params)(nil) + +type fastReflection_Params Params + +func (x *Params) ProtoReflect() protoreflect.Message { + return (*fastReflection_Params)(x) +} + +func (x *Params) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_params_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) +} + +var _fastReflection_Params_messageType fastReflection_Params_messageType +var _ protoreflect.MessageType = fastReflection_Params_messageType{} + +type fastReflection_Params_messageType struct{} + +func (x fastReflection_Params_messageType) Zero() protoreflect.Message { + return (*fastReflection_Params)(nil) +} +func (x fastReflection_Params_messageType) New() protoreflect.Message { + return new(fastReflection_Params) +} +func (x fastReflection_Params_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Params) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Params) Type() protoreflect.MessageType { + return _fastReflection_Params_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Params) New() protoreflect.Message { + return new(fastReflection_Params) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Params) Interface() protoreflect.ProtoMessage { + return (*Params)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LastBlockHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.LastBlockHeight) + if !f(fd_Params_lastBlockHeight, value) { + return + } + } + if x.ConsumerChainID != "" { + value := protoreflect.ValueOfString(x.ConsumerChainID) + if !f(fd_Params_consumerChainID, value) { + return + } + } + if x.ConsumerConsensusState != nil { + value := protoreflect.ValueOfMessage(x.ConsumerConsensusState.ProtoReflect()) + if !f(fd_Params_consumerConsensusState, value) { + return + } + } + if x.ConsumerUnbondingPeriod != int64(0) { + value := protoreflect.ValueOfInt64(x.ConsumerUnbondingPeriod) + if !f(fd_Params_consumerUnbondingPeriod, value) { + return + } + } + if x.ConsumerRevisionHeight != uint64(0) { + value := protoreflect.ValueOfUint64(x.ConsumerRevisionHeight) + if !f(fd_Params_consumerRevisionHeight, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.Params.lastBlockHeight": + return x.LastBlockHeight != int64(0) + case "network.monitoringp.v1.Params.consumerChainID": + return x.ConsumerChainID != "" + case "network.monitoringp.v1.Params.consumerConsensusState": + return x.ConsumerConsensusState != nil + case "network.monitoringp.v1.Params.consumerUnbondingPeriod": + return x.ConsumerUnbondingPeriod != int64(0) + case "network.monitoringp.v1.Params.consumerRevisionHeight": + return x.ConsumerRevisionHeight != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringp.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.Params.lastBlockHeight": + x.LastBlockHeight = int64(0) + case "network.monitoringp.v1.Params.consumerChainID": + x.ConsumerChainID = "" + case "network.monitoringp.v1.Params.consumerConsensusState": + x.ConsumerConsensusState = nil + case "network.monitoringp.v1.Params.consumerUnbondingPeriod": + x.ConsumerUnbondingPeriod = int64(0) + case "network.monitoringp.v1.Params.consumerRevisionHeight": + x.ConsumerRevisionHeight = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringp.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.Params.lastBlockHeight": + value := x.LastBlockHeight + return protoreflect.ValueOfInt64(value) + case "network.monitoringp.v1.Params.consumerChainID": + value := x.ConsumerChainID + return protoreflect.ValueOfString(value) + case "network.monitoringp.v1.Params.consumerConsensusState": + value := x.ConsumerConsensusState + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.monitoringp.v1.Params.consumerUnbondingPeriod": + value := x.ConsumerUnbondingPeriod + return protoreflect.ValueOfInt64(value) + case "network.monitoringp.v1.Params.consumerRevisionHeight": + value := x.ConsumerRevisionHeight + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringp.v1.Params does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.Params.lastBlockHeight": + x.LastBlockHeight = value.Int() + case "network.monitoringp.v1.Params.consumerChainID": + x.ConsumerChainID = value.Interface().(string) + case "network.monitoringp.v1.Params.consumerConsensusState": + x.ConsumerConsensusState = value.Message().Interface().(*types.ConsensusState) + case "network.monitoringp.v1.Params.consumerUnbondingPeriod": + x.ConsumerUnbondingPeriod = value.Int() + case "network.monitoringp.v1.Params.consumerRevisionHeight": + x.ConsumerRevisionHeight = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringp.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.Params.consumerConsensusState": + if x.ConsumerConsensusState == nil { + x.ConsumerConsensusState = new(types.ConsensusState) + } + return protoreflect.ValueOfMessage(x.ConsumerConsensusState.ProtoReflect()) + case "network.monitoringp.v1.Params.lastBlockHeight": + panic(fmt.Errorf("field lastBlockHeight of message network.monitoringp.v1.Params is not mutable")) + case "network.monitoringp.v1.Params.consumerChainID": + panic(fmt.Errorf("field consumerChainID of message network.monitoringp.v1.Params is not mutable")) + case "network.monitoringp.v1.Params.consumerUnbondingPeriod": + panic(fmt.Errorf("field consumerUnbondingPeriod of message network.monitoringp.v1.Params is not mutable")) + case "network.monitoringp.v1.Params.consumerRevisionHeight": + panic(fmt.Errorf("field consumerRevisionHeight of message network.monitoringp.v1.Params is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringp.v1.Params does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.Params.lastBlockHeight": + return protoreflect.ValueOfInt64(int64(0)) + case "network.monitoringp.v1.Params.consumerChainID": + return protoreflect.ValueOfString("") + case "network.monitoringp.v1.Params.consumerConsensusState": + m := new(types.ConsensusState) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.monitoringp.v1.Params.consumerUnbondingPeriod": + return protoreflect.ValueOfInt64(int64(0)) + case "network.monitoringp.v1.Params.consumerRevisionHeight": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.Params")) + } + panic(fmt.Errorf("message network.monitoringp.v1.Params does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Params) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.Params", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Params) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Params) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LastBlockHeight != 0 { + n += 1 + runtime.Sov(uint64(x.LastBlockHeight)) + } + l = len(x.ConsumerChainID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ConsumerConsensusState != nil { + l = options.Size(x.ConsumerConsensusState) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ConsumerUnbondingPeriod != 0 { + n += 1 + runtime.Sov(uint64(x.ConsumerUnbondingPeriod)) + } + if x.ConsumerRevisionHeight != 0 { + n += 1 + runtime.Sov(uint64(x.ConsumerRevisionHeight)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ConsumerRevisionHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ConsumerRevisionHeight)) + i-- + dAtA[i] = 0x28 + } + if x.ConsumerUnbondingPeriod != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ConsumerUnbondingPeriod)) + i-- + dAtA[i] = 0x20 + } + if x.ConsumerConsensusState != nil { + encoded, err := options.Marshal(x.ConsumerConsensusState) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.ConsumerChainID) > 0 { + i -= len(x.ConsumerChainID) + copy(dAtA[i:], x.ConsumerChainID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ConsumerChainID))) + i-- + dAtA[i] = 0x12 + } + if x.LastBlockHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LastBlockHeight)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LastBlockHeight", wireType) + } + x.LastBlockHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LastBlockHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsumerChainID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ConsumerChainID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsumerConsensusState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ConsumerConsensusState == nil { + x.ConsumerConsensusState = &types.ConsensusState{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ConsumerConsensusState); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsumerUnbondingPeriod", wireType) + } + x.ConsumerUnbondingPeriod = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ConsumerUnbondingPeriod |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsumerRevisionHeight", wireType) + } + x.ConsumerRevisionHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ConsumerRevisionHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/v1/params.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Params defines the parameters for the module. +type Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LastBlockHeight int64 `protobuf:"varint,1,opt,name=lastBlockHeight,proto3" json:"lastBlockHeight,omitempty"` + ConsumerChainID string `protobuf:"bytes,2,opt,name=consumerChainID,proto3" json:"consumerChainID,omitempty"` + ConsumerConsensusState *types.ConsensusState `protobuf:"bytes,3,opt,name=consumerConsensusState,proto3" json:"consumerConsensusState,omitempty"` + ConsumerUnbondingPeriod int64 `protobuf:"varint,4,opt,name=consumerUnbondingPeriod,proto3" json:"consumerUnbondingPeriod,omitempty"` + ConsumerRevisionHeight uint64 `protobuf:"varint,5,opt,name=consumerRevisionHeight,proto3" json:"consumerRevisionHeight,omitempty"` +} + +func (x *Params) Reset() { + *x = Params{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_params_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Params) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Params) ProtoMessage() {} + +// Deprecated: Use Params.ProtoReflect.Descriptor instead. +func (*Params) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_params_proto_rawDescGZIP(), []int{0} +} + +func (x *Params) GetLastBlockHeight() int64 { + if x != nil { + return x.LastBlockHeight + } + return 0 +} + +func (x *Params) GetConsumerChainID() string { + if x != nil { + return x.ConsumerChainID + } + return "" +} + +func (x *Params) GetConsumerConsensusState() *types.ConsensusState { + if x != nil { + return x.ConsumerConsensusState + } + return nil +} + +func (x *Params) GetConsumerUnbondingPeriod() int64 { + if x != nil { + return x.ConsumerUnbondingPeriod + } + return 0 +} + +func (x *Params) GetConsumerRevisionHeight() uint64 { + if x != nil { + return x.ConsumerRevisionHeight + } + return 0 +} + +var File_network_monitoringp_v1_params_proto protoreflect.FileDescriptor + +var file_network_monitoringp_v1_params_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, + 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xd2, 0x02, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x61, + 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x5b, + 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, + 0x73, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x04, 0xc8, + 0xde, 0x1f, 0x00, 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x63, 0x6f, + 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x72, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x25, 0xe8, + 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x78, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x42, 0xe7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, + 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, + 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x70, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, + 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_v1_params_proto_rawDescOnce sync.Once + file_network_monitoringp_v1_params_proto_rawDescData = file_network_monitoringp_v1_params_proto_rawDesc +) + +func file_network_monitoringp_v1_params_proto_rawDescGZIP() []byte { + file_network_monitoringp_v1_params_proto_rawDescOnce.Do(func() { + file_network_monitoringp_v1_params_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_v1_params_proto_rawDescData) + }) + return file_network_monitoringp_v1_params_proto_rawDescData +} + +var file_network_monitoringp_v1_params_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_monitoringp_v1_params_proto_goTypes = []interface{}{ + (*Params)(nil), // 0: network.monitoringp.v1.Params + (*types.ConsensusState)(nil), // 1: network.types.ConsensusState +} +var file_network_monitoringp_v1_params_proto_depIdxs = []int32{ + 1, // 0: network.monitoringp.v1.Params.consumerConsensusState:type_name -> network.types.ConsensusState + 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_network_monitoringp_v1_params_proto_init() } +func file_network_monitoringp_v1_params_proto_init() { + if File_network_monitoringp_v1_params_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_v1_params_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Params); 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_network_monitoringp_v1_params_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_monitoringp_v1_params_proto_goTypes, + DependencyIndexes: file_network_monitoringp_v1_params_proto_depIdxs, + MessageInfos: file_network_monitoringp_v1_params_proto_msgTypes, + }.Build() + File_network_monitoringp_v1_params_proto = out.File + file_network_monitoringp_v1_params_proto_rawDesc = nil + file_network_monitoringp_v1_params_proto_goTypes = nil + file_network_monitoringp_v1_params_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/query.pulsar.go b/api/network/monitoringp/v1/query.pulsar.go new file mode 100644 index 00000000..47e77fda --- /dev/null +++ b/api/network/monitoringp/v1/query.pulsar.go @@ -0,0 +1,3742 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringpv1 + +import ( + _ "cosmossdk.io/api/amino" + _ "cosmossdk.io/api/cosmos/base/query/v1beta1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_QueryParamsRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringp_v1_query_proto_init() + md_QueryParamsRequest = File_network_monitoringp_v1_query_proto.Messages().ByName("QueryParamsRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsRequest)(nil) + +type fastReflection_QueryParamsRequest QueryParamsRequest + +func (x *QueryParamsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(x) +} + +func (x *QueryParamsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_query_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) +} + +var _fastReflection_QueryParamsRequest_messageType fastReflection_QueryParamsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsRequest_messageType{} + +type fastReflection_QueryParamsRequest_messageType struct{} + +func (x fastReflection_QueryParamsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(nil) +} +func (x fastReflection_QueryParamsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} +func (x fastReflection_QueryParamsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsRequest) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryParamsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.QueryParamsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryParamsResponse protoreflect.MessageDescriptor + fd_QueryParamsResponse_params protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_query_proto_init() + md_QueryParamsResponse = File_network_monitoringp_v1_query_proto.Messages().ByName("QueryParamsResponse") + fd_QueryParamsResponse_params = md_QueryParamsResponse.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsResponse)(nil) + +type fastReflection_QueryParamsResponse QueryParamsResponse + +func (x *QueryParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(x) +} + +func (x *QueryParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_query_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) +} + +var _fastReflection_QueryParamsResponse_messageType fastReflection_QueryParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsResponse_messageType{} + +type fastReflection_QueryParamsResponse_messageType struct{} + +func (x fastReflection_QueryParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(nil) +} +func (x fastReflection_QueryParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} +func (x fastReflection_QueryParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsResponse) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_QueryParamsResponse_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.QueryParamsResponse.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.QueryParamsResponse.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.QueryParamsResponse.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.QueryParamsResponse.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.QueryParamsResponse.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.QueryParamsResponse.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.QueryParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetMonitoringInfoRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringp_v1_query_proto_init() + md_QueryGetMonitoringInfoRequest = File_network_monitoringp_v1_query_proto.Messages().ByName("QueryGetMonitoringInfoRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetMonitoringInfoRequest)(nil) + +type fastReflection_QueryGetMonitoringInfoRequest QueryGetMonitoringInfoRequest + +func (x *QueryGetMonitoringInfoRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetMonitoringInfoRequest)(x) +} + +func (x *QueryGetMonitoringInfoRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[2] + 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) +} + +var _fastReflection_QueryGetMonitoringInfoRequest_messageType fastReflection_QueryGetMonitoringInfoRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetMonitoringInfoRequest_messageType{} + +type fastReflection_QueryGetMonitoringInfoRequest_messageType struct{} + +func (x fastReflection_QueryGetMonitoringInfoRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetMonitoringInfoRequest)(nil) +} +func (x fastReflection_QueryGetMonitoringInfoRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetMonitoringInfoRequest) +} +func (x fastReflection_QueryGetMonitoringInfoRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMonitoringInfoRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMonitoringInfoRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetMonitoringInfoRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetMonitoringInfoRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetMonitoringInfoRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetMonitoringInfoRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringInfoRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetMonitoringInfoRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetMonitoringInfoRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.QueryGetMonitoringInfoRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetMonitoringInfoRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringInfoRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetMonitoringInfoRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetMonitoringInfoRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetMonitoringInfoRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMonitoringInfoRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMonitoringInfoRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMonitoringInfoRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMonitoringInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetMonitoringInfoResponse protoreflect.MessageDescriptor + fd_QueryGetMonitoringInfoResponse_MonitoringInfo protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_query_proto_init() + md_QueryGetMonitoringInfoResponse = File_network_monitoringp_v1_query_proto.Messages().ByName("QueryGetMonitoringInfoResponse") + fd_QueryGetMonitoringInfoResponse_MonitoringInfo = md_QueryGetMonitoringInfoResponse.Fields().ByName("MonitoringInfo") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetMonitoringInfoResponse)(nil) + +type fastReflection_QueryGetMonitoringInfoResponse QueryGetMonitoringInfoResponse + +func (x *QueryGetMonitoringInfoResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetMonitoringInfoResponse)(x) +} + +func (x *QueryGetMonitoringInfoResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[3] + 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) +} + +var _fastReflection_QueryGetMonitoringInfoResponse_messageType fastReflection_QueryGetMonitoringInfoResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetMonitoringInfoResponse_messageType{} + +type fastReflection_QueryGetMonitoringInfoResponse_messageType struct{} + +func (x fastReflection_QueryGetMonitoringInfoResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetMonitoringInfoResponse)(nil) +} +func (x fastReflection_QueryGetMonitoringInfoResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetMonitoringInfoResponse) +} +func (x fastReflection_QueryGetMonitoringInfoResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMonitoringInfoResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMonitoringInfoResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetMonitoringInfoResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetMonitoringInfoResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetMonitoringInfoResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetMonitoringInfoResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.MonitoringInfo != nil { + value := protoreflect.ValueOfMessage(x.MonitoringInfo.ProtoReflect()) + if !f(fd_QueryGetMonitoringInfoResponse_MonitoringInfo, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetMonitoringInfoResponse.MonitoringInfo": + return x.MonitoringInfo != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetMonitoringInfoResponse.MonitoringInfo": + x.MonitoringInfo = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.QueryGetMonitoringInfoResponse.MonitoringInfo": + value := x.MonitoringInfo + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetMonitoringInfoResponse.MonitoringInfo": + x.MonitoringInfo = value.Message().Interface().(*MonitoringInfo) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringInfoResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetMonitoringInfoResponse.MonitoringInfo": + if x.MonitoringInfo == nil { + x.MonitoringInfo = new(MonitoringInfo) + } + return protoreflect.ValueOfMessage(x.MonitoringInfo.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetMonitoringInfoResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetMonitoringInfoResponse.MonitoringInfo": + m := new(MonitoringInfo) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetMonitoringInfoResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetMonitoringInfoResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetMonitoringInfoResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.QueryGetMonitoringInfoResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetMonitoringInfoResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMonitoringInfoResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetMonitoringInfoResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetMonitoringInfoResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetMonitoringInfoResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.MonitoringInfo != nil { + l = options.Size(x.MonitoringInfo) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMonitoringInfoResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MonitoringInfo != nil { + encoded, err := options.Marshal(x.MonitoringInfo) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMonitoringInfoResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMonitoringInfoResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMonitoringInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MonitoringInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.MonitoringInfo == nil { + x.MonitoringInfo = &MonitoringInfo{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MonitoringInfo); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetConnectionChannelIDRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringp_v1_query_proto_init() + md_QueryGetConnectionChannelIDRequest = File_network_monitoringp_v1_query_proto.Messages().ByName("QueryGetConnectionChannelIDRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetConnectionChannelIDRequest)(nil) + +type fastReflection_QueryGetConnectionChannelIDRequest QueryGetConnectionChannelIDRequest + +func (x *QueryGetConnectionChannelIDRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetConnectionChannelIDRequest)(x) +} + +func (x *QueryGetConnectionChannelIDRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[4] + 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) +} + +var _fastReflection_QueryGetConnectionChannelIDRequest_messageType fastReflection_QueryGetConnectionChannelIDRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetConnectionChannelIDRequest_messageType{} + +type fastReflection_QueryGetConnectionChannelIDRequest_messageType struct{} + +func (x fastReflection_QueryGetConnectionChannelIDRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetConnectionChannelIDRequest)(nil) +} +func (x fastReflection_QueryGetConnectionChannelIDRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetConnectionChannelIDRequest) +} +func (x fastReflection_QueryGetConnectionChannelIDRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetConnectionChannelIDRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetConnectionChannelIDRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetConnectionChannelIDRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetConnectionChannelIDRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetConnectionChannelIDRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.QueryGetConnectionChannelIDRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetConnectionChannelIDRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetConnectionChannelIDRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetConnectionChannelIDRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetConnectionChannelIDRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetConnectionChannelIDRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetConnectionChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetConnectionChannelIDResponse protoreflect.MessageDescriptor + fd_QueryGetConnectionChannelIDResponse_ConnectionChannelID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_query_proto_init() + md_QueryGetConnectionChannelIDResponse = File_network_monitoringp_v1_query_proto.Messages().ByName("QueryGetConnectionChannelIDResponse") + fd_QueryGetConnectionChannelIDResponse_ConnectionChannelID = md_QueryGetConnectionChannelIDResponse.Fields().ByName("ConnectionChannelID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetConnectionChannelIDResponse)(nil) + +type fastReflection_QueryGetConnectionChannelIDResponse QueryGetConnectionChannelIDResponse + +func (x *QueryGetConnectionChannelIDResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetConnectionChannelIDResponse)(x) +} + +func (x *QueryGetConnectionChannelIDResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[5] + 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) +} + +var _fastReflection_QueryGetConnectionChannelIDResponse_messageType fastReflection_QueryGetConnectionChannelIDResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetConnectionChannelIDResponse_messageType{} + +type fastReflection_QueryGetConnectionChannelIDResponse_messageType struct{} + +func (x fastReflection_QueryGetConnectionChannelIDResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetConnectionChannelIDResponse)(nil) +} +func (x fastReflection_QueryGetConnectionChannelIDResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetConnectionChannelIDResponse) +} +func (x fastReflection_QueryGetConnectionChannelIDResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetConnectionChannelIDResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetConnectionChannelIDResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetConnectionChannelIDResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetConnectionChannelIDResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetConnectionChannelIDResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ConnectionChannelID != nil { + value := protoreflect.ValueOfMessage(x.ConnectionChannelID.ProtoReflect()) + if !f(fd_QueryGetConnectionChannelIDResponse_ConnectionChannelID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConnectionChannelIDResponse.ConnectionChannelID": + return x.ConnectionChannelID != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConnectionChannelIDResponse.ConnectionChannelID": + x.ConnectionChannelID = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.QueryGetConnectionChannelIDResponse.ConnectionChannelID": + value := x.ConnectionChannelID + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConnectionChannelIDResponse.ConnectionChannelID": + x.ConnectionChannelID = value.Message().Interface().(*ConnectionChannelID) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConnectionChannelIDResponse.ConnectionChannelID": + if x.ConnectionChannelID == nil { + x.ConnectionChannelID = new(ConnectionChannelID) + } + return protoreflect.ValueOfMessage(x.ConnectionChannelID.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConnectionChannelIDResponse.ConnectionChannelID": + m := new(ConnectionChannelID) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConnectionChannelIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConnectionChannelIDResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.QueryGetConnectionChannelIDResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetConnectionChannelIDResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetConnectionChannelIDResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ConnectionChannelID != nil { + l = options.Size(x.ConnectionChannelID) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetConnectionChannelIDResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ConnectionChannelID != nil { + encoded, err := options.Marshal(x.ConnectionChannelID) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetConnectionChannelIDResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetConnectionChannelIDResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetConnectionChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConnectionChannelID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ConnectionChannelID == nil { + x.ConnectionChannelID = &ConnectionChannelID{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ConnectionChannelID); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetConsumerClientIDRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringp_v1_query_proto_init() + md_QueryGetConsumerClientIDRequest = File_network_monitoringp_v1_query_proto.Messages().ByName("QueryGetConsumerClientIDRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetConsumerClientIDRequest)(nil) + +type fastReflection_QueryGetConsumerClientIDRequest QueryGetConsumerClientIDRequest + +func (x *QueryGetConsumerClientIDRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetConsumerClientIDRequest)(x) +} + +func (x *QueryGetConsumerClientIDRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_query_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) +} + +var _fastReflection_QueryGetConsumerClientIDRequest_messageType fastReflection_QueryGetConsumerClientIDRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetConsumerClientIDRequest_messageType{} + +type fastReflection_QueryGetConsumerClientIDRequest_messageType struct{} + +func (x fastReflection_QueryGetConsumerClientIDRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetConsumerClientIDRequest)(nil) +} +func (x fastReflection_QueryGetConsumerClientIDRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetConsumerClientIDRequest) +} +func (x fastReflection_QueryGetConsumerClientIDRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetConsumerClientIDRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetConsumerClientIDRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetConsumerClientIDRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetConsumerClientIDRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetConsumerClientIDRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetConsumerClientIDRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConsumerClientIDRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetConsumerClientIDRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDRequest")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetConsumerClientIDRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.QueryGetConsumerClientIDRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetConsumerClientIDRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConsumerClientIDRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetConsumerClientIDRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetConsumerClientIDRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetConsumerClientIDRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetConsumerClientIDRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetConsumerClientIDRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetConsumerClientIDRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetConsumerClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetConsumerClientIDResponse protoreflect.MessageDescriptor + fd_QueryGetConsumerClientIDResponse_ConsumerClientID protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_query_proto_init() + md_QueryGetConsumerClientIDResponse = File_network_monitoringp_v1_query_proto.Messages().ByName("QueryGetConsumerClientIDResponse") + fd_QueryGetConsumerClientIDResponse_ConsumerClientID = md_QueryGetConsumerClientIDResponse.Fields().ByName("ConsumerClientID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetConsumerClientIDResponse)(nil) + +type fastReflection_QueryGetConsumerClientIDResponse QueryGetConsumerClientIDResponse + +func (x *QueryGetConsumerClientIDResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetConsumerClientIDResponse)(x) +} + +func (x *QueryGetConsumerClientIDResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_query_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) +} + +var _fastReflection_QueryGetConsumerClientIDResponse_messageType fastReflection_QueryGetConsumerClientIDResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetConsumerClientIDResponse_messageType{} + +type fastReflection_QueryGetConsumerClientIDResponse_messageType struct{} + +func (x fastReflection_QueryGetConsumerClientIDResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetConsumerClientIDResponse)(nil) +} +func (x fastReflection_QueryGetConsumerClientIDResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetConsumerClientIDResponse) +} +func (x fastReflection_QueryGetConsumerClientIDResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetConsumerClientIDResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetConsumerClientIDResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetConsumerClientIDResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetConsumerClientIDResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetConsumerClientIDResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetConsumerClientIDResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ConsumerClientID != nil { + value := protoreflect.ValueOfMessage(x.ConsumerClientID.ProtoReflect()) + if !f(fd_QueryGetConsumerClientIDResponse_ConsumerClientID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConsumerClientIDResponse.ConsumerClientID": + return x.ConsumerClientID != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConsumerClientIDResponse.ConsumerClientID": + x.ConsumerClientID = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.QueryGetConsumerClientIDResponse.ConsumerClientID": + value := x.ConsumerClientID + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConsumerClientIDResponse.ConsumerClientID": + x.ConsumerClientID = value.Message().Interface().(*ConsumerClientID) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConsumerClientIDResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConsumerClientIDResponse.ConsumerClientID": + if x.ConsumerClientID == nil { + x.ConsumerClientID = new(ConsumerClientID) + } + return protoreflect.ValueOfMessage(x.ConsumerClientID.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetConsumerClientIDResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.QueryGetConsumerClientIDResponse.ConsumerClientID": + m := new(ConsumerClientID) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.QueryGetConsumerClientIDResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.QueryGetConsumerClientIDResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetConsumerClientIDResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.QueryGetConsumerClientIDResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetConsumerClientIDResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetConsumerClientIDResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetConsumerClientIDResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetConsumerClientIDResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetConsumerClientIDResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ConsumerClientID != nil { + l = options.Size(x.ConsumerClientID) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetConsumerClientIDResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ConsumerClientID != nil { + encoded, err := options.Marshal(x.ConsumerClientID) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetConsumerClientIDResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetConsumerClientIDResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetConsumerClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsumerClientID", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ConsumerClientID == nil { + x.ConsumerClientID = &ConsumerClientID{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ConsumerClientID); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/v1/query.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryParamsRequest) Reset() { + *x = QueryParamsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsRequest) ProtoMessage() {} + +// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_query_proto_rawDescGZIP(), []int{0} +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params holds all the parameters of this module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryParamsResponse) Reset() { + *x = QueryParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsResponse) ProtoMessage() {} + +// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_query_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryParamsResponse) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +type QueryGetMonitoringInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryGetMonitoringInfoRequest) Reset() { + *x = QueryGetMonitoringInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetMonitoringInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetMonitoringInfoRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetMonitoringInfoRequest.ProtoReflect.Descriptor instead. +func (*QueryGetMonitoringInfoRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_query_proto_rawDescGZIP(), []int{2} +} + +type QueryGetMonitoringInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MonitoringInfo *MonitoringInfo `protobuf:"bytes,1,opt,name=MonitoringInfo,proto3" json:"MonitoringInfo,omitempty"` +} + +func (x *QueryGetMonitoringInfoResponse) Reset() { + *x = QueryGetMonitoringInfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetMonitoringInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetMonitoringInfoResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetMonitoringInfoResponse.ProtoReflect.Descriptor instead. +func (*QueryGetMonitoringInfoResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_query_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryGetMonitoringInfoResponse) GetMonitoringInfo() *MonitoringInfo { + if x != nil { + return x.MonitoringInfo + } + return nil +} + +type QueryGetConnectionChannelIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryGetConnectionChannelIDRequest) Reset() { + *x = QueryGetConnectionChannelIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetConnectionChannelIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetConnectionChannelIDRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetConnectionChannelIDRequest.ProtoReflect.Descriptor instead. +func (*QueryGetConnectionChannelIDRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_query_proto_rawDescGZIP(), []int{4} +} + +type QueryGetConnectionChannelIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConnectionChannelID *ConnectionChannelID `protobuf:"bytes,1,opt,name=ConnectionChannelID,proto3" json:"ConnectionChannelID,omitempty"` +} + +func (x *QueryGetConnectionChannelIDResponse) Reset() { + *x = QueryGetConnectionChannelIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetConnectionChannelIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetConnectionChannelIDResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetConnectionChannelIDResponse.ProtoReflect.Descriptor instead. +func (*QueryGetConnectionChannelIDResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryGetConnectionChannelIDResponse) GetConnectionChannelID() *ConnectionChannelID { + if x != nil { + return x.ConnectionChannelID + } + return nil +} + +type QueryGetConsumerClientIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryGetConsumerClientIDRequest) Reset() { + *x = QueryGetConsumerClientIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetConsumerClientIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetConsumerClientIDRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetConsumerClientIDRequest.ProtoReflect.Descriptor instead. +func (*QueryGetConsumerClientIDRequest) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_query_proto_rawDescGZIP(), []int{6} +} + +type QueryGetConsumerClientIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConsumerClientID *ConsumerClientID `protobuf:"bytes,1,opt,name=ConsumerClientID,proto3" json:"ConsumerClientID,omitempty"` +} + +func (x *QueryGetConsumerClientIDResponse) Reset() { + *x = QueryGetConsumerClientIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetConsumerClientIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetConsumerClientIDResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetConsumerClientIDResponse.ProtoReflect.Descriptor instead. +func (*QueryGetConsumerClientIDResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_query_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryGetConsumerClientIDResponse) GetConsumerClientID() *ConsumerClientID { + if x != nil { + return x.ConsumerClientID + } + return nil +} + +var File_network_monitoringp_v1_query_proto protoreflect.FileDescriptor + +var file_network_monitoringp_v1_query_proto_rawDesc = []byte{ + 0x0a, 0x22, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, + 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, + 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x32, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, + 0x75, 0x6d, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x14, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, + 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x76, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0e, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x0e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x22, 0x24, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8a, 0x01, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, + 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x13, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x49, 0x44, 0x22, 0x21, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7e, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x10, 0x43, 0x6f, + 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x10, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x32, 0xe6, 0x05, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x90, 0x01, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2a, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x69, + 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x35, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x36, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, + 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, + 0x12, 0x2b, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x6d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0xcc, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x12, 0x3a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x69, 0x67, 0x6e, 0x69, + 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0xc0, 0x01, 0x0a, + 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x12, 0x37, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, + 0x2e, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x63, 0x6f, 0x6e, + 0x73, 0x75, 0x6d, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x42, + 0xe6, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x42, 0x0a, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, + 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x56, 0x31, 0xca, + 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_v1_query_proto_rawDescOnce sync.Once + file_network_monitoringp_v1_query_proto_rawDescData = file_network_monitoringp_v1_query_proto_rawDesc +) + +func file_network_monitoringp_v1_query_proto_rawDescGZIP() []byte { + file_network_monitoringp_v1_query_proto_rawDescOnce.Do(func() { + file_network_monitoringp_v1_query_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_v1_query_proto_rawDescData) + }) + return file_network_monitoringp_v1_query_proto_rawDescData +} + +var file_network_monitoringp_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_network_monitoringp_v1_query_proto_goTypes = []interface{}{ + (*QueryParamsRequest)(nil), // 0: network.monitoringp.v1.QueryParamsRequest + (*QueryParamsResponse)(nil), // 1: network.monitoringp.v1.QueryParamsResponse + (*QueryGetMonitoringInfoRequest)(nil), // 2: network.monitoringp.v1.QueryGetMonitoringInfoRequest + (*QueryGetMonitoringInfoResponse)(nil), // 3: network.monitoringp.v1.QueryGetMonitoringInfoResponse + (*QueryGetConnectionChannelIDRequest)(nil), // 4: network.monitoringp.v1.QueryGetConnectionChannelIDRequest + (*QueryGetConnectionChannelIDResponse)(nil), // 5: network.monitoringp.v1.QueryGetConnectionChannelIDResponse + (*QueryGetConsumerClientIDRequest)(nil), // 6: network.monitoringp.v1.QueryGetConsumerClientIDRequest + (*QueryGetConsumerClientIDResponse)(nil), // 7: network.monitoringp.v1.QueryGetConsumerClientIDResponse + (*Params)(nil), // 8: network.monitoringp.v1.Params + (*MonitoringInfo)(nil), // 9: network.monitoringp.v1.MonitoringInfo + (*ConnectionChannelID)(nil), // 10: network.monitoringp.v1.ConnectionChannelID + (*ConsumerClientID)(nil), // 11: network.monitoringp.v1.ConsumerClientID +} +var file_network_monitoringp_v1_query_proto_depIdxs = []int32{ + 8, // 0: network.monitoringp.v1.QueryParamsResponse.params:type_name -> network.monitoringp.v1.Params + 9, // 1: network.monitoringp.v1.QueryGetMonitoringInfoResponse.MonitoringInfo:type_name -> network.monitoringp.v1.MonitoringInfo + 10, // 2: network.monitoringp.v1.QueryGetConnectionChannelIDResponse.ConnectionChannelID:type_name -> network.monitoringp.v1.ConnectionChannelID + 11, // 3: network.monitoringp.v1.QueryGetConsumerClientIDResponse.ConsumerClientID:type_name -> network.monitoringp.v1.ConsumerClientID + 0, // 4: network.monitoringp.v1.Query.Params:input_type -> network.monitoringp.v1.QueryParamsRequest + 2, // 5: network.monitoringp.v1.Query.GetMonitoringInfo:input_type -> network.monitoringp.v1.QueryGetMonitoringInfoRequest + 4, // 6: network.monitoringp.v1.Query.GetConnectionChannelID:input_type -> network.monitoringp.v1.QueryGetConnectionChannelIDRequest + 6, // 7: network.monitoringp.v1.Query.GetConsumerClientID:input_type -> network.monitoringp.v1.QueryGetConsumerClientIDRequest + 1, // 8: network.monitoringp.v1.Query.Params:output_type -> network.monitoringp.v1.QueryParamsResponse + 3, // 9: network.monitoringp.v1.Query.GetMonitoringInfo:output_type -> network.monitoringp.v1.QueryGetMonitoringInfoResponse + 5, // 10: network.monitoringp.v1.Query.GetConnectionChannelID:output_type -> network.monitoringp.v1.QueryGetConnectionChannelIDResponse + 7, // 11: network.monitoringp.v1.Query.GetConsumerClientID:output_type -> network.monitoringp.v1.QueryGetConsumerClientIDResponse + 8, // [8:12] is the sub-list for method output_type + 4, // [4:8] 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_network_monitoringp_v1_query_proto_init() } +func file_network_monitoringp_v1_query_proto_init() { + if File_network_monitoringp_v1_query_proto != nil { + return + } + file_network_monitoringp_v1_connection_channel_id_proto_init() + file_network_monitoringp_v1_consumer_client_id_proto_init() + file_network_monitoringp_v1_monitoring_info_proto_init() + file_network_monitoringp_v1_params_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_query_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_query_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetMonitoringInfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_query_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetMonitoringInfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetConnectionChannelIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetConnectionChannelIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_query_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetConsumerClientIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_query_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetConsumerClientIDResponse); 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_network_monitoringp_v1_query_proto_rawDesc, + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_monitoringp_v1_query_proto_goTypes, + DependencyIndexes: file_network_monitoringp_v1_query_proto_depIdxs, + MessageInfos: file_network_monitoringp_v1_query_proto_msgTypes, + }.Build() + File_network_monitoringp_v1_query_proto = out.File + file_network_monitoringp_v1_query_proto_rawDesc = nil + file_network_monitoringp_v1_query_proto_goTypes = nil + file_network_monitoringp_v1_query_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/query_grpc.pb.go b/api/network/monitoringp/v1/query_grpc.pb.go new file mode 100644 index 00000000..4d83729f --- /dev/null +++ b/api/network/monitoringp/v1/query_grpc.pb.go @@ -0,0 +1,228 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/monitoringp/v1/query.proto + +package monitoringpv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Query_Params_FullMethodName = "/network.monitoringp.v1.Query/Params" + Query_GetMonitoringInfo_FullMethodName = "/network.monitoringp.v1.Query/GetMonitoringInfo" + Query_GetConnectionChannelID_FullMethodName = "/network.monitoringp.v1.Query/GetConnectionChannelID" + Query_GetConsumerClientID_FullMethodName = "/network.monitoringp.v1.Query/GetConsumerClientID" +) + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a MonitoringInfo by index. + GetMonitoringInfo(ctx context.Context, in *QueryGetMonitoringInfoRequest, opts ...grpc.CallOption) (*QueryGetMonitoringInfoResponse, error) + // Queries a ConnectionChannelID by index. + GetConnectionChannelID(ctx context.Context, in *QueryGetConnectionChannelIDRequest, opts ...grpc.CallOption) (*QueryGetConnectionChannelIDResponse, error) + // Queries a ConsumerClientID by index. + GetConsumerClientID(ctx context.Context, in *QueryGetConsumerClientIDRequest, opts ...grpc.CallOption) (*QueryGetConsumerClientIDResponse, error) +} + +type queryClient struct { + cc grpc.ClientConnInterface +} + +func NewQueryClient(cc grpc.ClientConnInterface) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, Query_Params_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetMonitoringInfo(ctx context.Context, in *QueryGetMonitoringInfoRequest, opts ...grpc.CallOption) (*QueryGetMonitoringInfoResponse, error) { + out := new(QueryGetMonitoringInfoResponse) + err := c.cc.Invoke(ctx, Query_GetMonitoringInfo_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetConnectionChannelID(ctx context.Context, in *QueryGetConnectionChannelIDRequest, opts ...grpc.CallOption) (*QueryGetConnectionChannelIDResponse, error) { + out := new(QueryGetConnectionChannelIDResponse) + err := c.cc.Invoke(ctx, Query_GetConnectionChannelID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetConsumerClientID(ctx context.Context, in *QueryGetConsumerClientIDRequest, opts ...grpc.CallOption) (*QueryGetConsumerClientIDResponse, error) { + out := new(QueryGetConsumerClientIDResponse) + err := c.cc.Invoke(ctx, Query_GetConsumerClientID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +// All implementations must embed UnimplementedQueryServer +// for forward compatibility +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a MonitoringInfo by index. + GetMonitoringInfo(context.Context, *QueryGetMonitoringInfoRequest) (*QueryGetMonitoringInfoResponse, error) + // Queries a ConnectionChannelID by index. + GetConnectionChannelID(context.Context, *QueryGetConnectionChannelIDRequest) (*QueryGetConnectionChannelIDResponse, error) + // Queries a ConsumerClientID by index. + GetConsumerClientID(context.Context, *QueryGetConsumerClientIDRequest) (*QueryGetConsumerClientIDResponse, error) + mustEmbedUnimplementedQueryServer() +} + +// UnimplementedQueryServer must be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (UnimplementedQueryServer) GetMonitoringInfo(context.Context, *QueryGetMonitoringInfoRequest) (*QueryGetMonitoringInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMonitoringInfo not implemented") +} +func (UnimplementedQueryServer) GetConnectionChannelID(context.Context, *QueryGetConnectionChannelIDRequest) (*QueryGetConnectionChannelIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetConnectionChannelID not implemented") +} +func (UnimplementedQueryServer) GetConsumerClientID(context.Context, *QueryGetConsumerClientIDRequest) (*QueryGetConsumerClientIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetConsumerClientID not implemented") +} +func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} + +// UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to QueryServer will +// result in compilation errors. +type UnsafeQueryServer interface { + mustEmbedUnimplementedQueryServer() +} + +func RegisterQueryServer(s grpc.ServiceRegistrar, srv QueryServer) { + s.RegisterService(&Query_ServiceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_Params_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetMonitoringInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetMonitoringInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetMonitoringInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetMonitoringInfo_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetMonitoringInfo(ctx, req.(*QueryGetMonitoringInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetConnectionChannelID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetConnectionChannelIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetConnectionChannelID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetConnectionChannelID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetConnectionChannelID(ctx, req.(*QueryGetConnectionChannelIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetConsumerClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetConsumerClientIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetConsumerClientID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetConsumerClientID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetConsumerClientID(ctx, req.(*QueryGetConsumerClientIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Query_ServiceDesc is the grpc.ServiceDesc for Query service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Query_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.monitoringp.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetMonitoringInfo", + Handler: _Query_GetMonitoringInfo_Handler, + }, + { + MethodName: "GetConnectionChannelID", + Handler: _Query_GetConnectionChannelID_Handler, + }, + { + MethodName: "GetConsumerClientID", + Handler: _Query_GetConsumerClientID_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/monitoringp/v1/query.proto", +} diff --git a/api/network/monitoringp/v1/tx.pulsar.go b/api/network/monitoringp/v1/tx.pulsar.go new file mode 100644 index 00000000..133d5086 --- /dev/null +++ b/api/network/monitoringp/v1/tx.pulsar.go @@ -0,0 +1,1096 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package monitoringpv1 + +import ( + _ "cosmossdk.io/api/amino" + _ "cosmossdk.io/api/cosmos/msg/v1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MsgUpdateParams protoreflect.MessageDescriptor + fd_MsgUpdateParams_authority protoreflect.FieldDescriptor + fd_MsgUpdateParams_params protoreflect.FieldDescriptor +) + +func init() { + file_network_monitoringp_v1_tx_proto_init() + md_MsgUpdateParams = File_network_monitoringp_v1_tx_proto.Messages().ByName("MsgUpdateParams") + fd_MsgUpdateParams_authority = md_MsgUpdateParams.Fields().ByName("authority") + fd_MsgUpdateParams_params = md_MsgUpdateParams.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParams)(nil) + +type fastReflection_MsgUpdateParams MsgUpdateParams + +func (x *MsgUpdateParams) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(x) +} + +func (x *MsgUpdateParams) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_tx_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) +} + +var _fastReflection_MsgUpdateParams_messageType fastReflection_MsgUpdateParams_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParams_messageType{} + +type fastReflection_MsgUpdateParams_messageType struct{} + +func (x fastReflection_MsgUpdateParams_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(nil) +} +func (x fastReflection_MsgUpdateParams_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} +func (x fastReflection_MsgUpdateParams_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParams) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParams) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParams_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParams) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParams) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParams)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParams) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_MsgUpdateParams_authority, value) { + return + } + } + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_MsgUpdateParams_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParams) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.monitoringp.v1.MsgUpdateParams.authority": + return x.Authority != "" + case "network.monitoringp.v1.MsgUpdateParams.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.monitoringp.v1.MsgUpdateParams.authority": + x.Authority = "" + case "network.monitoringp.v1.MsgUpdateParams.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParams) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.monitoringp.v1.MsgUpdateParams.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + case "network.monitoringp.v1.MsgUpdateParams.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParams does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.monitoringp.v1.MsgUpdateParams.authority": + x.Authority = value.Interface().(string) + case "network.monitoringp.v1.MsgUpdateParams.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.MsgUpdateParams.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.monitoringp.v1.MsgUpdateParams.authority": + panic(fmt.Errorf("field authority of message network.monitoringp.v1.MsgUpdateParams is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParams) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.monitoringp.v1.MsgUpdateParams.authority": + return protoreflect.ValueOfString("") + case "network.monitoringp.v1.MsgUpdateParams.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParams) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.MsgUpdateParams", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParams) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParams) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParams) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateParamsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_monitoringp_v1_tx_proto_init() + md_MsgUpdateParamsResponse = File_network_monitoringp_v1_tx_proto.Messages().ByName("MsgUpdateParamsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParamsResponse)(nil) + +type fastReflection_MsgUpdateParamsResponse MsgUpdateParamsResponse + +func (x *MsgUpdateParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(x) +} + +func (x *MsgUpdateParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_monitoringp_v1_tx_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) +} + +var _fastReflection_MsgUpdateParamsResponse_messageType fastReflection_MsgUpdateParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParamsResponse_messageType{} + +type fastReflection_MsgUpdateParamsResponse_messageType struct{} + +func (x fastReflection_MsgUpdateParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(nil) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParamsResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParamsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.monitoringp.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.monitoringp.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.monitoringp.v1.MsgUpdateParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/monitoringp/v1/tx.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // params defines the module parameters to update. + // + // NOTE: All parameters must be supplied. + Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *MsgUpdateParams) Reset() { + *x = MsgUpdateParams{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_tx_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParams) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_tx_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgUpdateParams) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +func (x *MsgUpdateParams) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateParamsResponse) Reset() { + *x = MsgUpdateParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_monitoringp_v1_tx_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParamsResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return file_network_monitoringp_v1_tx_proto_rawDescGZIP(), []int{1} +} + +var File_network_monitoringp_v1_tx_proto protoreflect.FileDescriptor + +var file_network_monitoringp_v1_tx_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, + 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x73, 0x67, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, 0x01, 0x0a, 0x0f, + 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x38, 0x82, 0xe7, 0xb0, 0x2a, + 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x25, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0x76, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x68, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, + 0x2f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xe3, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x70, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, + 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x69, 0x6e, 0x67, 0x70, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x70, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x4d, 0x58, 0xaa, 0x02, 0x16, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, + 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x22, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x6e, 0x67, 0x70, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_monitoringp_v1_tx_proto_rawDescOnce sync.Once + file_network_monitoringp_v1_tx_proto_rawDescData = file_network_monitoringp_v1_tx_proto_rawDesc +) + +func file_network_monitoringp_v1_tx_proto_rawDescGZIP() []byte { + file_network_monitoringp_v1_tx_proto_rawDescOnce.Do(func() { + file_network_monitoringp_v1_tx_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_monitoringp_v1_tx_proto_rawDescData) + }) + return file_network_monitoringp_v1_tx_proto_rawDescData +} + +var file_network_monitoringp_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_monitoringp_v1_tx_proto_goTypes = []interface{}{ + (*MsgUpdateParams)(nil), // 0: network.monitoringp.v1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 1: network.monitoringp.v1.MsgUpdateParamsResponse + (*Params)(nil), // 2: network.monitoringp.v1.Params +} +var file_network_monitoringp_v1_tx_proto_depIdxs = []int32{ + 2, // 0: network.monitoringp.v1.MsgUpdateParams.params:type_name -> network.monitoringp.v1.Params + 0, // 1: network.monitoringp.v1.Msg.UpdateParams:input_type -> network.monitoringp.v1.MsgUpdateParams + 1, // 2: network.monitoringp.v1.Msg.UpdateParams:output_type -> network.monitoringp.v1.MsgUpdateParamsResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] 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_network_monitoringp_v1_tx_proto_init() } +func file_network_monitoringp_v1_tx_proto_init() { + if File_network_monitoringp_v1_tx_proto != nil { + return + } + file_network_monitoringp_v1_params_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_monitoringp_v1_tx_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_monitoringp_v1_tx_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParamsResponse); 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_network_monitoringp_v1_tx_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_monitoringp_v1_tx_proto_goTypes, + DependencyIndexes: file_network_monitoringp_v1_tx_proto_depIdxs, + MessageInfos: file_network_monitoringp_v1_tx_proto_msgTypes, + }.Build() + File_network_monitoringp_v1_tx_proto = out.File + file_network_monitoringp_v1_tx_proto_rawDesc = nil + file_network_monitoringp_v1_tx_proto_goTypes = nil + file_network_monitoringp_v1_tx_proto_depIdxs = nil +} diff --git a/api/network/monitoringp/v1/tx_grpc.pb.go b/api/network/monitoringp/v1/tx_grpc.pb.go new file mode 100644 index 00000000..38763467 --- /dev/null +++ b/api/network/monitoringp/v1/tx_grpc.pb.go @@ -0,0 +1,113 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/monitoringp/v1/tx.proto + +package monitoringpv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Msg_UpdateParams_FullMethodName = "/network.monitoringp.v1.Msg/UpdateParams" +) + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) +} + +type msgClient struct { + cc grpc.ClientConnInterface +} + +func NewMsgClient(cc grpc.ClientConnInterface) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, Msg_UpdateParams_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +// All implementations must embed UnimplementedMsgServer +// for forward compatibility +type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + mustEmbedUnimplementedMsgServer() +} + +// UnimplementedMsgServer must be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} +func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} + +// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MsgServer will +// result in compilation errors. +type UnsafeMsgServer interface { + mustEmbedUnimplementedMsgServer() +} + +func RegisterMsgServer(s grpc.ServiceRegistrar, srv MsgServer) { + s.RegisterService(&Msg_ServiceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateParams_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Msg_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.monitoringp.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/monitoringp/v1/tx.proto", +} diff --git a/api/network/participation/module/v1/module.pulsar.go b/api/network/participation/module/v1/module.pulsar.go new file mode 100644 index 00000000..021f5edf --- /dev/null +++ b/api/network/participation/module/v1/module.pulsar.go @@ -0,0 +1,583 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package modulev1 + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Module protoreflect.MessageDescriptor + fd_Module_authority protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_module_v1_module_proto_init() + md_Module = File_network_participation_module_v1_module_proto.Messages().ByName("Module") + fd_Module_authority = md_Module.Fields().ByName("authority") +} + +var _ protoreflect.Message = (*fastReflection_Module)(nil) + +type fastReflection_Module Module + +func (x *Module) ProtoReflect() protoreflect.Message { + return (*fastReflection_Module)(x) +} + +func (x *Module) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_module_v1_module_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) +} + +var _fastReflection_Module_messageType fastReflection_Module_messageType +var _ protoreflect.MessageType = fastReflection_Module_messageType{} + +type fastReflection_Module_messageType struct{} + +func (x fastReflection_Module_messageType) Zero() protoreflect.Message { + return (*fastReflection_Module)(nil) +} +func (x fastReflection_Module_messageType) New() protoreflect.Message { + return new(fastReflection_Module) +} +func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Module) Type() protoreflect.MessageType { + return _fastReflection_Module_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Module) New() protoreflect.Message { + return new(fastReflection_Module) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage { + return (*Module)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_Module_authority, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.module.v1.Module.authority": + return x.Authority != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.module.v1.Module")) + } + panic(fmt.Errorf("message network.participation.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.module.v1.Module.authority": + x.Authority = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.module.v1.Module")) + } + panic(fmt.Errorf("message network.participation.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.module.v1.Module.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.module.v1.Module")) + } + panic(fmt.Errorf("message network.participation.module.v1.Module does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.module.v1.Module.authority": + x.Authority = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.module.v1.Module")) + } + panic(fmt.Errorf("message network.participation.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.module.v1.Module.authority": + panic(fmt.Errorf("field authority of message network.participation.module.v1.Module is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.module.v1.Module")) + } + panic(fmt.Errorf("message network.participation.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.module.v1.Module.authority": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.module.v1.Module")) + } + panic(fmt.Errorf("message network.participation.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.module.v1.Module", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Module) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/participation/module/v1/module.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Module is the config object for the module. +type Module struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (x *Module) Reset() { + *x = Module{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_module_v1_module_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Module) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Module) ProtoMessage() {} + +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { + return file_network_participation_module_v1_module_proto_rawDescGZIP(), []int{0} +} + +func (x *Module) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +var File_network_participation_module_v1_module_proto protoreflect.FileDescriptor + +var file_network_participation_module_v1_module_proto_rawDesc = []byte{ + 0x0a, 0x2c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, + 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x59, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x31, 0xba, 0xc0, 0x96, 0xda, 0x01, + 0x2b, 0x0a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, + 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x99, 0x02, 0x0a, + 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, + 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, + 0x4d, 0xaa, 0x02, 0x1f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x1f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x2b, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x22, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_participation_module_v1_module_proto_rawDescOnce sync.Once + file_network_participation_module_v1_module_proto_rawDescData = file_network_participation_module_v1_module_proto_rawDesc +) + +func file_network_participation_module_v1_module_proto_rawDescGZIP() []byte { + file_network_participation_module_v1_module_proto_rawDescOnce.Do(func() { + file_network_participation_module_v1_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_participation_module_v1_module_proto_rawDescData) + }) + return file_network_participation_module_v1_module_proto_rawDescData +} + +var file_network_participation_module_v1_module_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_participation_module_v1_module_proto_goTypes = []interface{}{ + (*Module)(nil), // 0: network.participation.module.v1.Module +} +var file_network_participation_module_v1_module_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 +} + +func init() { file_network_participation_module_v1_module_proto_init() } +func file_network_participation_module_v1_module_proto_init() { + if File_network_participation_module_v1_module_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_participation_module_v1_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Module); 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_network_participation_module_v1_module_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_participation_module_v1_module_proto_goTypes, + DependencyIndexes: file_network_participation_module_v1_module_proto_depIdxs, + MessageInfos: file_network_participation_module_v1_module_proto_msgTypes, + }.Build() + File_network_participation_module_v1_module_proto = out.File + file_network_participation_module_v1_module_proto_rawDesc = nil + file_network_participation_module_v1_module_proto_goTypes = nil + file_network_participation_module_v1_module_proto_depIdxs = nil +} diff --git a/api/network/participation/v1/auction_used_allocations.pulsar.go b/api/network/participation/v1/auction_used_allocations.pulsar.go new file mode 100644 index 00000000..52317e20 --- /dev/null +++ b/api/network/participation/v1/auction_used_allocations.pulsar.go @@ -0,0 +1,781 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package participationv1 + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_AuctionUsedAllocations protoreflect.MessageDescriptor + fd_AuctionUsedAllocations_address protoreflect.FieldDescriptor + fd_AuctionUsedAllocations_auctionID protoreflect.FieldDescriptor + fd_AuctionUsedAllocations_withdrawn protoreflect.FieldDescriptor + fd_AuctionUsedAllocations_numAllocations protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_auction_used_allocations_proto_init() + md_AuctionUsedAllocations = File_network_participation_v1_auction_used_allocations_proto.Messages().ByName("AuctionUsedAllocations") + fd_AuctionUsedAllocations_address = md_AuctionUsedAllocations.Fields().ByName("address") + fd_AuctionUsedAllocations_auctionID = md_AuctionUsedAllocations.Fields().ByName("auctionID") + fd_AuctionUsedAllocations_withdrawn = md_AuctionUsedAllocations.Fields().ByName("withdrawn") + fd_AuctionUsedAllocations_numAllocations = md_AuctionUsedAllocations.Fields().ByName("numAllocations") +} + +var _ protoreflect.Message = (*fastReflection_AuctionUsedAllocations)(nil) + +type fastReflection_AuctionUsedAllocations AuctionUsedAllocations + +func (x *AuctionUsedAllocations) ProtoReflect() protoreflect.Message { + return (*fastReflection_AuctionUsedAllocations)(x) +} + +func (x *AuctionUsedAllocations) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_auction_used_allocations_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) +} + +var _fastReflection_AuctionUsedAllocations_messageType fastReflection_AuctionUsedAllocations_messageType +var _ protoreflect.MessageType = fastReflection_AuctionUsedAllocations_messageType{} + +type fastReflection_AuctionUsedAllocations_messageType struct{} + +func (x fastReflection_AuctionUsedAllocations_messageType) Zero() protoreflect.Message { + return (*fastReflection_AuctionUsedAllocations)(nil) +} +func (x fastReflection_AuctionUsedAllocations_messageType) New() protoreflect.Message { + return new(fastReflection_AuctionUsedAllocations) +} +func (x fastReflection_AuctionUsedAllocations_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_AuctionUsedAllocations +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_AuctionUsedAllocations) Descriptor() protoreflect.MessageDescriptor { + return md_AuctionUsedAllocations +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_AuctionUsedAllocations) Type() protoreflect.MessageType { + return _fastReflection_AuctionUsedAllocations_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_AuctionUsedAllocations) New() protoreflect.Message { + return new(fastReflection_AuctionUsedAllocations) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_AuctionUsedAllocations) Interface() protoreflect.ProtoMessage { + return (*AuctionUsedAllocations)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_AuctionUsedAllocations) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_AuctionUsedAllocations_address, value) { + return + } + } + if x.AuctionID != uint64(0) { + value := protoreflect.ValueOfUint64(x.AuctionID) + if !f(fd_AuctionUsedAllocations_auctionID, value) { + return + } + } + if x.Withdrawn != false { + value := protoreflect.ValueOfBool(x.Withdrawn) + if !f(fd_AuctionUsedAllocations_withdrawn, value) { + return + } + } + if x.NumAllocations != "" { + value := protoreflect.ValueOfString(x.NumAllocations) + if !f(fd_AuctionUsedAllocations_numAllocations, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_AuctionUsedAllocations) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.AuctionUsedAllocations.address": + return x.Address != "" + case "network.participation.v1.AuctionUsedAllocations.auctionID": + return x.AuctionID != uint64(0) + case "network.participation.v1.AuctionUsedAllocations.withdrawn": + return x.Withdrawn != false + case "network.participation.v1.AuctionUsedAllocations.numAllocations": + return x.NumAllocations != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AuctionUsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.AuctionUsedAllocations does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AuctionUsedAllocations) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.AuctionUsedAllocations.address": + x.Address = "" + case "network.participation.v1.AuctionUsedAllocations.auctionID": + x.AuctionID = uint64(0) + case "network.participation.v1.AuctionUsedAllocations.withdrawn": + x.Withdrawn = false + case "network.participation.v1.AuctionUsedAllocations.numAllocations": + x.NumAllocations = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AuctionUsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.AuctionUsedAllocations does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_AuctionUsedAllocations) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.AuctionUsedAllocations.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.participation.v1.AuctionUsedAllocations.auctionID": + value := x.AuctionID + return protoreflect.ValueOfUint64(value) + case "network.participation.v1.AuctionUsedAllocations.withdrawn": + value := x.Withdrawn + return protoreflect.ValueOfBool(value) + case "network.participation.v1.AuctionUsedAllocations.numAllocations": + value := x.NumAllocations + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AuctionUsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.AuctionUsedAllocations does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AuctionUsedAllocations) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.AuctionUsedAllocations.address": + x.Address = value.Interface().(string) + case "network.participation.v1.AuctionUsedAllocations.auctionID": + x.AuctionID = value.Uint() + case "network.participation.v1.AuctionUsedAllocations.withdrawn": + x.Withdrawn = value.Bool() + case "network.participation.v1.AuctionUsedAllocations.numAllocations": + x.NumAllocations = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AuctionUsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.AuctionUsedAllocations does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AuctionUsedAllocations) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.AuctionUsedAllocations.address": + panic(fmt.Errorf("field address of message network.participation.v1.AuctionUsedAllocations is not mutable")) + case "network.participation.v1.AuctionUsedAllocations.auctionID": + panic(fmt.Errorf("field auctionID of message network.participation.v1.AuctionUsedAllocations is not mutable")) + case "network.participation.v1.AuctionUsedAllocations.withdrawn": + panic(fmt.Errorf("field withdrawn of message network.participation.v1.AuctionUsedAllocations is not mutable")) + case "network.participation.v1.AuctionUsedAllocations.numAllocations": + panic(fmt.Errorf("field numAllocations of message network.participation.v1.AuctionUsedAllocations is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AuctionUsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.AuctionUsedAllocations does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_AuctionUsedAllocations) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.AuctionUsedAllocations.address": + return protoreflect.ValueOfString("") + case "network.participation.v1.AuctionUsedAllocations.auctionID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.participation.v1.AuctionUsedAllocations.withdrawn": + return protoreflect.ValueOfBool(false) + case "network.participation.v1.AuctionUsedAllocations.numAllocations": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AuctionUsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.AuctionUsedAllocations does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_AuctionUsedAllocations) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.AuctionUsedAllocations", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_AuctionUsedAllocations) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AuctionUsedAllocations) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_AuctionUsedAllocations) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_AuctionUsedAllocations) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*AuctionUsedAllocations) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.AuctionID != 0 { + n += 1 + runtime.Sov(uint64(x.AuctionID)) + } + if x.Withdrawn { + n += 2 + } + l = len(x.NumAllocations) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*AuctionUsedAllocations) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.NumAllocations) > 0 { + i -= len(x.NumAllocations) + copy(dAtA[i:], x.NumAllocations) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NumAllocations))) + i-- + dAtA[i] = 0x22 + } + if x.Withdrawn { + i-- + if x.Withdrawn { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if x.AuctionID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.AuctionID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*AuctionUsedAllocations) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AuctionUsedAllocations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AuctionUsedAllocations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) + } + x.AuctionID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.AuctionID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Withdrawn", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Withdrawn = bool(v != 0) + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NumAllocations", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NumAllocations = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/participation/v1/auction_used_allocations.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type AuctionUsedAllocations struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` + Withdrawn bool `protobuf:"varint,3,opt,name=withdrawn,proto3" json:"withdrawn,omitempty"` + NumAllocations string `protobuf:"bytes,4,opt,name=numAllocations,proto3" json:"numAllocations,omitempty"` +} + +func (x *AuctionUsedAllocations) Reset() { + *x = AuctionUsedAllocations{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_auction_used_allocations_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionUsedAllocations) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionUsedAllocations) ProtoMessage() {} + +// Deprecated: Use AuctionUsedAllocations.ProtoReflect.Descriptor instead. +func (*AuctionUsedAllocations) Descriptor() ([]byte, []int) { + return file_network_participation_v1_auction_used_allocations_proto_rawDescGZIP(), []int{0} +} + +func (x *AuctionUsedAllocations) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *AuctionUsedAllocations) GetAuctionID() uint64 { + if x != nil { + return x.AuctionID + } + return 0 +} + +func (x *AuctionUsedAllocations) GetWithdrawn() bool { + if x != nil { + return x.Withdrawn + } + return false +} + +func (x *AuctionUsedAllocations) GetNumAllocations() string { + if x != nil { + return x.NumAllocations + } + return "" +} + +var File_network_participation_v1_auction_used_allocations_proto protoreflect.FileDescriptor + +var file_network_participation_v1_auction_used_allocations_proto_rawDesc = []byte{ + 0x0a, 0x37, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, + 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdd, 0x01, 0x0a, 0x16, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, + 0x53, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, + 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x85, 0x02, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, + 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, + 0x50, 0x58, 0xaa, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x18, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x24, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x1a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_participation_v1_auction_used_allocations_proto_rawDescOnce sync.Once + file_network_participation_v1_auction_used_allocations_proto_rawDescData = file_network_participation_v1_auction_used_allocations_proto_rawDesc +) + +func file_network_participation_v1_auction_used_allocations_proto_rawDescGZIP() []byte { + file_network_participation_v1_auction_used_allocations_proto_rawDescOnce.Do(func() { + file_network_participation_v1_auction_used_allocations_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_participation_v1_auction_used_allocations_proto_rawDescData) + }) + return file_network_participation_v1_auction_used_allocations_proto_rawDescData +} + +var file_network_participation_v1_auction_used_allocations_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_participation_v1_auction_used_allocations_proto_goTypes = []interface{}{ + (*AuctionUsedAllocations)(nil), // 0: network.participation.v1.AuctionUsedAllocations +} +var file_network_participation_v1_auction_used_allocations_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 +} + +func init() { file_network_participation_v1_auction_used_allocations_proto_init() } +func file_network_participation_v1_auction_used_allocations_proto_init() { + if File_network_participation_v1_auction_used_allocations_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_participation_v1_auction_used_allocations_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuctionUsedAllocations); 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_network_participation_v1_auction_used_allocations_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_participation_v1_auction_used_allocations_proto_goTypes, + DependencyIndexes: file_network_participation_v1_auction_used_allocations_proto_depIdxs, + MessageInfos: file_network_participation_v1_auction_used_allocations_proto_msgTypes, + }.Build() + File_network_participation_v1_auction_used_allocations_proto = out.File + file_network_participation_v1_auction_used_allocations_proto_rawDesc = nil + file_network_participation_v1_auction_used_allocations_proto_goTypes = nil + file_network_participation_v1_auction_used_allocations_proto_depIdxs = nil +} diff --git a/api/network/participation/v1/events.pulsar.go b/api/network/participation/v1/events.pulsar.go new file mode 100644 index 00000000..26711d20 --- /dev/null +++ b/api/network/participation/v1/events.pulsar.go @@ -0,0 +1,1247 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package participationv1 + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_EventAllocationsUsed protoreflect.MessageDescriptor + fd_EventAllocationsUsed_participant protoreflect.FieldDescriptor + fd_EventAllocationsUsed_auctionID protoreflect.FieldDescriptor + fd_EventAllocationsUsed_numAllocations protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_events_proto_init() + md_EventAllocationsUsed = File_network_participation_v1_events_proto.Messages().ByName("EventAllocationsUsed") + fd_EventAllocationsUsed_participant = md_EventAllocationsUsed.Fields().ByName("participant") + fd_EventAllocationsUsed_auctionID = md_EventAllocationsUsed.Fields().ByName("auctionID") + fd_EventAllocationsUsed_numAllocations = md_EventAllocationsUsed.Fields().ByName("numAllocations") +} + +var _ protoreflect.Message = (*fastReflection_EventAllocationsUsed)(nil) + +type fastReflection_EventAllocationsUsed EventAllocationsUsed + +func (x *EventAllocationsUsed) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventAllocationsUsed)(x) +} + +func (x *EventAllocationsUsed) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_events_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) +} + +var _fastReflection_EventAllocationsUsed_messageType fastReflection_EventAllocationsUsed_messageType +var _ protoreflect.MessageType = fastReflection_EventAllocationsUsed_messageType{} + +type fastReflection_EventAllocationsUsed_messageType struct{} + +func (x fastReflection_EventAllocationsUsed_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventAllocationsUsed)(nil) +} +func (x fastReflection_EventAllocationsUsed_messageType) New() protoreflect.Message { + return new(fastReflection_EventAllocationsUsed) +} +func (x fastReflection_EventAllocationsUsed_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventAllocationsUsed +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventAllocationsUsed) Descriptor() protoreflect.MessageDescriptor { + return md_EventAllocationsUsed +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventAllocationsUsed) Type() protoreflect.MessageType { + return _fastReflection_EventAllocationsUsed_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventAllocationsUsed) New() protoreflect.Message { + return new(fastReflection_EventAllocationsUsed) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventAllocationsUsed) Interface() protoreflect.ProtoMessage { + return (*EventAllocationsUsed)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventAllocationsUsed) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Participant != "" { + value := protoreflect.ValueOfString(x.Participant) + if !f(fd_EventAllocationsUsed_participant, value) { + return + } + } + if x.AuctionID != uint64(0) { + value := protoreflect.ValueOfUint64(x.AuctionID) + if !f(fd_EventAllocationsUsed_auctionID, value) { + return + } + } + if x.NumAllocations != "" { + value := protoreflect.ValueOfString(x.NumAllocations) + if !f(fd_EventAllocationsUsed_numAllocations, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventAllocationsUsed) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsUsed.participant": + return x.Participant != "" + case "network.participation.v1.EventAllocationsUsed.auctionID": + return x.AuctionID != uint64(0) + case "network.participation.v1.EventAllocationsUsed.numAllocations": + return x.NumAllocations != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsUsed")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsUsed does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAllocationsUsed) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsUsed.participant": + x.Participant = "" + case "network.participation.v1.EventAllocationsUsed.auctionID": + x.AuctionID = uint64(0) + case "network.participation.v1.EventAllocationsUsed.numAllocations": + x.NumAllocations = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsUsed")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsUsed does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventAllocationsUsed) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.EventAllocationsUsed.participant": + value := x.Participant + return protoreflect.ValueOfString(value) + case "network.participation.v1.EventAllocationsUsed.auctionID": + value := x.AuctionID + return protoreflect.ValueOfUint64(value) + case "network.participation.v1.EventAllocationsUsed.numAllocations": + value := x.NumAllocations + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsUsed")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsUsed does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAllocationsUsed) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsUsed.participant": + x.Participant = value.Interface().(string) + case "network.participation.v1.EventAllocationsUsed.auctionID": + x.AuctionID = value.Uint() + case "network.participation.v1.EventAllocationsUsed.numAllocations": + x.NumAllocations = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsUsed")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsUsed does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAllocationsUsed) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsUsed.participant": + panic(fmt.Errorf("field participant of message network.participation.v1.EventAllocationsUsed is not mutable")) + case "network.participation.v1.EventAllocationsUsed.auctionID": + panic(fmt.Errorf("field auctionID of message network.participation.v1.EventAllocationsUsed is not mutable")) + case "network.participation.v1.EventAllocationsUsed.numAllocations": + panic(fmt.Errorf("field numAllocations of message network.participation.v1.EventAllocationsUsed is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsUsed")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsUsed does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventAllocationsUsed) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsUsed.participant": + return protoreflect.ValueOfString("") + case "network.participation.v1.EventAllocationsUsed.auctionID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.participation.v1.EventAllocationsUsed.numAllocations": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsUsed")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsUsed does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventAllocationsUsed) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.EventAllocationsUsed", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventAllocationsUsed) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAllocationsUsed) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventAllocationsUsed) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventAllocationsUsed) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventAllocationsUsed) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Participant) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.AuctionID != 0 { + n += 1 + runtime.Sov(uint64(x.AuctionID)) + } + l = len(x.NumAllocations) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventAllocationsUsed) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.NumAllocations) > 0 { + i -= len(x.NumAllocations) + copy(dAtA[i:], x.NumAllocations) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NumAllocations))) + i-- + dAtA[i] = 0x1a + } + if x.AuctionID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.AuctionID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Participant) > 0 { + i -= len(x.Participant) + copy(dAtA[i:], x.Participant) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Participant))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventAllocationsUsed) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventAllocationsUsed: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventAllocationsUsed: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Participant", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Participant = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) + } + x.AuctionID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.AuctionID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NumAllocations", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NumAllocations = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventAllocationsWithdrawn protoreflect.MessageDescriptor + fd_EventAllocationsWithdrawn_participant protoreflect.FieldDescriptor + fd_EventAllocationsWithdrawn_auctionID protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_events_proto_init() + md_EventAllocationsWithdrawn = File_network_participation_v1_events_proto.Messages().ByName("EventAllocationsWithdrawn") + fd_EventAllocationsWithdrawn_participant = md_EventAllocationsWithdrawn.Fields().ByName("participant") + fd_EventAllocationsWithdrawn_auctionID = md_EventAllocationsWithdrawn.Fields().ByName("auctionID") +} + +var _ protoreflect.Message = (*fastReflection_EventAllocationsWithdrawn)(nil) + +type fastReflection_EventAllocationsWithdrawn EventAllocationsWithdrawn + +func (x *EventAllocationsWithdrawn) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventAllocationsWithdrawn)(x) +} + +func (x *EventAllocationsWithdrawn) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_events_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) +} + +var _fastReflection_EventAllocationsWithdrawn_messageType fastReflection_EventAllocationsWithdrawn_messageType +var _ protoreflect.MessageType = fastReflection_EventAllocationsWithdrawn_messageType{} + +type fastReflection_EventAllocationsWithdrawn_messageType struct{} + +func (x fastReflection_EventAllocationsWithdrawn_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventAllocationsWithdrawn)(nil) +} +func (x fastReflection_EventAllocationsWithdrawn_messageType) New() protoreflect.Message { + return new(fastReflection_EventAllocationsWithdrawn) +} +func (x fastReflection_EventAllocationsWithdrawn_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventAllocationsWithdrawn +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventAllocationsWithdrawn) Descriptor() protoreflect.MessageDescriptor { + return md_EventAllocationsWithdrawn +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventAllocationsWithdrawn) Type() protoreflect.MessageType { + return _fastReflection_EventAllocationsWithdrawn_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventAllocationsWithdrawn) New() protoreflect.Message { + return new(fastReflection_EventAllocationsWithdrawn) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventAllocationsWithdrawn) Interface() protoreflect.ProtoMessage { + return (*EventAllocationsWithdrawn)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventAllocationsWithdrawn) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Participant != "" { + value := protoreflect.ValueOfString(x.Participant) + if !f(fd_EventAllocationsWithdrawn_participant, value) { + return + } + } + if x.AuctionID != uint64(0) { + value := protoreflect.ValueOfUint64(x.AuctionID) + if !f(fd_EventAllocationsWithdrawn_auctionID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventAllocationsWithdrawn) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsWithdrawn.participant": + return x.Participant != "" + case "network.participation.v1.EventAllocationsWithdrawn.auctionID": + return x.AuctionID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsWithdrawn")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsWithdrawn does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAllocationsWithdrawn) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsWithdrawn.participant": + x.Participant = "" + case "network.participation.v1.EventAllocationsWithdrawn.auctionID": + x.AuctionID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsWithdrawn")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsWithdrawn does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventAllocationsWithdrawn) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.EventAllocationsWithdrawn.participant": + value := x.Participant + return protoreflect.ValueOfString(value) + case "network.participation.v1.EventAllocationsWithdrawn.auctionID": + value := x.AuctionID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsWithdrawn")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsWithdrawn does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAllocationsWithdrawn) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsWithdrawn.participant": + x.Participant = value.Interface().(string) + case "network.participation.v1.EventAllocationsWithdrawn.auctionID": + x.AuctionID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsWithdrawn")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsWithdrawn does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAllocationsWithdrawn) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsWithdrawn.participant": + panic(fmt.Errorf("field participant of message network.participation.v1.EventAllocationsWithdrawn is not mutable")) + case "network.participation.v1.EventAllocationsWithdrawn.auctionID": + panic(fmt.Errorf("field auctionID of message network.participation.v1.EventAllocationsWithdrawn is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsWithdrawn")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsWithdrawn does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventAllocationsWithdrawn) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.EventAllocationsWithdrawn.participant": + return protoreflect.ValueOfString("") + case "network.participation.v1.EventAllocationsWithdrawn.auctionID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.EventAllocationsWithdrawn")) + } + panic(fmt.Errorf("message network.participation.v1.EventAllocationsWithdrawn does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventAllocationsWithdrawn) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.EventAllocationsWithdrawn", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventAllocationsWithdrawn) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventAllocationsWithdrawn) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventAllocationsWithdrawn) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventAllocationsWithdrawn) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventAllocationsWithdrawn) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Participant) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.AuctionID != 0 { + n += 1 + runtime.Sov(uint64(x.AuctionID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventAllocationsWithdrawn) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.AuctionID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.AuctionID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Participant) > 0 { + i -= len(x.Participant) + copy(dAtA[i:], x.Participant) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Participant))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventAllocationsWithdrawn) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventAllocationsWithdrawn: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventAllocationsWithdrawn: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Participant", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Participant = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) + } + x.AuctionID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.AuctionID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/participation/v1/events.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EventAllocationsUsed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Participant string `protobuf:"bytes,1,opt,name=participant,proto3" json:"participant,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` + NumAllocations string `protobuf:"bytes,3,opt,name=numAllocations,proto3" json:"numAllocations,omitempty"` +} + +func (x *EventAllocationsUsed) Reset() { + *x = EventAllocationsUsed{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_events_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventAllocationsUsed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventAllocationsUsed) ProtoMessage() {} + +// Deprecated: Use EventAllocationsUsed.ProtoReflect.Descriptor instead. +func (*EventAllocationsUsed) Descriptor() ([]byte, []int) { + return file_network_participation_v1_events_proto_rawDescGZIP(), []int{0} +} + +func (x *EventAllocationsUsed) GetParticipant() string { + if x != nil { + return x.Participant + } + return "" +} + +func (x *EventAllocationsUsed) GetAuctionID() uint64 { + if x != nil { + return x.AuctionID + } + return 0 +} + +func (x *EventAllocationsUsed) GetNumAllocations() string { + if x != nil { + return x.NumAllocations + } + return "" +} + +type EventAllocationsWithdrawn struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Participant string `protobuf:"bytes,1,opt,name=participant,proto3" json:"participant,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` +} + +func (x *EventAllocationsWithdrawn) Reset() { + *x = EventAllocationsWithdrawn{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_events_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventAllocationsWithdrawn) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventAllocationsWithdrawn) ProtoMessage() {} + +// Deprecated: Use EventAllocationsWithdrawn.ProtoReflect.Descriptor instead. +func (*EventAllocationsWithdrawn) Descriptor() ([]byte, []int) { + return file_network_participation_v1_events_proto_rawDescGZIP(), []int{1} +} + +func (x *EventAllocationsWithdrawn) GetParticipant() string { + if x != nil { + return x.Participant + } + return "" +} + +func (x *EventAllocationsWithdrawn) GetAuctionID() uint64 { + if x != nil { + return x.AuctionID + } + return 0 +} + +var File_network_participation_v1_events_proto protoreflect.FileDescriptor + +var file_network_participation_v1_events_proto_rawDesc = []byte{ + 0x0a, 0x25, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, + 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xc5, 0x01, 0x0a, 0x14, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x0b, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x53, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x41, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, + 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, + 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x41, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x75, 0x0a, 0x19, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x3a, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, + 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x42, 0xf5, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x42, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, + 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, + 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x18, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x24, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_participation_v1_events_proto_rawDescOnce sync.Once + file_network_participation_v1_events_proto_rawDescData = file_network_participation_v1_events_proto_rawDesc +) + +func file_network_participation_v1_events_proto_rawDescGZIP() []byte { + file_network_participation_v1_events_proto_rawDescOnce.Do(func() { + file_network_participation_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_participation_v1_events_proto_rawDescData) + }) + return file_network_participation_v1_events_proto_rawDescData +} + +var file_network_participation_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_participation_v1_events_proto_goTypes = []interface{}{ + (*EventAllocationsUsed)(nil), // 0: network.participation.v1.EventAllocationsUsed + (*EventAllocationsWithdrawn)(nil), // 1: network.participation.v1.EventAllocationsWithdrawn +} +var file_network_participation_v1_events_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 +} + +func init() { file_network_participation_v1_events_proto_init() } +func file_network_participation_v1_events_proto_init() { + if File_network_participation_v1_events_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_participation_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventAllocationsUsed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_events_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventAllocationsWithdrawn); 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_network_participation_v1_events_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_participation_v1_events_proto_goTypes, + DependencyIndexes: file_network_participation_v1_events_proto_depIdxs, + MessageInfos: file_network_participation_v1_events_proto_msgTypes, + }.Build() + File_network_participation_v1_events_proto = out.File + file_network_participation_v1_events_proto_rawDesc = nil + file_network_participation_v1_events_proto_goTypes = nil + file_network_participation_v1_events_proto_depIdxs = nil +} diff --git a/api/network/participation/v1/genesis.pulsar.go b/api/network/participation/v1/genesis.pulsar.go new file mode 100644 index 00000000..880e43bf --- /dev/null +++ b/api/network/participation/v1/genesis.pulsar.go @@ -0,0 +1,920 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package participationv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_GenesisState_2_list)(nil) + +type _GenesisState_2_list struct { + list *[]*AuctionUsedAllocations +} + +func (x *_GenesisState_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*AuctionUsedAllocations) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*AuctionUsedAllocations) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_2_list) AppendMutable() protoreflect.Value { + v := new(AuctionUsedAllocations) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_2_list) NewElement() protoreflect.Value { + v := new(AuctionUsedAllocations) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_3_list)(nil) + +type _GenesisState_3_list struct { + list *[]*UsedAllocations +} + +func (x *_GenesisState_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*UsedAllocations) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*UsedAllocations) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_3_list) AppendMutable() protoreflect.Value { + v := new(UsedAllocations) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_3_list) NewElement() protoreflect.Value { + v := new(UsedAllocations) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_GenesisState protoreflect.MessageDescriptor + fd_GenesisState_params protoreflect.FieldDescriptor + fd_GenesisState_auctionUsedAllocationsList protoreflect.FieldDescriptor + fd_GenesisState_usedAllocationsList protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_genesis_proto_init() + md_GenesisState = File_network_participation_v1_genesis_proto.Messages().ByName("GenesisState") + fd_GenesisState_params = md_GenesisState.Fields().ByName("params") + fd_GenesisState_auctionUsedAllocationsList = md_GenesisState.Fields().ByName("auctionUsedAllocationsList") + fd_GenesisState_usedAllocationsList = md_GenesisState.Fields().ByName("usedAllocationsList") +} + +var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) + +type fastReflection_GenesisState GenesisState + +func (x *GenesisState) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisState)(x) +} + +func (x *GenesisState) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_genesis_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) +} + +var _fastReflection_GenesisState_messageType fastReflection_GenesisState_messageType +var _ protoreflect.MessageType = fastReflection_GenesisState_messageType{} + +type fastReflection_GenesisState_messageType struct{} + +func (x fastReflection_GenesisState_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisState)(nil) +} +func (x fastReflection_GenesisState_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} +func (x fastReflection_GenesisState_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisState) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisState) Type() protoreflect.MessageType { + return _fastReflection_GenesisState_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisState) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisState) Interface() protoreflect.ProtoMessage { + return (*GenesisState)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_GenesisState_params, value) { + return + } + } + if len(x.AuctionUsedAllocationsList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_2_list{list: &x.AuctionUsedAllocationsList}) + if !f(fd_GenesisState_auctionUsedAllocationsList, value) { + return + } + } + if len(x.UsedAllocationsList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_3_list{list: &x.UsedAllocationsList}) + if !f(fd_GenesisState_usedAllocationsList, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.GenesisState.params": + return x.Params != nil + case "network.participation.v1.GenesisState.auctionUsedAllocationsList": + return len(x.AuctionUsedAllocationsList) != 0 + case "network.participation.v1.GenesisState.usedAllocationsList": + return len(x.UsedAllocationsList) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.GenesisState")) + } + panic(fmt.Errorf("message network.participation.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.GenesisState.params": + x.Params = nil + case "network.participation.v1.GenesisState.auctionUsedAllocationsList": + x.AuctionUsedAllocationsList = nil + case "network.participation.v1.GenesisState.usedAllocationsList": + x.UsedAllocationsList = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.GenesisState")) + } + panic(fmt.Errorf("message network.participation.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.GenesisState.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.participation.v1.GenesisState.auctionUsedAllocationsList": + if len(x.AuctionUsedAllocationsList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_2_list{}) + } + listValue := &_GenesisState_2_list{list: &x.AuctionUsedAllocationsList} + return protoreflect.ValueOfList(listValue) + case "network.participation.v1.GenesisState.usedAllocationsList": + if len(x.UsedAllocationsList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_3_list{}) + } + listValue := &_GenesisState_3_list{list: &x.UsedAllocationsList} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.GenesisState")) + } + panic(fmt.Errorf("message network.participation.v1.GenesisState does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.GenesisState.params": + x.Params = value.Message().Interface().(*Params) + case "network.participation.v1.GenesisState.auctionUsedAllocationsList": + lv := value.List() + clv := lv.(*_GenesisState_2_list) + x.AuctionUsedAllocationsList = *clv.list + case "network.participation.v1.GenesisState.usedAllocationsList": + lv := value.List() + clv := lv.(*_GenesisState_3_list) + x.UsedAllocationsList = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.GenesisState")) + } + panic(fmt.Errorf("message network.participation.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.GenesisState.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.participation.v1.GenesisState.auctionUsedAllocationsList": + if x.AuctionUsedAllocationsList == nil { + x.AuctionUsedAllocationsList = []*AuctionUsedAllocations{} + } + value := &_GenesisState_2_list{list: &x.AuctionUsedAllocationsList} + return protoreflect.ValueOfList(value) + case "network.participation.v1.GenesisState.usedAllocationsList": + if x.UsedAllocationsList == nil { + x.UsedAllocationsList = []*UsedAllocations{} + } + value := &_GenesisState_3_list{list: &x.UsedAllocationsList} + return protoreflect.ValueOfList(value) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.GenesisState")) + } + panic(fmt.Errorf("message network.participation.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.GenesisState.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.participation.v1.GenesisState.auctionUsedAllocationsList": + list := []*AuctionUsedAllocations{} + return protoreflect.ValueOfList(&_GenesisState_2_list{list: &list}) + case "network.participation.v1.GenesisState.usedAllocationsList": + list := []*UsedAllocations{} + return protoreflect.ValueOfList(&_GenesisState_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.GenesisState")) + } + panic(fmt.Errorf("message network.participation.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisState) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.GenesisState", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisState) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisState) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.AuctionUsedAllocationsList) > 0 { + for _, e := range x.AuctionUsedAllocationsList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.UsedAllocationsList) > 0 { + for _, e := range x.UsedAllocationsList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.UsedAllocationsList) > 0 { + for iNdEx := len(x.UsedAllocationsList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.UsedAllocationsList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.AuctionUsedAllocationsList) > 0 { + for iNdEx := len(x.AuctionUsedAllocationsList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.AuctionUsedAllocationsList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionUsedAllocationsList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.AuctionUsedAllocationsList = append(x.AuctionUsedAllocationsList, &AuctionUsedAllocations{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AuctionUsedAllocationsList[len(x.AuctionUsedAllocationsList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field UsedAllocationsList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.UsedAllocationsList = append(x.UsedAllocationsList, &UsedAllocations{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.UsedAllocationsList[len(x.UsedAllocationsList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/participation/v1/genesis.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// GenesisState defines the participation module's genesis state. +type GenesisState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params defines all the parameters of the module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + AuctionUsedAllocationsList []*AuctionUsedAllocations `protobuf:"bytes,2,rep,name=auctionUsedAllocationsList,proto3" json:"auctionUsedAllocationsList,omitempty"` + UsedAllocationsList []*UsedAllocations `protobuf:"bytes,3,rep,name=usedAllocationsList,proto3" json:"usedAllocationsList,omitempty"` +} + +func (x *GenesisState) Reset() { + *x = GenesisState{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_genesis_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisState) ProtoMessage() {} + +// Deprecated: Use GenesisState.ProtoReflect.Descriptor instead. +func (*GenesisState) Descriptor() ([]byte, []int) { + return file_network_participation_v1_genesis_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisState) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +func (x *GenesisState) GetAuctionUsedAllocationsList() []*AuctionUsedAllocations { + if x != nil { + return x.AuctionUsedAllocationsList + } + return nil +} + +func (x *GenesisState) GetUsedAllocationsList() []*UsedAllocations { + if x != nil { + return x.UsedAllocationsList + } + return nil +} + +var File_network_participation_v1_genesis_proto protoreflect.FileDescriptor + +var file_network_participation_v1_genesis_proto_rawDesc = []byte{ + 0x0a, 0x26, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x37, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x02, 0x0a, + 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, + 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x76, 0x0a, 0x1a, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, + 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x1a, + 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x61, 0x0a, 0x13, 0x75, 0x73, + 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x64, 0x41, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x42, 0xf6, 0x01, + 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x0c, + 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, + 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x18, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, + 0x56, 0x31, 0xe2, 0x02, 0x24, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_participation_v1_genesis_proto_rawDescOnce sync.Once + file_network_participation_v1_genesis_proto_rawDescData = file_network_participation_v1_genesis_proto_rawDesc +) + +func file_network_participation_v1_genesis_proto_rawDescGZIP() []byte { + file_network_participation_v1_genesis_proto_rawDescOnce.Do(func() { + file_network_participation_v1_genesis_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_participation_v1_genesis_proto_rawDescData) + }) + return file_network_participation_v1_genesis_proto_rawDescData +} + +var file_network_participation_v1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_participation_v1_genesis_proto_goTypes = []interface{}{ + (*GenesisState)(nil), // 0: network.participation.v1.GenesisState + (*Params)(nil), // 1: network.participation.v1.Params + (*AuctionUsedAllocations)(nil), // 2: network.participation.v1.AuctionUsedAllocations + (*UsedAllocations)(nil), // 3: network.participation.v1.UsedAllocations +} +var file_network_participation_v1_genesis_proto_depIdxs = []int32{ + 1, // 0: network.participation.v1.GenesisState.params:type_name -> network.participation.v1.Params + 2, // 1: network.participation.v1.GenesisState.auctionUsedAllocationsList:type_name -> network.participation.v1.AuctionUsedAllocations + 3, // 2: network.participation.v1.GenesisState.usedAllocationsList:type_name -> network.participation.v1.UsedAllocations + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] 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 +} + +func init() { file_network_participation_v1_genesis_proto_init() } +func file_network_participation_v1_genesis_proto_init() { + if File_network_participation_v1_genesis_proto != nil { + return + } + file_network_participation_v1_params_proto_init() + file_network_participation_v1_auction_used_allocations_proto_init() + file_network_participation_v1_used_allocations_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_participation_v1_genesis_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisState); 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_network_participation_v1_genesis_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_participation_v1_genesis_proto_goTypes, + DependencyIndexes: file_network_participation_v1_genesis_proto_depIdxs, + MessageInfos: file_network_participation_v1_genesis_proto_msgTypes, + }.Build() + File_network_participation_v1_genesis_proto = out.File + file_network_participation_v1_genesis_proto_rawDesc = nil + file_network_participation_v1_genesis_proto_goTypes = nil + file_network_participation_v1_genesis_proto_depIdxs = nil +} diff --git a/api/network/participation/v1/params.pulsar.go b/api/network/participation/v1/params.pulsar.go new file mode 100644 index 00000000..823ee319 --- /dev/null +++ b/api/network/participation/v1/params.pulsar.go @@ -0,0 +1,2523 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package participationv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_Params_2_list)(nil) + +type _Params_2_list struct { + list *[]*Tier +} + +func (x *_Params_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Params_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Params_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Tier) + (*x.list)[i] = concreteValue +} + +func (x *_Params_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Tier) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Params_2_list) AppendMutable() protoreflect.Value { + v := new(Tier) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Params_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Params_2_list) NewElement() protoreflect.Value { + v := new(Tier) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Params_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_Params protoreflect.MessageDescriptor + fd_Params_allocationPrice protoreflect.FieldDescriptor + fd_Params_participationTierList protoreflect.FieldDescriptor + fd_Params_registrationPeriod protoreflect.FieldDescriptor + fd_Params_withdrawalDelay protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_params_proto_init() + md_Params = File_network_participation_v1_params_proto.Messages().ByName("Params") + fd_Params_allocationPrice = md_Params.Fields().ByName("allocationPrice") + fd_Params_participationTierList = md_Params.Fields().ByName("participationTierList") + fd_Params_registrationPeriod = md_Params.Fields().ByName("registrationPeriod") + fd_Params_withdrawalDelay = md_Params.Fields().ByName("withdrawalDelay") +} + +var _ protoreflect.Message = (*fastReflection_Params)(nil) + +type fastReflection_Params Params + +func (x *Params) ProtoReflect() protoreflect.Message { + return (*fastReflection_Params)(x) +} + +func (x *Params) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_params_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) +} + +var _fastReflection_Params_messageType fastReflection_Params_messageType +var _ protoreflect.MessageType = fastReflection_Params_messageType{} + +type fastReflection_Params_messageType struct{} + +func (x fastReflection_Params_messageType) Zero() protoreflect.Message { + return (*fastReflection_Params)(nil) +} +func (x fastReflection_Params_messageType) New() protoreflect.Message { + return new(fastReflection_Params) +} +func (x fastReflection_Params_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Params) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Params) Type() protoreflect.MessageType { + return _fastReflection_Params_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Params) New() protoreflect.Message { + return new(fastReflection_Params) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Params) Interface() protoreflect.ProtoMessage { + return (*Params)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.AllocationPrice != nil { + value := protoreflect.ValueOfMessage(x.AllocationPrice.ProtoReflect()) + if !f(fd_Params_allocationPrice, value) { + return + } + } + if len(x.ParticipationTierList) != 0 { + value := protoreflect.ValueOfList(&_Params_2_list{list: &x.ParticipationTierList}) + if !f(fd_Params_participationTierList, value) { + return + } + } + if x.RegistrationPeriod != nil { + value := protoreflect.ValueOfMessage(x.RegistrationPeriod.ProtoReflect()) + if !f(fd_Params_registrationPeriod, value) { + return + } + } + if x.WithdrawalDelay != nil { + value := protoreflect.ValueOfMessage(x.WithdrawalDelay.ProtoReflect()) + if !f(fd_Params_withdrawalDelay, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.Params.allocationPrice": + return x.AllocationPrice != nil + case "network.participation.v1.Params.participationTierList": + return len(x.ParticipationTierList) != 0 + case "network.participation.v1.Params.registrationPeriod": + return x.RegistrationPeriod != nil + case "network.participation.v1.Params.withdrawalDelay": + return x.WithdrawalDelay != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Params")) + } + panic(fmt.Errorf("message network.participation.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.Params.allocationPrice": + x.AllocationPrice = nil + case "network.participation.v1.Params.participationTierList": + x.ParticipationTierList = nil + case "network.participation.v1.Params.registrationPeriod": + x.RegistrationPeriod = nil + case "network.participation.v1.Params.withdrawalDelay": + x.WithdrawalDelay = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Params")) + } + panic(fmt.Errorf("message network.participation.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.Params.allocationPrice": + value := x.AllocationPrice + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.participation.v1.Params.participationTierList": + if len(x.ParticipationTierList) == 0 { + return protoreflect.ValueOfList(&_Params_2_list{}) + } + listValue := &_Params_2_list{list: &x.ParticipationTierList} + return protoreflect.ValueOfList(listValue) + case "network.participation.v1.Params.registrationPeriod": + value := x.RegistrationPeriod + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.participation.v1.Params.withdrawalDelay": + value := x.WithdrawalDelay + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Params")) + } + panic(fmt.Errorf("message network.participation.v1.Params does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.Params.allocationPrice": + x.AllocationPrice = value.Message().Interface().(*AllocationPrice) + case "network.participation.v1.Params.participationTierList": + lv := value.List() + clv := lv.(*_Params_2_list) + x.ParticipationTierList = *clv.list + case "network.participation.v1.Params.registrationPeriod": + x.RegistrationPeriod = value.Message().Interface().(*durationpb.Duration) + case "network.participation.v1.Params.withdrawalDelay": + x.WithdrawalDelay = value.Message().Interface().(*durationpb.Duration) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Params")) + } + panic(fmt.Errorf("message network.participation.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.Params.allocationPrice": + if x.AllocationPrice == nil { + x.AllocationPrice = new(AllocationPrice) + } + return protoreflect.ValueOfMessage(x.AllocationPrice.ProtoReflect()) + case "network.participation.v1.Params.participationTierList": + if x.ParticipationTierList == nil { + x.ParticipationTierList = []*Tier{} + } + value := &_Params_2_list{list: &x.ParticipationTierList} + return protoreflect.ValueOfList(value) + case "network.participation.v1.Params.registrationPeriod": + if x.RegistrationPeriod == nil { + x.RegistrationPeriod = new(durationpb.Duration) + } + return protoreflect.ValueOfMessage(x.RegistrationPeriod.ProtoReflect()) + case "network.participation.v1.Params.withdrawalDelay": + if x.WithdrawalDelay == nil { + x.WithdrawalDelay = new(durationpb.Duration) + } + return protoreflect.ValueOfMessage(x.WithdrawalDelay.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Params")) + } + panic(fmt.Errorf("message network.participation.v1.Params does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.Params.allocationPrice": + m := new(AllocationPrice) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.participation.v1.Params.participationTierList": + list := []*Tier{} + return protoreflect.ValueOfList(&_Params_2_list{list: &list}) + case "network.participation.v1.Params.registrationPeriod": + m := new(durationpb.Duration) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.participation.v1.Params.withdrawalDelay": + m := new(durationpb.Duration) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Params")) + } + panic(fmt.Errorf("message network.participation.v1.Params does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Params) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.Params", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Params) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Params) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.AllocationPrice != nil { + l = options.Size(x.AllocationPrice) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.ParticipationTierList) > 0 { + for _, e := range x.ParticipationTierList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.RegistrationPeriod != nil { + l = options.Size(x.RegistrationPeriod) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.WithdrawalDelay != nil { + l = options.Size(x.WithdrawalDelay) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.WithdrawalDelay != nil { + encoded, err := options.Marshal(x.WithdrawalDelay) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + if x.RegistrationPeriod != nil { + encoded, err := options.Marshal(x.RegistrationPeriod) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.ParticipationTierList) > 0 { + for iNdEx := len(x.ParticipationTierList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ParticipationTierList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.AllocationPrice != nil { + encoded, err := options.Marshal(x.AllocationPrice) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AllocationPrice", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.AllocationPrice == nil { + x.AllocationPrice = &AllocationPrice{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AllocationPrice); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ParticipationTierList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ParticipationTierList = append(x.ParticipationTierList, &Tier{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ParticipationTierList[len(x.ParticipationTierList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RegistrationPeriod", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.RegistrationPeriod == nil { + x.RegistrationPeriod = &durationpb.Duration{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RegistrationPeriod); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field WithdrawalDelay", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.WithdrawalDelay == nil { + x.WithdrawalDelay = &durationpb.Duration{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.WithdrawalDelay); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_AllocationPrice protoreflect.MessageDescriptor + fd_AllocationPrice_bonded protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_params_proto_init() + md_AllocationPrice = File_network_participation_v1_params_proto.Messages().ByName("AllocationPrice") + fd_AllocationPrice_bonded = md_AllocationPrice.Fields().ByName("bonded") +} + +var _ protoreflect.Message = (*fastReflection_AllocationPrice)(nil) + +type fastReflection_AllocationPrice AllocationPrice + +func (x *AllocationPrice) ProtoReflect() protoreflect.Message { + return (*fastReflection_AllocationPrice)(x) +} + +func (x *AllocationPrice) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_params_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) +} + +var _fastReflection_AllocationPrice_messageType fastReflection_AllocationPrice_messageType +var _ protoreflect.MessageType = fastReflection_AllocationPrice_messageType{} + +type fastReflection_AllocationPrice_messageType struct{} + +func (x fastReflection_AllocationPrice_messageType) Zero() protoreflect.Message { + return (*fastReflection_AllocationPrice)(nil) +} +func (x fastReflection_AllocationPrice_messageType) New() protoreflect.Message { + return new(fastReflection_AllocationPrice) +} +func (x fastReflection_AllocationPrice_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_AllocationPrice +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_AllocationPrice) Descriptor() protoreflect.MessageDescriptor { + return md_AllocationPrice +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_AllocationPrice) Type() protoreflect.MessageType { + return _fastReflection_AllocationPrice_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_AllocationPrice) New() protoreflect.Message { + return new(fastReflection_AllocationPrice) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_AllocationPrice) Interface() protoreflect.ProtoMessage { + return (*AllocationPrice)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_AllocationPrice) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Bonded != "" { + value := protoreflect.ValueOfString(x.Bonded) + if !f(fd_AllocationPrice_bonded, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_AllocationPrice) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.AllocationPrice.bonded": + return x.Bonded != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AllocationPrice")) + } + panic(fmt.Errorf("message network.participation.v1.AllocationPrice does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AllocationPrice) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.AllocationPrice.bonded": + x.Bonded = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AllocationPrice")) + } + panic(fmt.Errorf("message network.participation.v1.AllocationPrice does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_AllocationPrice) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.AllocationPrice.bonded": + value := x.Bonded + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AllocationPrice")) + } + panic(fmt.Errorf("message network.participation.v1.AllocationPrice does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AllocationPrice) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.AllocationPrice.bonded": + x.Bonded = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AllocationPrice")) + } + panic(fmt.Errorf("message network.participation.v1.AllocationPrice does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AllocationPrice) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.AllocationPrice.bonded": + panic(fmt.Errorf("field bonded of message network.participation.v1.AllocationPrice is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AllocationPrice")) + } + panic(fmt.Errorf("message network.participation.v1.AllocationPrice does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_AllocationPrice) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.AllocationPrice.bonded": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.AllocationPrice")) + } + panic(fmt.Errorf("message network.participation.v1.AllocationPrice does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_AllocationPrice) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.AllocationPrice", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_AllocationPrice) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AllocationPrice) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_AllocationPrice) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_AllocationPrice) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*AllocationPrice) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Bonded) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*AllocationPrice) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Bonded) > 0 { + i -= len(x.Bonded) + copy(dAtA[i:], x.Bonded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Bonded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*AllocationPrice) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AllocationPrice: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AllocationPrice: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Bonded", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Bonded = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_Tier protoreflect.MessageDescriptor + fd_Tier_tierID protoreflect.FieldDescriptor + fd_Tier_requiredAllocations protoreflect.FieldDescriptor + fd_Tier_benefits protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_params_proto_init() + md_Tier = File_network_participation_v1_params_proto.Messages().ByName("Tier") + fd_Tier_tierID = md_Tier.Fields().ByName("tierID") + fd_Tier_requiredAllocations = md_Tier.Fields().ByName("requiredAllocations") + fd_Tier_benefits = md_Tier.Fields().ByName("benefits") +} + +var _ protoreflect.Message = (*fastReflection_Tier)(nil) + +type fastReflection_Tier Tier + +func (x *Tier) ProtoReflect() protoreflect.Message { + return (*fastReflection_Tier)(x) +} + +func (x *Tier) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_params_proto_msgTypes[2] + 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) +} + +var _fastReflection_Tier_messageType fastReflection_Tier_messageType +var _ protoreflect.MessageType = fastReflection_Tier_messageType{} + +type fastReflection_Tier_messageType struct{} + +func (x fastReflection_Tier_messageType) Zero() protoreflect.Message { + return (*fastReflection_Tier)(nil) +} +func (x fastReflection_Tier_messageType) New() protoreflect.Message { + return new(fastReflection_Tier) +} +func (x fastReflection_Tier_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Tier +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Tier) Descriptor() protoreflect.MessageDescriptor { + return md_Tier +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Tier) Type() protoreflect.MessageType { + return _fastReflection_Tier_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Tier) New() protoreflect.Message { + return new(fastReflection_Tier) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Tier) Interface() protoreflect.ProtoMessage { + return (*Tier)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Tier) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.TierID != uint64(0) { + value := protoreflect.ValueOfUint64(x.TierID) + if !f(fd_Tier_tierID, value) { + return + } + } + if x.RequiredAllocations != "" { + value := protoreflect.ValueOfString(x.RequiredAllocations) + if !f(fd_Tier_requiredAllocations, value) { + return + } + } + if x.Benefits != nil { + value := protoreflect.ValueOfMessage(x.Benefits.ProtoReflect()) + if !f(fd_Tier_benefits, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Tier) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.Tier.tierID": + return x.TierID != uint64(0) + case "network.participation.v1.Tier.requiredAllocations": + return x.RequiredAllocations != "" + case "network.participation.v1.Tier.benefits": + return x.Benefits != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Tier")) + } + panic(fmt.Errorf("message network.participation.v1.Tier does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Tier) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.Tier.tierID": + x.TierID = uint64(0) + case "network.participation.v1.Tier.requiredAllocations": + x.RequiredAllocations = "" + case "network.participation.v1.Tier.benefits": + x.Benefits = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Tier")) + } + panic(fmt.Errorf("message network.participation.v1.Tier does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Tier) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.Tier.tierID": + value := x.TierID + return protoreflect.ValueOfUint64(value) + case "network.participation.v1.Tier.requiredAllocations": + value := x.RequiredAllocations + return protoreflect.ValueOfString(value) + case "network.participation.v1.Tier.benefits": + value := x.Benefits + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Tier")) + } + panic(fmt.Errorf("message network.participation.v1.Tier does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Tier) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.Tier.tierID": + x.TierID = value.Uint() + case "network.participation.v1.Tier.requiredAllocations": + x.RequiredAllocations = value.Interface().(string) + case "network.participation.v1.Tier.benefits": + x.Benefits = value.Message().Interface().(*TierBenefits) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Tier")) + } + panic(fmt.Errorf("message network.participation.v1.Tier does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Tier) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.Tier.benefits": + if x.Benefits == nil { + x.Benefits = new(TierBenefits) + } + return protoreflect.ValueOfMessage(x.Benefits.ProtoReflect()) + case "network.participation.v1.Tier.tierID": + panic(fmt.Errorf("field tierID of message network.participation.v1.Tier is not mutable")) + case "network.participation.v1.Tier.requiredAllocations": + panic(fmt.Errorf("field requiredAllocations of message network.participation.v1.Tier is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Tier")) + } + panic(fmt.Errorf("message network.participation.v1.Tier does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Tier) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.Tier.tierID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.participation.v1.Tier.requiredAllocations": + return protoreflect.ValueOfString("") + case "network.participation.v1.Tier.benefits": + m := new(TierBenefits) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.Tier")) + } + panic(fmt.Errorf("message network.participation.v1.Tier does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Tier) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.Tier", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Tier) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Tier) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Tier) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Tier) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Tier) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.TierID != 0 { + n += 1 + runtime.Sov(uint64(x.TierID)) + } + l = len(x.RequiredAllocations) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Benefits != nil { + l = options.Size(x.Benefits) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Tier) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Benefits != nil { + encoded, err := options.Marshal(x.Benefits) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.RequiredAllocations) > 0 { + i -= len(x.RequiredAllocations) + copy(dAtA[i:], x.RequiredAllocations) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.RequiredAllocations))) + i-- + dAtA[i] = 0x12 + } + if x.TierID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.TierID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Tier) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Tier: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Tier: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TierID", wireType) + } + x.TierID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.TierID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RequiredAllocations", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.RequiredAllocations = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Benefits", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Benefits == nil { + x.Benefits = &TierBenefits{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Benefits); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_TierBenefits protoreflect.MessageDescriptor + fd_TierBenefits_maxBidAmount protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_params_proto_init() + md_TierBenefits = File_network_participation_v1_params_proto.Messages().ByName("TierBenefits") + fd_TierBenefits_maxBidAmount = md_TierBenefits.Fields().ByName("maxBidAmount") +} + +var _ protoreflect.Message = (*fastReflection_TierBenefits)(nil) + +type fastReflection_TierBenefits TierBenefits + +func (x *TierBenefits) ProtoReflect() protoreflect.Message { + return (*fastReflection_TierBenefits)(x) +} + +func (x *TierBenefits) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_params_proto_msgTypes[3] + 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) +} + +var _fastReflection_TierBenefits_messageType fastReflection_TierBenefits_messageType +var _ protoreflect.MessageType = fastReflection_TierBenefits_messageType{} + +type fastReflection_TierBenefits_messageType struct{} + +func (x fastReflection_TierBenefits_messageType) Zero() protoreflect.Message { + return (*fastReflection_TierBenefits)(nil) +} +func (x fastReflection_TierBenefits_messageType) New() protoreflect.Message { + return new(fastReflection_TierBenefits) +} +func (x fastReflection_TierBenefits_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_TierBenefits +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_TierBenefits) Descriptor() protoreflect.MessageDescriptor { + return md_TierBenefits +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_TierBenefits) Type() protoreflect.MessageType { + return _fastReflection_TierBenefits_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_TierBenefits) New() protoreflect.Message { + return new(fastReflection_TierBenefits) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_TierBenefits) Interface() protoreflect.ProtoMessage { + return (*TierBenefits)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_TierBenefits) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.MaxBidAmount != "" { + value := protoreflect.ValueOfString(x.MaxBidAmount) + if !f(fd_TierBenefits_maxBidAmount, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_TierBenefits) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.TierBenefits.maxBidAmount": + return x.MaxBidAmount != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.TierBenefits")) + } + panic(fmt.Errorf("message network.participation.v1.TierBenefits does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_TierBenefits) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.TierBenefits.maxBidAmount": + x.MaxBidAmount = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.TierBenefits")) + } + panic(fmt.Errorf("message network.participation.v1.TierBenefits does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_TierBenefits) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.TierBenefits.maxBidAmount": + value := x.MaxBidAmount + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.TierBenefits")) + } + panic(fmt.Errorf("message network.participation.v1.TierBenefits does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_TierBenefits) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.TierBenefits.maxBidAmount": + x.MaxBidAmount = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.TierBenefits")) + } + panic(fmt.Errorf("message network.participation.v1.TierBenefits does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_TierBenefits) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.TierBenefits.maxBidAmount": + panic(fmt.Errorf("field maxBidAmount of message network.participation.v1.TierBenefits is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.TierBenefits")) + } + panic(fmt.Errorf("message network.participation.v1.TierBenefits does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_TierBenefits) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.TierBenefits.maxBidAmount": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.TierBenefits")) + } + panic(fmt.Errorf("message network.participation.v1.TierBenefits does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_TierBenefits) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.TierBenefits", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_TierBenefits) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_TierBenefits) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_TierBenefits) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_TierBenefits) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*TierBenefits) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.MaxBidAmount) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*TierBenefits) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.MaxBidAmount) > 0 { + i -= len(x.MaxBidAmount) + copy(dAtA[i:], x.MaxBidAmount) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MaxBidAmount))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*TierBenefits) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: TierBenefits: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: TierBenefits: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MaxBidAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MaxBidAmount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/participation/v1/params.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Params defines the parameters for the module. +type Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AllocationPrice *AllocationPrice `protobuf:"bytes,1,opt,name=allocationPrice,proto3" json:"allocationPrice,omitempty"` + ParticipationTierList []*Tier `protobuf:"bytes,2,rep,name=participationTierList,proto3" json:"participationTierList,omitempty"` + // Time frame before auction starts where MsgParticipate can be called + RegistrationPeriod *durationpb.Duration `protobuf:"bytes,3,opt,name=registrationPeriod,proto3" json:"registrationPeriod,omitempty"` + // Delay after auction starts when allocations can be withdrawn + WithdrawalDelay *durationpb.Duration `protobuf:"bytes,4,opt,name=withdrawalDelay,proto3" json:"withdrawalDelay,omitempty"` +} + +func (x *Params) Reset() { + *x = Params{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_params_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Params) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Params) ProtoMessage() {} + +// Deprecated: Use Params.ProtoReflect.Descriptor instead. +func (*Params) Descriptor() ([]byte, []int) { + return file_network_participation_v1_params_proto_rawDescGZIP(), []int{0} +} + +func (x *Params) GetAllocationPrice() *AllocationPrice { + if x != nil { + return x.AllocationPrice + } + return nil +} + +func (x *Params) GetParticipationTierList() []*Tier { + if x != nil { + return x.ParticipationTierList + } + return nil +} + +func (x *Params) GetRegistrationPeriod() *durationpb.Duration { + if x != nil { + return x.RegistrationPeriod + } + return nil +} + +func (x *Params) GetWithdrawalDelay() *durationpb.Duration { + if x != nil { + return x.WithdrawalDelay + } + return nil +} + +type AllocationPrice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // number of bonded tokens necessary to get one allocation + Bonded string `protobuf:"bytes,1,opt,name=bonded,proto3" json:"bonded,omitempty"` +} + +func (x *AllocationPrice) Reset() { + *x = AllocationPrice{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_params_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AllocationPrice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AllocationPrice) ProtoMessage() {} + +// Deprecated: Use AllocationPrice.ProtoReflect.Descriptor instead. +func (*AllocationPrice) Descriptor() ([]byte, []int) { + return file_network_participation_v1_params_proto_rawDescGZIP(), []int{1} +} + +func (x *AllocationPrice) GetBonded() string { + if x != nil { + return x.Bonded + } + return "" +} + +// Matches a number of required allocations with benefits +type Tier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TierID uint64 `protobuf:"varint,1,opt,name=tierID,proto3" json:"tierID,omitempty"` + RequiredAllocations string `protobuf:"bytes,2,opt,name=requiredAllocations,proto3" json:"requiredAllocations,omitempty"` + Benefits *TierBenefits `protobuf:"bytes,3,opt,name=benefits,proto3" json:"benefits,omitempty"` +} + +func (x *Tier) Reset() { + *x = Tier{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_params_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Tier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tier) ProtoMessage() {} + +// Deprecated: Use Tier.ProtoReflect.Descriptor instead. +func (*Tier) Descriptor() ([]byte, []int) { + return file_network_participation_v1_params_proto_rawDescGZIP(), []int{2} +} + +func (x *Tier) GetTierID() uint64 { + if x != nil { + return x.TierID + } + return 0 +} + +func (x *Tier) GetRequiredAllocations() string { + if x != nil { + return x.RequiredAllocations + } + return "" +} + +func (x *Tier) GetBenefits() *TierBenefits { + if x != nil { + return x.Benefits + } + return nil +} + +type TierBenefits struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // maximum amount an auction participant can bid + MaxBidAmount string `protobuf:"bytes,1,opt,name=maxBidAmount,proto3" json:"maxBidAmount,omitempty"` +} + +func (x *TierBenefits) Reset() { + *x = TierBenefits{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_params_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TierBenefits) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TierBenefits) ProtoMessage() {} + +// Deprecated: Use TierBenefits.ProtoReflect.Descriptor instead. +func (*TierBenefits) Descriptor() ([]byte, []int) { + return file_network_participation_v1_params_proto_rawDescGZIP(), []int{3} +} + +func (x *TierBenefits) GetMaxBidAmount() string { + if x != nil { + return x.MaxBidAmount + } + return "" +} + +var File_network_participation_v1_params_proto protoreflect.FileDescriptor + +var file_network_participation_v1_params_proto_rawDesc = []byte{ + 0x0a, 0x25, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8c, 0x03, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x59, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x15, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x65, 0x72, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x65, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x12, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, + 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0x52, 0x12, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x4d, 0x0a, 0x0f, + 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0x52, 0x0f, 0x77, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x3a, 0x27, 0xe8, 0xa0, 0x1f, + 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x56, 0x0a, 0x0f, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x62, 0x6f, 0x6e, 0x64, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, + 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x06, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x22, 0xc7, 0x01, 0x0a, + 0x04, 0x54, 0x69, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x44, 0x12, 0x5d, 0x0a, + 0x13, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, + 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, + 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x48, 0x0a, 0x08, + 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x65, 0x72, 0x42, 0x65, + 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x08, 0x62, 0x65, + 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x22, 0x5f, 0x0a, 0x0c, 0x54, 0x69, 0x65, 0x72, 0x42, 0x65, + 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x42, 0x69, 0x64, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, + 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, + 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x42, 0x69, + 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0xf5, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0xa2, + 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, + 0xca, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x24, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x1a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_participation_v1_params_proto_rawDescOnce sync.Once + file_network_participation_v1_params_proto_rawDescData = file_network_participation_v1_params_proto_rawDesc +) + +func file_network_participation_v1_params_proto_rawDescGZIP() []byte { + file_network_participation_v1_params_proto_rawDescOnce.Do(func() { + file_network_participation_v1_params_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_participation_v1_params_proto_rawDescData) + }) + return file_network_participation_v1_params_proto_rawDescData +} + +var file_network_participation_v1_params_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_network_participation_v1_params_proto_goTypes = []interface{}{ + (*Params)(nil), // 0: network.participation.v1.Params + (*AllocationPrice)(nil), // 1: network.participation.v1.AllocationPrice + (*Tier)(nil), // 2: network.participation.v1.Tier + (*TierBenefits)(nil), // 3: network.participation.v1.TierBenefits + (*durationpb.Duration)(nil), // 4: google.protobuf.Duration +} +var file_network_participation_v1_params_proto_depIdxs = []int32{ + 1, // 0: network.participation.v1.Params.allocationPrice:type_name -> network.participation.v1.AllocationPrice + 2, // 1: network.participation.v1.Params.participationTierList:type_name -> network.participation.v1.Tier + 4, // 2: network.participation.v1.Params.registrationPeriod:type_name -> google.protobuf.Duration + 4, // 3: network.participation.v1.Params.withdrawalDelay:type_name -> google.protobuf.Duration + 3, // 4: network.participation.v1.Tier.benefits:type_name -> network.participation.v1.TierBenefits + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_network_participation_v1_params_proto_init() } +func file_network_participation_v1_params_proto_init() { + if File_network_participation_v1_params_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_participation_v1_params_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Params); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_params_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AllocationPrice); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_params_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Tier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_params_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TierBenefits); 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_network_participation_v1_params_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_participation_v1_params_proto_goTypes, + DependencyIndexes: file_network_participation_v1_params_proto_depIdxs, + MessageInfos: file_network_participation_v1_params_proto_msgTypes, + }.Build() + File_network_participation_v1_params_proto = out.File + file_network_participation_v1_params_proto_rawDesc = nil + file_network_participation_v1_params_proto_goTypes = nil + file_network_participation_v1_params_proto_depIdxs = nil +} diff --git a/api/network/participation/v1/query.pulsar.go b/api/network/participation/v1/query.pulsar.go new file mode 100644 index 00000000..0013afd9 --- /dev/null +++ b/api/network/participation/v1/query.pulsar.go @@ -0,0 +1,7361 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package participationv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_QueryParamsRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryParamsRequest = File_network_participation_v1_query_proto.Messages().ByName("QueryParamsRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsRequest)(nil) + +type fastReflection_QueryParamsRequest QueryParamsRequest + +func (x *QueryParamsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(x) +} + +func (x *QueryParamsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_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) +} + +var _fastReflection_QueryParamsRequest_messageType fastReflection_QueryParamsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsRequest_messageType{} + +type fastReflection_QueryParamsRequest_messageType struct{} + +func (x fastReflection_QueryParamsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(nil) +} +func (x fastReflection_QueryParamsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} +func (x fastReflection_QueryParamsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsRequest) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryParamsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryParamsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryParamsResponse protoreflect.MessageDescriptor + fd_QueryParamsResponse_params protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryParamsResponse = File_network_participation_v1_query_proto.Messages().ByName("QueryParamsResponse") + fd_QueryParamsResponse_params = md_QueryParamsResponse.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsResponse)(nil) + +type fastReflection_QueryParamsResponse QueryParamsResponse + +func (x *QueryParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(x) +} + +func (x *QueryParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_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) +} + +var _fastReflection_QueryParamsResponse_messageType fastReflection_QueryParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsResponse_messageType{} + +type fastReflection_QueryParamsResponse_messageType struct{} + +func (x fastReflection_QueryParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(nil) +} +func (x fastReflection_QueryParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} +func (x fastReflection_QueryParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsResponse) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_QueryParamsResponse_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryParamsResponse.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryParamsResponse.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryParamsResponse.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryParamsResponse.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryParamsResponse.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryParamsResponse.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetAuctionUsedAllocationsRequest protoreflect.MessageDescriptor + fd_QueryGetAuctionUsedAllocationsRequest_address protoreflect.FieldDescriptor + fd_QueryGetAuctionUsedAllocationsRequest_auctionID protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryGetAuctionUsedAllocationsRequest = File_network_participation_v1_query_proto.Messages().ByName("QueryGetAuctionUsedAllocationsRequest") + fd_QueryGetAuctionUsedAllocationsRequest_address = md_QueryGetAuctionUsedAllocationsRequest.Fields().ByName("address") + fd_QueryGetAuctionUsedAllocationsRequest_auctionID = md_QueryGetAuctionUsedAllocationsRequest.Fields().ByName("auctionID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetAuctionUsedAllocationsRequest)(nil) + +type fastReflection_QueryGetAuctionUsedAllocationsRequest QueryGetAuctionUsedAllocationsRequest + +func (x *QueryGetAuctionUsedAllocationsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetAuctionUsedAllocationsRequest)(x) +} + +func (x *QueryGetAuctionUsedAllocationsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_proto_msgTypes[2] + 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) +} + +var _fastReflection_QueryGetAuctionUsedAllocationsRequest_messageType fastReflection_QueryGetAuctionUsedAllocationsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetAuctionUsedAllocationsRequest_messageType{} + +type fastReflection_QueryGetAuctionUsedAllocationsRequest_messageType struct{} + +func (x fastReflection_QueryGetAuctionUsedAllocationsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetAuctionUsedAllocationsRequest)(nil) +} +func (x fastReflection_QueryGetAuctionUsedAllocationsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetAuctionUsedAllocationsRequest) +} +func (x fastReflection_QueryGetAuctionUsedAllocationsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetAuctionUsedAllocationsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetAuctionUsedAllocationsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetAuctionUsedAllocationsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetAuctionUsedAllocationsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetAuctionUsedAllocationsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetAuctionUsedAllocationsRequest_address, value) { + return + } + } + if x.AuctionID != uint64(0) { + value := protoreflect.ValueOfUint64(x.AuctionID) + if !f(fd_QueryGetAuctionUsedAllocationsRequest_auctionID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.address": + return x.Address != "" + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.auctionID": + return x.AuctionID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.address": + x.Address = "" + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.auctionID": + x.AuctionID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.auctionID": + value := x.AuctionID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.address": + x.Address = value.Interface().(string) + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.auctionID": + x.AuctionID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.address": + panic(fmt.Errorf("field address of message network.participation.v1.QueryGetAuctionUsedAllocationsRequest is not mutable")) + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.auctionID": + panic(fmt.Errorf("field auctionID of message network.participation.v1.QueryGetAuctionUsedAllocationsRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.address": + return protoreflect.ValueOfString("") + case "network.participation.v1.QueryGetAuctionUsedAllocationsRequest.auctionID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryGetAuctionUsedAllocationsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetAuctionUsedAllocationsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetAuctionUsedAllocationsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.AuctionID != 0 { + n += 1 + runtime.Sov(uint64(x.AuctionID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetAuctionUsedAllocationsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.AuctionID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.AuctionID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetAuctionUsedAllocationsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetAuctionUsedAllocationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetAuctionUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) + } + x.AuctionID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.AuctionID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetAuctionUsedAllocationsResponse protoreflect.MessageDescriptor + fd_QueryGetAuctionUsedAllocationsResponse_auctionUsedAllocations protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryGetAuctionUsedAllocationsResponse = File_network_participation_v1_query_proto.Messages().ByName("QueryGetAuctionUsedAllocationsResponse") + fd_QueryGetAuctionUsedAllocationsResponse_auctionUsedAllocations = md_QueryGetAuctionUsedAllocationsResponse.Fields().ByName("auctionUsedAllocations") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetAuctionUsedAllocationsResponse)(nil) + +type fastReflection_QueryGetAuctionUsedAllocationsResponse QueryGetAuctionUsedAllocationsResponse + +func (x *QueryGetAuctionUsedAllocationsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetAuctionUsedAllocationsResponse)(x) +} + +func (x *QueryGetAuctionUsedAllocationsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_proto_msgTypes[3] + 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) +} + +var _fastReflection_QueryGetAuctionUsedAllocationsResponse_messageType fastReflection_QueryGetAuctionUsedAllocationsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetAuctionUsedAllocationsResponse_messageType{} + +type fastReflection_QueryGetAuctionUsedAllocationsResponse_messageType struct{} + +func (x fastReflection_QueryGetAuctionUsedAllocationsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetAuctionUsedAllocationsResponse)(nil) +} +func (x fastReflection_QueryGetAuctionUsedAllocationsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetAuctionUsedAllocationsResponse) +} +func (x fastReflection_QueryGetAuctionUsedAllocationsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetAuctionUsedAllocationsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetAuctionUsedAllocationsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetAuctionUsedAllocationsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetAuctionUsedAllocationsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetAuctionUsedAllocationsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.AuctionUsedAllocations != nil { + value := protoreflect.ValueOfMessage(x.AuctionUsedAllocations.ProtoReflect()) + if !f(fd_QueryGetAuctionUsedAllocationsResponse_auctionUsedAllocations, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsResponse.auctionUsedAllocations": + return x.AuctionUsedAllocations != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsResponse.auctionUsedAllocations": + x.AuctionUsedAllocations = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsResponse.auctionUsedAllocations": + value := x.AuctionUsedAllocations + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsResponse.auctionUsedAllocations": + x.AuctionUsedAllocations = value.Message().Interface().(*AuctionUsedAllocations) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsResponse.auctionUsedAllocations": + if x.AuctionUsedAllocations == nil { + x.AuctionUsedAllocations = new(AuctionUsedAllocations) + } + return protoreflect.ValueOfMessage(x.AuctionUsedAllocations.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryGetAuctionUsedAllocationsResponse.auctionUsedAllocations": + m := new(AuctionUsedAllocations) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryGetAuctionUsedAllocationsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetAuctionUsedAllocationsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetAuctionUsedAllocationsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.AuctionUsedAllocations != nil { + l = options.Size(x.AuctionUsedAllocations) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetAuctionUsedAllocationsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.AuctionUsedAllocations != nil { + encoded, err := options.Marshal(x.AuctionUsedAllocations) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetAuctionUsedAllocationsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetAuctionUsedAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetAuctionUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionUsedAllocations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.AuctionUsedAllocations == nil { + x.AuctionUsedAllocations = &AuctionUsedAllocations{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AuctionUsedAllocations); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllAuctionUsedAllocationsRequest protoreflect.MessageDescriptor + fd_QueryAllAuctionUsedAllocationsRequest_address protoreflect.FieldDescriptor + fd_QueryAllAuctionUsedAllocationsRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryAllAuctionUsedAllocationsRequest = File_network_participation_v1_query_proto.Messages().ByName("QueryAllAuctionUsedAllocationsRequest") + fd_QueryAllAuctionUsedAllocationsRequest_address = md_QueryAllAuctionUsedAllocationsRequest.Fields().ByName("address") + fd_QueryAllAuctionUsedAllocationsRequest_pagination = md_QueryAllAuctionUsedAllocationsRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllAuctionUsedAllocationsRequest)(nil) + +type fastReflection_QueryAllAuctionUsedAllocationsRequest QueryAllAuctionUsedAllocationsRequest + +func (x *QueryAllAuctionUsedAllocationsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllAuctionUsedAllocationsRequest)(x) +} + +func (x *QueryAllAuctionUsedAllocationsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_proto_msgTypes[4] + 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) +} + +var _fastReflection_QueryAllAuctionUsedAllocationsRequest_messageType fastReflection_QueryAllAuctionUsedAllocationsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllAuctionUsedAllocationsRequest_messageType{} + +type fastReflection_QueryAllAuctionUsedAllocationsRequest_messageType struct{} + +func (x fastReflection_QueryAllAuctionUsedAllocationsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllAuctionUsedAllocationsRequest)(nil) +} +func (x fastReflection_QueryAllAuctionUsedAllocationsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllAuctionUsedAllocationsRequest) +} +func (x fastReflection_QueryAllAuctionUsedAllocationsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllAuctionUsedAllocationsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllAuctionUsedAllocationsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllAuctionUsedAllocationsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllAuctionUsedAllocationsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllAuctionUsedAllocationsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryAllAuctionUsedAllocationsRequest_address, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllAuctionUsedAllocationsRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.address": + return x.Address != "" + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.address": + x.Address = "" + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.address": + x.Address = value.Interface().(string) + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.address": + panic(fmt.Errorf("field address of message network.participation.v1.QueryAllAuctionUsedAllocationsRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.address": + return protoreflect.ValueOfString("") + case "network.participation.v1.QueryAllAuctionUsedAllocationsRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryAllAuctionUsedAllocationsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllAuctionUsedAllocationsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllAuctionUsedAllocationsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllAuctionUsedAllocationsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllAuctionUsedAllocationsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllAuctionUsedAllocationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllAuctionUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllAuctionUsedAllocationsResponse_1_list)(nil) + +type _QueryAllAuctionUsedAllocationsResponse_1_list struct { + list *[]*AuctionUsedAllocations +} + +func (x *_QueryAllAuctionUsedAllocationsResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllAuctionUsedAllocationsResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllAuctionUsedAllocationsResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*AuctionUsedAllocations) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllAuctionUsedAllocationsResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*AuctionUsedAllocations) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllAuctionUsedAllocationsResponse_1_list) AppendMutable() protoreflect.Value { + v := new(AuctionUsedAllocations) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllAuctionUsedAllocationsResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllAuctionUsedAllocationsResponse_1_list) NewElement() protoreflect.Value { + v := new(AuctionUsedAllocations) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllAuctionUsedAllocationsResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllAuctionUsedAllocationsResponse protoreflect.MessageDescriptor + fd_QueryAllAuctionUsedAllocationsResponse_auctionUsedAllocations protoreflect.FieldDescriptor + fd_QueryAllAuctionUsedAllocationsResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryAllAuctionUsedAllocationsResponse = File_network_participation_v1_query_proto.Messages().ByName("QueryAllAuctionUsedAllocationsResponse") + fd_QueryAllAuctionUsedAllocationsResponse_auctionUsedAllocations = md_QueryAllAuctionUsedAllocationsResponse.Fields().ByName("auctionUsedAllocations") + fd_QueryAllAuctionUsedAllocationsResponse_pagination = md_QueryAllAuctionUsedAllocationsResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllAuctionUsedAllocationsResponse)(nil) + +type fastReflection_QueryAllAuctionUsedAllocationsResponse QueryAllAuctionUsedAllocationsResponse + +func (x *QueryAllAuctionUsedAllocationsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllAuctionUsedAllocationsResponse)(x) +} + +func (x *QueryAllAuctionUsedAllocationsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_proto_msgTypes[5] + 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) +} + +var _fastReflection_QueryAllAuctionUsedAllocationsResponse_messageType fastReflection_QueryAllAuctionUsedAllocationsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllAuctionUsedAllocationsResponse_messageType{} + +type fastReflection_QueryAllAuctionUsedAllocationsResponse_messageType struct{} + +func (x fastReflection_QueryAllAuctionUsedAllocationsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllAuctionUsedAllocationsResponse)(nil) +} +func (x fastReflection_QueryAllAuctionUsedAllocationsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllAuctionUsedAllocationsResponse) +} +func (x fastReflection_QueryAllAuctionUsedAllocationsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllAuctionUsedAllocationsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllAuctionUsedAllocationsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllAuctionUsedAllocationsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllAuctionUsedAllocationsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllAuctionUsedAllocationsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.AuctionUsedAllocations) != 0 { + value := protoreflect.ValueOfList(&_QueryAllAuctionUsedAllocationsResponse_1_list{list: &x.AuctionUsedAllocations}) + if !f(fd_QueryAllAuctionUsedAllocationsResponse_auctionUsedAllocations, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllAuctionUsedAllocationsResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.auctionUsedAllocations": + return len(x.AuctionUsedAllocations) != 0 + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.auctionUsedAllocations": + x.AuctionUsedAllocations = nil + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.auctionUsedAllocations": + if len(x.AuctionUsedAllocations) == 0 { + return protoreflect.ValueOfList(&_QueryAllAuctionUsedAllocationsResponse_1_list{}) + } + listValue := &_QueryAllAuctionUsedAllocationsResponse_1_list{list: &x.AuctionUsedAllocations} + return protoreflect.ValueOfList(listValue) + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.auctionUsedAllocations": + lv := value.List() + clv := lv.(*_QueryAllAuctionUsedAllocationsResponse_1_list) + x.AuctionUsedAllocations = *clv.list + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.auctionUsedAllocations": + if x.AuctionUsedAllocations == nil { + x.AuctionUsedAllocations = []*AuctionUsedAllocations{} + } + value := &_QueryAllAuctionUsedAllocationsResponse_1_list{list: &x.AuctionUsedAllocations} + return protoreflect.ValueOfList(value) + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.auctionUsedAllocations": + list := []*AuctionUsedAllocations{} + return protoreflect.ValueOfList(&_QueryAllAuctionUsedAllocationsResponse_1_list{list: &list}) + case "network.participation.v1.QueryAllAuctionUsedAllocationsResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllAuctionUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllAuctionUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryAllAuctionUsedAllocationsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllAuctionUsedAllocationsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllAuctionUsedAllocationsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.AuctionUsedAllocations) > 0 { + for _, e := range x.AuctionUsedAllocations { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllAuctionUsedAllocationsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.AuctionUsedAllocations) > 0 { + for iNdEx := len(x.AuctionUsedAllocations) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.AuctionUsedAllocations[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllAuctionUsedAllocationsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllAuctionUsedAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllAuctionUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionUsedAllocations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.AuctionUsedAllocations = append(x.AuctionUsedAllocations, &AuctionUsedAllocations{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AuctionUsedAllocations[len(x.AuctionUsedAllocations)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetUsedAllocationsRequest protoreflect.MessageDescriptor + fd_QueryGetUsedAllocationsRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryGetUsedAllocationsRequest = File_network_participation_v1_query_proto.Messages().ByName("QueryGetUsedAllocationsRequest") + fd_QueryGetUsedAllocationsRequest_address = md_QueryGetUsedAllocationsRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetUsedAllocationsRequest)(nil) + +type fastReflection_QueryGetUsedAllocationsRequest QueryGetUsedAllocationsRequest + +func (x *QueryGetUsedAllocationsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetUsedAllocationsRequest)(x) +} + +func (x *QueryGetUsedAllocationsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_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) +} + +var _fastReflection_QueryGetUsedAllocationsRequest_messageType fastReflection_QueryGetUsedAllocationsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetUsedAllocationsRequest_messageType{} + +type fastReflection_QueryGetUsedAllocationsRequest_messageType struct{} + +func (x fastReflection_QueryGetUsedAllocationsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetUsedAllocationsRequest)(nil) +} +func (x fastReflection_QueryGetUsedAllocationsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetUsedAllocationsRequest) +} +func (x fastReflection_QueryGetUsedAllocationsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetUsedAllocationsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetUsedAllocationsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetUsedAllocationsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetUsedAllocationsRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetUsedAllocationsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetUsedAllocationsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetUsedAllocationsRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetUsedAllocationsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsRequest.address": + panic(fmt.Errorf("field address of message network.participation.v1.QueryGetUsedAllocationsRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetUsedAllocationsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetUsedAllocationsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryGetUsedAllocationsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetUsedAllocationsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetUsedAllocationsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetUsedAllocationsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetUsedAllocationsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetUsedAllocationsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetUsedAllocationsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetUsedAllocationsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetUsedAllocationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetUsedAllocationsResponse protoreflect.MessageDescriptor + fd_QueryGetUsedAllocationsResponse_usedAllocations protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryGetUsedAllocationsResponse = File_network_participation_v1_query_proto.Messages().ByName("QueryGetUsedAllocationsResponse") + fd_QueryGetUsedAllocationsResponse_usedAllocations = md_QueryGetUsedAllocationsResponse.Fields().ByName("usedAllocations") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetUsedAllocationsResponse)(nil) + +type fastReflection_QueryGetUsedAllocationsResponse QueryGetUsedAllocationsResponse + +func (x *QueryGetUsedAllocationsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetUsedAllocationsResponse)(x) +} + +func (x *QueryGetUsedAllocationsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_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) +} + +var _fastReflection_QueryGetUsedAllocationsResponse_messageType fastReflection_QueryGetUsedAllocationsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetUsedAllocationsResponse_messageType{} + +type fastReflection_QueryGetUsedAllocationsResponse_messageType struct{} + +func (x fastReflection_QueryGetUsedAllocationsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetUsedAllocationsResponse)(nil) +} +func (x fastReflection_QueryGetUsedAllocationsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetUsedAllocationsResponse) +} +func (x fastReflection_QueryGetUsedAllocationsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetUsedAllocationsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetUsedAllocationsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetUsedAllocationsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetUsedAllocationsResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetUsedAllocationsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetUsedAllocationsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.UsedAllocations != nil { + value := protoreflect.ValueOfMessage(x.UsedAllocations.ProtoReflect()) + if !f(fd_QueryGetUsedAllocationsResponse_usedAllocations, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsResponse.usedAllocations": + return x.UsedAllocations != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsResponse.usedAllocations": + x.UsedAllocations = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsResponse.usedAllocations": + value := x.UsedAllocations + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsResponse.usedAllocations": + x.UsedAllocations = value.Message().Interface().(*UsedAllocations) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetUsedAllocationsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsResponse.usedAllocations": + if x.UsedAllocations == nil { + x.UsedAllocations = new(UsedAllocations) + } + return protoreflect.ValueOfMessage(x.UsedAllocations.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetUsedAllocationsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryGetUsedAllocationsResponse.usedAllocations": + m := new(UsedAllocations) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryGetUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryGetUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetUsedAllocationsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryGetUsedAllocationsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetUsedAllocationsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetUsedAllocationsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetUsedAllocationsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetUsedAllocationsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetUsedAllocationsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.UsedAllocations != nil { + l = options.Size(x.UsedAllocations) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetUsedAllocationsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.UsedAllocations != nil { + encoded, err := options.Marshal(x.UsedAllocations) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetUsedAllocationsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetUsedAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field UsedAllocations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.UsedAllocations == nil { + x.UsedAllocations = &UsedAllocations{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.UsedAllocations); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllUsedAllocationsRequest protoreflect.MessageDescriptor + fd_QueryAllUsedAllocationsRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryAllUsedAllocationsRequest = File_network_participation_v1_query_proto.Messages().ByName("QueryAllUsedAllocationsRequest") + fd_QueryAllUsedAllocationsRequest_pagination = md_QueryAllUsedAllocationsRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllUsedAllocationsRequest)(nil) + +type fastReflection_QueryAllUsedAllocationsRequest QueryAllUsedAllocationsRequest + +func (x *QueryAllUsedAllocationsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllUsedAllocationsRequest)(x) +} + +func (x *QueryAllUsedAllocationsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_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) +} + +var _fastReflection_QueryAllUsedAllocationsRequest_messageType fastReflection_QueryAllUsedAllocationsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllUsedAllocationsRequest_messageType{} + +type fastReflection_QueryAllUsedAllocationsRequest_messageType struct{} + +func (x fastReflection_QueryAllUsedAllocationsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllUsedAllocationsRequest)(nil) +} +func (x fastReflection_QueryAllUsedAllocationsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllUsedAllocationsRequest) +} +func (x fastReflection_QueryAllUsedAllocationsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllUsedAllocationsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllUsedAllocationsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllUsedAllocationsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllUsedAllocationsRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllUsedAllocationsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllUsedAllocationsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllUsedAllocationsRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllUsedAllocationsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllUsedAllocationsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllUsedAllocationsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryAllUsedAllocationsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllUsedAllocationsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllUsedAllocationsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllUsedAllocationsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllUsedAllocationsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllUsedAllocationsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllUsedAllocationsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllUsedAllocationsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllUsedAllocationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllUsedAllocationsResponse_1_list)(nil) + +type _QueryAllUsedAllocationsResponse_1_list struct { + list *[]*UsedAllocations +} + +func (x *_QueryAllUsedAllocationsResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllUsedAllocationsResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllUsedAllocationsResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*UsedAllocations) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllUsedAllocationsResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*UsedAllocations) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllUsedAllocationsResponse_1_list) AppendMutable() protoreflect.Value { + v := new(UsedAllocations) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllUsedAllocationsResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllUsedAllocationsResponse_1_list) NewElement() protoreflect.Value { + v := new(UsedAllocations) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllUsedAllocationsResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllUsedAllocationsResponse protoreflect.MessageDescriptor + fd_QueryAllUsedAllocationsResponse_usedAllocations protoreflect.FieldDescriptor + fd_QueryAllUsedAllocationsResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryAllUsedAllocationsResponse = File_network_participation_v1_query_proto.Messages().ByName("QueryAllUsedAllocationsResponse") + fd_QueryAllUsedAllocationsResponse_usedAllocations = md_QueryAllUsedAllocationsResponse.Fields().ByName("usedAllocations") + fd_QueryAllUsedAllocationsResponse_pagination = md_QueryAllUsedAllocationsResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllUsedAllocationsResponse)(nil) + +type fastReflection_QueryAllUsedAllocationsResponse QueryAllUsedAllocationsResponse + +func (x *QueryAllUsedAllocationsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllUsedAllocationsResponse)(x) +} + +func (x *QueryAllUsedAllocationsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_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) +} + +var _fastReflection_QueryAllUsedAllocationsResponse_messageType fastReflection_QueryAllUsedAllocationsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllUsedAllocationsResponse_messageType{} + +type fastReflection_QueryAllUsedAllocationsResponse_messageType struct{} + +func (x fastReflection_QueryAllUsedAllocationsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllUsedAllocationsResponse)(nil) +} +func (x fastReflection_QueryAllUsedAllocationsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllUsedAllocationsResponse) +} +func (x fastReflection_QueryAllUsedAllocationsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllUsedAllocationsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllUsedAllocationsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllUsedAllocationsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllUsedAllocationsResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllUsedAllocationsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllUsedAllocationsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.UsedAllocations) != 0 { + value := protoreflect.ValueOfList(&_QueryAllUsedAllocationsResponse_1_list{list: &x.UsedAllocations}) + if !f(fd_QueryAllUsedAllocationsResponse_usedAllocations, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllUsedAllocationsResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsResponse.usedAllocations": + return len(x.UsedAllocations) != 0 + case "network.participation.v1.QueryAllUsedAllocationsResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsResponse.usedAllocations": + x.UsedAllocations = nil + case "network.participation.v1.QueryAllUsedAllocationsResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsResponse.usedAllocations": + if len(x.UsedAllocations) == 0 { + return protoreflect.ValueOfList(&_QueryAllUsedAllocationsResponse_1_list{}) + } + listValue := &_QueryAllUsedAllocationsResponse_1_list{list: &x.UsedAllocations} + return protoreflect.ValueOfList(listValue) + case "network.participation.v1.QueryAllUsedAllocationsResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsResponse.usedAllocations": + lv := value.List() + clv := lv.(*_QueryAllUsedAllocationsResponse_1_list) + x.UsedAllocations = *clv.list + case "network.participation.v1.QueryAllUsedAllocationsResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllUsedAllocationsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsResponse.usedAllocations": + if x.UsedAllocations == nil { + x.UsedAllocations = []*UsedAllocations{} + } + value := &_QueryAllUsedAllocationsResponse_1_list{list: &x.UsedAllocations} + return protoreflect.ValueOfList(value) + case "network.participation.v1.QueryAllUsedAllocationsResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllUsedAllocationsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAllUsedAllocationsResponse.usedAllocations": + list := []*UsedAllocations{} + return protoreflect.ValueOfList(&_QueryAllUsedAllocationsResponse_1_list{list: &list}) + case "network.participation.v1.QueryAllUsedAllocationsResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAllUsedAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAllUsedAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllUsedAllocationsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryAllUsedAllocationsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllUsedAllocationsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllUsedAllocationsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllUsedAllocationsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllUsedAllocationsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllUsedAllocationsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.UsedAllocations) > 0 { + for _, e := range x.UsedAllocations { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllUsedAllocationsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.UsedAllocations) > 0 { + for iNdEx := len(x.UsedAllocations) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.UsedAllocations[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllUsedAllocationsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllUsedAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field UsedAllocations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.UsedAllocations = append(x.UsedAllocations, &UsedAllocations{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.UsedAllocations[len(x.UsedAllocations)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryTotalAllocationsRequest protoreflect.MessageDescriptor + fd_QueryTotalAllocationsRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryTotalAllocationsRequest = File_network_participation_v1_query_proto.Messages().ByName("QueryTotalAllocationsRequest") + fd_QueryTotalAllocationsRequest_address = md_QueryTotalAllocationsRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryTotalAllocationsRequest)(nil) + +type fastReflection_QueryTotalAllocationsRequest QueryTotalAllocationsRequest + +func (x *QueryTotalAllocationsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTotalAllocationsRequest)(x) +} + +func (x *QueryTotalAllocationsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_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) +} + +var _fastReflection_QueryTotalAllocationsRequest_messageType fastReflection_QueryTotalAllocationsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryTotalAllocationsRequest_messageType{} + +type fastReflection_QueryTotalAllocationsRequest_messageType struct{} + +func (x fastReflection_QueryTotalAllocationsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTotalAllocationsRequest)(nil) +} +func (x fastReflection_QueryTotalAllocationsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTotalAllocationsRequest) +} +func (x fastReflection_QueryTotalAllocationsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalAllocationsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTotalAllocationsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalAllocationsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryTotalAllocationsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryTotalAllocationsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTotalAllocationsRequest) New() protoreflect.Message { + return new(fastReflection_QueryTotalAllocationsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTotalAllocationsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryTotalAllocationsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryTotalAllocationsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryTotalAllocationsRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryTotalAllocationsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalAllocationsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryTotalAllocationsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryTotalAllocationsRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalAllocationsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalAllocationsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsRequest.address": + panic(fmt.Errorf("field address of message network.participation.v1.QueryTotalAllocationsRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryTotalAllocationsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryTotalAllocationsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryTotalAllocationsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryTotalAllocationsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalAllocationsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryTotalAllocationsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryTotalAllocationsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTotalAllocationsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalAllocationsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalAllocationsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalAllocationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryTotalAllocationsResponse protoreflect.MessageDescriptor + fd_QueryTotalAllocationsResponse_totalAllocations protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryTotalAllocationsResponse = File_network_participation_v1_query_proto.Messages().ByName("QueryTotalAllocationsResponse") + fd_QueryTotalAllocationsResponse_totalAllocations = md_QueryTotalAllocationsResponse.Fields().ByName("totalAllocations") +} + +var _ protoreflect.Message = (*fastReflection_QueryTotalAllocationsResponse)(nil) + +type fastReflection_QueryTotalAllocationsResponse QueryTotalAllocationsResponse + +func (x *QueryTotalAllocationsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTotalAllocationsResponse)(x) +} + +func (x *QueryTotalAllocationsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_proto_msgTypes[11] + 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) +} + +var _fastReflection_QueryTotalAllocationsResponse_messageType fastReflection_QueryTotalAllocationsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTotalAllocationsResponse_messageType{} + +type fastReflection_QueryTotalAllocationsResponse_messageType struct{} + +func (x fastReflection_QueryTotalAllocationsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTotalAllocationsResponse)(nil) +} +func (x fastReflection_QueryTotalAllocationsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTotalAllocationsResponse) +} +func (x fastReflection_QueryTotalAllocationsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalAllocationsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTotalAllocationsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalAllocationsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryTotalAllocationsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTotalAllocationsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTotalAllocationsResponse) New() protoreflect.Message { + return new(fastReflection_QueryTotalAllocationsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTotalAllocationsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTotalAllocationsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryTotalAllocationsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.TotalAllocations != "" { + value := protoreflect.ValueOfString(x.TotalAllocations) + if !f(fd_QueryTotalAllocationsResponse_totalAllocations, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryTotalAllocationsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsResponse.totalAllocations": + return x.TotalAllocations != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalAllocationsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsResponse.totalAllocations": + x.TotalAllocations = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryTotalAllocationsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryTotalAllocationsResponse.totalAllocations": + value := x.TotalAllocations + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalAllocationsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsResponse.totalAllocations": + x.TotalAllocations = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalAllocationsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsResponse.totalAllocations": + panic(fmt.Errorf("field totalAllocations of message network.participation.v1.QueryTotalAllocationsResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryTotalAllocationsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryTotalAllocationsResponse.totalAllocations": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryTotalAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryTotalAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryTotalAllocationsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryTotalAllocationsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryTotalAllocationsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalAllocationsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryTotalAllocationsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryTotalAllocationsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTotalAllocationsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.TotalAllocations) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalAllocationsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.TotalAllocations) > 0 { + i -= len(x.TotalAllocations) + copy(dAtA[i:], x.TotalAllocations) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.TotalAllocations))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalAllocationsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalAllocations", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TotalAllocations = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAvailableAllocationsRequest protoreflect.MessageDescriptor + fd_QueryAvailableAllocationsRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryAvailableAllocationsRequest = File_network_participation_v1_query_proto.Messages().ByName("QueryAvailableAllocationsRequest") + fd_QueryAvailableAllocationsRequest_address = md_QueryAvailableAllocationsRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryAvailableAllocationsRequest)(nil) + +type fastReflection_QueryAvailableAllocationsRequest QueryAvailableAllocationsRequest + +func (x *QueryAvailableAllocationsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAvailableAllocationsRequest)(x) +} + +func (x *QueryAvailableAllocationsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_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) +} + +var _fastReflection_QueryAvailableAllocationsRequest_messageType fastReflection_QueryAvailableAllocationsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAvailableAllocationsRequest_messageType{} + +type fastReflection_QueryAvailableAllocationsRequest_messageType struct{} + +func (x fastReflection_QueryAvailableAllocationsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAvailableAllocationsRequest)(nil) +} +func (x fastReflection_QueryAvailableAllocationsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAvailableAllocationsRequest) +} +func (x fastReflection_QueryAvailableAllocationsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAvailableAllocationsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAvailableAllocationsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAvailableAllocationsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAvailableAllocationsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAvailableAllocationsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAvailableAllocationsRequest) New() protoreflect.Message { + return new(fastReflection_QueryAvailableAllocationsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAvailableAllocationsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAvailableAllocationsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAvailableAllocationsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryAvailableAllocationsRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAvailableAllocationsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAvailableAllocationsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAvailableAllocationsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryAvailableAllocationsRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAvailableAllocationsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAvailableAllocationsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsRequest.address": + panic(fmt.Errorf("field address of message network.participation.v1.QueryAvailableAllocationsRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAvailableAllocationsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsRequest")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAvailableAllocationsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryAvailableAllocationsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAvailableAllocationsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAvailableAllocationsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAvailableAllocationsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAvailableAllocationsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAvailableAllocationsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAvailableAllocationsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAvailableAllocationsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAvailableAllocationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAvailableAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAvailableAllocationsResponse protoreflect.MessageDescriptor + fd_QueryAvailableAllocationsResponse_availableAllocations protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_query_proto_init() + md_QueryAvailableAllocationsResponse = File_network_participation_v1_query_proto.Messages().ByName("QueryAvailableAllocationsResponse") + fd_QueryAvailableAllocationsResponse_availableAllocations = md_QueryAvailableAllocationsResponse.Fields().ByName("availableAllocations") +} + +var _ protoreflect.Message = (*fastReflection_QueryAvailableAllocationsResponse)(nil) + +type fastReflection_QueryAvailableAllocationsResponse QueryAvailableAllocationsResponse + +func (x *QueryAvailableAllocationsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAvailableAllocationsResponse)(x) +} + +func (x *QueryAvailableAllocationsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_query_proto_msgTypes[13] + 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) +} + +var _fastReflection_QueryAvailableAllocationsResponse_messageType fastReflection_QueryAvailableAllocationsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAvailableAllocationsResponse_messageType{} + +type fastReflection_QueryAvailableAllocationsResponse_messageType struct{} + +func (x fastReflection_QueryAvailableAllocationsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAvailableAllocationsResponse)(nil) +} +func (x fastReflection_QueryAvailableAllocationsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAvailableAllocationsResponse) +} +func (x fastReflection_QueryAvailableAllocationsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAvailableAllocationsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAvailableAllocationsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAvailableAllocationsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAvailableAllocationsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAvailableAllocationsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAvailableAllocationsResponse) New() protoreflect.Message { + return new(fastReflection_QueryAvailableAllocationsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAvailableAllocationsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAvailableAllocationsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAvailableAllocationsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.AvailableAllocations != "" { + value := protoreflect.ValueOfString(x.AvailableAllocations) + if !f(fd_QueryAvailableAllocationsResponse_availableAllocations, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAvailableAllocationsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsResponse.availableAllocations": + return x.AvailableAllocations != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAvailableAllocationsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsResponse.availableAllocations": + x.AvailableAllocations = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAvailableAllocationsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.QueryAvailableAllocationsResponse.availableAllocations": + value := x.AvailableAllocations + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAvailableAllocationsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsResponse.availableAllocations": + x.AvailableAllocations = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAvailableAllocationsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsResponse.availableAllocations": + panic(fmt.Errorf("field availableAllocations of message network.participation.v1.QueryAvailableAllocationsResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAvailableAllocationsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.QueryAvailableAllocationsResponse.availableAllocations": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.QueryAvailableAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.QueryAvailableAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAvailableAllocationsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.QueryAvailableAllocationsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAvailableAllocationsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAvailableAllocationsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAvailableAllocationsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAvailableAllocationsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAvailableAllocationsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.AvailableAllocations) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAvailableAllocationsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.AvailableAllocations) > 0 { + i -= len(x.AvailableAllocations) + copy(dAtA[i:], x.AvailableAllocations) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.AvailableAllocations))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAvailableAllocationsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAvailableAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAvailableAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AvailableAllocations", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.AvailableAllocations = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/participation/v1/query.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryParamsRequest) Reset() { + *x = QueryParamsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsRequest) ProtoMessage() {} + +// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{0} +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params holds all the parameters of this module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryParamsResponse) Reset() { + *x = QueryParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsResponse) ProtoMessage() {} + +// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryParamsResponse) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +type QueryGetAuctionUsedAllocationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` +} + +func (x *QueryGetAuctionUsedAllocationsRequest) Reset() { + *x = QueryGetAuctionUsedAllocationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetAuctionUsedAllocationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetAuctionUsedAllocationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetAuctionUsedAllocationsRequest.ProtoReflect.Descriptor instead. +func (*QueryGetAuctionUsedAllocationsRequest) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{2} +} + +func (x *QueryGetAuctionUsedAllocationsRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *QueryGetAuctionUsedAllocationsRequest) GetAuctionID() uint64 { + if x != nil { + return x.AuctionID + } + return 0 +} + +type QueryGetAuctionUsedAllocationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AuctionUsedAllocations *AuctionUsedAllocations `protobuf:"bytes,1,opt,name=auctionUsedAllocations,proto3" json:"auctionUsedAllocations,omitempty"` +} + +func (x *QueryGetAuctionUsedAllocationsResponse) Reset() { + *x = QueryGetAuctionUsedAllocationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetAuctionUsedAllocationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetAuctionUsedAllocationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetAuctionUsedAllocationsResponse.ProtoReflect.Descriptor instead. +func (*QueryGetAuctionUsedAllocationsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryGetAuctionUsedAllocationsResponse) GetAuctionUsedAllocations() *AuctionUsedAllocations { + if x != nil { + return x.AuctionUsedAllocations + } + return nil +} + +type QueryAllAuctionUsedAllocationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllAuctionUsedAllocationsRequest) Reset() { + *x = QueryAllAuctionUsedAllocationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllAuctionUsedAllocationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllAuctionUsedAllocationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllAuctionUsedAllocationsRequest.ProtoReflect.Descriptor instead. +func (*QueryAllAuctionUsedAllocationsRequest) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryAllAuctionUsedAllocationsRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *QueryAllAuctionUsedAllocationsRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllAuctionUsedAllocationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AuctionUsedAllocations []*AuctionUsedAllocations `protobuf:"bytes,1,rep,name=auctionUsedAllocations,proto3" json:"auctionUsedAllocations,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllAuctionUsedAllocationsResponse) Reset() { + *x = QueryAllAuctionUsedAllocationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllAuctionUsedAllocationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllAuctionUsedAllocationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllAuctionUsedAllocationsResponse.ProtoReflect.Descriptor instead. +func (*QueryAllAuctionUsedAllocationsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryAllAuctionUsedAllocationsResponse) GetAuctionUsedAllocations() []*AuctionUsedAllocations { + if x != nil { + return x.AuctionUsedAllocations + } + return nil +} + +func (x *QueryAllAuctionUsedAllocationsResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetUsedAllocationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryGetUsedAllocationsRequest) Reset() { + *x = QueryGetUsedAllocationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetUsedAllocationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetUsedAllocationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetUsedAllocationsRequest.ProtoReflect.Descriptor instead. +func (*QueryGetUsedAllocationsRequest) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{6} +} + +func (x *QueryGetUsedAllocationsRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryGetUsedAllocationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UsedAllocations *UsedAllocations `protobuf:"bytes,1,opt,name=usedAllocations,proto3" json:"usedAllocations,omitempty"` +} + +func (x *QueryGetUsedAllocationsResponse) Reset() { + *x = QueryGetUsedAllocationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetUsedAllocationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetUsedAllocationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetUsedAllocationsResponse.ProtoReflect.Descriptor instead. +func (*QueryGetUsedAllocationsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryGetUsedAllocationsResponse) GetUsedAllocations() *UsedAllocations { + if x != nil { + return x.UsedAllocations + } + return nil +} + +type QueryAllUsedAllocationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllUsedAllocationsRequest) Reset() { + *x = QueryAllUsedAllocationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllUsedAllocationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllUsedAllocationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllUsedAllocationsRequest.ProtoReflect.Descriptor instead. +func (*QueryAllUsedAllocationsRequest) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{8} +} + +func (x *QueryAllUsedAllocationsRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllUsedAllocationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UsedAllocations []*UsedAllocations `protobuf:"bytes,1,rep,name=usedAllocations,proto3" json:"usedAllocations,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllUsedAllocationsResponse) Reset() { + *x = QueryAllUsedAllocationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllUsedAllocationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllUsedAllocationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllUsedAllocationsResponse.ProtoReflect.Descriptor instead. +func (*QueryAllUsedAllocationsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{9} +} + +func (x *QueryAllUsedAllocationsResponse) GetUsedAllocations() []*UsedAllocations { + if x != nil { + return x.UsedAllocations + } + return nil +} + +func (x *QueryAllUsedAllocationsResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryTotalAllocationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryTotalAllocationsRequest) Reset() { + *x = QueryTotalAllocationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryTotalAllocationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryTotalAllocationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryTotalAllocationsRequest.ProtoReflect.Descriptor instead. +func (*QueryTotalAllocationsRequest) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{10} +} + +func (x *QueryTotalAllocationsRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryTotalAllocationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TotalAllocations string `protobuf:"bytes,1,opt,name=totalAllocations,proto3" json:"totalAllocations,omitempty"` +} + +func (x *QueryTotalAllocationsResponse) Reset() { + *x = QueryTotalAllocationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryTotalAllocationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryTotalAllocationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryTotalAllocationsResponse.ProtoReflect.Descriptor instead. +func (*QueryTotalAllocationsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{11} +} + +func (x *QueryTotalAllocationsResponse) GetTotalAllocations() string { + if x != nil { + return x.TotalAllocations + } + return "" +} + +type QueryAvailableAllocationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryAvailableAllocationsRequest) Reset() { + *x = QueryAvailableAllocationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAvailableAllocationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAvailableAllocationsRequest) ProtoMessage() {} + +// Deprecated: Use QueryAvailableAllocationsRequest.ProtoReflect.Descriptor instead. +func (*QueryAvailableAllocationsRequest) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{12} +} + +func (x *QueryAvailableAllocationsRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryAvailableAllocationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AvailableAllocations string `protobuf:"bytes,1,opt,name=availableAllocations,proto3" json:"availableAllocations,omitempty"` +} + +func (x *QueryAvailableAllocationsResponse) Reset() { + *x = QueryAvailableAllocationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_query_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAvailableAllocationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAvailableAllocationsResponse) ProtoMessage() {} + +// Deprecated: Use QueryAvailableAllocationsResponse.ProtoReflect.Descriptor instead. +func (*QueryAvailableAllocationsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_query_proto_rawDescGZIP(), []int{13} +} + +func (x *QueryAvailableAllocationsResponse) GetAvailableAllocations() string { + if x != nil { + return x.AvailableAllocations + } + return "" +} + +var File_network_participation_v1_query_proto protoreflect.FileDescriptor + +var file_network_participation_v1_query_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, + 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x37, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x14, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5a, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, + 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0x79, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x98, 0x01, 0x0a, + 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x16, 0x61, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, + 0x16, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x41, 0x6c, 0x6c, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe1, 0x01, + 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x16, 0x61, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x16, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x54, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x7c, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x75, 0x73, + 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x68, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, + 0x6c, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0xc5, 0x01, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x64, + 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, 0x75, + 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x47, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x78, 0x0a, 0x1d, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x10, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, + 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x56, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x84, 0x01, + 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x14, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, + 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x14, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xa2, 0x0b, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x96, + 0x01, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2c, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0xe8, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, + 0x12, 0x40, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x7d, 0x12, 0xdf, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x3f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x64, + 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, + 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x69, + 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcb, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x64, + 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, + 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x7d, 0x12, 0xc2, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x64, 0x41, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x73, + 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xc6, 0x01, 0x0a, 0x10, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, + 0x12, 0xd6, 0x01, 0x0a, 0x14, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x69, 0x67, 0x6e, + 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x42, 0xf4, 0x01, 0x0a, 0x1c, 0x63, 0x6f, + 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, + 0x3b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x24, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_participation_v1_query_proto_rawDescOnce sync.Once + file_network_participation_v1_query_proto_rawDescData = file_network_participation_v1_query_proto_rawDesc +) + +func file_network_participation_v1_query_proto_rawDescGZIP() []byte { + file_network_participation_v1_query_proto_rawDescOnce.Do(func() { + file_network_participation_v1_query_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_participation_v1_query_proto_rawDescData) + }) + return file_network_participation_v1_query_proto_rawDescData +} + +var file_network_participation_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_network_participation_v1_query_proto_goTypes = []interface{}{ + (*QueryParamsRequest)(nil), // 0: network.participation.v1.QueryParamsRequest + (*QueryParamsResponse)(nil), // 1: network.participation.v1.QueryParamsResponse + (*QueryGetAuctionUsedAllocationsRequest)(nil), // 2: network.participation.v1.QueryGetAuctionUsedAllocationsRequest + (*QueryGetAuctionUsedAllocationsResponse)(nil), // 3: network.participation.v1.QueryGetAuctionUsedAllocationsResponse + (*QueryAllAuctionUsedAllocationsRequest)(nil), // 4: network.participation.v1.QueryAllAuctionUsedAllocationsRequest + (*QueryAllAuctionUsedAllocationsResponse)(nil), // 5: network.participation.v1.QueryAllAuctionUsedAllocationsResponse + (*QueryGetUsedAllocationsRequest)(nil), // 6: network.participation.v1.QueryGetUsedAllocationsRequest + (*QueryGetUsedAllocationsResponse)(nil), // 7: network.participation.v1.QueryGetUsedAllocationsResponse + (*QueryAllUsedAllocationsRequest)(nil), // 8: network.participation.v1.QueryAllUsedAllocationsRequest + (*QueryAllUsedAllocationsResponse)(nil), // 9: network.participation.v1.QueryAllUsedAllocationsResponse + (*QueryTotalAllocationsRequest)(nil), // 10: network.participation.v1.QueryTotalAllocationsRequest + (*QueryTotalAllocationsResponse)(nil), // 11: network.participation.v1.QueryTotalAllocationsResponse + (*QueryAvailableAllocationsRequest)(nil), // 12: network.participation.v1.QueryAvailableAllocationsRequest + (*QueryAvailableAllocationsResponse)(nil), // 13: network.participation.v1.QueryAvailableAllocationsResponse + (*Params)(nil), // 14: network.participation.v1.Params + (*AuctionUsedAllocations)(nil), // 15: network.participation.v1.AuctionUsedAllocations + (*v1beta1.PageRequest)(nil), // 16: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 17: cosmos.base.query.v1beta1.PageResponse + (*UsedAllocations)(nil), // 18: network.participation.v1.UsedAllocations +} +var file_network_participation_v1_query_proto_depIdxs = []int32{ + 14, // 0: network.participation.v1.QueryParamsResponse.params:type_name -> network.participation.v1.Params + 15, // 1: network.participation.v1.QueryGetAuctionUsedAllocationsResponse.auctionUsedAllocations:type_name -> network.participation.v1.AuctionUsedAllocations + 16, // 2: network.participation.v1.QueryAllAuctionUsedAllocationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 15, // 3: network.participation.v1.QueryAllAuctionUsedAllocationsResponse.auctionUsedAllocations:type_name -> network.participation.v1.AuctionUsedAllocations + 17, // 4: network.participation.v1.QueryAllAuctionUsedAllocationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 18, // 5: network.participation.v1.QueryGetUsedAllocationsResponse.usedAllocations:type_name -> network.participation.v1.UsedAllocations + 16, // 6: network.participation.v1.QueryAllUsedAllocationsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 18, // 7: network.participation.v1.QueryAllUsedAllocationsResponse.usedAllocations:type_name -> network.participation.v1.UsedAllocations + 17, // 8: network.participation.v1.QueryAllUsedAllocationsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 0, // 9: network.participation.v1.Query.Params:input_type -> network.participation.v1.QueryParamsRequest + 2, // 10: network.participation.v1.Query.GetAuctionUsedAllocations:input_type -> network.participation.v1.QueryGetAuctionUsedAllocationsRequest + 4, // 11: network.participation.v1.Query.ListAuctionUsedAllocations:input_type -> network.participation.v1.QueryAllAuctionUsedAllocationsRequest + 6, // 12: network.participation.v1.Query.GetUsedAllocations:input_type -> network.participation.v1.QueryGetUsedAllocationsRequest + 8, // 13: network.participation.v1.Query.ListUsedAllocations:input_type -> network.participation.v1.QueryAllUsedAllocationsRequest + 10, // 14: network.participation.v1.Query.TotalAllocations:input_type -> network.participation.v1.QueryTotalAllocationsRequest + 12, // 15: network.participation.v1.Query.AvailableAllocations:input_type -> network.participation.v1.QueryAvailableAllocationsRequest + 1, // 16: network.participation.v1.Query.Params:output_type -> network.participation.v1.QueryParamsResponse + 3, // 17: network.participation.v1.Query.GetAuctionUsedAllocations:output_type -> network.participation.v1.QueryGetAuctionUsedAllocationsResponse + 5, // 18: network.participation.v1.Query.ListAuctionUsedAllocations:output_type -> network.participation.v1.QueryAllAuctionUsedAllocationsResponse + 7, // 19: network.participation.v1.Query.GetUsedAllocations:output_type -> network.participation.v1.QueryGetUsedAllocationsResponse + 9, // 20: network.participation.v1.Query.ListUsedAllocations:output_type -> network.participation.v1.QueryAllUsedAllocationsResponse + 11, // 21: network.participation.v1.Query.TotalAllocations:output_type -> network.participation.v1.QueryTotalAllocationsResponse + 13, // 22: network.participation.v1.Query.AvailableAllocations:output_type -> network.participation.v1.QueryAvailableAllocationsResponse + 16, // [16:23] is the sub-list for method output_type + 9, // [9:16] 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_network_participation_v1_query_proto_init() } +func file_network_participation_v1_query_proto_init() { + if File_network_participation_v1_query_proto != nil { + return + } + file_network_participation_v1_auction_used_allocations_proto_init() + file_network_participation_v1_params_proto_init() + file_network_participation_v1_used_allocations_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_participation_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetAuctionUsedAllocationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetAuctionUsedAllocationsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllAuctionUsedAllocationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllAuctionUsedAllocationsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetUsedAllocationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetUsedAllocationsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllUsedAllocationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllUsedAllocationsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTotalAllocationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTotalAllocationsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAvailableAllocationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_query_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAvailableAllocationsResponse); 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_network_participation_v1_query_proto_rawDesc, + NumEnums: 0, + NumMessages: 14, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_participation_v1_query_proto_goTypes, + DependencyIndexes: file_network_participation_v1_query_proto_depIdxs, + MessageInfos: file_network_participation_v1_query_proto_msgTypes, + }.Build() + File_network_participation_v1_query_proto = out.File + file_network_participation_v1_query_proto_rawDesc = nil + file_network_participation_v1_query_proto_goTypes = nil + file_network_participation_v1_query_proto_depIdxs = nil +} diff --git a/api/network/participation/v1/query_grpc.pb.go b/api/network/participation/v1/query_grpc.pb.go new file mode 100644 index 00000000..e91356cd --- /dev/null +++ b/api/network/participation/v1/query_grpc.pb.go @@ -0,0 +1,341 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/participation/v1/query.proto + +package participationv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Query_Params_FullMethodName = "/network.participation.v1.Query/Params" + Query_GetAuctionUsedAllocations_FullMethodName = "/network.participation.v1.Query/GetAuctionUsedAllocations" + Query_ListAuctionUsedAllocations_FullMethodName = "/network.participation.v1.Query/ListAuctionUsedAllocations" + Query_GetUsedAllocations_FullMethodName = "/network.participation.v1.Query/GetUsedAllocations" + Query_ListUsedAllocations_FullMethodName = "/network.participation.v1.Query/ListUsedAllocations" + Query_TotalAllocations_FullMethodName = "/network.participation.v1.Query/TotalAllocations" + Query_AvailableAllocations_FullMethodName = "/network.participation.v1.Query/AvailableAllocations" +) + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of AuctionUsedAllocations items. + GetAuctionUsedAllocations(ctx context.Context, in *QueryGetAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetAuctionUsedAllocationsResponse, error) + ListAuctionUsedAllocations(ctx context.Context, in *QueryAllAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllAuctionUsedAllocationsResponse, error) + // Queries a list of UsedAllocations items. + GetUsedAllocations(ctx context.Context, in *QueryGetUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetUsedAllocationsResponse, error) + ListUsedAllocations(ctx context.Context, in *QueryAllUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllUsedAllocationsResponse, error) + // Queries a list of TotalAllocations items. + TotalAllocations(ctx context.Context, in *QueryTotalAllocationsRequest, opts ...grpc.CallOption) (*QueryTotalAllocationsResponse, error) + // Queries a list of AvailableAllocations items. + AvailableAllocations(ctx context.Context, in *QueryAvailableAllocationsRequest, opts ...grpc.CallOption) (*QueryAvailableAllocationsResponse, error) +} + +type queryClient struct { + cc grpc.ClientConnInterface +} + +func NewQueryClient(cc grpc.ClientConnInterface) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, Query_Params_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetAuctionUsedAllocations(ctx context.Context, in *QueryGetAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetAuctionUsedAllocationsResponse, error) { + out := new(QueryGetAuctionUsedAllocationsResponse) + err := c.cc.Invoke(ctx, Query_GetAuctionUsedAllocations_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListAuctionUsedAllocations(ctx context.Context, in *QueryAllAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllAuctionUsedAllocationsResponse, error) { + out := new(QueryAllAuctionUsedAllocationsResponse) + err := c.cc.Invoke(ctx, Query_ListAuctionUsedAllocations_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetUsedAllocations(ctx context.Context, in *QueryGetUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetUsedAllocationsResponse, error) { + out := new(QueryGetUsedAllocationsResponse) + err := c.cc.Invoke(ctx, Query_GetUsedAllocations_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListUsedAllocations(ctx context.Context, in *QueryAllUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllUsedAllocationsResponse, error) { + out := new(QueryAllUsedAllocationsResponse) + err := c.cc.Invoke(ctx, Query_ListUsedAllocations_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalAllocations(ctx context.Context, in *QueryTotalAllocationsRequest, opts ...grpc.CallOption) (*QueryTotalAllocationsResponse, error) { + out := new(QueryTotalAllocationsResponse) + err := c.cc.Invoke(ctx, Query_TotalAllocations_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AvailableAllocations(ctx context.Context, in *QueryAvailableAllocationsRequest, opts ...grpc.CallOption) (*QueryAvailableAllocationsResponse, error) { + out := new(QueryAvailableAllocationsResponse) + err := c.cc.Invoke(ctx, Query_AvailableAllocations_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +// All implementations must embed UnimplementedQueryServer +// for forward compatibility +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of AuctionUsedAllocations items. + GetAuctionUsedAllocations(context.Context, *QueryGetAuctionUsedAllocationsRequest) (*QueryGetAuctionUsedAllocationsResponse, error) + ListAuctionUsedAllocations(context.Context, *QueryAllAuctionUsedAllocationsRequest) (*QueryAllAuctionUsedAllocationsResponse, error) + // Queries a list of UsedAllocations items. + GetUsedAllocations(context.Context, *QueryGetUsedAllocationsRequest) (*QueryGetUsedAllocationsResponse, error) + ListUsedAllocations(context.Context, *QueryAllUsedAllocationsRequest) (*QueryAllUsedAllocationsResponse, error) + // Queries a list of TotalAllocations items. + TotalAllocations(context.Context, *QueryTotalAllocationsRequest) (*QueryTotalAllocationsResponse, error) + // Queries a list of AvailableAllocations items. + AvailableAllocations(context.Context, *QueryAvailableAllocationsRequest) (*QueryAvailableAllocationsResponse, error) + mustEmbedUnimplementedQueryServer() +} + +// UnimplementedQueryServer must be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (UnimplementedQueryServer) GetAuctionUsedAllocations(context.Context, *QueryGetAuctionUsedAllocationsRequest) (*QueryGetAuctionUsedAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAuctionUsedAllocations not implemented") +} +func (UnimplementedQueryServer) ListAuctionUsedAllocations(context.Context, *QueryAllAuctionUsedAllocationsRequest) (*QueryAllAuctionUsedAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListAuctionUsedAllocations not implemented") +} +func (UnimplementedQueryServer) GetUsedAllocations(context.Context, *QueryGetUsedAllocationsRequest) (*QueryGetUsedAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetUsedAllocations not implemented") +} +func (UnimplementedQueryServer) ListUsedAllocations(context.Context, *QueryAllUsedAllocationsRequest) (*QueryAllUsedAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListUsedAllocations not implemented") +} +func (UnimplementedQueryServer) TotalAllocations(context.Context, *QueryTotalAllocationsRequest) (*QueryTotalAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalAllocations not implemented") +} +func (UnimplementedQueryServer) AvailableAllocations(context.Context, *QueryAvailableAllocationsRequest) (*QueryAvailableAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AvailableAllocations not implemented") +} +func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} + +// UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to QueryServer will +// result in compilation errors. +type UnsafeQueryServer interface { + mustEmbedUnimplementedQueryServer() +} + +func RegisterQueryServer(s grpc.ServiceRegistrar, srv QueryServer) { + s.RegisterService(&Query_ServiceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_Params_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetAuctionUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetAuctionUsedAllocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetAuctionUsedAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetAuctionUsedAllocations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetAuctionUsedAllocations(ctx, req.(*QueryGetAuctionUsedAllocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListAuctionUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllAuctionUsedAllocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListAuctionUsedAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListAuctionUsedAllocations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListAuctionUsedAllocations(ctx, req.(*QueryAllAuctionUsedAllocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetUsedAllocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetUsedAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetUsedAllocations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetUsedAllocations(ctx, req.(*QueryGetUsedAllocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllUsedAllocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListUsedAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListUsedAllocations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListUsedAllocations(ctx, req.(*QueryAllUsedAllocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalAllocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TotalAllocations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalAllocations(ctx, req.(*QueryTotalAllocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AvailableAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAvailableAllocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AvailableAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_AvailableAllocations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AvailableAllocations(ctx, req.(*QueryAvailableAllocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Query_ServiceDesc is the grpc.ServiceDesc for Query service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Query_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.participation.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetAuctionUsedAllocations", + Handler: _Query_GetAuctionUsedAllocations_Handler, + }, + { + MethodName: "ListAuctionUsedAllocations", + Handler: _Query_ListAuctionUsedAllocations_Handler, + }, + { + MethodName: "GetUsedAllocations", + Handler: _Query_GetUsedAllocations_Handler, + }, + { + MethodName: "ListUsedAllocations", + Handler: _Query_ListUsedAllocations_Handler, + }, + { + MethodName: "TotalAllocations", + Handler: _Query_TotalAllocations_Handler, + }, + { + MethodName: "AvailableAllocations", + Handler: _Query_AvailableAllocations_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/participation/v1/query.proto", +} diff --git a/api/network/participation/v1/tx.pulsar.go b/api/network/participation/v1/tx.pulsar.go new file mode 100644 index 00000000..82469de4 --- /dev/null +++ b/api/network/participation/v1/tx.pulsar.go @@ -0,0 +1,3030 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package participationv1 + +import ( + _ "cosmossdk.io/api/amino" + _ "cosmossdk.io/api/cosmos/msg/v1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MsgUpdateParams protoreflect.MessageDescriptor + fd_MsgUpdateParams_authority protoreflect.FieldDescriptor + fd_MsgUpdateParams_params protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_tx_proto_init() + md_MsgUpdateParams = File_network_participation_v1_tx_proto.Messages().ByName("MsgUpdateParams") + fd_MsgUpdateParams_authority = md_MsgUpdateParams.Fields().ByName("authority") + fd_MsgUpdateParams_params = md_MsgUpdateParams.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParams)(nil) + +type fastReflection_MsgUpdateParams MsgUpdateParams + +func (x *MsgUpdateParams) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(x) +} + +func (x *MsgUpdateParams) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_tx_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) +} + +var _fastReflection_MsgUpdateParams_messageType fastReflection_MsgUpdateParams_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParams_messageType{} + +type fastReflection_MsgUpdateParams_messageType struct{} + +func (x fastReflection_MsgUpdateParams_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(nil) +} +func (x fastReflection_MsgUpdateParams_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} +func (x fastReflection_MsgUpdateParams_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParams) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParams) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParams_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParams) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParams) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParams)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParams) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_MsgUpdateParams_authority, value) { + return + } + } + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_MsgUpdateParams_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParams) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.MsgUpdateParams.authority": + return x.Authority != "" + case "network.participation.v1.MsgUpdateParams.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.MsgUpdateParams.authority": + x.Authority = "" + case "network.participation.v1.MsgUpdateParams.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParams) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.MsgUpdateParams.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + case "network.participation.v1.MsgUpdateParams.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParams does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.MsgUpdateParams.authority": + x.Authority = value.Interface().(string) + case "network.participation.v1.MsgUpdateParams.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.MsgUpdateParams.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.participation.v1.MsgUpdateParams.authority": + panic(fmt.Errorf("field authority of message network.participation.v1.MsgUpdateParams is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParams) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.MsgUpdateParams.authority": + return protoreflect.ValueOfString("") + case "network.participation.v1.MsgUpdateParams.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParams) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.MsgUpdateParams", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParams) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParams) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParams) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateParamsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_participation_v1_tx_proto_init() + md_MsgUpdateParamsResponse = File_network_participation_v1_tx_proto.Messages().ByName("MsgUpdateParamsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParamsResponse)(nil) + +type fastReflection_MsgUpdateParamsResponse MsgUpdateParamsResponse + +func (x *MsgUpdateParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(x) +} + +func (x *MsgUpdateParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_tx_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) +} + +var _fastReflection_MsgUpdateParamsResponse_messageType fastReflection_MsgUpdateParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParamsResponse_messageType{} + +type fastReflection_MsgUpdateParamsResponse_messageType struct{} + +func (x fastReflection_MsgUpdateParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(nil) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParamsResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParamsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.MsgUpdateParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgParticipate protoreflect.MessageDescriptor + fd_MsgParticipate_participant protoreflect.FieldDescriptor + fd_MsgParticipate_auctionID protoreflect.FieldDescriptor + fd_MsgParticipate_tierID protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_tx_proto_init() + md_MsgParticipate = File_network_participation_v1_tx_proto.Messages().ByName("MsgParticipate") + fd_MsgParticipate_participant = md_MsgParticipate.Fields().ByName("participant") + fd_MsgParticipate_auctionID = md_MsgParticipate.Fields().ByName("auctionID") + fd_MsgParticipate_tierID = md_MsgParticipate.Fields().ByName("tierID") +} + +var _ protoreflect.Message = (*fastReflection_MsgParticipate)(nil) + +type fastReflection_MsgParticipate MsgParticipate + +func (x *MsgParticipate) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgParticipate)(x) +} + +func (x *MsgParticipate) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_tx_proto_msgTypes[2] + 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) +} + +var _fastReflection_MsgParticipate_messageType fastReflection_MsgParticipate_messageType +var _ protoreflect.MessageType = fastReflection_MsgParticipate_messageType{} + +type fastReflection_MsgParticipate_messageType struct{} + +func (x fastReflection_MsgParticipate_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgParticipate)(nil) +} +func (x fastReflection_MsgParticipate_messageType) New() protoreflect.Message { + return new(fastReflection_MsgParticipate) +} +func (x fastReflection_MsgParticipate_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgParticipate +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgParticipate) Descriptor() protoreflect.MessageDescriptor { + return md_MsgParticipate +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgParticipate) Type() protoreflect.MessageType { + return _fastReflection_MsgParticipate_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgParticipate) New() protoreflect.Message { + return new(fastReflection_MsgParticipate) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgParticipate) Interface() protoreflect.ProtoMessage { + return (*MsgParticipate)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgParticipate) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Participant != "" { + value := protoreflect.ValueOfString(x.Participant) + if !f(fd_MsgParticipate_participant, value) { + return + } + } + if x.AuctionID != uint64(0) { + value := protoreflect.ValueOfUint64(x.AuctionID) + if !f(fd_MsgParticipate_auctionID, value) { + return + } + } + if x.TierID != uint64(0) { + value := protoreflect.ValueOfUint64(x.TierID) + if !f(fd_MsgParticipate_tierID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgParticipate) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.MsgParticipate.participant": + return x.Participant != "" + case "network.participation.v1.MsgParticipate.auctionID": + return x.AuctionID != uint64(0) + case "network.participation.v1.MsgParticipate.tierID": + return x.TierID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipate")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipate does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgParticipate) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.MsgParticipate.participant": + x.Participant = "" + case "network.participation.v1.MsgParticipate.auctionID": + x.AuctionID = uint64(0) + case "network.participation.v1.MsgParticipate.tierID": + x.TierID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipate")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipate does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgParticipate) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.MsgParticipate.participant": + value := x.Participant + return protoreflect.ValueOfString(value) + case "network.participation.v1.MsgParticipate.auctionID": + value := x.AuctionID + return protoreflect.ValueOfUint64(value) + case "network.participation.v1.MsgParticipate.tierID": + value := x.TierID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipate")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipate does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgParticipate) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.MsgParticipate.participant": + x.Participant = value.Interface().(string) + case "network.participation.v1.MsgParticipate.auctionID": + x.AuctionID = value.Uint() + case "network.participation.v1.MsgParticipate.tierID": + x.TierID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipate")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipate does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgParticipate) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.MsgParticipate.participant": + panic(fmt.Errorf("field participant of message network.participation.v1.MsgParticipate is not mutable")) + case "network.participation.v1.MsgParticipate.auctionID": + panic(fmt.Errorf("field auctionID of message network.participation.v1.MsgParticipate is not mutable")) + case "network.participation.v1.MsgParticipate.tierID": + panic(fmt.Errorf("field tierID of message network.participation.v1.MsgParticipate is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipate")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipate does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgParticipate) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.MsgParticipate.participant": + return protoreflect.ValueOfString("") + case "network.participation.v1.MsgParticipate.auctionID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.participation.v1.MsgParticipate.tierID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipate")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipate does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgParticipate) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.MsgParticipate", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgParticipate) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgParticipate) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgParticipate) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgParticipate) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgParticipate) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Participant) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.AuctionID != 0 { + n += 1 + runtime.Sov(uint64(x.AuctionID)) + } + if x.TierID != 0 { + n += 1 + runtime.Sov(uint64(x.TierID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgParticipate) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.TierID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.TierID)) + i-- + dAtA[i] = 0x18 + } + if x.AuctionID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.AuctionID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Participant) > 0 { + i -= len(x.Participant) + copy(dAtA[i:], x.Participant) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Participant))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgParticipate) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgParticipate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgParticipate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Participant", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Participant = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) + } + x.AuctionID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.AuctionID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TierID", wireType) + } + x.TierID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.TierID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgParticipateResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_participation_v1_tx_proto_init() + md_MsgParticipateResponse = File_network_participation_v1_tx_proto.Messages().ByName("MsgParticipateResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgParticipateResponse)(nil) + +type fastReflection_MsgParticipateResponse MsgParticipateResponse + +func (x *MsgParticipateResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgParticipateResponse)(x) +} + +func (x *MsgParticipateResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_tx_proto_msgTypes[3] + 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) +} + +var _fastReflection_MsgParticipateResponse_messageType fastReflection_MsgParticipateResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgParticipateResponse_messageType{} + +type fastReflection_MsgParticipateResponse_messageType struct{} + +func (x fastReflection_MsgParticipateResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgParticipateResponse)(nil) +} +func (x fastReflection_MsgParticipateResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgParticipateResponse) +} +func (x fastReflection_MsgParticipateResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgParticipateResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgParticipateResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgParticipateResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgParticipateResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgParticipateResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgParticipateResponse) New() protoreflect.Message { + return new(fastReflection_MsgParticipateResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgParticipateResponse) Interface() protoreflect.ProtoMessage { + return (*MsgParticipateResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgParticipateResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgParticipateResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipateResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipateResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgParticipateResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipateResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipateResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgParticipateResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipateResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipateResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgParticipateResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipateResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipateResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgParticipateResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipateResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipateResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgParticipateResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgParticipateResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgParticipateResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgParticipateResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.MsgParticipateResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgParticipateResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgParticipateResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgParticipateResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgParticipateResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgParticipateResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgParticipateResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgParticipateResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgParticipateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgParticipateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgWithdrawAllocations protoreflect.MessageDescriptor + fd_MsgWithdrawAllocations_participant protoreflect.FieldDescriptor + fd_MsgWithdrawAllocations_auctionID protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_tx_proto_init() + md_MsgWithdrawAllocations = File_network_participation_v1_tx_proto.Messages().ByName("MsgWithdrawAllocations") + fd_MsgWithdrawAllocations_participant = md_MsgWithdrawAllocations.Fields().ByName("participant") + fd_MsgWithdrawAllocations_auctionID = md_MsgWithdrawAllocations.Fields().ByName("auctionID") +} + +var _ protoreflect.Message = (*fastReflection_MsgWithdrawAllocations)(nil) + +type fastReflection_MsgWithdrawAllocations MsgWithdrawAllocations + +func (x *MsgWithdrawAllocations) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgWithdrawAllocations)(x) +} + +func (x *MsgWithdrawAllocations) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_tx_proto_msgTypes[4] + 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) +} + +var _fastReflection_MsgWithdrawAllocations_messageType fastReflection_MsgWithdrawAllocations_messageType +var _ protoreflect.MessageType = fastReflection_MsgWithdrawAllocations_messageType{} + +type fastReflection_MsgWithdrawAllocations_messageType struct{} + +func (x fastReflection_MsgWithdrawAllocations_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgWithdrawAllocations)(nil) +} +func (x fastReflection_MsgWithdrawAllocations_messageType) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawAllocations) +} +func (x fastReflection_MsgWithdrawAllocations_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawAllocations +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgWithdrawAllocations) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawAllocations +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgWithdrawAllocations) Type() protoreflect.MessageType { + return _fastReflection_MsgWithdrawAllocations_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgWithdrawAllocations) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawAllocations) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgWithdrawAllocations) Interface() protoreflect.ProtoMessage { + return (*MsgWithdrawAllocations)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgWithdrawAllocations) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Participant != "" { + value := protoreflect.ValueOfString(x.Participant) + if !f(fd_MsgWithdrawAllocations_participant, value) { + return + } + } + if x.AuctionID != uint64(0) { + value := protoreflect.ValueOfUint64(x.AuctionID) + if !f(fd_MsgWithdrawAllocations_auctionID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgWithdrawAllocations) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.MsgWithdrawAllocations.participant": + return x.Participant != "" + case "network.participation.v1.MsgWithdrawAllocations.auctionID": + return x.AuctionID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocations does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgWithdrawAllocations) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.MsgWithdrawAllocations.participant": + x.Participant = "" + case "network.participation.v1.MsgWithdrawAllocations.auctionID": + x.AuctionID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocations does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgWithdrawAllocations) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.MsgWithdrawAllocations.participant": + value := x.Participant + return protoreflect.ValueOfString(value) + case "network.participation.v1.MsgWithdrawAllocations.auctionID": + value := x.AuctionID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocations does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgWithdrawAllocations) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.MsgWithdrawAllocations.participant": + x.Participant = value.Interface().(string) + case "network.participation.v1.MsgWithdrawAllocations.auctionID": + x.AuctionID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocations does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgWithdrawAllocations) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.MsgWithdrawAllocations.participant": + panic(fmt.Errorf("field participant of message network.participation.v1.MsgWithdrawAllocations is not mutable")) + case "network.participation.v1.MsgWithdrawAllocations.auctionID": + panic(fmt.Errorf("field auctionID of message network.participation.v1.MsgWithdrawAllocations is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocations does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgWithdrawAllocations) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.MsgWithdrawAllocations.participant": + return protoreflect.ValueOfString("") + case "network.participation.v1.MsgWithdrawAllocations.auctionID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocations does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgWithdrawAllocations) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.MsgWithdrawAllocations", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgWithdrawAllocations) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgWithdrawAllocations) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgWithdrawAllocations) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgWithdrawAllocations) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgWithdrawAllocations) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Participant) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.AuctionID != 0 { + n += 1 + runtime.Sov(uint64(x.AuctionID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgWithdrawAllocations) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.AuctionID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.AuctionID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Participant) > 0 { + i -= len(x.Participant) + copy(dAtA[i:], x.Participant) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Participant))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgWithdrawAllocations) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawAllocations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawAllocations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Participant", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Participant = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) + } + x.AuctionID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.AuctionID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgWithdrawAllocationsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_participation_v1_tx_proto_init() + md_MsgWithdrawAllocationsResponse = File_network_participation_v1_tx_proto.Messages().ByName("MsgWithdrawAllocationsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgWithdrawAllocationsResponse)(nil) + +type fastReflection_MsgWithdrawAllocationsResponse MsgWithdrawAllocationsResponse + +func (x *MsgWithdrawAllocationsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgWithdrawAllocationsResponse)(x) +} + +func (x *MsgWithdrawAllocationsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_tx_proto_msgTypes[5] + 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) +} + +var _fastReflection_MsgWithdrawAllocationsResponse_messageType fastReflection_MsgWithdrawAllocationsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgWithdrawAllocationsResponse_messageType{} + +type fastReflection_MsgWithdrawAllocationsResponse_messageType struct{} + +func (x fastReflection_MsgWithdrawAllocationsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgWithdrawAllocationsResponse)(nil) +} +func (x fastReflection_MsgWithdrawAllocationsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawAllocationsResponse) +} +func (x fastReflection_MsgWithdrawAllocationsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawAllocationsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawAllocationsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgWithdrawAllocationsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgWithdrawAllocationsResponse) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawAllocationsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgWithdrawAllocationsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocationsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgWithdrawAllocationsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgWithdrawAllocationsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.MsgWithdrawAllocationsResponse")) + } + panic(fmt.Errorf("message network.participation.v1.MsgWithdrawAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgWithdrawAllocationsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.MsgWithdrawAllocationsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgWithdrawAllocationsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgWithdrawAllocationsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgWithdrawAllocationsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgWithdrawAllocationsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgWithdrawAllocationsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgWithdrawAllocationsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgWithdrawAllocationsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/participation/v1/tx.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *MsgUpdateParams) Reset() { + *x = MsgUpdateParams{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_tx_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParams) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return file_network_participation_v1_tx_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgUpdateParams) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +func (x *MsgUpdateParams) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateParamsResponse) Reset() { + *x = MsgUpdateParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_tx_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParamsResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_tx_proto_rawDescGZIP(), []int{1} +} + +type MsgParticipate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Participant string `protobuf:"bytes,1,opt,name=participant,proto3" json:"participant,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` + TierID uint64 `protobuf:"varint,3,opt,name=tierID,proto3" json:"tierID,omitempty"` +} + +func (x *MsgParticipate) Reset() { + *x = MsgParticipate{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_tx_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgParticipate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgParticipate) ProtoMessage() {} + +// Deprecated: Use MsgParticipate.ProtoReflect.Descriptor instead. +func (*MsgParticipate) Descriptor() ([]byte, []int) { + return file_network_participation_v1_tx_proto_rawDescGZIP(), []int{2} +} + +func (x *MsgParticipate) GetParticipant() string { + if x != nil { + return x.Participant + } + return "" +} + +func (x *MsgParticipate) GetAuctionID() uint64 { + if x != nil { + return x.AuctionID + } + return 0 +} + +func (x *MsgParticipate) GetTierID() uint64 { + if x != nil { + return x.TierID + } + return 0 +} + +type MsgParticipateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgParticipateResponse) Reset() { + *x = MsgParticipateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_tx_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgParticipateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgParticipateResponse) ProtoMessage() {} + +// Deprecated: Use MsgParticipateResponse.ProtoReflect.Descriptor instead. +func (*MsgParticipateResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_tx_proto_rawDescGZIP(), []int{3} +} + +type MsgWithdrawAllocations struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Participant string `protobuf:"bytes,1,opt,name=participant,proto3" json:"participant,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` +} + +func (x *MsgWithdrawAllocations) Reset() { + *x = MsgWithdrawAllocations{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_tx_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgWithdrawAllocations) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgWithdrawAllocations) ProtoMessage() {} + +// Deprecated: Use MsgWithdrawAllocations.ProtoReflect.Descriptor instead. +func (*MsgWithdrawAllocations) Descriptor() ([]byte, []int) { + return file_network_participation_v1_tx_proto_rawDescGZIP(), []int{4} +} + +func (x *MsgWithdrawAllocations) GetParticipant() string { + if x != nil { + return x.Participant + } + return "" +} + +func (x *MsgWithdrawAllocations) GetAuctionID() uint64 { + if x != nil { + return x.AuctionID + } + return 0 +} + +type MsgWithdrawAllocationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgWithdrawAllocationsResponse) Reset() { + *x = MsgWithdrawAllocationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_tx_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgWithdrawAllocationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgWithdrawAllocationsResponse) ProtoMessage() {} + +// Deprecated: Use MsgWithdrawAllocationsResponse.ProtoReflect.Descriptor instead. +func (*MsgWithdrawAllocationsResponse) Descriptor() ([]byte, []int) { + return file_network_participation_v1_tx_proto_rawDescGZIP(), []int{5} +} + +var File_network_participation_v1_tx_proto protoreflect.FileDescriptor + +var file_network_participation_v1_tx_proto_rawDesc = []byte{ + 0x0a, 0x21, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, + 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x17, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xca, 0x01, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x43, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, + 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x3a, 0x3a, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, + 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x4d, + 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, + 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x0e, 0x4d, 0x73, + 0x67, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x0b, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x44, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x69, 0x65, 0x72, 0x49, 0x44, 0x3a, 0x10, + 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, + 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x73, 0x67, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x16, 0x4d, + 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x3a, + 0x10, 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, + 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x32, 0xe9, 0x02, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x6c, 0x0a, 0x0c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x29, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x31, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x0b, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x65, 0x1a, 0x30, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x13, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x38, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, + 0xf1, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x46, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x24, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x3a, 0x3a, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_participation_v1_tx_proto_rawDescOnce sync.Once + file_network_participation_v1_tx_proto_rawDescData = file_network_participation_v1_tx_proto_rawDesc +) + +func file_network_participation_v1_tx_proto_rawDescGZIP() []byte { + file_network_participation_v1_tx_proto_rawDescOnce.Do(func() { + file_network_participation_v1_tx_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_participation_v1_tx_proto_rawDescData) + }) + return file_network_participation_v1_tx_proto_rawDescData +} + +var file_network_participation_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_network_participation_v1_tx_proto_goTypes = []interface{}{ + (*MsgUpdateParams)(nil), // 0: network.participation.v1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 1: network.participation.v1.MsgUpdateParamsResponse + (*MsgParticipate)(nil), // 2: network.participation.v1.MsgParticipate + (*MsgParticipateResponse)(nil), // 3: network.participation.v1.MsgParticipateResponse + (*MsgWithdrawAllocations)(nil), // 4: network.participation.v1.MsgWithdrawAllocations + (*MsgWithdrawAllocationsResponse)(nil), // 5: network.participation.v1.MsgWithdrawAllocationsResponse + (*Params)(nil), // 6: network.participation.v1.Params +} +var file_network_participation_v1_tx_proto_depIdxs = []int32{ + 6, // 0: network.participation.v1.MsgUpdateParams.params:type_name -> network.participation.v1.Params + 0, // 1: network.participation.v1.Msg.UpdateParams:input_type -> network.participation.v1.MsgUpdateParams + 2, // 2: network.participation.v1.Msg.Participate:input_type -> network.participation.v1.MsgParticipate + 4, // 3: network.participation.v1.Msg.WithdrawAllocations:input_type -> network.participation.v1.MsgWithdrawAllocations + 1, // 4: network.participation.v1.Msg.UpdateParams:output_type -> network.participation.v1.MsgUpdateParamsResponse + 3, // 5: network.participation.v1.Msg.Participate:output_type -> network.participation.v1.MsgParticipateResponse + 5, // 6: network.participation.v1.Msg.WithdrawAllocations:output_type -> network.participation.v1.MsgWithdrawAllocationsResponse + 4, // [4:7] is the sub-list for method output_type + 1, // [1:4] 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_network_participation_v1_tx_proto_init() } +func file_network_participation_v1_tx_proto_init() { + if File_network_participation_v1_tx_proto != nil { + return + } + file_network_participation_v1_params_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_participation_v1_tx_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_tx_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_tx_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgParticipate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_tx_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgParticipateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_tx_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgWithdrawAllocations); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_participation_v1_tx_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgWithdrawAllocationsResponse); 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_network_participation_v1_tx_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_participation_v1_tx_proto_goTypes, + DependencyIndexes: file_network_participation_v1_tx_proto_depIdxs, + MessageInfos: file_network_participation_v1_tx_proto_msgTypes, + }.Build() + File_network_participation_v1_tx_proto = out.File + file_network_participation_v1_tx_proto_rawDesc = nil + file_network_participation_v1_tx_proto_goTypes = nil + file_network_participation_v1_tx_proto_depIdxs = nil +} diff --git a/api/network/participation/v1/tx_grpc.pb.go b/api/network/participation/v1/tx_grpc.pb.go new file mode 100644 index 00000000..bc3ffd05 --- /dev/null +++ b/api/network/participation/v1/tx_grpc.pb.go @@ -0,0 +1,187 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/participation/v1/tx.proto + +package participationv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Msg_UpdateParams_FullMethodName = "/network.participation.v1.Msg/UpdateParams" + Msg_Participate_FullMethodName = "/network.participation.v1.Msg/Participate" + Msg_WithdrawAllocations_FullMethodName = "/network.participation.v1.Msg/WithdrawAllocations" +) + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + Participate(ctx context.Context, in *MsgParticipate, opts ...grpc.CallOption) (*MsgParticipateResponse, error) + WithdrawAllocations(ctx context.Context, in *MsgWithdrawAllocations, opts ...grpc.CallOption) (*MsgWithdrawAllocationsResponse, error) +} + +type msgClient struct { + cc grpc.ClientConnInterface +} + +func NewMsgClient(cc grpc.ClientConnInterface) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, Msg_UpdateParams_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) Participate(ctx context.Context, in *MsgParticipate, opts ...grpc.CallOption) (*MsgParticipateResponse, error) { + out := new(MsgParticipateResponse) + err := c.cc.Invoke(ctx, Msg_Participate_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) WithdrawAllocations(ctx context.Context, in *MsgWithdrawAllocations, opts ...grpc.CallOption) (*MsgWithdrawAllocationsResponse, error) { + out := new(MsgWithdrawAllocationsResponse) + err := c.cc.Invoke(ctx, Msg_WithdrawAllocations_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +// All implementations must embed UnimplementedMsgServer +// for forward compatibility +type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + Participate(context.Context, *MsgParticipate) (*MsgParticipateResponse, error) + WithdrawAllocations(context.Context, *MsgWithdrawAllocations) (*MsgWithdrawAllocationsResponse, error) + mustEmbedUnimplementedMsgServer() +} + +// UnimplementedMsgServer must be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} +func (UnimplementedMsgServer) Participate(context.Context, *MsgParticipate) (*MsgParticipateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Participate not implemented") +} +func (UnimplementedMsgServer) WithdrawAllocations(context.Context, *MsgWithdrawAllocations) (*MsgWithdrawAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WithdrawAllocations not implemented") +} +func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} + +// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MsgServer will +// result in compilation errors. +type UnsafeMsgServer interface { + mustEmbedUnimplementedMsgServer() +} + +func RegisterMsgServer(s grpc.ServiceRegistrar, srv MsgServer) { + s.RegisterService(&Msg_ServiceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateParams_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_Participate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgParticipate) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Participate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_Participate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Participate(ctx, req.(*MsgParticipate)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_WithdrawAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgWithdrawAllocations) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).WithdrawAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_WithdrawAllocations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).WithdrawAllocations(ctx, req.(*MsgWithdrawAllocations)) + } + return interceptor(ctx, in, info, handler) +} + +// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Msg_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.participation.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + { + MethodName: "Participate", + Handler: _Msg_Participate_Handler, + }, + { + MethodName: "WithdrawAllocations", + Handler: _Msg_WithdrawAllocations_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/participation/v1/tx.proto", +} diff --git a/api/network/participation/v1/used_allocations.pulsar.go b/api/network/participation/v1/used_allocations.pulsar.go new file mode 100644 index 00000000..207aedb8 --- /dev/null +++ b/api/network/participation/v1/used_allocations.pulsar.go @@ -0,0 +1,658 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package participationv1 + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_UsedAllocations protoreflect.MessageDescriptor + fd_UsedAllocations_address protoreflect.FieldDescriptor + fd_UsedAllocations_numAllocations protoreflect.FieldDescriptor +) + +func init() { + file_network_participation_v1_used_allocations_proto_init() + md_UsedAllocations = File_network_participation_v1_used_allocations_proto.Messages().ByName("UsedAllocations") + fd_UsedAllocations_address = md_UsedAllocations.Fields().ByName("address") + fd_UsedAllocations_numAllocations = md_UsedAllocations.Fields().ByName("numAllocations") +} + +var _ protoreflect.Message = (*fastReflection_UsedAllocations)(nil) + +type fastReflection_UsedAllocations UsedAllocations + +func (x *UsedAllocations) ProtoReflect() protoreflect.Message { + return (*fastReflection_UsedAllocations)(x) +} + +func (x *UsedAllocations) slowProtoReflect() protoreflect.Message { + mi := &file_network_participation_v1_used_allocations_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) +} + +var _fastReflection_UsedAllocations_messageType fastReflection_UsedAllocations_messageType +var _ protoreflect.MessageType = fastReflection_UsedAllocations_messageType{} + +type fastReflection_UsedAllocations_messageType struct{} + +func (x fastReflection_UsedAllocations_messageType) Zero() protoreflect.Message { + return (*fastReflection_UsedAllocations)(nil) +} +func (x fastReflection_UsedAllocations_messageType) New() protoreflect.Message { + return new(fastReflection_UsedAllocations) +} +func (x fastReflection_UsedAllocations_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_UsedAllocations +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_UsedAllocations) Descriptor() protoreflect.MessageDescriptor { + return md_UsedAllocations +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_UsedAllocations) Type() protoreflect.MessageType { + return _fastReflection_UsedAllocations_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_UsedAllocations) New() protoreflect.Message { + return new(fastReflection_UsedAllocations) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_UsedAllocations) Interface() protoreflect.ProtoMessage { + return (*UsedAllocations)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_UsedAllocations) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_UsedAllocations_address, value) { + return + } + } + if x.NumAllocations != "" { + value := protoreflect.ValueOfString(x.NumAllocations) + if !f(fd_UsedAllocations_numAllocations, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_UsedAllocations) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.participation.v1.UsedAllocations.address": + return x.Address != "" + case "network.participation.v1.UsedAllocations.numAllocations": + return x.NumAllocations != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.UsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.UsedAllocations does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_UsedAllocations) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.participation.v1.UsedAllocations.address": + x.Address = "" + case "network.participation.v1.UsedAllocations.numAllocations": + x.NumAllocations = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.UsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.UsedAllocations does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_UsedAllocations) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.participation.v1.UsedAllocations.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.participation.v1.UsedAllocations.numAllocations": + value := x.NumAllocations + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.UsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.UsedAllocations does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_UsedAllocations) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.participation.v1.UsedAllocations.address": + x.Address = value.Interface().(string) + case "network.participation.v1.UsedAllocations.numAllocations": + x.NumAllocations = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.UsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.UsedAllocations does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_UsedAllocations) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.UsedAllocations.address": + panic(fmt.Errorf("field address of message network.participation.v1.UsedAllocations is not mutable")) + case "network.participation.v1.UsedAllocations.numAllocations": + panic(fmt.Errorf("field numAllocations of message network.participation.v1.UsedAllocations is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.UsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.UsedAllocations does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_UsedAllocations) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.participation.v1.UsedAllocations.address": + return protoreflect.ValueOfString("") + case "network.participation.v1.UsedAllocations.numAllocations": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.participation.v1.UsedAllocations")) + } + panic(fmt.Errorf("message network.participation.v1.UsedAllocations does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_UsedAllocations) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.participation.v1.UsedAllocations", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_UsedAllocations) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_UsedAllocations) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_UsedAllocations) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_UsedAllocations) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*UsedAllocations) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.NumAllocations) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*UsedAllocations) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.NumAllocations) > 0 { + i -= len(x.NumAllocations) + copy(dAtA[i:], x.NumAllocations) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NumAllocations))) + i-- + dAtA[i] = 0x12 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*UsedAllocations) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: UsedAllocations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: UsedAllocations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NumAllocations", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NumAllocations = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/participation/v1/used_allocations.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type UsedAllocations struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + NumAllocations string `protobuf:"bytes,2,opt,name=numAllocations,proto3" json:"numAllocations,omitempty"` +} + +func (x *UsedAllocations) Reset() { + *x = UsedAllocations{} + if protoimpl.UnsafeEnabled { + mi := &file_network_participation_v1_used_allocations_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UsedAllocations) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsedAllocations) ProtoMessage() {} + +// Deprecated: Use UsedAllocations.ProtoReflect.Descriptor instead. +func (*UsedAllocations) Descriptor() ([]byte, []int) { + return file_network_participation_v1_used_allocations_proto_rawDescGZIP(), []int{0} +} + +func (x *UsedAllocations) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *UsedAllocations) GetNumAllocations() string { + if x != nil { + return x.NumAllocations + } + return "" +} + +var File_network_participation_v1_used_allocations_proto protoreflect.FileDescriptor + +var file_network_participation_v1_used_allocations_proto_rawDesc = []byte{ + 0x0a, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x64, 0x5f, + 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9a, 0x01, 0x0a, + 0x0f, 0x55, 0x73, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x53, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x41, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, + 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, + 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x41, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0xfe, 0x01, 0x0a, 0x1c, 0x63, 0x6f, + 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x55, 0x73, 0x65, 0x64, + 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, + 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, + 0xaa, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x18, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x24, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_network_participation_v1_used_allocations_proto_rawDescOnce sync.Once + file_network_participation_v1_used_allocations_proto_rawDescData = file_network_participation_v1_used_allocations_proto_rawDesc +) + +func file_network_participation_v1_used_allocations_proto_rawDescGZIP() []byte { + file_network_participation_v1_used_allocations_proto_rawDescOnce.Do(func() { + file_network_participation_v1_used_allocations_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_participation_v1_used_allocations_proto_rawDescData) + }) + return file_network_participation_v1_used_allocations_proto_rawDescData +} + +var file_network_participation_v1_used_allocations_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_participation_v1_used_allocations_proto_goTypes = []interface{}{ + (*UsedAllocations)(nil), // 0: network.participation.v1.UsedAllocations +} +var file_network_participation_v1_used_allocations_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 +} + +func init() { file_network_participation_v1_used_allocations_proto_init() } +func file_network_participation_v1_used_allocations_proto_init() { + if File_network_participation_v1_used_allocations_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_participation_v1_used_allocations_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UsedAllocations); 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_network_participation_v1_used_allocations_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_participation_v1_used_allocations_proto_goTypes, + DependencyIndexes: file_network_participation_v1_used_allocations_proto_depIdxs, + MessageInfos: file_network_participation_v1_used_allocations_proto_msgTypes, + }.Build() + File_network_participation_v1_used_allocations_proto = out.File + file_network_participation_v1_used_allocations_proto_rawDesc = nil + file_network_participation_v1_used_allocations_proto_goTypes = nil + file_network_participation_v1_used_allocations_proto_depIdxs = nil +} diff --git a/api/network/profile/module/v1/module.pulsar.go b/api/network/profile/module/v1/module.pulsar.go new file mode 100644 index 00000000..37cc9165 --- /dev/null +++ b/api/network/profile/module/v1/module.pulsar.go @@ -0,0 +1,580 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package modulev1 + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Module protoreflect.MessageDescriptor + fd_Module_authority protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_module_v1_module_proto_init() + md_Module = File_network_profile_module_v1_module_proto.Messages().ByName("Module") + fd_Module_authority = md_Module.Fields().ByName("authority") +} + +var _ protoreflect.Message = (*fastReflection_Module)(nil) + +type fastReflection_Module Module + +func (x *Module) ProtoReflect() protoreflect.Message { + return (*fastReflection_Module)(x) +} + +func (x *Module) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_module_v1_module_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) +} + +var _fastReflection_Module_messageType fastReflection_Module_messageType +var _ protoreflect.MessageType = fastReflection_Module_messageType{} + +type fastReflection_Module_messageType struct{} + +func (x fastReflection_Module_messageType) Zero() protoreflect.Message { + return (*fastReflection_Module)(nil) +} +func (x fastReflection_Module_messageType) New() protoreflect.Message { + return new(fastReflection_Module) +} +func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Module) Type() protoreflect.MessageType { + return _fastReflection_Module_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Module) New() protoreflect.Message { + return new(fastReflection_Module) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage { + return (*Module)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_Module_authority, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.module.v1.Module.authority": + return x.Authority != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.module.v1.Module")) + } + panic(fmt.Errorf("message network.profile.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.module.v1.Module.authority": + x.Authority = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.module.v1.Module")) + } + panic(fmt.Errorf("message network.profile.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.module.v1.Module.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.module.v1.Module")) + } + panic(fmt.Errorf("message network.profile.module.v1.Module does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.module.v1.Module.authority": + x.Authority = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.module.v1.Module")) + } + panic(fmt.Errorf("message network.profile.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.module.v1.Module.authority": + panic(fmt.Errorf("field authority of message network.profile.module.v1.Module is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.module.v1.Module")) + } + panic(fmt.Errorf("message network.profile.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.module.v1.Module.authority": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.module.v1.Module")) + } + panic(fmt.Errorf("message network.profile.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.module.v1.Module", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Module) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/profile/module/v1/module.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Module is the config object for the module. +type Module struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (x *Module) Reset() { + *x = Module{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_module_v1_module_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Module) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Module) ProtoMessage() {} + +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { + return file_network_profile_module_v1_module_proto_rawDescGZIP(), []int{0} +} + +func (x *Module) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +var File_network_profile_module_v1_module_proto protoreflect.FileDescriptor + +var file_network_profile_module_v1_module_proto_rawDesc = []byte{ + 0x0a, 0x26, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x53, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x2b, 0xba, + 0xc0, 0x96, 0xda, 0x01, 0x25, 0x0a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x78, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x42, 0xf5, 0x01, 0x0a, 0x1d, 0x63, + 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x4e, 0x50, 0x4d, 0xaa, 0x02, 0x19, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, + 0x02, 0x19, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x25, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x1c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_profile_module_v1_module_proto_rawDescOnce sync.Once + file_network_profile_module_v1_module_proto_rawDescData = file_network_profile_module_v1_module_proto_rawDesc +) + +func file_network_profile_module_v1_module_proto_rawDescGZIP() []byte { + file_network_profile_module_v1_module_proto_rawDescOnce.Do(func() { + file_network_profile_module_v1_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_profile_module_v1_module_proto_rawDescData) + }) + return file_network_profile_module_v1_module_proto_rawDescData +} + +var file_network_profile_module_v1_module_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_profile_module_v1_module_proto_goTypes = []interface{}{ + (*Module)(nil), // 0: network.profile.module.v1.Module +} +var file_network_profile_module_v1_module_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 +} + +func init() { file_network_profile_module_v1_module_proto_init() } +func file_network_profile_module_v1_module_proto_init() { + if File_network_profile_module_v1_module_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_profile_module_v1_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Module); 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_network_profile_module_v1_module_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_profile_module_v1_module_proto_goTypes, + DependencyIndexes: file_network_profile_module_v1_module_proto_depIdxs, + MessageInfos: file_network_profile_module_v1_module_proto_msgTypes, + }.Build() + File_network_profile_module_v1_module_proto = out.File + file_network_profile_module_v1_module_proto_rawDesc = nil + file_network_profile_module_v1_module_proto_goTypes = nil + file_network_profile_module_v1_module_proto_depIdxs = nil +} diff --git a/api/network/profile/v1/coordinator.pulsar.go b/api/network/profile/v1/coordinator.pulsar.go new file mode 100644 index 00000000..066108d2 --- /dev/null +++ b/api/network/profile/v1/coordinator.pulsar.go @@ -0,0 +1,1941 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package profilev1 + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Coordinator protoreflect.MessageDescriptor + fd_Coordinator_coordinatorID protoreflect.FieldDescriptor + fd_Coordinator_address protoreflect.FieldDescriptor + fd_Coordinator_description protoreflect.FieldDescriptor + fd_Coordinator_active protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_coordinator_proto_init() + md_Coordinator = File_network_profile_v1_coordinator_proto.Messages().ByName("Coordinator") + fd_Coordinator_coordinatorID = md_Coordinator.Fields().ByName("coordinatorID") + fd_Coordinator_address = md_Coordinator.Fields().ByName("address") + fd_Coordinator_description = md_Coordinator.Fields().ByName("description") + fd_Coordinator_active = md_Coordinator.Fields().ByName("active") +} + +var _ protoreflect.Message = (*fastReflection_Coordinator)(nil) + +type fastReflection_Coordinator Coordinator + +func (x *Coordinator) ProtoReflect() protoreflect.Message { + return (*fastReflection_Coordinator)(x) +} + +func (x *Coordinator) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_coordinator_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) +} + +var _fastReflection_Coordinator_messageType fastReflection_Coordinator_messageType +var _ protoreflect.MessageType = fastReflection_Coordinator_messageType{} + +type fastReflection_Coordinator_messageType struct{} + +func (x fastReflection_Coordinator_messageType) Zero() protoreflect.Message { + return (*fastReflection_Coordinator)(nil) +} +func (x fastReflection_Coordinator_messageType) New() protoreflect.Message { + return new(fastReflection_Coordinator) +} +func (x fastReflection_Coordinator_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Coordinator +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Coordinator) Descriptor() protoreflect.MessageDescriptor { + return md_Coordinator +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Coordinator) Type() protoreflect.MessageType { + return _fastReflection_Coordinator_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Coordinator) New() protoreflect.Message { + return new(fastReflection_Coordinator) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Coordinator) Interface() protoreflect.ProtoMessage { + return (*Coordinator)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Coordinator) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_Coordinator_coordinatorID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_Coordinator_address, value) { + return + } + } + if x.Description != nil { + value := protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + if !f(fd_Coordinator_description, value) { + return + } + } + if x.Active != false { + value := protoreflect.ValueOfBool(x.Active) + if !f(fd_Coordinator_active, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Coordinator) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.Coordinator.coordinatorID": + return x.CoordinatorID != uint64(0) + case "network.profile.v1.Coordinator.address": + return x.Address != "" + case "network.profile.v1.Coordinator.description": + return x.Description != nil + case "network.profile.v1.Coordinator.active": + return x.Active != false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Coordinator")) + } + panic(fmt.Errorf("message network.profile.v1.Coordinator does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Coordinator) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.Coordinator.coordinatorID": + x.CoordinatorID = uint64(0) + case "network.profile.v1.Coordinator.address": + x.Address = "" + case "network.profile.v1.Coordinator.description": + x.Description = nil + case "network.profile.v1.Coordinator.active": + x.Active = false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Coordinator")) + } + panic(fmt.Errorf("message network.profile.v1.Coordinator does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Coordinator) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.Coordinator.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + case "network.profile.v1.Coordinator.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.Coordinator.description": + value := x.Description + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.profile.v1.Coordinator.active": + value := x.Active + return protoreflect.ValueOfBool(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Coordinator")) + } + panic(fmt.Errorf("message network.profile.v1.Coordinator does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Coordinator) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.Coordinator.coordinatorID": + x.CoordinatorID = value.Uint() + case "network.profile.v1.Coordinator.address": + x.Address = value.Interface().(string) + case "network.profile.v1.Coordinator.description": + x.Description = value.Message().Interface().(*CoordinatorDescription) + case "network.profile.v1.Coordinator.active": + x.Active = value.Bool() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Coordinator")) + } + panic(fmt.Errorf("message network.profile.v1.Coordinator does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Coordinator) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.Coordinator.description": + if x.Description == nil { + x.Description = new(CoordinatorDescription) + } + return protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + case "network.profile.v1.Coordinator.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.profile.v1.Coordinator is not mutable")) + case "network.profile.v1.Coordinator.address": + panic(fmt.Errorf("field address of message network.profile.v1.Coordinator is not mutable")) + case "network.profile.v1.Coordinator.active": + panic(fmt.Errorf("field active of message network.profile.v1.Coordinator is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Coordinator")) + } + panic(fmt.Errorf("message network.profile.v1.Coordinator does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Coordinator) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.Coordinator.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.profile.v1.Coordinator.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.Coordinator.description": + m := new(CoordinatorDescription) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.profile.v1.Coordinator.active": + return protoreflect.ValueOfBool(false) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Coordinator")) + } + panic(fmt.Errorf("message network.profile.v1.Coordinator does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Coordinator) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.Coordinator", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Coordinator) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Coordinator) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Coordinator) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Coordinator) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Coordinator) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Description != nil { + l = options.Size(x.Description) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Active { + n += 2 + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Coordinator) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Active { + i-- + if x.Active { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if x.Description != nil { + encoded, err := options.Marshal(x.Description) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Coordinator) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Coordinator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Coordinator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Description == nil { + x.Description = &CoordinatorDescription{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Description); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Active = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_CoordinatorDescription protoreflect.MessageDescriptor + fd_CoordinatorDescription_identity protoreflect.FieldDescriptor + fd_CoordinatorDescription_website protoreflect.FieldDescriptor + fd_CoordinatorDescription_details protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_coordinator_proto_init() + md_CoordinatorDescription = File_network_profile_v1_coordinator_proto.Messages().ByName("CoordinatorDescription") + fd_CoordinatorDescription_identity = md_CoordinatorDescription.Fields().ByName("identity") + fd_CoordinatorDescription_website = md_CoordinatorDescription.Fields().ByName("website") + fd_CoordinatorDescription_details = md_CoordinatorDescription.Fields().ByName("details") +} + +var _ protoreflect.Message = (*fastReflection_CoordinatorDescription)(nil) + +type fastReflection_CoordinatorDescription CoordinatorDescription + +func (x *CoordinatorDescription) ProtoReflect() protoreflect.Message { + return (*fastReflection_CoordinatorDescription)(x) +} + +func (x *CoordinatorDescription) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_coordinator_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) +} + +var _fastReflection_CoordinatorDescription_messageType fastReflection_CoordinatorDescription_messageType +var _ protoreflect.MessageType = fastReflection_CoordinatorDescription_messageType{} + +type fastReflection_CoordinatorDescription_messageType struct{} + +func (x fastReflection_CoordinatorDescription_messageType) Zero() protoreflect.Message { + return (*fastReflection_CoordinatorDescription)(nil) +} +func (x fastReflection_CoordinatorDescription_messageType) New() protoreflect.Message { + return new(fastReflection_CoordinatorDescription) +} +func (x fastReflection_CoordinatorDescription_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_CoordinatorDescription +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_CoordinatorDescription) Descriptor() protoreflect.MessageDescriptor { + return md_CoordinatorDescription +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_CoordinatorDescription) Type() protoreflect.MessageType { + return _fastReflection_CoordinatorDescription_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_CoordinatorDescription) New() protoreflect.Message { + return new(fastReflection_CoordinatorDescription) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_CoordinatorDescription) Interface() protoreflect.ProtoMessage { + return (*CoordinatorDescription)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_CoordinatorDescription) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Identity != "" { + value := protoreflect.ValueOfString(x.Identity) + if !f(fd_CoordinatorDescription_identity, value) { + return + } + } + if x.Website != "" { + value := protoreflect.ValueOfString(x.Website) + if !f(fd_CoordinatorDescription_website, value) { + return + } + } + if x.Details != "" { + value := protoreflect.ValueOfString(x.Details) + if !f(fd_CoordinatorDescription_details, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_CoordinatorDescription) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.CoordinatorDescription.identity": + return x.Identity != "" + case "network.profile.v1.CoordinatorDescription.website": + return x.Website != "" + case "network.profile.v1.CoordinatorDescription.details": + return x.Details != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_CoordinatorDescription) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.CoordinatorDescription.identity": + x.Identity = "" + case "network.profile.v1.CoordinatorDescription.website": + x.Website = "" + case "network.profile.v1.CoordinatorDescription.details": + x.Details = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_CoordinatorDescription) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.CoordinatorDescription.identity": + value := x.Identity + return protoreflect.ValueOfString(value) + case "network.profile.v1.CoordinatorDescription.website": + value := x.Website + return protoreflect.ValueOfString(value) + case "network.profile.v1.CoordinatorDescription.details": + value := x.Details + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorDescription does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_CoordinatorDescription) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.CoordinatorDescription.identity": + x.Identity = value.Interface().(string) + case "network.profile.v1.CoordinatorDescription.website": + x.Website = value.Interface().(string) + case "network.profile.v1.CoordinatorDescription.details": + x.Details = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_CoordinatorDescription) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.CoordinatorDescription.identity": + panic(fmt.Errorf("field identity of message network.profile.v1.CoordinatorDescription is not mutable")) + case "network.profile.v1.CoordinatorDescription.website": + panic(fmt.Errorf("field website of message network.profile.v1.CoordinatorDescription is not mutable")) + case "network.profile.v1.CoordinatorDescription.details": + panic(fmt.Errorf("field details of message network.profile.v1.CoordinatorDescription is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_CoordinatorDescription) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.CoordinatorDescription.identity": + return protoreflect.ValueOfString("") + case "network.profile.v1.CoordinatorDescription.website": + return protoreflect.ValueOfString("") + case "network.profile.v1.CoordinatorDescription.details": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_CoordinatorDescription) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.CoordinatorDescription", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_CoordinatorDescription) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_CoordinatorDescription) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_CoordinatorDescription) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_CoordinatorDescription) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*CoordinatorDescription) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Identity) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Website) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Details) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*CoordinatorDescription) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Details) > 0 { + i -= len(x.Details) + copy(dAtA[i:], x.Details) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Details))) + i-- + dAtA[i] = 0x1a + } + if len(x.Website) > 0 { + i -= len(x.Website) + copy(dAtA[i:], x.Website) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Website))) + i-- + dAtA[i] = 0x12 + } + if len(x.Identity) > 0 { + i -= len(x.Identity) + copy(dAtA[i:], x.Identity) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Identity))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*CoordinatorDescription) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: CoordinatorDescription: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: CoordinatorDescription: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Identity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Identity = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Website", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Website = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Details = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_CoordinatorByAddress protoreflect.MessageDescriptor + fd_CoordinatorByAddress_address protoreflect.FieldDescriptor + fd_CoordinatorByAddress_coordinatorID protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_coordinator_proto_init() + md_CoordinatorByAddress = File_network_profile_v1_coordinator_proto.Messages().ByName("CoordinatorByAddress") + fd_CoordinatorByAddress_address = md_CoordinatorByAddress.Fields().ByName("address") + fd_CoordinatorByAddress_coordinatorID = md_CoordinatorByAddress.Fields().ByName("coordinatorID") +} + +var _ protoreflect.Message = (*fastReflection_CoordinatorByAddress)(nil) + +type fastReflection_CoordinatorByAddress CoordinatorByAddress + +func (x *CoordinatorByAddress) ProtoReflect() protoreflect.Message { + return (*fastReflection_CoordinatorByAddress)(x) +} + +func (x *CoordinatorByAddress) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_coordinator_proto_msgTypes[2] + 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) +} + +var _fastReflection_CoordinatorByAddress_messageType fastReflection_CoordinatorByAddress_messageType +var _ protoreflect.MessageType = fastReflection_CoordinatorByAddress_messageType{} + +type fastReflection_CoordinatorByAddress_messageType struct{} + +func (x fastReflection_CoordinatorByAddress_messageType) Zero() protoreflect.Message { + return (*fastReflection_CoordinatorByAddress)(nil) +} +func (x fastReflection_CoordinatorByAddress_messageType) New() protoreflect.Message { + return new(fastReflection_CoordinatorByAddress) +} +func (x fastReflection_CoordinatorByAddress_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_CoordinatorByAddress +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_CoordinatorByAddress) Descriptor() protoreflect.MessageDescriptor { + return md_CoordinatorByAddress +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_CoordinatorByAddress) Type() protoreflect.MessageType { + return _fastReflection_CoordinatorByAddress_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_CoordinatorByAddress) New() protoreflect.Message { + return new(fastReflection_CoordinatorByAddress) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_CoordinatorByAddress) Interface() protoreflect.ProtoMessage { + return (*CoordinatorByAddress)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_CoordinatorByAddress) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_CoordinatorByAddress_address, value) { + return + } + } + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_CoordinatorByAddress_coordinatorID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_CoordinatorByAddress) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.CoordinatorByAddress.address": + return x.Address != "" + case "network.profile.v1.CoordinatorByAddress.coordinatorID": + return x.CoordinatorID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorByAddress")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorByAddress does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_CoordinatorByAddress) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.CoordinatorByAddress.address": + x.Address = "" + case "network.profile.v1.CoordinatorByAddress.coordinatorID": + x.CoordinatorID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorByAddress")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorByAddress does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_CoordinatorByAddress) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.CoordinatorByAddress.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.CoordinatorByAddress.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorByAddress")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorByAddress does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_CoordinatorByAddress) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.CoordinatorByAddress.address": + x.Address = value.Interface().(string) + case "network.profile.v1.CoordinatorByAddress.coordinatorID": + x.CoordinatorID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorByAddress")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorByAddress does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_CoordinatorByAddress) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.CoordinatorByAddress.address": + panic(fmt.Errorf("field address of message network.profile.v1.CoordinatorByAddress is not mutable")) + case "network.profile.v1.CoordinatorByAddress.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.profile.v1.CoordinatorByAddress is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorByAddress")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorByAddress does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_CoordinatorByAddress) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.CoordinatorByAddress.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.CoordinatorByAddress.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.CoordinatorByAddress")) + } + panic(fmt.Errorf("message network.profile.v1.CoordinatorByAddress does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_CoordinatorByAddress) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.CoordinatorByAddress", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_CoordinatorByAddress) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_CoordinatorByAddress) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_CoordinatorByAddress) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_CoordinatorByAddress) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*CoordinatorByAddress) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*CoordinatorByAddress) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*CoordinatorByAddress) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: CoordinatorByAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: CoordinatorByAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/profile/v1/coordinator.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Coordinator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CoordinatorID uint64 `protobuf:"varint,1,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Description *CoordinatorDescription `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Active bool `protobuf:"varint,4,opt,name=active,proto3" json:"active,omitempty"` +} + +func (x *Coordinator) Reset() { + *x = Coordinator{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_coordinator_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Coordinator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Coordinator) ProtoMessage() {} + +// Deprecated: Use Coordinator.ProtoReflect.Descriptor instead. +func (*Coordinator) Descriptor() ([]byte, []int) { + return file_network_profile_v1_coordinator_proto_rawDescGZIP(), []int{0} +} + +func (x *Coordinator) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +func (x *Coordinator) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *Coordinator) GetDescription() *CoordinatorDescription { + if x != nil { + return x.Description + } + return nil +} + +func (x *Coordinator) GetActive() bool { + if x != nil { + return x.Active + } + return false +} + +type CoordinatorDescription struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + Website string `protobuf:"bytes,2,opt,name=website,proto3" json:"website,omitempty"` + Details string `protobuf:"bytes,3,opt,name=details,proto3" json:"details,omitempty"` +} + +func (x *CoordinatorDescription) Reset() { + *x = CoordinatorDescription{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_coordinator_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CoordinatorDescription) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CoordinatorDescription) ProtoMessage() {} + +// Deprecated: Use CoordinatorDescription.ProtoReflect.Descriptor instead. +func (*CoordinatorDescription) Descriptor() ([]byte, []int) { + return file_network_profile_v1_coordinator_proto_rawDescGZIP(), []int{1} +} + +func (x *CoordinatorDescription) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +func (x *CoordinatorDescription) GetWebsite() string { + if x != nil { + return x.Website + } + return "" +} + +func (x *CoordinatorDescription) GetDetails() string { + if x != nil { + return x.Details + } + return "" +} + +type CoordinatorByAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + CoordinatorID uint64 `protobuf:"varint,2,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` +} + +func (x *CoordinatorByAddress) Reset() { + *x = CoordinatorByAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_coordinator_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CoordinatorByAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CoordinatorByAddress) ProtoMessage() {} + +// Deprecated: Use CoordinatorByAddress.ProtoReflect.Descriptor instead. +func (*CoordinatorByAddress) Descriptor() ([]byte, []int) { + return file_network_profile_v1_coordinator_proto_rawDescGZIP(), []int{2} +} + +func (x *CoordinatorByAddress) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *CoordinatorByAddress) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +var File_network_profile_v1_coordinator_proto protoreflect.FileDescriptor + +var file_network_profile_v1_coordinator_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd3, 0x01, 0x0a, 0x0b, + 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, + 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x52, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x22, 0x68, 0x0a, 0x16, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x70, 0x0a, 0x14, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x42, 0xd0, 0x01, + 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, + 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_profile_v1_coordinator_proto_rawDescOnce sync.Once + file_network_profile_v1_coordinator_proto_rawDescData = file_network_profile_v1_coordinator_proto_rawDesc +) + +func file_network_profile_v1_coordinator_proto_rawDescGZIP() []byte { + file_network_profile_v1_coordinator_proto_rawDescOnce.Do(func() { + file_network_profile_v1_coordinator_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_profile_v1_coordinator_proto_rawDescData) + }) + return file_network_profile_v1_coordinator_proto_rawDescData +} + +var file_network_profile_v1_coordinator_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_network_profile_v1_coordinator_proto_goTypes = []interface{}{ + (*Coordinator)(nil), // 0: network.profile.v1.Coordinator + (*CoordinatorDescription)(nil), // 1: network.profile.v1.CoordinatorDescription + (*CoordinatorByAddress)(nil), // 2: network.profile.v1.CoordinatorByAddress +} +var file_network_profile_v1_coordinator_proto_depIdxs = []int32{ + 1, // 0: network.profile.v1.Coordinator.description:type_name -> network.profile.v1.CoordinatorDescription + 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_network_profile_v1_coordinator_proto_init() } +func file_network_profile_v1_coordinator_proto_init() { + if File_network_profile_v1_coordinator_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_profile_v1_coordinator_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Coordinator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_coordinator_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CoordinatorDescription); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_coordinator_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CoordinatorByAddress); 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_network_profile_v1_coordinator_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_profile_v1_coordinator_proto_goTypes, + DependencyIndexes: file_network_profile_v1_coordinator_proto_depIdxs, + MessageInfos: file_network_profile_v1_coordinator_proto_msgTypes, + }.Build() + File_network_profile_v1_coordinator_proto = out.File + file_network_profile_v1_coordinator_proto_rawDesc = nil + file_network_profile_v1_coordinator_proto_goTypes = nil + file_network_profile_v1_coordinator_proto_depIdxs = nil +} diff --git a/api/network/profile/v1/events.pulsar.go b/api/network/profile/v1/events.pulsar.go new file mode 100644 index 00000000..b5da74fb --- /dev/null +++ b/api/network/profile/v1/events.pulsar.go @@ -0,0 +1,2921 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package profilev1 + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_EventCoordinatorCreated protoreflect.MessageDescriptor + fd_EventCoordinatorCreated_coordinatorID protoreflect.FieldDescriptor + fd_EventCoordinatorCreated_address protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_events_proto_init() + md_EventCoordinatorCreated = File_network_profile_v1_events_proto.Messages().ByName("EventCoordinatorCreated") + fd_EventCoordinatorCreated_coordinatorID = md_EventCoordinatorCreated.Fields().ByName("coordinatorID") + fd_EventCoordinatorCreated_address = md_EventCoordinatorCreated.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_EventCoordinatorCreated)(nil) + +type fastReflection_EventCoordinatorCreated EventCoordinatorCreated + +func (x *EventCoordinatorCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventCoordinatorCreated)(x) +} + +func (x *EventCoordinatorCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_events_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) +} + +var _fastReflection_EventCoordinatorCreated_messageType fastReflection_EventCoordinatorCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventCoordinatorCreated_messageType{} + +type fastReflection_EventCoordinatorCreated_messageType struct{} + +func (x fastReflection_EventCoordinatorCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventCoordinatorCreated)(nil) +} +func (x fastReflection_EventCoordinatorCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventCoordinatorCreated) +} +func (x fastReflection_EventCoordinatorCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventCoordinatorCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventCoordinatorCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventCoordinatorCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventCoordinatorCreated) Type() protoreflect.MessageType { + return _fastReflection_EventCoordinatorCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventCoordinatorCreated) New() protoreflect.Message { + return new(fastReflection_EventCoordinatorCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventCoordinatorCreated) Interface() protoreflect.ProtoMessage { + return (*EventCoordinatorCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventCoordinatorCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_EventCoordinatorCreated_coordinatorID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventCoordinatorCreated_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventCoordinatorCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorCreated.coordinatorID": + return x.CoordinatorID != uint64(0) + case "network.profile.v1.EventCoordinatorCreated.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorCreated.coordinatorID": + x.CoordinatorID = uint64(0) + case "network.profile.v1.EventCoordinatorCreated.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventCoordinatorCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.EventCoordinatorCreated.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + case "network.profile.v1.EventCoordinatorCreated.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorCreated.coordinatorID": + x.CoordinatorID = value.Uint() + case "network.profile.v1.EventCoordinatorCreated.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorCreated.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.profile.v1.EventCoordinatorCreated is not mutable")) + case "network.profile.v1.EventCoordinatorCreated.address": + panic(fmt.Errorf("field address of message network.profile.v1.EventCoordinatorCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventCoordinatorCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorCreated.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.profile.v1.EventCoordinatorCreated.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventCoordinatorCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.EventCoordinatorCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventCoordinatorCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventCoordinatorCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventCoordinatorCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventCoordinatorCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventCoordinatorCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventCoordinatorCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventCoordinatorCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventCoordinatorCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventCoordinatorAddressUpdated protoreflect.MessageDescriptor + fd_EventCoordinatorAddressUpdated_coordinatorID protoreflect.FieldDescriptor + fd_EventCoordinatorAddressUpdated_newAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_events_proto_init() + md_EventCoordinatorAddressUpdated = File_network_profile_v1_events_proto.Messages().ByName("EventCoordinatorAddressUpdated") + fd_EventCoordinatorAddressUpdated_coordinatorID = md_EventCoordinatorAddressUpdated.Fields().ByName("coordinatorID") + fd_EventCoordinatorAddressUpdated_newAddress = md_EventCoordinatorAddressUpdated.Fields().ByName("newAddress") +} + +var _ protoreflect.Message = (*fastReflection_EventCoordinatorAddressUpdated)(nil) + +type fastReflection_EventCoordinatorAddressUpdated EventCoordinatorAddressUpdated + +func (x *EventCoordinatorAddressUpdated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventCoordinatorAddressUpdated)(x) +} + +func (x *EventCoordinatorAddressUpdated) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_events_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) +} + +var _fastReflection_EventCoordinatorAddressUpdated_messageType fastReflection_EventCoordinatorAddressUpdated_messageType +var _ protoreflect.MessageType = fastReflection_EventCoordinatorAddressUpdated_messageType{} + +type fastReflection_EventCoordinatorAddressUpdated_messageType struct{} + +func (x fastReflection_EventCoordinatorAddressUpdated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventCoordinatorAddressUpdated)(nil) +} +func (x fastReflection_EventCoordinatorAddressUpdated_messageType) New() protoreflect.Message { + return new(fastReflection_EventCoordinatorAddressUpdated) +} +func (x fastReflection_EventCoordinatorAddressUpdated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventCoordinatorAddressUpdated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventCoordinatorAddressUpdated) Descriptor() protoreflect.MessageDescriptor { + return md_EventCoordinatorAddressUpdated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventCoordinatorAddressUpdated) Type() protoreflect.MessageType { + return _fastReflection_EventCoordinatorAddressUpdated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventCoordinatorAddressUpdated) New() protoreflect.Message { + return new(fastReflection_EventCoordinatorAddressUpdated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventCoordinatorAddressUpdated) Interface() protoreflect.ProtoMessage { + return (*EventCoordinatorAddressUpdated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventCoordinatorAddressUpdated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_EventCoordinatorAddressUpdated_coordinatorID, value) { + return + } + } + if x.NewAddress != "" { + value := protoreflect.ValueOfString(x.NewAddress) + if !f(fd_EventCoordinatorAddressUpdated_newAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventCoordinatorAddressUpdated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorAddressUpdated.coordinatorID": + return x.CoordinatorID != uint64(0) + case "network.profile.v1.EventCoordinatorAddressUpdated.newAddress": + return x.NewAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorAddressUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorAddressUpdated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorAddressUpdated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorAddressUpdated.coordinatorID": + x.CoordinatorID = uint64(0) + case "network.profile.v1.EventCoordinatorAddressUpdated.newAddress": + x.NewAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorAddressUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorAddressUpdated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventCoordinatorAddressUpdated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.EventCoordinatorAddressUpdated.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + case "network.profile.v1.EventCoordinatorAddressUpdated.newAddress": + value := x.NewAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorAddressUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorAddressUpdated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorAddressUpdated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorAddressUpdated.coordinatorID": + x.CoordinatorID = value.Uint() + case "network.profile.v1.EventCoordinatorAddressUpdated.newAddress": + x.NewAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorAddressUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorAddressUpdated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorAddressUpdated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorAddressUpdated.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.profile.v1.EventCoordinatorAddressUpdated is not mutable")) + case "network.profile.v1.EventCoordinatorAddressUpdated.newAddress": + panic(fmt.Errorf("field newAddress of message network.profile.v1.EventCoordinatorAddressUpdated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorAddressUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorAddressUpdated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventCoordinatorAddressUpdated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorAddressUpdated.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.profile.v1.EventCoordinatorAddressUpdated.newAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorAddressUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorAddressUpdated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventCoordinatorAddressUpdated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.EventCoordinatorAddressUpdated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventCoordinatorAddressUpdated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorAddressUpdated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventCoordinatorAddressUpdated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventCoordinatorAddressUpdated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventCoordinatorAddressUpdated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + l = len(x.NewAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventCoordinatorAddressUpdated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.NewAddress) > 0 { + i -= len(x.NewAddress) + copy(dAtA[i:], x.NewAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NewAddress))) + i-- + dAtA[i] = 0x12 + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventCoordinatorAddressUpdated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventCoordinatorAddressUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventCoordinatorAddressUpdated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NewAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventCoordinatorDisabled protoreflect.MessageDescriptor + fd_EventCoordinatorDisabled_coordinatorID protoreflect.FieldDescriptor + fd_EventCoordinatorDisabled_address protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_events_proto_init() + md_EventCoordinatorDisabled = File_network_profile_v1_events_proto.Messages().ByName("EventCoordinatorDisabled") + fd_EventCoordinatorDisabled_coordinatorID = md_EventCoordinatorDisabled.Fields().ByName("coordinatorID") + fd_EventCoordinatorDisabled_address = md_EventCoordinatorDisabled.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_EventCoordinatorDisabled)(nil) + +type fastReflection_EventCoordinatorDisabled EventCoordinatorDisabled + +func (x *EventCoordinatorDisabled) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventCoordinatorDisabled)(x) +} + +func (x *EventCoordinatorDisabled) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_events_proto_msgTypes[2] + 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) +} + +var _fastReflection_EventCoordinatorDisabled_messageType fastReflection_EventCoordinatorDisabled_messageType +var _ protoreflect.MessageType = fastReflection_EventCoordinatorDisabled_messageType{} + +type fastReflection_EventCoordinatorDisabled_messageType struct{} + +func (x fastReflection_EventCoordinatorDisabled_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventCoordinatorDisabled)(nil) +} +func (x fastReflection_EventCoordinatorDisabled_messageType) New() protoreflect.Message { + return new(fastReflection_EventCoordinatorDisabled) +} +func (x fastReflection_EventCoordinatorDisabled_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventCoordinatorDisabled +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventCoordinatorDisabled) Descriptor() protoreflect.MessageDescriptor { + return md_EventCoordinatorDisabled +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventCoordinatorDisabled) Type() protoreflect.MessageType { + return _fastReflection_EventCoordinatorDisabled_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventCoordinatorDisabled) New() protoreflect.Message { + return new(fastReflection_EventCoordinatorDisabled) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventCoordinatorDisabled) Interface() protoreflect.ProtoMessage { + return (*EventCoordinatorDisabled)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventCoordinatorDisabled) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_EventCoordinatorDisabled_coordinatorID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventCoordinatorDisabled_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventCoordinatorDisabled) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorDisabled.coordinatorID": + return x.CoordinatorID != uint64(0) + case "network.profile.v1.EventCoordinatorDisabled.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorDisabled")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorDisabled does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorDisabled) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorDisabled.coordinatorID": + x.CoordinatorID = uint64(0) + case "network.profile.v1.EventCoordinatorDisabled.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorDisabled")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorDisabled does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventCoordinatorDisabled) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.EventCoordinatorDisabled.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + case "network.profile.v1.EventCoordinatorDisabled.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorDisabled")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorDisabled does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorDisabled) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorDisabled.coordinatorID": + x.CoordinatorID = value.Uint() + case "network.profile.v1.EventCoordinatorDisabled.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorDisabled")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorDisabled does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorDisabled) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorDisabled.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.profile.v1.EventCoordinatorDisabled is not mutable")) + case "network.profile.v1.EventCoordinatorDisabled.address": + panic(fmt.Errorf("field address of message network.profile.v1.EventCoordinatorDisabled is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorDisabled")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorDisabled does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventCoordinatorDisabled) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventCoordinatorDisabled.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.profile.v1.EventCoordinatorDisabled.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventCoordinatorDisabled")) + } + panic(fmt.Errorf("message network.profile.v1.EventCoordinatorDisabled does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventCoordinatorDisabled) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.EventCoordinatorDisabled", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventCoordinatorDisabled) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventCoordinatorDisabled) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventCoordinatorDisabled) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventCoordinatorDisabled) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventCoordinatorDisabled) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventCoordinatorDisabled) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventCoordinatorDisabled) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventCoordinatorDisabled: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventCoordinatorDisabled: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_EventValidatorCreated_2_list)(nil) + +type _EventValidatorCreated_2_list struct { + list *[]string +} + +func (x *_EventValidatorCreated_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_EventValidatorCreated_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_EventValidatorCreated_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_EventValidatorCreated_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_EventValidatorCreated_2_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message EventValidatorCreated at list field OperatorAddresses as it is not of Message kind")) +} + +func (x *_EventValidatorCreated_2_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_EventValidatorCreated_2_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_EventValidatorCreated_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_EventValidatorCreated protoreflect.MessageDescriptor + fd_EventValidatorCreated_address protoreflect.FieldDescriptor + fd_EventValidatorCreated_operatorAddresses protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_events_proto_init() + md_EventValidatorCreated = File_network_profile_v1_events_proto.Messages().ByName("EventValidatorCreated") + fd_EventValidatorCreated_address = md_EventValidatorCreated.Fields().ByName("address") + fd_EventValidatorCreated_operatorAddresses = md_EventValidatorCreated.Fields().ByName("operatorAddresses") +} + +var _ protoreflect.Message = (*fastReflection_EventValidatorCreated)(nil) + +type fastReflection_EventValidatorCreated EventValidatorCreated + +func (x *EventValidatorCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventValidatorCreated)(x) +} + +func (x *EventValidatorCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_events_proto_msgTypes[3] + 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) +} + +var _fastReflection_EventValidatorCreated_messageType fastReflection_EventValidatorCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventValidatorCreated_messageType{} + +type fastReflection_EventValidatorCreated_messageType struct{} + +func (x fastReflection_EventValidatorCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventValidatorCreated)(nil) +} +func (x fastReflection_EventValidatorCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventValidatorCreated) +} +func (x fastReflection_EventValidatorCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventValidatorCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventValidatorCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventValidatorCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventValidatorCreated) Type() protoreflect.MessageType { + return _fastReflection_EventValidatorCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventValidatorCreated) New() protoreflect.Message { + return new(fastReflection_EventValidatorCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventValidatorCreated) Interface() protoreflect.ProtoMessage { + return (*EventValidatorCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventValidatorCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventValidatorCreated_address, value) { + return + } + } + if len(x.OperatorAddresses) != 0 { + value := protoreflect.ValueOfList(&_EventValidatorCreated_2_list{list: &x.OperatorAddresses}) + if !f(fd_EventValidatorCreated_operatorAddresses, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventValidatorCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.EventValidatorCreated.address": + return x.Address != "" + case "network.profile.v1.EventValidatorCreated.operatorAddresses": + return len(x.OperatorAddresses) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.EventValidatorCreated.address": + x.Address = "" + case "network.profile.v1.EventValidatorCreated.operatorAddresses": + x.OperatorAddresses = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventValidatorCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.EventValidatorCreated.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.EventValidatorCreated.operatorAddresses": + if len(x.OperatorAddresses) == 0 { + return protoreflect.ValueOfList(&_EventValidatorCreated_2_list{}) + } + listValue := &_EventValidatorCreated_2_list{list: &x.OperatorAddresses} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.EventValidatorCreated.address": + x.Address = value.Interface().(string) + case "network.profile.v1.EventValidatorCreated.operatorAddresses": + lv := value.List() + clv := lv.(*_EventValidatorCreated_2_list) + x.OperatorAddresses = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventValidatorCreated.operatorAddresses": + if x.OperatorAddresses == nil { + x.OperatorAddresses = []string{} + } + value := &_EventValidatorCreated_2_list{list: &x.OperatorAddresses} + return protoreflect.ValueOfList(value) + case "network.profile.v1.EventValidatorCreated.address": + panic(fmt.Errorf("field address of message network.profile.v1.EventValidatorCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventValidatorCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventValidatorCreated.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.EventValidatorCreated.operatorAddresses": + list := []string{} + return protoreflect.ValueOfList(&_EventValidatorCreated_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorCreated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventValidatorCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.EventValidatorCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventValidatorCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventValidatorCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventValidatorCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventValidatorCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.OperatorAddresses) > 0 { + for _, s := range x.OperatorAddresses { + l = len(s) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventValidatorCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.OperatorAddresses) > 0 { + for iNdEx := len(x.OperatorAddresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.OperatorAddresses[iNdEx]) + copy(dAtA[i:], x.OperatorAddresses[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OperatorAddresses[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventValidatorCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventValidatorCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventValidatorCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OperatorAddresses", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.OperatorAddresses = append(x.OperatorAddresses, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_EventValidatorOperatorAddressesUpdated_2_list)(nil) + +type _EventValidatorOperatorAddressesUpdated_2_list struct { + list *[]string +} + +func (x *_EventValidatorOperatorAddressesUpdated_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_EventValidatorOperatorAddressesUpdated_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_EventValidatorOperatorAddressesUpdated_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_EventValidatorOperatorAddressesUpdated_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_EventValidatorOperatorAddressesUpdated_2_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message EventValidatorOperatorAddressesUpdated at list field OperatorAddresses as it is not of Message kind")) +} + +func (x *_EventValidatorOperatorAddressesUpdated_2_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_EventValidatorOperatorAddressesUpdated_2_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_EventValidatorOperatorAddressesUpdated_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_EventValidatorOperatorAddressesUpdated protoreflect.MessageDescriptor + fd_EventValidatorOperatorAddressesUpdated_address protoreflect.FieldDescriptor + fd_EventValidatorOperatorAddressesUpdated_operatorAddresses protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_events_proto_init() + md_EventValidatorOperatorAddressesUpdated = File_network_profile_v1_events_proto.Messages().ByName("EventValidatorOperatorAddressesUpdated") + fd_EventValidatorOperatorAddressesUpdated_address = md_EventValidatorOperatorAddressesUpdated.Fields().ByName("address") + fd_EventValidatorOperatorAddressesUpdated_operatorAddresses = md_EventValidatorOperatorAddressesUpdated.Fields().ByName("operatorAddresses") +} + +var _ protoreflect.Message = (*fastReflection_EventValidatorOperatorAddressesUpdated)(nil) + +type fastReflection_EventValidatorOperatorAddressesUpdated EventValidatorOperatorAddressesUpdated + +func (x *EventValidatorOperatorAddressesUpdated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventValidatorOperatorAddressesUpdated)(x) +} + +func (x *EventValidatorOperatorAddressesUpdated) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_events_proto_msgTypes[4] + 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) +} + +var _fastReflection_EventValidatorOperatorAddressesUpdated_messageType fastReflection_EventValidatorOperatorAddressesUpdated_messageType +var _ protoreflect.MessageType = fastReflection_EventValidatorOperatorAddressesUpdated_messageType{} + +type fastReflection_EventValidatorOperatorAddressesUpdated_messageType struct{} + +func (x fastReflection_EventValidatorOperatorAddressesUpdated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventValidatorOperatorAddressesUpdated)(nil) +} +func (x fastReflection_EventValidatorOperatorAddressesUpdated_messageType) New() protoreflect.Message { + return new(fastReflection_EventValidatorOperatorAddressesUpdated) +} +func (x fastReflection_EventValidatorOperatorAddressesUpdated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventValidatorOperatorAddressesUpdated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Descriptor() protoreflect.MessageDescriptor { + return md_EventValidatorOperatorAddressesUpdated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Type() protoreflect.MessageType { + return _fastReflection_EventValidatorOperatorAddressesUpdated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) New() protoreflect.Message { + return new(fastReflection_EventValidatorOperatorAddressesUpdated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Interface() protoreflect.ProtoMessage { + return (*EventValidatorOperatorAddressesUpdated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventValidatorOperatorAddressesUpdated_address, value) { + return + } + } + if len(x.OperatorAddresses) != 0 { + value := protoreflect.ValueOfList(&_EventValidatorOperatorAddressesUpdated_2_list{list: &x.OperatorAddresses}) + if !f(fd_EventValidatorOperatorAddressesUpdated_operatorAddresses, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.address": + return x.Address != "" + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.operatorAddresses": + return len(x.OperatorAddresses) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorOperatorAddressesUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorOperatorAddressesUpdated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.address": + x.Address = "" + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.operatorAddresses": + x.OperatorAddresses = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorOperatorAddressesUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorOperatorAddressesUpdated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.operatorAddresses": + if len(x.OperatorAddresses) == 0 { + return protoreflect.ValueOfList(&_EventValidatorOperatorAddressesUpdated_2_list{}) + } + listValue := &_EventValidatorOperatorAddressesUpdated_2_list{list: &x.OperatorAddresses} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorOperatorAddressesUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorOperatorAddressesUpdated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.address": + x.Address = value.Interface().(string) + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.operatorAddresses": + lv := value.List() + clv := lv.(*_EventValidatorOperatorAddressesUpdated_2_list) + x.OperatorAddresses = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorOperatorAddressesUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorOperatorAddressesUpdated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.operatorAddresses": + if x.OperatorAddresses == nil { + x.OperatorAddresses = []string{} + } + value := &_EventValidatorOperatorAddressesUpdated_2_list{list: &x.OperatorAddresses} + return protoreflect.ValueOfList(value) + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.address": + panic(fmt.Errorf("field address of message network.profile.v1.EventValidatorOperatorAddressesUpdated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorOperatorAddressesUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorOperatorAddressesUpdated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.EventValidatorOperatorAddressesUpdated.operatorAddresses": + list := []string{} + return protoreflect.ValueOfList(&_EventValidatorOperatorAddressesUpdated_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.EventValidatorOperatorAddressesUpdated")) + } + panic(fmt.Errorf("message network.profile.v1.EventValidatorOperatorAddressesUpdated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.EventValidatorOperatorAddressesUpdated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventValidatorOperatorAddressesUpdated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventValidatorOperatorAddressesUpdated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.OperatorAddresses) > 0 { + for _, s := range x.OperatorAddresses { + l = len(s) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventValidatorOperatorAddressesUpdated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.OperatorAddresses) > 0 { + for iNdEx := len(x.OperatorAddresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.OperatorAddresses[iNdEx]) + copy(dAtA[i:], x.OperatorAddresses[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OperatorAddresses[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventValidatorOperatorAddressesUpdated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventValidatorOperatorAddressesUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventValidatorOperatorAddressesUpdated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OperatorAddresses", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.OperatorAddresses = append(x.OperatorAddresses, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/profile/v1/events.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EventCoordinatorCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CoordinatorID uint64 `protobuf:"varint,1,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *EventCoordinatorCreated) Reset() { + *x = EventCoordinatorCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_events_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventCoordinatorCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventCoordinatorCreated) ProtoMessage() {} + +// Deprecated: Use EventCoordinatorCreated.ProtoReflect.Descriptor instead. +func (*EventCoordinatorCreated) Descriptor() ([]byte, []int) { + return file_network_profile_v1_events_proto_rawDescGZIP(), []int{0} +} + +func (x *EventCoordinatorCreated) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +func (x *EventCoordinatorCreated) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type EventCoordinatorAddressUpdated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CoordinatorID uint64 `protobuf:"varint,1,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` + NewAddress string `protobuf:"bytes,2,opt,name=newAddress,proto3" json:"newAddress,omitempty"` +} + +func (x *EventCoordinatorAddressUpdated) Reset() { + *x = EventCoordinatorAddressUpdated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_events_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventCoordinatorAddressUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventCoordinatorAddressUpdated) ProtoMessage() {} + +// Deprecated: Use EventCoordinatorAddressUpdated.ProtoReflect.Descriptor instead. +func (*EventCoordinatorAddressUpdated) Descriptor() ([]byte, []int) { + return file_network_profile_v1_events_proto_rawDescGZIP(), []int{1} +} + +func (x *EventCoordinatorAddressUpdated) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +func (x *EventCoordinatorAddressUpdated) GetNewAddress() string { + if x != nil { + return x.NewAddress + } + return "" +} + +type EventCoordinatorDisabled struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CoordinatorID uint64 `protobuf:"varint,1,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *EventCoordinatorDisabled) Reset() { + *x = EventCoordinatorDisabled{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_events_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventCoordinatorDisabled) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventCoordinatorDisabled) ProtoMessage() {} + +// Deprecated: Use EventCoordinatorDisabled.ProtoReflect.Descriptor instead. +func (*EventCoordinatorDisabled) Descriptor() ([]byte, []int) { + return file_network_profile_v1_events_proto_rawDescGZIP(), []int{2} +} + +func (x *EventCoordinatorDisabled) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +func (x *EventCoordinatorDisabled) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type EventValidatorCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + OperatorAddresses []string `protobuf:"bytes,2,rep,name=operatorAddresses,proto3" json:"operatorAddresses,omitempty"` +} + +func (x *EventValidatorCreated) Reset() { + *x = EventValidatorCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_events_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventValidatorCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventValidatorCreated) ProtoMessage() {} + +// Deprecated: Use EventValidatorCreated.ProtoReflect.Descriptor instead. +func (*EventValidatorCreated) Descriptor() ([]byte, []int) { + return file_network_profile_v1_events_proto_rawDescGZIP(), []int{3} +} + +func (x *EventValidatorCreated) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventValidatorCreated) GetOperatorAddresses() []string { + if x != nil { + return x.OperatorAddresses + } + return nil +} + +type EventValidatorOperatorAddressesUpdated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + OperatorAddresses []string `protobuf:"bytes,2,rep,name=operatorAddresses,proto3" json:"operatorAddresses,omitempty"` +} + +func (x *EventValidatorOperatorAddressesUpdated) Reset() { + *x = EventValidatorOperatorAddressesUpdated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_events_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventValidatorOperatorAddressesUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventValidatorOperatorAddressesUpdated) ProtoMessage() {} + +// Deprecated: Use EventValidatorOperatorAddressesUpdated.ProtoReflect.Descriptor instead. +func (*EventValidatorOperatorAddressesUpdated) Descriptor() ([]byte, []int) { + return file_network_profile_v1_events_proto_rawDescGZIP(), []int{4} +} + +func (x *EventValidatorOperatorAddressesUpdated) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventValidatorOperatorAddressesUpdated) GetOperatorAddresses() []string { + if x != nil { + return x.OperatorAddresses + } + return nil +} + +var File_network_profile_v1_events_proto protoreflect.FileDescriptor + +var file_network_profile_v1_events_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x73, 0x0a, 0x17, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, + 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x1e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x12, 0x38, + 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x6e, 0x65, + 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x74, 0x0a, 0x18, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x79, + 0x0a, 0x15, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x26, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x42, 0xcb, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x42, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, + 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, + 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, + 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_profile_v1_events_proto_rawDescOnce sync.Once + file_network_profile_v1_events_proto_rawDescData = file_network_profile_v1_events_proto_rawDesc +) + +func file_network_profile_v1_events_proto_rawDescGZIP() []byte { + file_network_profile_v1_events_proto_rawDescOnce.Do(func() { + file_network_profile_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_profile_v1_events_proto_rawDescData) + }) + return file_network_profile_v1_events_proto_rawDescData +} + +var file_network_profile_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_network_profile_v1_events_proto_goTypes = []interface{}{ + (*EventCoordinatorCreated)(nil), // 0: network.profile.v1.EventCoordinatorCreated + (*EventCoordinatorAddressUpdated)(nil), // 1: network.profile.v1.EventCoordinatorAddressUpdated + (*EventCoordinatorDisabled)(nil), // 2: network.profile.v1.EventCoordinatorDisabled + (*EventValidatorCreated)(nil), // 3: network.profile.v1.EventValidatorCreated + (*EventValidatorOperatorAddressesUpdated)(nil), // 4: network.profile.v1.EventValidatorOperatorAddressesUpdated +} +var file_network_profile_v1_events_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 +} + +func init() { file_network_profile_v1_events_proto_init() } +func file_network_profile_v1_events_proto_init() { + if File_network_profile_v1_events_proto != nil { + return + } + file_network_profile_v1_coordinator_proto_init() + file_network_profile_v1_validator_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_profile_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventCoordinatorCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_events_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventCoordinatorAddressUpdated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_events_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventCoordinatorDisabled); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_events_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventValidatorCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_events_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventValidatorOperatorAddressesUpdated); 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_network_profile_v1_events_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_profile_v1_events_proto_goTypes, + DependencyIndexes: file_network_profile_v1_events_proto_depIdxs, + MessageInfos: file_network_profile_v1_events_proto_msgTypes, + }.Build() + File_network_profile_v1_events_proto = out.File + file_network_profile_v1_events_proto_rawDesc = nil + file_network_profile_v1_events_proto_goTypes = nil + file_network_profile_v1_events_proto_depIdxs = nil +} diff --git a/api/network/profile/v1/genesis.pulsar.go b/api/network/profile/v1/genesis.pulsar.go new file mode 100644 index 00000000..9b45c5e7 --- /dev/null +++ b/api/network/profile/v1/genesis.pulsar.go @@ -0,0 +1,1279 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package profilev1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_GenesisState_2_list)(nil) + +type _GenesisState_2_list struct { + list *[]*Validator +} + +func (x *_GenesisState_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Validator) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Validator) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_2_list) AppendMutable() protoreflect.Value { + v := new(Validator) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_2_list) NewElement() protoreflect.Value { + v := new(Validator) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_3_list)(nil) + +type _GenesisState_3_list struct { + list *[]*ValidatorByOperatorAddress +} + +func (x *_GenesisState_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ValidatorByOperatorAddress) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ValidatorByOperatorAddress) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_3_list) AppendMutable() protoreflect.Value { + v := new(ValidatorByOperatorAddress) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_3_list) NewElement() protoreflect.Value { + v := new(ValidatorByOperatorAddress) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_3_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_4_list)(nil) + +type _GenesisState_4_list struct { + list *[]*Coordinator +} + +func (x *_GenesisState_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Coordinator) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Coordinator) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_4_list) AppendMutable() protoreflect.Value { + v := new(Coordinator) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_4_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_4_list) NewElement() protoreflect.Value { + v := new(Coordinator) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_4_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_6_list)(nil) + +type _GenesisState_6_list struct { + list *[]*CoordinatorByAddress +} + +func (x *_GenesisState_6_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_6_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_6_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*CoordinatorByAddress) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_6_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*CoordinatorByAddress) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_6_list) AppendMutable() protoreflect.Value { + v := new(CoordinatorByAddress) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_6_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_6_list) NewElement() protoreflect.Value { + v := new(CoordinatorByAddress) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_6_list) IsValid() bool { + return x.list != nil +} + +var ( + md_GenesisState protoreflect.MessageDescriptor + fd_GenesisState_params protoreflect.FieldDescriptor + fd_GenesisState_validatorList protoreflect.FieldDescriptor + fd_GenesisState_validatorsByOperatorAddress protoreflect.FieldDescriptor + fd_GenesisState_coordinatorList protoreflect.FieldDescriptor + fd_GenesisState_coordinatorCount protoreflect.FieldDescriptor + fd_GenesisState_coordinatorsByAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_genesis_proto_init() + md_GenesisState = File_network_profile_v1_genesis_proto.Messages().ByName("GenesisState") + fd_GenesisState_params = md_GenesisState.Fields().ByName("params") + fd_GenesisState_validatorList = md_GenesisState.Fields().ByName("validatorList") + fd_GenesisState_validatorsByOperatorAddress = md_GenesisState.Fields().ByName("validatorsByOperatorAddress") + fd_GenesisState_coordinatorList = md_GenesisState.Fields().ByName("coordinatorList") + fd_GenesisState_coordinatorCount = md_GenesisState.Fields().ByName("coordinatorCount") + fd_GenesisState_coordinatorsByAddress = md_GenesisState.Fields().ByName("coordinatorsByAddress") +} + +var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) + +type fastReflection_GenesisState GenesisState + +func (x *GenesisState) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisState)(x) +} + +func (x *GenesisState) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_genesis_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) +} + +var _fastReflection_GenesisState_messageType fastReflection_GenesisState_messageType +var _ protoreflect.MessageType = fastReflection_GenesisState_messageType{} + +type fastReflection_GenesisState_messageType struct{} + +func (x fastReflection_GenesisState_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisState)(nil) +} +func (x fastReflection_GenesisState_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} +func (x fastReflection_GenesisState_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisState) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisState) Type() protoreflect.MessageType { + return _fastReflection_GenesisState_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisState) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisState) Interface() protoreflect.ProtoMessage { + return (*GenesisState)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_GenesisState_params, value) { + return + } + } + if len(x.ValidatorList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_2_list{list: &x.ValidatorList}) + if !f(fd_GenesisState_validatorList, value) { + return + } + } + if len(x.ValidatorsByOperatorAddress) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_3_list{list: &x.ValidatorsByOperatorAddress}) + if !f(fd_GenesisState_validatorsByOperatorAddress, value) { + return + } + } + if len(x.CoordinatorList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_4_list{list: &x.CoordinatorList}) + if !f(fd_GenesisState_coordinatorList, value) { + return + } + } + if x.CoordinatorCount != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorCount) + if !f(fd_GenesisState_coordinatorCount, value) { + return + } + } + if len(x.CoordinatorsByAddress) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_6_list{list: &x.CoordinatorsByAddress}) + if !f(fd_GenesisState_coordinatorsByAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.GenesisState.params": + return x.Params != nil + case "network.profile.v1.GenesisState.validatorList": + return len(x.ValidatorList) != 0 + case "network.profile.v1.GenesisState.validatorsByOperatorAddress": + return len(x.ValidatorsByOperatorAddress) != 0 + case "network.profile.v1.GenesisState.coordinatorList": + return len(x.CoordinatorList) != 0 + case "network.profile.v1.GenesisState.coordinatorCount": + return x.CoordinatorCount != uint64(0) + case "network.profile.v1.GenesisState.coordinatorsByAddress": + return len(x.CoordinatorsByAddress) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.GenesisState")) + } + panic(fmt.Errorf("message network.profile.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.GenesisState.params": + x.Params = nil + case "network.profile.v1.GenesisState.validatorList": + x.ValidatorList = nil + case "network.profile.v1.GenesisState.validatorsByOperatorAddress": + x.ValidatorsByOperatorAddress = nil + case "network.profile.v1.GenesisState.coordinatorList": + x.CoordinatorList = nil + case "network.profile.v1.GenesisState.coordinatorCount": + x.CoordinatorCount = uint64(0) + case "network.profile.v1.GenesisState.coordinatorsByAddress": + x.CoordinatorsByAddress = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.GenesisState")) + } + panic(fmt.Errorf("message network.profile.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.GenesisState.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.profile.v1.GenesisState.validatorList": + if len(x.ValidatorList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_2_list{}) + } + listValue := &_GenesisState_2_list{list: &x.ValidatorList} + return protoreflect.ValueOfList(listValue) + case "network.profile.v1.GenesisState.validatorsByOperatorAddress": + if len(x.ValidatorsByOperatorAddress) == 0 { + return protoreflect.ValueOfList(&_GenesisState_3_list{}) + } + listValue := &_GenesisState_3_list{list: &x.ValidatorsByOperatorAddress} + return protoreflect.ValueOfList(listValue) + case "network.profile.v1.GenesisState.coordinatorList": + if len(x.CoordinatorList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_4_list{}) + } + listValue := &_GenesisState_4_list{list: &x.CoordinatorList} + return protoreflect.ValueOfList(listValue) + case "network.profile.v1.GenesisState.coordinatorCount": + value := x.CoordinatorCount + return protoreflect.ValueOfUint64(value) + case "network.profile.v1.GenesisState.coordinatorsByAddress": + if len(x.CoordinatorsByAddress) == 0 { + return protoreflect.ValueOfList(&_GenesisState_6_list{}) + } + listValue := &_GenesisState_6_list{list: &x.CoordinatorsByAddress} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.GenesisState")) + } + panic(fmt.Errorf("message network.profile.v1.GenesisState does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.GenesisState.params": + x.Params = value.Message().Interface().(*Params) + case "network.profile.v1.GenesisState.validatorList": + lv := value.List() + clv := lv.(*_GenesisState_2_list) + x.ValidatorList = *clv.list + case "network.profile.v1.GenesisState.validatorsByOperatorAddress": + lv := value.List() + clv := lv.(*_GenesisState_3_list) + x.ValidatorsByOperatorAddress = *clv.list + case "network.profile.v1.GenesisState.coordinatorList": + lv := value.List() + clv := lv.(*_GenesisState_4_list) + x.CoordinatorList = *clv.list + case "network.profile.v1.GenesisState.coordinatorCount": + x.CoordinatorCount = value.Uint() + case "network.profile.v1.GenesisState.coordinatorsByAddress": + lv := value.List() + clv := lv.(*_GenesisState_6_list) + x.CoordinatorsByAddress = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.GenesisState")) + } + panic(fmt.Errorf("message network.profile.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.GenesisState.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.profile.v1.GenesisState.validatorList": + if x.ValidatorList == nil { + x.ValidatorList = []*Validator{} + } + value := &_GenesisState_2_list{list: &x.ValidatorList} + return protoreflect.ValueOfList(value) + case "network.profile.v1.GenesisState.validatorsByOperatorAddress": + if x.ValidatorsByOperatorAddress == nil { + x.ValidatorsByOperatorAddress = []*ValidatorByOperatorAddress{} + } + value := &_GenesisState_3_list{list: &x.ValidatorsByOperatorAddress} + return protoreflect.ValueOfList(value) + case "network.profile.v1.GenesisState.coordinatorList": + if x.CoordinatorList == nil { + x.CoordinatorList = []*Coordinator{} + } + value := &_GenesisState_4_list{list: &x.CoordinatorList} + return protoreflect.ValueOfList(value) + case "network.profile.v1.GenesisState.coordinatorsByAddress": + if x.CoordinatorsByAddress == nil { + x.CoordinatorsByAddress = []*CoordinatorByAddress{} + } + value := &_GenesisState_6_list{list: &x.CoordinatorsByAddress} + return protoreflect.ValueOfList(value) + case "network.profile.v1.GenesisState.coordinatorCount": + panic(fmt.Errorf("field coordinatorCount of message network.profile.v1.GenesisState is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.GenesisState")) + } + panic(fmt.Errorf("message network.profile.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.GenesisState.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.profile.v1.GenesisState.validatorList": + list := []*Validator{} + return protoreflect.ValueOfList(&_GenesisState_2_list{list: &list}) + case "network.profile.v1.GenesisState.validatorsByOperatorAddress": + list := []*ValidatorByOperatorAddress{} + return protoreflect.ValueOfList(&_GenesisState_3_list{list: &list}) + case "network.profile.v1.GenesisState.coordinatorList": + list := []*Coordinator{} + return protoreflect.ValueOfList(&_GenesisState_4_list{list: &list}) + case "network.profile.v1.GenesisState.coordinatorCount": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.profile.v1.GenesisState.coordinatorsByAddress": + list := []*CoordinatorByAddress{} + return protoreflect.ValueOfList(&_GenesisState_6_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.GenesisState")) + } + panic(fmt.Errorf("message network.profile.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisState) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.GenesisState", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisState) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisState) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.ValidatorList) > 0 { + for _, e := range x.ValidatorList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.ValidatorsByOperatorAddress) > 0 { + for _, e := range x.ValidatorsByOperatorAddress { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.CoordinatorList) > 0 { + for _, e := range x.CoordinatorList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.CoordinatorCount != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorCount)) + } + if len(x.CoordinatorsByAddress) > 0 { + for _, e := range x.CoordinatorsByAddress { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.CoordinatorsByAddress) > 0 { + for iNdEx := len(x.CoordinatorsByAddress) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.CoordinatorsByAddress[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + } + if x.CoordinatorCount != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorCount)) + i-- + dAtA[i] = 0x28 + } + if len(x.CoordinatorList) > 0 { + for iNdEx := len(x.CoordinatorList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.CoordinatorList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + } + if len(x.ValidatorsByOperatorAddress) > 0 { + for iNdEx := len(x.ValidatorsByOperatorAddress) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ValidatorsByOperatorAddress[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.ValidatorList) > 0 { + for iNdEx := len(x.ValidatorList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ValidatorList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ValidatorList = append(x.ValidatorList, &Validator{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ValidatorList[len(x.ValidatorList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorsByOperatorAddress", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ValidatorsByOperatorAddress = append(x.ValidatorsByOperatorAddress, &ValidatorByOperatorAddress{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ValidatorsByOperatorAddress[len(x.ValidatorsByOperatorAddress)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorList = append(x.CoordinatorList, &Coordinator{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.CoordinatorList[len(x.CoordinatorList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorCount", wireType) + } + x.CoordinatorCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorsByAddress", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorsByAddress = append(x.CoordinatorsByAddress, &CoordinatorByAddress{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.CoordinatorsByAddress[len(x.CoordinatorsByAddress)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/profile/v1/genesis.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// GenesisState defines the profile module's genesis state. +type GenesisState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params defines all the parameters of the module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + ValidatorList []*Validator `protobuf:"bytes,2,rep,name=validatorList,proto3" json:"validatorList,omitempty"` + ValidatorsByOperatorAddress []*ValidatorByOperatorAddress `protobuf:"bytes,3,rep,name=validatorsByOperatorAddress,proto3" json:"validatorsByOperatorAddress,omitempty"` + CoordinatorList []*Coordinator `protobuf:"bytes,4,rep,name=coordinatorList,proto3" json:"coordinatorList,omitempty"` + CoordinatorCount uint64 `protobuf:"varint,5,opt,name=coordinatorCount,proto3" json:"coordinatorCount,omitempty"` + CoordinatorsByAddress []*CoordinatorByAddress `protobuf:"bytes,6,rep,name=coordinatorsByAddress,proto3" json:"coordinatorsByAddress,omitempty"` +} + +func (x *GenesisState) Reset() { + *x = GenesisState{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_genesis_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisState) ProtoMessage() {} + +// Deprecated: Use GenesisState.ProtoReflect.Descriptor instead. +func (*GenesisState) Descriptor() ([]byte, []int) { + return file_network_profile_v1_genesis_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisState) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +func (x *GenesisState) GetValidatorList() []*Validator { + if x != nil { + return x.ValidatorList + } + return nil +} + +func (x *GenesisState) GetValidatorsByOperatorAddress() []*ValidatorByOperatorAddress { + if x != nil { + return x.ValidatorsByOperatorAddress + } + return nil +} + +func (x *GenesisState) GetCoordinatorList() []*Coordinator { + if x != nil { + return x.CoordinatorList + } + return nil +} + +func (x *GenesisState) GetCoordinatorCount() uint64 { + if x != nil { + return x.CoordinatorCount + } + return 0 +} + +func (x *GenesisState) GetCoordinatorsByAddress() []*CoordinatorByAddress { + if x != nil { + return x.CoordinatorsByAddress + } + return nil +} + +var File_network_profile_v1_genesis_proto protoreflect.FileDescriptor + +var file_network_profile_v1_genesis_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, + 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x03, 0x0a, 0x0c, 0x47, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x76, 0x0a, 0x1b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x73, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x1b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x42, 0x79, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, + 0x0f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, + 0x0a, 0x10, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x15, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x15, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x42, 0xcc, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x47, 0x65, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_profile_v1_genesis_proto_rawDescOnce sync.Once + file_network_profile_v1_genesis_proto_rawDescData = file_network_profile_v1_genesis_proto_rawDesc +) + +func file_network_profile_v1_genesis_proto_rawDescGZIP() []byte { + file_network_profile_v1_genesis_proto_rawDescOnce.Do(func() { + file_network_profile_v1_genesis_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_profile_v1_genesis_proto_rawDescData) + }) + return file_network_profile_v1_genesis_proto_rawDescData +} + +var file_network_profile_v1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_profile_v1_genesis_proto_goTypes = []interface{}{ + (*GenesisState)(nil), // 0: network.profile.v1.GenesisState + (*Params)(nil), // 1: network.profile.v1.Params + (*Validator)(nil), // 2: network.profile.v1.Validator + (*ValidatorByOperatorAddress)(nil), // 3: network.profile.v1.ValidatorByOperatorAddress + (*Coordinator)(nil), // 4: network.profile.v1.Coordinator + (*CoordinatorByAddress)(nil), // 5: network.profile.v1.CoordinatorByAddress +} +var file_network_profile_v1_genesis_proto_depIdxs = []int32{ + 1, // 0: network.profile.v1.GenesisState.params:type_name -> network.profile.v1.Params + 2, // 1: network.profile.v1.GenesisState.validatorList:type_name -> network.profile.v1.Validator + 3, // 2: network.profile.v1.GenesisState.validatorsByOperatorAddress:type_name -> network.profile.v1.ValidatorByOperatorAddress + 4, // 3: network.profile.v1.GenesisState.coordinatorList:type_name -> network.profile.v1.Coordinator + 5, // 4: network.profile.v1.GenesisState.coordinatorsByAddress:type_name -> network.profile.v1.CoordinatorByAddress + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_network_profile_v1_genesis_proto_init() } +func file_network_profile_v1_genesis_proto_init() { + if File_network_profile_v1_genesis_proto != nil { + return + } + file_network_profile_v1_coordinator_proto_init() + file_network_profile_v1_params_proto_init() + file_network_profile_v1_validator_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_profile_v1_genesis_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisState); 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_network_profile_v1_genesis_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_profile_v1_genesis_proto_goTypes, + DependencyIndexes: file_network_profile_v1_genesis_proto_depIdxs, + MessageInfos: file_network_profile_v1_genesis_proto_msgTypes, + }.Build() + File_network_profile_v1_genesis_proto = out.File + file_network_profile_v1_genesis_proto_rawDesc = nil + file_network_profile_v1_genesis_proto_goTypes = nil + file_network_profile_v1_genesis_proto_depIdxs = nil +} diff --git a/api/network/profile/v1/params.pulsar.go b/api/network/profile/v1/params.pulsar.go new file mode 100644 index 00000000..509c4729 --- /dev/null +++ b/api/network/profile/v1/params.pulsar.go @@ -0,0 +1,502 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package profilev1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Params protoreflect.MessageDescriptor +) + +func init() { + file_network_profile_v1_params_proto_init() + md_Params = File_network_profile_v1_params_proto.Messages().ByName("Params") +} + +var _ protoreflect.Message = (*fastReflection_Params)(nil) + +type fastReflection_Params Params + +func (x *Params) ProtoReflect() protoreflect.Message { + return (*fastReflection_Params)(x) +} + +func (x *Params) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_params_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) +} + +var _fastReflection_Params_messageType fastReflection_Params_messageType +var _ protoreflect.MessageType = fastReflection_Params_messageType{} + +type fastReflection_Params_messageType struct{} + +func (x fastReflection_Params_messageType) Zero() protoreflect.Message { + return (*fastReflection_Params)(nil) +} +func (x fastReflection_Params_messageType) New() protoreflect.Message { + return new(fastReflection_Params) +} +func (x fastReflection_Params_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Params) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Params) Type() protoreflect.MessageType { + return _fastReflection_Params_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Params) New() protoreflect.Message { + return new(fastReflection_Params) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Params) Interface() protoreflect.ProtoMessage { + return (*Params)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Params")) + } + panic(fmt.Errorf("message network.profile.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Params")) + } + panic(fmt.Errorf("message network.profile.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Params")) + } + panic(fmt.Errorf("message network.profile.v1.Params does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Params")) + } + panic(fmt.Errorf("message network.profile.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Params")) + } + panic(fmt.Errorf("message network.profile.v1.Params does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Params")) + } + panic(fmt.Errorf("message network.profile.v1.Params does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Params) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.Params", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Params) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Params) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/profile/v1/params.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Params defines the parameters for the module. +type Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Params) Reset() { + *x = Params{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_params_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Params) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Params) ProtoMessage() {} + +// Deprecated: Use Params.ProtoReflect.Descriptor instead. +func (*Params) Descriptor() ([]byte, []int) { + return file_network_profile_v1_params_proto_rawDescGZIP(), []int{0} +} + +var File_network_profile_v1_params_proto protoreflect.FileDescriptor + +var file_network_profile_v1_params_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, + 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2b, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x21, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, + 0xb0, 0x2a, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xcb, 0x01, 0x0a, 0x16, + 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_profile_v1_params_proto_rawDescOnce sync.Once + file_network_profile_v1_params_proto_rawDescData = file_network_profile_v1_params_proto_rawDesc +) + +func file_network_profile_v1_params_proto_rawDescGZIP() []byte { + file_network_profile_v1_params_proto_rawDescOnce.Do(func() { + file_network_profile_v1_params_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_profile_v1_params_proto_rawDescData) + }) + return file_network_profile_v1_params_proto_rawDescData +} + +var file_network_profile_v1_params_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_profile_v1_params_proto_goTypes = []interface{}{ + (*Params)(nil), // 0: network.profile.v1.Params +} +var file_network_profile_v1_params_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 +} + +func init() { file_network_profile_v1_params_proto_init() } +func file_network_profile_v1_params_proto_init() { + if File_network_profile_v1_params_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_profile_v1_params_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Params); 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_network_profile_v1_params_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_profile_v1_params_proto_goTypes, + DependencyIndexes: file_network_profile_v1_params_proto_depIdxs, + MessageInfos: file_network_profile_v1_params_proto_msgTypes, + }.Build() + File_network_profile_v1_params_proto = out.File + file_network_profile_v1_params_proto_rawDesc = nil + file_network_profile_v1_params_proto_goTypes = nil + file_network_profile_v1_params_proto_depIdxs = nil +} diff --git a/api/network/profile/v1/query.pulsar.go b/api/network/profile/v1/query.pulsar.go new file mode 100644 index 00000000..a3c6bbdb --- /dev/null +++ b/api/network/profile/v1/query.pulsar.go @@ -0,0 +1,7210 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package profilev1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_QueryParamsRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryParamsRequest = File_network_profile_v1_query_proto.Messages().ByName("QueryParamsRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsRequest)(nil) + +type fastReflection_QueryParamsRequest QueryParamsRequest + +func (x *QueryParamsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(x) +} + +func (x *QueryParamsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_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) +} + +var _fastReflection_QueryParamsRequest_messageType fastReflection_QueryParamsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsRequest_messageType{} + +type fastReflection_QueryParamsRequest_messageType struct{} + +func (x fastReflection_QueryParamsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(nil) +} +func (x fastReflection_QueryParamsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} +func (x fastReflection_QueryParamsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsRequest) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryParamsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryParamsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryParamsResponse protoreflect.MessageDescriptor + fd_QueryParamsResponse_params protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryParamsResponse = File_network_profile_v1_query_proto.Messages().ByName("QueryParamsResponse") + fd_QueryParamsResponse_params = md_QueryParamsResponse.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsResponse)(nil) + +type fastReflection_QueryParamsResponse QueryParamsResponse + +func (x *QueryParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(x) +} + +func (x *QueryParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_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) +} + +var _fastReflection_QueryParamsResponse_messageType fastReflection_QueryParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsResponse_messageType{} + +type fastReflection_QueryParamsResponse_messageType struct{} + +func (x fastReflection_QueryParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(nil) +} +func (x fastReflection_QueryParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} +func (x fastReflection_QueryParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsResponse) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_QueryParamsResponse_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryParamsResponse.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryParamsResponse.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryParamsResponse.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryParamsResponse.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryParamsResponse.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryParamsResponse.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetCoordinatorRequest protoreflect.MessageDescriptor + fd_QueryGetCoordinatorRequest_ID protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryGetCoordinatorRequest = File_network_profile_v1_query_proto.Messages().ByName("QueryGetCoordinatorRequest") + fd_QueryGetCoordinatorRequest_ID = md_QueryGetCoordinatorRequest.Fields().ByName("ID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetCoordinatorRequest)(nil) + +type fastReflection_QueryGetCoordinatorRequest QueryGetCoordinatorRequest + +func (x *QueryGetCoordinatorRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetCoordinatorRequest)(x) +} + +func (x *QueryGetCoordinatorRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_proto_msgTypes[2] + 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) +} + +var _fastReflection_QueryGetCoordinatorRequest_messageType fastReflection_QueryGetCoordinatorRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetCoordinatorRequest_messageType{} + +type fastReflection_QueryGetCoordinatorRequest_messageType struct{} + +func (x fastReflection_QueryGetCoordinatorRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetCoordinatorRequest)(nil) +} +func (x fastReflection_QueryGetCoordinatorRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetCoordinatorRequest) +} +func (x fastReflection_QueryGetCoordinatorRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetCoordinatorRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetCoordinatorRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetCoordinatorRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetCoordinatorRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetCoordinatorRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetCoordinatorRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetCoordinatorRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetCoordinatorRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetCoordinatorRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetCoordinatorRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ID) + if !f(fd_QueryGetCoordinatorRequest_ID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetCoordinatorRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorRequest.ID": + return x.ID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorRequest.ID": + x.ID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetCoordinatorRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryGetCoordinatorRequest.ID": + value := x.ID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorRequest.ID": + x.ID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorRequest.ID": + panic(fmt.Errorf("field ID of message network.profile.v1.QueryGetCoordinatorRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetCoordinatorRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorRequest.ID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetCoordinatorRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryGetCoordinatorRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetCoordinatorRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetCoordinatorRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetCoordinatorRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetCoordinatorRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ID != 0 { + n += 1 + runtime.Sov(uint64(x.ID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetCoordinatorRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetCoordinatorRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetCoordinatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetCoordinatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + x.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetCoordinatorResponse protoreflect.MessageDescriptor + fd_QueryGetCoordinatorResponse_Coordinator protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryGetCoordinatorResponse = File_network_profile_v1_query_proto.Messages().ByName("QueryGetCoordinatorResponse") + fd_QueryGetCoordinatorResponse_Coordinator = md_QueryGetCoordinatorResponse.Fields().ByName("Coordinator") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetCoordinatorResponse)(nil) + +type fastReflection_QueryGetCoordinatorResponse QueryGetCoordinatorResponse + +func (x *QueryGetCoordinatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetCoordinatorResponse)(x) +} + +func (x *QueryGetCoordinatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_proto_msgTypes[3] + 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) +} + +var _fastReflection_QueryGetCoordinatorResponse_messageType fastReflection_QueryGetCoordinatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetCoordinatorResponse_messageType{} + +type fastReflection_QueryGetCoordinatorResponse_messageType struct{} + +func (x fastReflection_QueryGetCoordinatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetCoordinatorResponse)(nil) +} +func (x fastReflection_QueryGetCoordinatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetCoordinatorResponse) +} +func (x fastReflection_QueryGetCoordinatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetCoordinatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetCoordinatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetCoordinatorResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetCoordinatorResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetCoordinatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetCoordinatorResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetCoordinatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetCoordinatorResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetCoordinatorResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetCoordinatorResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != nil { + value := protoreflect.ValueOfMessage(x.Coordinator.ProtoReflect()) + if !f(fd_QueryGetCoordinatorResponse_Coordinator, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetCoordinatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorResponse.Coordinator": + return x.Coordinator != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorResponse.Coordinator": + x.Coordinator = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetCoordinatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryGetCoordinatorResponse.Coordinator": + value := x.Coordinator + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorResponse.Coordinator": + x.Coordinator = value.Message().Interface().(*Coordinator) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorResponse.Coordinator": + if x.Coordinator == nil { + x.Coordinator = new(Coordinator) + } + return protoreflect.ValueOfMessage(x.Coordinator.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetCoordinatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorResponse.Coordinator": + m := new(Coordinator) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetCoordinatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryGetCoordinatorResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetCoordinatorResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetCoordinatorResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetCoordinatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetCoordinatorResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Coordinator != nil { + l = options.Size(x.Coordinator) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetCoordinatorResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Coordinator != nil { + encoded, err := options.Marshal(x.Coordinator) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetCoordinatorResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetCoordinatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Coordinator == nil { + x.Coordinator = &Coordinator{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Coordinator); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllCoordinatorRequest protoreflect.MessageDescriptor + fd_QueryAllCoordinatorRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryAllCoordinatorRequest = File_network_profile_v1_query_proto.Messages().ByName("QueryAllCoordinatorRequest") + fd_QueryAllCoordinatorRequest_pagination = md_QueryAllCoordinatorRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllCoordinatorRequest)(nil) + +type fastReflection_QueryAllCoordinatorRequest QueryAllCoordinatorRequest + +func (x *QueryAllCoordinatorRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllCoordinatorRequest)(x) +} + +func (x *QueryAllCoordinatorRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_proto_msgTypes[4] + 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) +} + +var _fastReflection_QueryAllCoordinatorRequest_messageType fastReflection_QueryAllCoordinatorRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllCoordinatorRequest_messageType{} + +type fastReflection_QueryAllCoordinatorRequest_messageType struct{} + +func (x fastReflection_QueryAllCoordinatorRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllCoordinatorRequest)(nil) +} +func (x fastReflection_QueryAllCoordinatorRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllCoordinatorRequest) +} +func (x fastReflection_QueryAllCoordinatorRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllCoordinatorRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllCoordinatorRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllCoordinatorRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllCoordinatorRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllCoordinatorRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllCoordinatorRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllCoordinatorRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllCoordinatorRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllCoordinatorRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllCoordinatorRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllCoordinatorRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllCoordinatorRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllCoordinatorRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllCoordinatorRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryAllCoordinatorRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllCoordinatorRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllCoordinatorRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllCoordinatorRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllCoordinatorRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryAllCoordinatorRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllCoordinatorRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllCoordinatorRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllCoordinatorRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllCoordinatorRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllCoordinatorRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllCoordinatorRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllCoordinatorRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllCoordinatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllCoordinatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllCoordinatorResponse_1_list)(nil) + +type _QueryAllCoordinatorResponse_1_list struct { + list *[]*Coordinator +} + +func (x *_QueryAllCoordinatorResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllCoordinatorResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllCoordinatorResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Coordinator) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllCoordinatorResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Coordinator) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllCoordinatorResponse_1_list) AppendMutable() protoreflect.Value { + v := new(Coordinator) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllCoordinatorResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllCoordinatorResponse_1_list) NewElement() protoreflect.Value { + v := new(Coordinator) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllCoordinatorResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllCoordinatorResponse protoreflect.MessageDescriptor + fd_QueryAllCoordinatorResponse_Coordinator protoreflect.FieldDescriptor + fd_QueryAllCoordinatorResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryAllCoordinatorResponse = File_network_profile_v1_query_proto.Messages().ByName("QueryAllCoordinatorResponse") + fd_QueryAllCoordinatorResponse_Coordinator = md_QueryAllCoordinatorResponse.Fields().ByName("Coordinator") + fd_QueryAllCoordinatorResponse_pagination = md_QueryAllCoordinatorResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllCoordinatorResponse)(nil) + +type fastReflection_QueryAllCoordinatorResponse QueryAllCoordinatorResponse + +func (x *QueryAllCoordinatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllCoordinatorResponse)(x) +} + +func (x *QueryAllCoordinatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_proto_msgTypes[5] + 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) +} + +var _fastReflection_QueryAllCoordinatorResponse_messageType fastReflection_QueryAllCoordinatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllCoordinatorResponse_messageType{} + +type fastReflection_QueryAllCoordinatorResponse_messageType struct{} + +func (x fastReflection_QueryAllCoordinatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllCoordinatorResponse)(nil) +} +func (x fastReflection_QueryAllCoordinatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllCoordinatorResponse) +} +func (x fastReflection_QueryAllCoordinatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllCoordinatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllCoordinatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllCoordinatorResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllCoordinatorResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllCoordinatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllCoordinatorResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllCoordinatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllCoordinatorResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllCoordinatorResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllCoordinatorResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Coordinator) != 0 { + value := protoreflect.ValueOfList(&_QueryAllCoordinatorResponse_1_list{list: &x.Coordinator}) + if !f(fd_QueryAllCoordinatorResponse_Coordinator, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllCoordinatorResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllCoordinatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorResponse.Coordinator": + return len(x.Coordinator) != 0 + case "network.profile.v1.QueryAllCoordinatorResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllCoordinatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorResponse.Coordinator": + x.Coordinator = nil + case "network.profile.v1.QueryAllCoordinatorResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllCoordinatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryAllCoordinatorResponse.Coordinator": + if len(x.Coordinator) == 0 { + return protoreflect.ValueOfList(&_QueryAllCoordinatorResponse_1_list{}) + } + listValue := &_QueryAllCoordinatorResponse_1_list{list: &x.Coordinator} + return protoreflect.ValueOfList(listValue) + case "network.profile.v1.QueryAllCoordinatorResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllCoordinatorResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorResponse.Coordinator": + lv := value.List() + clv := lv.(*_QueryAllCoordinatorResponse_1_list) + x.Coordinator = *clv.list + case "network.profile.v1.QueryAllCoordinatorResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllCoordinatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorResponse.Coordinator": + if x.Coordinator == nil { + x.Coordinator = []*Coordinator{} + } + value := &_QueryAllCoordinatorResponse_1_list{list: &x.Coordinator} + return protoreflect.ValueOfList(value) + case "network.profile.v1.QueryAllCoordinatorResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllCoordinatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryAllCoordinatorResponse.Coordinator": + list := []*Coordinator{} + return protoreflect.ValueOfList(&_QueryAllCoordinatorResponse_1_list{list: &list}) + case "network.profile.v1.QueryAllCoordinatorResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllCoordinatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryAllCoordinatorResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllCoordinatorResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllCoordinatorResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllCoordinatorResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllCoordinatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllCoordinatorResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Coordinator) > 0 { + for _, e := range x.Coordinator { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllCoordinatorResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Coordinator) > 0 { + for iNdEx := len(x.Coordinator) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Coordinator[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllCoordinatorResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllCoordinatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = append(x.Coordinator, &Coordinator{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Coordinator[len(x.Coordinator)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetValidatorRequest protoreflect.MessageDescriptor + fd_QueryGetValidatorRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryGetValidatorRequest = File_network_profile_v1_query_proto.Messages().ByName("QueryGetValidatorRequest") + fd_QueryGetValidatorRequest_address = md_QueryGetValidatorRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetValidatorRequest)(nil) + +type fastReflection_QueryGetValidatorRequest QueryGetValidatorRequest + +func (x *QueryGetValidatorRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetValidatorRequest)(x) +} + +func (x *QueryGetValidatorRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_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) +} + +var _fastReflection_QueryGetValidatorRequest_messageType fastReflection_QueryGetValidatorRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetValidatorRequest_messageType{} + +type fastReflection_QueryGetValidatorRequest_messageType struct{} + +func (x fastReflection_QueryGetValidatorRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetValidatorRequest)(nil) +} +func (x fastReflection_QueryGetValidatorRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetValidatorRequest) +} +func (x fastReflection_QueryGetValidatorRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetValidatorRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetValidatorRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetValidatorRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetValidatorRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetValidatorRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetValidatorRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetValidatorRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetValidatorRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetValidatorRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetValidatorRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetValidatorRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetValidatorRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetValidatorRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryGetValidatorRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorRequest.address": + panic(fmt.Errorf("field address of message network.profile.v1.QueryGetValidatorRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetValidatorRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetValidatorRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryGetValidatorRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetValidatorRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetValidatorRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetValidatorRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetValidatorRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetValidatorRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetValidatorRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetValidatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetValidatorResponse protoreflect.MessageDescriptor + fd_QueryGetValidatorResponse_validator protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryGetValidatorResponse = File_network_profile_v1_query_proto.Messages().ByName("QueryGetValidatorResponse") + fd_QueryGetValidatorResponse_validator = md_QueryGetValidatorResponse.Fields().ByName("validator") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetValidatorResponse)(nil) + +type fastReflection_QueryGetValidatorResponse QueryGetValidatorResponse + +func (x *QueryGetValidatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetValidatorResponse)(x) +} + +func (x *QueryGetValidatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_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) +} + +var _fastReflection_QueryGetValidatorResponse_messageType fastReflection_QueryGetValidatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetValidatorResponse_messageType{} + +type fastReflection_QueryGetValidatorResponse_messageType struct{} + +func (x fastReflection_QueryGetValidatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetValidatorResponse)(nil) +} +func (x fastReflection_QueryGetValidatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetValidatorResponse) +} +func (x fastReflection_QueryGetValidatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetValidatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetValidatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetValidatorResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetValidatorResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetValidatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetValidatorResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetValidatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetValidatorResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetValidatorResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetValidatorResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Validator != nil { + value := protoreflect.ValueOfMessage(x.Validator.ProtoReflect()) + if !f(fd_QueryGetValidatorResponse_validator, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetValidatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorResponse.validator": + return x.Validator != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorResponse.validator": + x.Validator = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetValidatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryGetValidatorResponse.validator": + value := x.Validator + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorResponse.validator": + x.Validator = value.Message().Interface().(*Validator) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorResponse.validator": + if x.Validator == nil { + x.Validator = new(Validator) + } + return protoreflect.ValueOfMessage(x.Validator.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetValidatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorResponse.validator": + m := new(Validator) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetValidatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryGetValidatorResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetValidatorResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetValidatorResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetValidatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetValidatorResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Validator != nil { + l = options.Size(x.Validator) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetValidatorResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Validator != nil { + encoded, err := options.Marshal(x.Validator) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetValidatorResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Validator == nil { + x.Validator = &Validator{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Validator); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllValidatorRequest protoreflect.MessageDescriptor + fd_QueryAllValidatorRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryAllValidatorRequest = File_network_profile_v1_query_proto.Messages().ByName("QueryAllValidatorRequest") + fd_QueryAllValidatorRequest_pagination = md_QueryAllValidatorRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllValidatorRequest)(nil) + +type fastReflection_QueryAllValidatorRequest QueryAllValidatorRequest + +func (x *QueryAllValidatorRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllValidatorRequest)(x) +} + +func (x *QueryAllValidatorRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_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) +} + +var _fastReflection_QueryAllValidatorRequest_messageType fastReflection_QueryAllValidatorRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllValidatorRequest_messageType{} + +type fastReflection_QueryAllValidatorRequest_messageType struct{} + +func (x fastReflection_QueryAllValidatorRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllValidatorRequest)(nil) +} +func (x fastReflection_QueryAllValidatorRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllValidatorRequest) +} +func (x fastReflection_QueryAllValidatorRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllValidatorRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllValidatorRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllValidatorRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllValidatorRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllValidatorRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllValidatorRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllValidatorRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllValidatorRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllValidatorRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllValidatorRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllValidatorRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllValidatorRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllValidatorRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllValidatorRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryAllValidatorRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllValidatorRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllValidatorRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllValidatorRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllValidatorRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryAllValidatorRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllValidatorRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllValidatorRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllValidatorRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllValidatorRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllValidatorRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllValidatorRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllValidatorRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllValidatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllValidatorResponse_1_list)(nil) + +type _QueryAllValidatorResponse_1_list struct { + list *[]*Validator +} + +func (x *_QueryAllValidatorResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllValidatorResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllValidatorResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Validator) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllValidatorResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Validator) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllValidatorResponse_1_list) AppendMutable() protoreflect.Value { + v := new(Validator) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllValidatorResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllValidatorResponse_1_list) NewElement() protoreflect.Value { + v := new(Validator) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllValidatorResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllValidatorResponse protoreflect.MessageDescriptor + fd_QueryAllValidatorResponse_validator protoreflect.FieldDescriptor + fd_QueryAllValidatorResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryAllValidatorResponse = File_network_profile_v1_query_proto.Messages().ByName("QueryAllValidatorResponse") + fd_QueryAllValidatorResponse_validator = md_QueryAllValidatorResponse.Fields().ByName("validator") + fd_QueryAllValidatorResponse_pagination = md_QueryAllValidatorResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllValidatorResponse)(nil) + +type fastReflection_QueryAllValidatorResponse QueryAllValidatorResponse + +func (x *QueryAllValidatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllValidatorResponse)(x) +} + +func (x *QueryAllValidatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_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) +} + +var _fastReflection_QueryAllValidatorResponse_messageType fastReflection_QueryAllValidatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllValidatorResponse_messageType{} + +type fastReflection_QueryAllValidatorResponse_messageType struct{} + +func (x fastReflection_QueryAllValidatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllValidatorResponse)(nil) +} +func (x fastReflection_QueryAllValidatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllValidatorResponse) +} +func (x fastReflection_QueryAllValidatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllValidatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllValidatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllValidatorResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllValidatorResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllValidatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllValidatorResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllValidatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllValidatorResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllValidatorResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllValidatorResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Validator) != 0 { + value := protoreflect.ValueOfList(&_QueryAllValidatorResponse_1_list{list: &x.Validator}) + if !f(fd_QueryAllValidatorResponse_validator, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllValidatorResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllValidatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorResponse.validator": + return len(x.Validator) != 0 + case "network.profile.v1.QueryAllValidatorResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllValidatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorResponse.validator": + x.Validator = nil + case "network.profile.v1.QueryAllValidatorResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllValidatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryAllValidatorResponse.validator": + if len(x.Validator) == 0 { + return protoreflect.ValueOfList(&_QueryAllValidatorResponse_1_list{}) + } + listValue := &_QueryAllValidatorResponse_1_list{list: &x.Validator} + return protoreflect.ValueOfList(listValue) + case "network.profile.v1.QueryAllValidatorResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllValidatorResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorResponse.validator": + lv := value.List() + clv := lv.(*_QueryAllValidatorResponse_1_list) + x.Validator = *clv.list + case "network.profile.v1.QueryAllValidatorResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllValidatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorResponse.validator": + if x.Validator == nil { + x.Validator = []*Validator{} + } + value := &_QueryAllValidatorResponse_1_list{list: &x.Validator} + return protoreflect.ValueOfList(value) + case "network.profile.v1.QueryAllValidatorResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllValidatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryAllValidatorResponse.validator": + list := []*Validator{} + return protoreflect.ValueOfList(&_QueryAllValidatorResponse_1_list{list: &list}) + case "network.profile.v1.QueryAllValidatorResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryAllValidatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryAllValidatorResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllValidatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryAllValidatorResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllValidatorResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllValidatorResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllValidatorResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllValidatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllValidatorResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Validator) > 0 { + for _, e := range x.Validator { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllValidatorResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Validator) > 0 { + for iNdEx := len(x.Validator) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Validator[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllValidatorResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Validator = append(x.Validator, &Validator{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Validator[len(x.Validator)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetCoordinatorByAddressRequest protoreflect.MessageDescriptor + fd_QueryGetCoordinatorByAddressRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryGetCoordinatorByAddressRequest = File_network_profile_v1_query_proto.Messages().ByName("QueryGetCoordinatorByAddressRequest") + fd_QueryGetCoordinatorByAddressRequest_address = md_QueryGetCoordinatorByAddressRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetCoordinatorByAddressRequest)(nil) + +type fastReflection_QueryGetCoordinatorByAddressRequest QueryGetCoordinatorByAddressRequest + +func (x *QueryGetCoordinatorByAddressRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetCoordinatorByAddressRequest)(x) +} + +func (x *QueryGetCoordinatorByAddressRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_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) +} + +var _fastReflection_QueryGetCoordinatorByAddressRequest_messageType fastReflection_QueryGetCoordinatorByAddressRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetCoordinatorByAddressRequest_messageType{} + +type fastReflection_QueryGetCoordinatorByAddressRequest_messageType struct{} + +func (x fastReflection_QueryGetCoordinatorByAddressRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetCoordinatorByAddressRequest)(nil) +} +func (x fastReflection_QueryGetCoordinatorByAddressRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetCoordinatorByAddressRequest) +} +func (x fastReflection_QueryGetCoordinatorByAddressRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetCoordinatorByAddressRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetCoordinatorByAddressRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetCoordinatorByAddressRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetCoordinatorByAddressRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetCoordinatorByAddressRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetCoordinatorByAddressRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressRequest.address": + panic(fmt.Errorf("field address of message network.profile.v1.QueryGetCoordinatorByAddressRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryGetCoordinatorByAddressRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetCoordinatorByAddressRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetCoordinatorByAddressRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetCoordinatorByAddressRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetCoordinatorByAddressRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetCoordinatorByAddressRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetCoordinatorByAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetCoordinatorByAddressResponse protoreflect.MessageDescriptor + fd_QueryGetCoordinatorByAddressResponse_coordinator protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryGetCoordinatorByAddressResponse = File_network_profile_v1_query_proto.Messages().ByName("QueryGetCoordinatorByAddressResponse") + fd_QueryGetCoordinatorByAddressResponse_coordinator = md_QueryGetCoordinatorByAddressResponse.Fields().ByName("coordinator") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetCoordinatorByAddressResponse)(nil) + +type fastReflection_QueryGetCoordinatorByAddressResponse QueryGetCoordinatorByAddressResponse + +func (x *QueryGetCoordinatorByAddressResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetCoordinatorByAddressResponse)(x) +} + +func (x *QueryGetCoordinatorByAddressResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_proto_msgTypes[11] + 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) +} + +var _fastReflection_QueryGetCoordinatorByAddressResponse_messageType fastReflection_QueryGetCoordinatorByAddressResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetCoordinatorByAddressResponse_messageType{} + +type fastReflection_QueryGetCoordinatorByAddressResponse_messageType struct{} + +func (x fastReflection_QueryGetCoordinatorByAddressResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetCoordinatorByAddressResponse)(nil) +} +func (x fastReflection_QueryGetCoordinatorByAddressResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetCoordinatorByAddressResponse) +} +func (x fastReflection_QueryGetCoordinatorByAddressResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetCoordinatorByAddressResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetCoordinatorByAddressResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetCoordinatorByAddressResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetCoordinatorByAddressResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetCoordinatorByAddressResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != nil { + value := protoreflect.ValueOfMessage(x.Coordinator.ProtoReflect()) + if !f(fd_QueryGetCoordinatorByAddressResponse_coordinator, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressResponse.coordinator": + return x.Coordinator != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressResponse.coordinator": + x.Coordinator = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressResponse.coordinator": + value := x.Coordinator + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressResponse.coordinator": + x.Coordinator = value.Message().Interface().(*Coordinator) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressResponse.coordinator": + if x.Coordinator == nil { + x.Coordinator = new(Coordinator) + } + return protoreflect.ValueOfMessage(x.Coordinator.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetCoordinatorByAddressResponse.coordinator": + m := new(Coordinator) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetCoordinatorByAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetCoordinatorByAddressResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryGetCoordinatorByAddressResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetCoordinatorByAddressResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetCoordinatorByAddressResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Coordinator != nil { + l = options.Size(x.Coordinator) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetCoordinatorByAddressResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Coordinator != nil { + encoded, err := options.Marshal(x.Coordinator) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetCoordinatorByAddressResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetCoordinatorByAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetCoordinatorByAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Coordinator == nil { + x.Coordinator = &Coordinator{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Coordinator); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetValidatorByOperatorAddressRequest protoreflect.MessageDescriptor + fd_QueryGetValidatorByOperatorAddressRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryGetValidatorByOperatorAddressRequest = File_network_profile_v1_query_proto.Messages().ByName("QueryGetValidatorByOperatorAddressRequest") + fd_QueryGetValidatorByOperatorAddressRequest_address = md_QueryGetValidatorByOperatorAddressRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetValidatorByOperatorAddressRequest)(nil) + +type fastReflection_QueryGetValidatorByOperatorAddressRequest QueryGetValidatorByOperatorAddressRequest + +func (x *QueryGetValidatorByOperatorAddressRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetValidatorByOperatorAddressRequest)(x) +} + +func (x *QueryGetValidatorByOperatorAddressRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_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) +} + +var _fastReflection_QueryGetValidatorByOperatorAddressRequest_messageType fastReflection_QueryGetValidatorByOperatorAddressRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetValidatorByOperatorAddressRequest_messageType{} + +type fastReflection_QueryGetValidatorByOperatorAddressRequest_messageType struct{} + +func (x fastReflection_QueryGetValidatorByOperatorAddressRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetValidatorByOperatorAddressRequest)(nil) +} +func (x fastReflection_QueryGetValidatorByOperatorAddressRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetValidatorByOperatorAddressRequest) +} +func (x fastReflection_QueryGetValidatorByOperatorAddressRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetValidatorByOperatorAddressRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetValidatorByOperatorAddressRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetValidatorByOperatorAddressRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetValidatorByOperatorAddressRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetValidatorByOperatorAddressRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetValidatorByOperatorAddressRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressRequest.address": + panic(fmt.Errorf("field address of message network.profile.v1.QueryGetValidatorByOperatorAddressRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressRequest")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryGetValidatorByOperatorAddressRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetValidatorByOperatorAddressRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetValidatorByOperatorAddressRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetValidatorByOperatorAddressRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetValidatorByOperatorAddressRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetValidatorByOperatorAddressRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetValidatorByOperatorAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetValidatorByOperatorAddressResponse protoreflect.MessageDescriptor + fd_QueryGetValidatorByOperatorAddressResponse_validator protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_query_proto_init() + md_QueryGetValidatorByOperatorAddressResponse = File_network_profile_v1_query_proto.Messages().ByName("QueryGetValidatorByOperatorAddressResponse") + fd_QueryGetValidatorByOperatorAddressResponse_validator = md_QueryGetValidatorByOperatorAddressResponse.Fields().ByName("validator") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetValidatorByOperatorAddressResponse)(nil) + +type fastReflection_QueryGetValidatorByOperatorAddressResponse QueryGetValidatorByOperatorAddressResponse + +func (x *QueryGetValidatorByOperatorAddressResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetValidatorByOperatorAddressResponse)(x) +} + +func (x *QueryGetValidatorByOperatorAddressResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_query_proto_msgTypes[13] + 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) +} + +var _fastReflection_QueryGetValidatorByOperatorAddressResponse_messageType fastReflection_QueryGetValidatorByOperatorAddressResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetValidatorByOperatorAddressResponse_messageType{} + +type fastReflection_QueryGetValidatorByOperatorAddressResponse_messageType struct{} + +func (x fastReflection_QueryGetValidatorByOperatorAddressResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetValidatorByOperatorAddressResponse)(nil) +} +func (x fastReflection_QueryGetValidatorByOperatorAddressResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetValidatorByOperatorAddressResponse) +} +func (x fastReflection_QueryGetValidatorByOperatorAddressResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetValidatorByOperatorAddressResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetValidatorByOperatorAddressResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetValidatorByOperatorAddressResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetValidatorByOperatorAddressResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetValidatorByOperatorAddressResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Validator != nil { + value := protoreflect.ValueOfMessage(x.Validator.ProtoReflect()) + if !f(fd_QueryGetValidatorByOperatorAddressResponse_validator, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressResponse.validator": + return x.Validator != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressResponse.validator": + x.Validator = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressResponse.validator": + value := x.Validator + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressResponse.validator": + x.Validator = value.Message().Interface().(*Validator) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressResponse.validator": + if x.Validator == nil { + x.Validator = new(Validator) + } + return protoreflect.ValueOfMessage(x.Validator.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.QueryGetValidatorByOperatorAddressResponse.validator": + m := new(Validator) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.QueryGetValidatorByOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.QueryGetValidatorByOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.QueryGetValidatorByOperatorAddressResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetValidatorByOperatorAddressResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetValidatorByOperatorAddressResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Validator != nil { + l = options.Size(x.Validator) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetValidatorByOperatorAddressResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Validator != nil { + encoded, err := options.Marshal(x.Validator) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetValidatorByOperatorAddressResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetValidatorByOperatorAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetValidatorByOperatorAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Validator == nil { + x.Validator = &Validator{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Validator); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/profile/v1/query.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryParamsRequest) Reset() { + *x = QueryParamsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsRequest) ProtoMessage() {} + +// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{0} +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params holds all the parameters of this module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryParamsResponse) Reset() { + *x = QueryParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsResponse) ProtoMessage() {} + +// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryParamsResponse) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +type QueryGetCoordinatorRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *QueryGetCoordinatorRequest) Reset() { + *x = QueryGetCoordinatorRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetCoordinatorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetCoordinatorRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetCoordinatorRequest.ProtoReflect.Descriptor instead. +func (*QueryGetCoordinatorRequest) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{2} +} + +func (x *QueryGetCoordinatorRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +type QueryGetCoordinatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator *Coordinator `protobuf:"bytes,1,opt,name=Coordinator,proto3" json:"Coordinator,omitempty"` +} + +func (x *QueryGetCoordinatorResponse) Reset() { + *x = QueryGetCoordinatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetCoordinatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetCoordinatorResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetCoordinatorResponse.ProtoReflect.Descriptor instead. +func (*QueryGetCoordinatorResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryGetCoordinatorResponse) GetCoordinator() *Coordinator { + if x != nil { + return x.Coordinator + } + return nil +} + +type QueryAllCoordinatorRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllCoordinatorRequest) Reset() { + *x = QueryAllCoordinatorRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllCoordinatorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllCoordinatorRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllCoordinatorRequest.ProtoReflect.Descriptor instead. +func (*QueryAllCoordinatorRequest) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryAllCoordinatorRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllCoordinatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator []*Coordinator `protobuf:"bytes,1,rep,name=Coordinator,proto3" json:"Coordinator,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllCoordinatorResponse) Reset() { + *x = QueryAllCoordinatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllCoordinatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllCoordinatorResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllCoordinatorResponse.ProtoReflect.Descriptor instead. +func (*QueryAllCoordinatorResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryAllCoordinatorResponse) GetCoordinator() []*Coordinator { + if x != nil { + return x.Coordinator + } + return nil +} + +func (x *QueryAllCoordinatorResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetValidatorRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryGetValidatorRequest) Reset() { + *x = QueryGetValidatorRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetValidatorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetValidatorRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetValidatorRequest.ProtoReflect.Descriptor instead. +func (*QueryGetValidatorRequest) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{6} +} + +func (x *QueryGetValidatorRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryGetValidatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Validator *Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` +} + +func (x *QueryGetValidatorResponse) Reset() { + *x = QueryGetValidatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetValidatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetValidatorResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetValidatorResponse.ProtoReflect.Descriptor instead. +func (*QueryGetValidatorResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryGetValidatorResponse) GetValidator() *Validator { + if x != nil { + return x.Validator + } + return nil +} + +type QueryAllValidatorRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllValidatorRequest) Reset() { + *x = QueryAllValidatorRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllValidatorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllValidatorRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllValidatorRequest.ProtoReflect.Descriptor instead. +func (*QueryAllValidatorRequest) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{8} +} + +func (x *QueryAllValidatorRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllValidatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Validator []*Validator `protobuf:"bytes,1,rep,name=validator,proto3" json:"validator,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllValidatorResponse) Reset() { + *x = QueryAllValidatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllValidatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllValidatorResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllValidatorResponse.ProtoReflect.Descriptor instead. +func (*QueryAllValidatorResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{9} +} + +func (x *QueryAllValidatorResponse) GetValidator() []*Validator { + if x != nil { + return x.Validator + } + return nil +} + +func (x *QueryAllValidatorResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetCoordinatorByAddressRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryGetCoordinatorByAddressRequest) Reset() { + *x = QueryGetCoordinatorByAddressRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetCoordinatorByAddressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetCoordinatorByAddressRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetCoordinatorByAddressRequest.ProtoReflect.Descriptor instead. +func (*QueryGetCoordinatorByAddressRequest) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{10} +} + +func (x *QueryGetCoordinatorByAddressRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryGetCoordinatorByAddressResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator *Coordinator `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` +} + +func (x *QueryGetCoordinatorByAddressResponse) Reset() { + *x = QueryGetCoordinatorByAddressResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetCoordinatorByAddressResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetCoordinatorByAddressResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetCoordinatorByAddressResponse.ProtoReflect.Descriptor instead. +func (*QueryGetCoordinatorByAddressResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{11} +} + +func (x *QueryGetCoordinatorByAddressResponse) GetCoordinator() *Coordinator { + if x != nil { + return x.Coordinator + } + return nil +} + +type QueryGetValidatorByOperatorAddressRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryGetValidatorByOperatorAddressRequest) Reset() { + *x = QueryGetValidatorByOperatorAddressRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetValidatorByOperatorAddressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetValidatorByOperatorAddressRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetValidatorByOperatorAddressRequest.ProtoReflect.Descriptor instead. +func (*QueryGetValidatorByOperatorAddressRequest) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{12} +} + +func (x *QueryGetValidatorByOperatorAddressRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryGetValidatorByOperatorAddressResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Validator *Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` +} + +func (x *QueryGetValidatorByOperatorAddressResponse) Reset() { + *x = QueryGetValidatorByOperatorAddressResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_query_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetValidatorByOperatorAddressResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetValidatorByOperatorAddressResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetValidatorByOperatorAddressResponse.ProtoReflect.Descriptor instead. +func (*QueryGetValidatorByOperatorAddressResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_query_proto_rawDescGZIP(), []int{13} +} + +func (x *QueryGetValidatorByOperatorAddressResponse) GetValidator() *Validator { + if x != nil { + return x.Validator + } + return nil +} + +var File_network_profile_v1_query_proto protoreflect.FileDescriptor + +var file_network_profile_v1_query_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x62, 0x61, 0x73, 0x65, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, + 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x24, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, + 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x14, 0x0a, + 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x54, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, + 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x2c, 0x0a, 0x1a, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x22, 0x66, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x0b, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, + 0x64, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, + 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xaf, 0x01, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, + 0x6c, 0x6c, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, + 0x00, 0x52, 0x0b, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x47, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4e, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x5e, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x09, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x62, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x01, 0x0a, 0x19, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, + 0x00, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x59, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x22, 0x6f, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x22, 0x5f, 0x0a, 0x29, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0x6f, 0x0a, 0x2a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x41, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x32, 0xd6, 0x09, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x84, 0x01, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x26, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x23, 0x12, 0x21, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, + 0x12, 0x28, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x49, 0x44, 0x7d, 0x12, 0x9f, 0x01, 0x0a, 0x0f, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2e, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0xa0, 0x01, 0x0a, + 0x0c, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2c, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, + 0x97, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x2c, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0xd2, 0x01, 0x0a, 0x17, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, + 0x12, 0x3c, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xeb, + 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, + 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x3d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, + 0x79, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x42, 0xca, 0x01, 0x0a, + 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_profile_v1_query_proto_rawDescOnce sync.Once + file_network_profile_v1_query_proto_rawDescData = file_network_profile_v1_query_proto_rawDesc +) + +func file_network_profile_v1_query_proto_rawDescGZIP() []byte { + file_network_profile_v1_query_proto_rawDescOnce.Do(func() { + file_network_profile_v1_query_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_profile_v1_query_proto_rawDescData) + }) + return file_network_profile_v1_query_proto_rawDescData +} + +var file_network_profile_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_network_profile_v1_query_proto_goTypes = []interface{}{ + (*QueryParamsRequest)(nil), // 0: network.profile.v1.QueryParamsRequest + (*QueryParamsResponse)(nil), // 1: network.profile.v1.QueryParamsResponse + (*QueryGetCoordinatorRequest)(nil), // 2: network.profile.v1.QueryGetCoordinatorRequest + (*QueryGetCoordinatorResponse)(nil), // 3: network.profile.v1.QueryGetCoordinatorResponse + (*QueryAllCoordinatorRequest)(nil), // 4: network.profile.v1.QueryAllCoordinatorRequest + (*QueryAllCoordinatorResponse)(nil), // 5: network.profile.v1.QueryAllCoordinatorResponse + (*QueryGetValidatorRequest)(nil), // 6: network.profile.v1.QueryGetValidatorRequest + (*QueryGetValidatorResponse)(nil), // 7: network.profile.v1.QueryGetValidatorResponse + (*QueryAllValidatorRequest)(nil), // 8: network.profile.v1.QueryAllValidatorRequest + (*QueryAllValidatorResponse)(nil), // 9: network.profile.v1.QueryAllValidatorResponse + (*QueryGetCoordinatorByAddressRequest)(nil), // 10: network.profile.v1.QueryGetCoordinatorByAddressRequest + (*QueryGetCoordinatorByAddressResponse)(nil), // 11: network.profile.v1.QueryGetCoordinatorByAddressResponse + (*QueryGetValidatorByOperatorAddressRequest)(nil), // 12: network.profile.v1.QueryGetValidatorByOperatorAddressRequest + (*QueryGetValidatorByOperatorAddressResponse)(nil), // 13: network.profile.v1.QueryGetValidatorByOperatorAddressResponse + (*Params)(nil), // 14: network.profile.v1.Params + (*Coordinator)(nil), // 15: network.profile.v1.Coordinator + (*v1beta1.PageRequest)(nil), // 16: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 17: cosmos.base.query.v1beta1.PageResponse + (*Validator)(nil), // 18: network.profile.v1.Validator +} +var file_network_profile_v1_query_proto_depIdxs = []int32{ + 14, // 0: network.profile.v1.QueryParamsResponse.params:type_name -> network.profile.v1.Params + 15, // 1: network.profile.v1.QueryGetCoordinatorResponse.Coordinator:type_name -> network.profile.v1.Coordinator + 16, // 2: network.profile.v1.QueryAllCoordinatorRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 15, // 3: network.profile.v1.QueryAllCoordinatorResponse.Coordinator:type_name -> network.profile.v1.Coordinator + 17, // 4: network.profile.v1.QueryAllCoordinatorResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 18, // 5: network.profile.v1.QueryGetValidatorResponse.validator:type_name -> network.profile.v1.Validator + 16, // 6: network.profile.v1.QueryAllValidatorRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 18, // 7: network.profile.v1.QueryAllValidatorResponse.validator:type_name -> network.profile.v1.Validator + 17, // 8: network.profile.v1.QueryAllValidatorResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 15, // 9: network.profile.v1.QueryGetCoordinatorByAddressResponse.coordinator:type_name -> network.profile.v1.Coordinator + 18, // 10: network.profile.v1.QueryGetValidatorByOperatorAddressResponse.validator:type_name -> network.profile.v1.Validator + 0, // 11: network.profile.v1.Query.Params:input_type -> network.profile.v1.QueryParamsRequest + 2, // 12: network.profile.v1.Query.GetCoordinator:input_type -> network.profile.v1.QueryGetCoordinatorRequest + 4, // 13: network.profile.v1.Query.ListCoordinator:input_type -> network.profile.v1.QueryAllCoordinatorRequest + 6, // 14: network.profile.v1.Query.GetValidator:input_type -> network.profile.v1.QueryGetValidatorRequest + 8, // 15: network.profile.v1.Query.ListValidator:input_type -> network.profile.v1.QueryAllValidatorRequest + 10, // 16: network.profile.v1.Query.GetCoordinatorByAddress:input_type -> network.profile.v1.QueryGetCoordinatorByAddressRequest + 12, // 17: network.profile.v1.Query.GetValidatorByOperatorAddress:input_type -> network.profile.v1.QueryGetValidatorByOperatorAddressRequest + 1, // 18: network.profile.v1.Query.Params:output_type -> network.profile.v1.QueryParamsResponse + 3, // 19: network.profile.v1.Query.GetCoordinator:output_type -> network.profile.v1.QueryGetCoordinatorResponse + 5, // 20: network.profile.v1.Query.ListCoordinator:output_type -> network.profile.v1.QueryAllCoordinatorResponse + 7, // 21: network.profile.v1.Query.GetValidator:output_type -> network.profile.v1.QueryGetValidatorResponse + 9, // 22: network.profile.v1.Query.ListValidator:output_type -> network.profile.v1.QueryAllValidatorResponse + 11, // 23: network.profile.v1.Query.GetCoordinatorByAddress:output_type -> network.profile.v1.QueryGetCoordinatorByAddressResponse + 13, // 24: network.profile.v1.Query.GetValidatorByOperatorAddress:output_type -> network.profile.v1.QueryGetValidatorByOperatorAddressResponse + 18, // [18:25] is the sub-list for method output_type + 11, // [11:18] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name +} + +func init() { file_network_profile_v1_query_proto_init() } +func file_network_profile_v1_query_proto_init() { + if File_network_profile_v1_query_proto != nil { + return + } + file_network_profile_v1_coordinator_proto_init() + file_network_profile_v1_params_proto_init() + file_network_profile_v1_validator_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_profile_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetCoordinatorRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetCoordinatorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllCoordinatorRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllCoordinatorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetValidatorRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetValidatorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllValidatorRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllValidatorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetCoordinatorByAddressRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetCoordinatorByAddressResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetValidatorByOperatorAddressRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_query_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetValidatorByOperatorAddressResponse); 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_network_profile_v1_query_proto_rawDesc, + NumEnums: 0, + NumMessages: 14, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_profile_v1_query_proto_goTypes, + DependencyIndexes: file_network_profile_v1_query_proto_depIdxs, + MessageInfos: file_network_profile_v1_query_proto_msgTypes, + }.Build() + File_network_profile_v1_query_proto = out.File + file_network_profile_v1_query_proto_rawDesc = nil + file_network_profile_v1_query_proto_goTypes = nil + file_network_profile_v1_query_proto_depIdxs = nil +} diff --git a/api/network/profile/v1/query_grpc.pb.go b/api/network/profile/v1/query_grpc.pb.go new file mode 100644 index 00000000..a7c1be51 --- /dev/null +++ b/api/network/profile/v1/query_grpc.pb.go @@ -0,0 +1,341 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/profile/v1/query.proto + +package profilev1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Query_Params_FullMethodName = "/network.profile.v1.Query/Params" + Query_GetCoordinator_FullMethodName = "/network.profile.v1.Query/GetCoordinator" + Query_ListCoordinator_FullMethodName = "/network.profile.v1.Query/ListCoordinator" + Query_GetValidator_FullMethodName = "/network.profile.v1.Query/GetValidator" + Query_ListValidator_FullMethodName = "/network.profile.v1.Query/ListValidator" + Query_GetCoordinatorByAddress_FullMethodName = "/network.profile.v1.Query/GetCoordinatorByAddress" + Query_GetValidatorByOperatorAddress_FullMethodName = "/network.profile.v1.Query/GetValidatorByOperatorAddress" +) + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of Coordinator items. + GetCoordinator(ctx context.Context, in *QueryGetCoordinatorRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorResponse, error) + ListCoordinator(ctx context.Context, in *QueryAllCoordinatorRequest, opts ...grpc.CallOption) (*QueryAllCoordinatorResponse, error) + // Queries a list of Validator items. + GetValidator(ctx context.Context, in *QueryGetValidatorRequest, opts ...grpc.CallOption) (*QueryGetValidatorResponse, error) + ListValidator(ctx context.Context, in *QueryAllValidatorRequest, opts ...grpc.CallOption) (*QueryAllValidatorResponse, error) + // Queries a list of GetCoordinatorByAddress items. + GetCoordinatorByAddress(ctx context.Context, in *QueryGetCoordinatorByAddressRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorByAddressResponse, error) + // Queries a list of GetValidatorByOperatorAddress items. + GetValidatorByOperatorAddress(ctx context.Context, in *QueryGetValidatorByOperatorAddressRequest, opts ...grpc.CallOption) (*QueryGetValidatorByOperatorAddressResponse, error) +} + +type queryClient struct { + cc grpc.ClientConnInterface +} + +func NewQueryClient(cc grpc.ClientConnInterface) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, Query_Params_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetCoordinator(ctx context.Context, in *QueryGetCoordinatorRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorResponse, error) { + out := new(QueryGetCoordinatorResponse) + err := c.cc.Invoke(ctx, Query_GetCoordinator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListCoordinator(ctx context.Context, in *QueryAllCoordinatorRequest, opts ...grpc.CallOption) (*QueryAllCoordinatorResponse, error) { + out := new(QueryAllCoordinatorResponse) + err := c.cc.Invoke(ctx, Query_ListCoordinator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetValidator(ctx context.Context, in *QueryGetValidatorRequest, opts ...grpc.CallOption) (*QueryGetValidatorResponse, error) { + out := new(QueryGetValidatorResponse) + err := c.cc.Invoke(ctx, Query_GetValidator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListValidator(ctx context.Context, in *QueryAllValidatorRequest, opts ...grpc.CallOption) (*QueryAllValidatorResponse, error) { + out := new(QueryAllValidatorResponse) + err := c.cc.Invoke(ctx, Query_ListValidator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetCoordinatorByAddress(ctx context.Context, in *QueryGetCoordinatorByAddressRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorByAddressResponse, error) { + out := new(QueryGetCoordinatorByAddressResponse) + err := c.cc.Invoke(ctx, Query_GetCoordinatorByAddress_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetValidatorByOperatorAddress(ctx context.Context, in *QueryGetValidatorByOperatorAddressRequest, opts ...grpc.CallOption) (*QueryGetValidatorByOperatorAddressResponse, error) { + out := new(QueryGetValidatorByOperatorAddressResponse) + err := c.cc.Invoke(ctx, Query_GetValidatorByOperatorAddress_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +// All implementations must embed UnimplementedQueryServer +// for forward compatibility +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of Coordinator items. + GetCoordinator(context.Context, *QueryGetCoordinatorRequest) (*QueryGetCoordinatorResponse, error) + ListCoordinator(context.Context, *QueryAllCoordinatorRequest) (*QueryAllCoordinatorResponse, error) + // Queries a list of Validator items. + GetValidator(context.Context, *QueryGetValidatorRequest) (*QueryGetValidatorResponse, error) + ListValidator(context.Context, *QueryAllValidatorRequest) (*QueryAllValidatorResponse, error) + // Queries a list of GetCoordinatorByAddress items. + GetCoordinatorByAddress(context.Context, *QueryGetCoordinatorByAddressRequest) (*QueryGetCoordinatorByAddressResponse, error) + // Queries a list of GetValidatorByOperatorAddress items. + GetValidatorByOperatorAddress(context.Context, *QueryGetValidatorByOperatorAddressRequest) (*QueryGetValidatorByOperatorAddressResponse, error) + mustEmbedUnimplementedQueryServer() +} + +// UnimplementedQueryServer must be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (UnimplementedQueryServer) GetCoordinator(context.Context, *QueryGetCoordinatorRequest) (*QueryGetCoordinatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetCoordinator not implemented") +} +func (UnimplementedQueryServer) ListCoordinator(context.Context, *QueryAllCoordinatorRequest) (*QueryAllCoordinatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListCoordinator not implemented") +} +func (UnimplementedQueryServer) GetValidator(context.Context, *QueryGetValidatorRequest) (*QueryGetValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetValidator not implemented") +} +func (UnimplementedQueryServer) ListValidator(context.Context, *QueryAllValidatorRequest) (*QueryAllValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListValidator not implemented") +} +func (UnimplementedQueryServer) GetCoordinatorByAddress(context.Context, *QueryGetCoordinatorByAddressRequest) (*QueryGetCoordinatorByAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetCoordinatorByAddress not implemented") +} +func (UnimplementedQueryServer) GetValidatorByOperatorAddress(context.Context, *QueryGetValidatorByOperatorAddressRequest) (*QueryGetValidatorByOperatorAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetValidatorByOperatorAddress not implemented") +} +func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} + +// UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to QueryServer will +// result in compilation errors. +type UnsafeQueryServer interface { + mustEmbedUnimplementedQueryServer() +} + +func RegisterQueryServer(s grpc.ServiceRegistrar, srv QueryServer) { + s.RegisterService(&Query_ServiceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_Params_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetCoordinator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetCoordinatorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetCoordinator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetCoordinator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetCoordinator(ctx, req.(*QueryGetCoordinatorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListCoordinator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllCoordinatorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListCoordinator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListCoordinator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListCoordinator(ctx, req.(*QueryAllCoordinatorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetValidatorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetValidator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetValidator(ctx, req.(*QueryGetValidatorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllValidatorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListValidator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListValidator(ctx, req.(*QueryAllValidatorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetCoordinatorByAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetCoordinatorByAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetCoordinatorByAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetCoordinatorByAddress_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetCoordinatorByAddress(ctx, req.(*QueryGetCoordinatorByAddressRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetValidatorByOperatorAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetValidatorByOperatorAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetValidatorByOperatorAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetValidatorByOperatorAddress_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetValidatorByOperatorAddress(ctx, req.(*QueryGetValidatorByOperatorAddressRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Query_ServiceDesc is the grpc.ServiceDesc for Query service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Query_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.profile.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetCoordinator", + Handler: _Query_GetCoordinator_Handler, + }, + { + MethodName: "ListCoordinator", + Handler: _Query_ListCoordinator_Handler, + }, + { + MethodName: "GetValidator", + Handler: _Query_GetValidator_Handler, + }, + { + MethodName: "ListValidator", + Handler: _Query_ListValidator_Handler, + }, + { + MethodName: "GetCoordinatorByAddress", + Handler: _Query_GetCoordinatorByAddress_Handler, + }, + { + MethodName: "GetValidatorByOperatorAddress", + Handler: _Query_GetValidatorByOperatorAddress_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/profile/v1/query.proto", +} diff --git a/api/network/profile/v1/tx.pulsar.go b/api/network/profile/v1/tx.pulsar.go new file mode 100644 index 00000000..6b04a083 --- /dev/null +++ b/api/network/profile/v1/tx.pulsar.go @@ -0,0 +1,6879 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package profilev1 + +import ( + _ "cosmossdk.io/api/amino" + _ "cosmossdk.io/api/cosmos/msg/v1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MsgUpdateParams protoreflect.MessageDescriptor + fd_MsgUpdateParams_authority protoreflect.FieldDescriptor + fd_MsgUpdateParams_params protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgUpdateParams = File_network_profile_v1_tx_proto.Messages().ByName("MsgUpdateParams") + fd_MsgUpdateParams_authority = md_MsgUpdateParams.Fields().ByName("authority") + fd_MsgUpdateParams_params = md_MsgUpdateParams.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParams)(nil) + +type fastReflection_MsgUpdateParams MsgUpdateParams + +func (x *MsgUpdateParams) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(x) +} + +func (x *MsgUpdateParams) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_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) +} + +var _fastReflection_MsgUpdateParams_messageType fastReflection_MsgUpdateParams_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParams_messageType{} + +type fastReflection_MsgUpdateParams_messageType struct{} + +func (x fastReflection_MsgUpdateParams_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(nil) +} +func (x fastReflection_MsgUpdateParams_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} +func (x fastReflection_MsgUpdateParams_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParams) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParams) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParams_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParams) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParams) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParams)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParams) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_MsgUpdateParams_authority, value) { + return + } + } + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_MsgUpdateParams_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParams) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateParams.authority": + return x.Authority != "" + case "network.profile.v1.MsgUpdateParams.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateParams.authority": + x.Authority = "" + case "network.profile.v1.MsgUpdateParams.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParams) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.MsgUpdateParams.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + case "network.profile.v1.MsgUpdateParams.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParams does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateParams.authority": + x.Authority = value.Interface().(string) + case "network.profile.v1.MsgUpdateParams.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateParams.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.profile.v1.MsgUpdateParams.authority": + panic(fmt.Errorf("field authority of message network.profile.v1.MsgUpdateParams is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParams) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateParams.authority": + return protoreflect.ValueOfString("") + case "network.profile.v1.MsgUpdateParams.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParams) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgUpdateParams", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParams) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParams) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParams) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateParamsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgUpdateParamsResponse = File_network_profile_v1_tx_proto.Messages().ByName("MsgUpdateParamsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParamsResponse)(nil) + +type fastReflection_MsgUpdateParamsResponse MsgUpdateParamsResponse + +func (x *MsgUpdateParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(x) +} + +func (x *MsgUpdateParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_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) +} + +var _fastReflection_MsgUpdateParamsResponse_messageType fastReflection_MsgUpdateParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParamsResponse_messageType{} + +type fastReflection_MsgUpdateParamsResponse_messageType struct{} + +func (x fastReflection_MsgUpdateParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(nil) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParamsResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParamsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgUpdateParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateValidatorDescription protoreflect.MessageDescriptor + fd_MsgUpdateValidatorDescription_address protoreflect.FieldDescriptor + fd_MsgUpdateValidatorDescription_description protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgUpdateValidatorDescription = File_network_profile_v1_tx_proto.Messages().ByName("MsgUpdateValidatorDescription") + fd_MsgUpdateValidatorDescription_address = md_MsgUpdateValidatorDescription.Fields().ByName("address") + fd_MsgUpdateValidatorDescription_description = md_MsgUpdateValidatorDescription.Fields().ByName("description") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateValidatorDescription)(nil) + +type fastReflection_MsgUpdateValidatorDescription MsgUpdateValidatorDescription + +func (x *MsgUpdateValidatorDescription) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateValidatorDescription)(x) +} + +func (x *MsgUpdateValidatorDescription) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_proto_msgTypes[2] + 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) +} + +var _fastReflection_MsgUpdateValidatorDescription_messageType fastReflection_MsgUpdateValidatorDescription_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateValidatorDescription_messageType{} + +type fastReflection_MsgUpdateValidatorDescription_messageType struct{} + +func (x fastReflection_MsgUpdateValidatorDescription_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateValidatorDescription)(nil) +} +func (x fastReflection_MsgUpdateValidatorDescription_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateValidatorDescription) +} +func (x fastReflection_MsgUpdateValidatorDescription_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateValidatorDescription +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateValidatorDescription) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateValidatorDescription +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateValidatorDescription) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateValidatorDescription_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateValidatorDescription) New() protoreflect.Message { + return new(fastReflection_MsgUpdateValidatorDescription) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateValidatorDescription) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateValidatorDescription)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateValidatorDescription) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_MsgUpdateValidatorDescription_address, value) { + return + } + } + if x.Description != nil { + value := protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + if !f(fd_MsgUpdateValidatorDescription_description, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateValidatorDescription) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateValidatorDescription.address": + return x.Address != "" + case "network.profile.v1.MsgUpdateValidatorDescription.description": + return x.Description != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateValidatorDescription) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateValidatorDescription.address": + x.Address = "" + case "network.profile.v1.MsgUpdateValidatorDescription.description": + x.Description = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateValidatorDescription) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.MsgUpdateValidatorDescription.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.MsgUpdateValidatorDescription.description": + value := x.Description + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescription does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateValidatorDescription) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateValidatorDescription.address": + x.Address = value.Interface().(string) + case "network.profile.v1.MsgUpdateValidatorDescription.description": + x.Description = value.Message().Interface().(*ValidatorDescription) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateValidatorDescription) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateValidatorDescription.description": + if x.Description == nil { + x.Description = new(ValidatorDescription) + } + return protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + case "network.profile.v1.MsgUpdateValidatorDescription.address": + panic(fmt.Errorf("field address of message network.profile.v1.MsgUpdateValidatorDescription is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateValidatorDescription) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateValidatorDescription.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.MsgUpdateValidatorDescription.description": + m := new(ValidatorDescription) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateValidatorDescription) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgUpdateValidatorDescription", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateValidatorDescription) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateValidatorDescription) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateValidatorDescription) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateValidatorDescription) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateValidatorDescription) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Description != nil { + l = options.Size(x.Description) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateValidatorDescription) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Description != nil { + encoded, err := options.Marshal(x.Description) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateValidatorDescription) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateValidatorDescription: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateValidatorDescription: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Description == nil { + x.Description = &ValidatorDescription{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Description); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateValidatorDescriptionResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgUpdateValidatorDescriptionResponse = File_network_profile_v1_tx_proto.Messages().ByName("MsgUpdateValidatorDescriptionResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateValidatorDescriptionResponse)(nil) + +type fastReflection_MsgUpdateValidatorDescriptionResponse MsgUpdateValidatorDescriptionResponse + +func (x *MsgUpdateValidatorDescriptionResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateValidatorDescriptionResponse)(x) +} + +func (x *MsgUpdateValidatorDescriptionResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_proto_msgTypes[3] + 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) +} + +var _fastReflection_MsgUpdateValidatorDescriptionResponse_messageType fastReflection_MsgUpdateValidatorDescriptionResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateValidatorDescriptionResponse_messageType{} + +type fastReflection_MsgUpdateValidatorDescriptionResponse_messageType struct{} + +func (x fastReflection_MsgUpdateValidatorDescriptionResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateValidatorDescriptionResponse)(nil) +} +func (x fastReflection_MsgUpdateValidatorDescriptionResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateValidatorDescriptionResponse) +} +func (x fastReflection_MsgUpdateValidatorDescriptionResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateValidatorDescriptionResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateValidatorDescriptionResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateValidatorDescriptionResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateValidatorDescriptionResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateValidatorDescriptionResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescriptionResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateValidatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateValidatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgUpdateValidatorDescriptionResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateValidatorDescriptionResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateValidatorDescriptionResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateValidatorDescriptionResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateValidatorDescriptionResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateValidatorDescriptionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateValidatorDescriptionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgAddValidatorOperatorAddress protoreflect.MessageDescriptor + fd_MsgAddValidatorOperatorAddress_validatorAddress protoreflect.FieldDescriptor + fd_MsgAddValidatorOperatorAddress_operatorAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgAddValidatorOperatorAddress = File_network_profile_v1_tx_proto.Messages().ByName("MsgAddValidatorOperatorAddress") + fd_MsgAddValidatorOperatorAddress_validatorAddress = md_MsgAddValidatorOperatorAddress.Fields().ByName("validatorAddress") + fd_MsgAddValidatorOperatorAddress_operatorAddress = md_MsgAddValidatorOperatorAddress.Fields().ByName("operatorAddress") +} + +var _ protoreflect.Message = (*fastReflection_MsgAddValidatorOperatorAddress)(nil) + +type fastReflection_MsgAddValidatorOperatorAddress MsgAddValidatorOperatorAddress + +func (x *MsgAddValidatorOperatorAddress) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgAddValidatorOperatorAddress)(x) +} + +func (x *MsgAddValidatorOperatorAddress) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_proto_msgTypes[4] + 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) +} + +var _fastReflection_MsgAddValidatorOperatorAddress_messageType fastReflection_MsgAddValidatorOperatorAddress_messageType +var _ protoreflect.MessageType = fastReflection_MsgAddValidatorOperatorAddress_messageType{} + +type fastReflection_MsgAddValidatorOperatorAddress_messageType struct{} + +func (x fastReflection_MsgAddValidatorOperatorAddress_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgAddValidatorOperatorAddress)(nil) +} +func (x fastReflection_MsgAddValidatorOperatorAddress_messageType) New() protoreflect.Message { + return new(fastReflection_MsgAddValidatorOperatorAddress) +} +func (x fastReflection_MsgAddValidatorOperatorAddress_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgAddValidatorOperatorAddress +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Descriptor() protoreflect.MessageDescriptor { + return md_MsgAddValidatorOperatorAddress +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Type() protoreflect.MessageType { + return _fastReflection_MsgAddValidatorOperatorAddress_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgAddValidatorOperatorAddress) New() protoreflect.Message { + return new(fastReflection_MsgAddValidatorOperatorAddress) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Interface() protoreflect.ProtoMessage { + return (*MsgAddValidatorOperatorAddress)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ValidatorAddress != "" { + value := protoreflect.ValueOfString(x.ValidatorAddress) + if !f(fd_MsgAddValidatorOperatorAddress_validatorAddress, value) { + return + } + } + if x.OperatorAddress != "" { + value := protoreflect.ValueOfString(x.OperatorAddress) + if !f(fd_MsgAddValidatorOperatorAddress_operatorAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.MsgAddValidatorOperatorAddress.validatorAddress": + return x.ValidatorAddress != "" + case "network.profile.v1.MsgAddValidatorOperatorAddress.operatorAddress": + return x.OperatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.MsgAddValidatorOperatorAddress.validatorAddress": + x.ValidatorAddress = "" + case "network.profile.v1.MsgAddValidatorOperatorAddress.operatorAddress": + x.OperatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.MsgAddValidatorOperatorAddress.validatorAddress": + value := x.ValidatorAddress + return protoreflect.ValueOfString(value) + case "network.profile.v1.MsgAddValidatorOperatorAddress.operatorAddress": + value := x.OperatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddress does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.MsgAddValidatorOperatorAddress.validatorAddress": + x.ValidatorAddress = value.Interface().(string) + case "network.profile.v1.MsgAddValidatorOperatorAddress.operatorAddress": + x.OperatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgAddValidatorOperatorAddress) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgAddValidatorOperatorAddress.validatorAddress": + panic(fmt.Errorf("field validatorAddress of message network.profile.v1.MsgAddValidatorOperatorAddress is not mutable")) + case "network.profile.v1.MsgAddValidatorOperatorAddress.operatorAddress": + panic(fmt.Errorf("field operatorAddress of message network.profile.v1.MsgAddValidatorOperatorAddress is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgAddValidatorOperatorAddress) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgAddValidatorOperatorAddress.validatorAddress": + return protoreflect.ValueOfString("") + case "network.profile.v1.MsgAddValidatorOperatorAddress.operatorAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgAddValidatorOperatorAddress) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgAddValidatorOperatorAddress", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgAddValidatorOperatorAddress) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgAddValidatorOperatorAddress) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgAddValidatorOperatorAddress) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgAddValidatorOperatorAddress) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgAddValidatorOperatorAddress) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ValidatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.OperatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgAddValidatorOperatorAddress) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.OperatorAddress) > 0 { + i -= len(x.OperatorAddress) + copy(dAtA[i:], x.OperatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OperatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(x.ValidatorAddress) > 0 { + i -= len(x.ValidatorAddress) + copy(dAtA[i:], x.ValidatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgAddValidatorOperatorAddress) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgAddValidatorOperatorAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgAddValidatorOperatorAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OperatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.OperatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgAddValidatorOperatorAddressResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgAddValidatorOperatorAddressResponse = File_network_profile_v1_tx_proto.Messages().ByName("MsgAddValidatorOperatorAddressResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgAddValidatorOperatorAddressResponse)(nil) + +type fastReflection_MsgAddValidatorOperatorAddressResponse MsgAddValidatorOperatorAddressResponse + +func (x *MsgAddValidatorOperatorAddressResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgAddValidatorOperatorAddressResponse)(x) +} + +func (x *MsgAddValidatorOperatorAddressResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_proto_msgTypes[5] + 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) +} + +var _fastReflection_MsgAddValidatorOperatorAddressResponse_messageType fastReflection_MsgAddValidatorOperatorAddressResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgAddValidatorOperatorAddressResponse_messageType{} + +type fastReflection_MsgAddValidatorOperatorAddressResponse_messageType struct{} + +func (x fastReflection_MsgAddValidatorOperatorAddressResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgAddValidatorOperatorAddressResponse)(nil) +} +func (x fastReflection_MsgAddValidatorOperatorAddressResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgAddValidatorOperatorAddressResponse) +} +func (x fastReflection_MsgAddValidatorOperatorAddressResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgAddValidatorOperatorAddressResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgAddValidatorOperatorAddressResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgAddValidatorOperatorAddressResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) New() protoreflect.Message { + return new(fastReflection_MsgAddValidatorOperatorAddressResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Interface() protoreflect.ProtoMessage { + return (*MsgAddValidatorOperatorAddressResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddressResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgAddValidatorOperatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgAddValidatorOperatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgAddValidatorOperatorAddressResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgAddValidatorOperatorAddressResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgAddValidatorOperatorAddressResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgAddValidatorOperatorAddressResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgAddValidatorOperatorAddressResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgAddValidatorOperatorAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgAddValidatorOperatorAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgCreateCoordinator protoreflect.MessageDescriptor + fd_MsgCreateCoordinator_address protoreflect.FieldDescriptor + fd_MsgCreateCoordinator_description protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgCreateCoordinator = File_network_profile_v1_tx_proto.Messages().ByName("MsgCreateCoordinator") + fd_MsgCreateCoordinator_address = md_MsgCreateCoordinator.Fields().ByName("address") + fd_MsgCreateCoordinator_description = md_MsgCreateCoordinator.Fields().ByName("description") +} + +var _ protoreflect.Message = (*fastReflection_MsgCreateCoordinator)(nil) + +type fastReflection_MsgCreateCoordinator MsgCreateCoordinator + +func (x *MsgCreateCoordinator) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgCreateCoordinator)(x) +} + +func (x *MsgCreateCoordinator) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_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) +} + +var _fastReflection_MsgCreateCoordinator_messageType fastReflection_MsgCreateCoordinator_messageType +var _ protoreflect.MessageType = fastReflection_MsgCreateCoordinator_messageType{} + +type fastReflection_MsgCreateCoordinator_messageType struct{} + +func (x fastReflection_MsgCreateCoordinator_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgCreateCoordinator)(nil) +} +func (x fastReflection_MsgCreateCoordinator_messageType) New() protoreflect.Message { + return new(fastReflection_MsgCreateCoordinator) +} +func (x fastReflection_MsgCreateCoordinator_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateCoordinator +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgCreateCoordinator) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateCoordinator +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgCreateCoordinator) Type() protoreflect.MessageType { + return _fastReflection_MsgCreateCoordinator_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgCreateCoordinator) New() protoreflect.Message { + return new(fastReflection_MsgCreateCoordinator) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgCreateCoordinator) Interface() protoreflect.ProtoMessage { + return (*MsgCreateCoordinator)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgCreateCoordinator) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_MsgCreateCoordinator_address, value) { + return + } + } + if x.Description != nil { + value := protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + if !f(fd_MsgCreateCoordinator_description, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgCreateCoordinator) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinator.address": + return x.Address != "" + case "network.profile.v1.MsgCreateCoordinator.description": + return x.Description != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinator does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateCoordinator) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinator.address": + x.Address = "" + case "network.profile.v1.MsgCreateCoordinator.description": + x.Description = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinator does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgCreateCoordinator) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.MsgCreateCoordinator.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.MsgCreateCoordinator.description": + value := x.Description + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinator does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateCoordinator) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinator.address": + x.Address = value.Interface().(string) + case "network.profile.v1.MsgCreateCoordinator.description": + x.Description = value.Message().Interface().(*CoordinatorDescription) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinator does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateCoordinator) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinator.description": + if x.Description == nil { + x.Description = new(CoordinatorDescription) + } + return protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + case "network.profile.v1.MsgCreateCoordinator.address": + panic(fmt.Errorf("field address of message network.profile.v1.MsgCreateCoordinator is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinator does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgCreateCoordinator) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinator.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.MsgCreateCoordinator.description": + m := new(CoordinatorDescription) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinator does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgCreateCoordinator) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgCreateCoordinator", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgCreateCoordinator) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateCoordinator) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgCreateCoordinator) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgCreateCoordinator) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgCreateCoordinator) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Description != nil { + l = options.Size(x.Description) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateCoordinator) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Description != nil { + encoded, err := options.Marshal(x.Description) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateCoordinator) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateCoordinator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateCoordinator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Description == nil { + x.Description = &CoordinatorDescription{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Description); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgCreateCoordinatorResponse protoreflect.MessageDescriptor + fd_MsgCreateCoordinatorResponse_coordinatorID protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgCreateCoordinatorResponse = File_network_profile_v1_tx_proto.Messages().ByName("MsgCreateCoordinatorResponse") + fd_MsgCreateCoordinatorResponse_coordinatorID = md_MsgCreateCoordinatorResponse.Fields().ByName("coordinatorID") +} + +var _ protoreflect.Message = (*fastReflection_MsgCreateCoordinatorResponse)(nil) + +type fastReflection_MsgCreateCoordinatorResponse MsgCreateCoordinatorResponse + +func (x *MsgCreateCoordinatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgCreateCoordinatorResponse)(x) +} + +func (x *MsgCreateCoordinatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_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) +} + +var _fastReflection_MsgCreateCoordinatorResponse_messageType fastReflection_MsgCreateCoordinatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgCreateCoordinatorResponse_messageType{} + +type fastReflection_MsgCreateCoordinatorResponse_messageType struct{} + +func (x fastReflection_MsgCreateCoordinatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgCreateCoordinatorResponse)(nil) +} +func (x fastReflection_MsgCreateCoordinatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgCreateCoordinatorResponse) +} +func (x fastReflection_MsgCreateCoordinatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateCoordinatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgCreateCoordinatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateCoordinatorResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgCreateCoordinatorResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgCreateCoordinatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgCreateCoordinatorResponse) New() protoreflect.Message { + return new(fastReflection_MsgCreateCoordinatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgCreateCoordinatorResponse) Interface() protoreflect.ProtoMessage { + return (*MsgCreateCoordinatorResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgCreateCoordinatorResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_MsgCreateCoordinatorResponse_coordinatorID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgCreateCoordinatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinatorResponse.coordinatorID": + return x.CoordinatorID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateCoordinatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinatorResponse.coordinatorID": + x.CoordinatorID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgCreateCoordinatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.MsgCreateCoordinatorResponse.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinatorResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateCoordinatorResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinatorResponse.coordinatorID": + x.CoordinatorID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateCoordinatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinatorResponse.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.profile.v1.MsgCreateCoordinatorResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgCreateCoordinatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgCreateCoordinatorResponse.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgCreateCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgCreateCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgCreateCoordinatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgCreateCoordinatorResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgCreateCoordinatorResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateCoordinatorResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgCreateCoordinatorResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgCreateCoordinatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgCreateCoordinatorResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateCoordinatorResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateCoordinatorResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateCoordinatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateCoordinatorDescription protoreflect.MessageDescriptor + fd_MsgUpdateCoordinatorDescription_address protoreflect.FieldDescriptor + fd_MsgUpdateCoordinatorDescription_description protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgUpdateCoordinatorDescription = File_network_profile_v1_tx_proto.Messages().ByName("MsgUpdateCoordinatorDescription") + fd_MsgUpdateCoordinatorDescription_address = md_MsgUpdateCoordinatorDescription.Fields().ByName("address") + fd_MsgUpdateCoordinatorDescription_description = md_MsgUpdateCoordinatorDescription.Fields().ByName("description") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateCoordinatorDescription)(nil) + +type fastReflection_MsgUpdateCoordinatorDescription MsgUpdateCoordinatorDescription + +func (x *MsgUpdateCoordinatorDescription) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateCoordinatorDescription)(x) +} + +func (x *MsgUpdateCoordinatorDescription) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_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) +} + +var _fastReflection_MsgUpdateCoordinatorDescription_messageType fastReflection_MsgUpdateCoordinatorDescription_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateCoordinatorDescription_messageType{} + +type fastReflection_MsgUpdateCoordinatorDescription_messageType struct{} + +func (x fastReflection_MsgUpdateCoordinatorDescription_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateCoordinatorDescription)(nil) +} +func (x fastReflection_MsgUpdateCoordinatorDescription_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateCoordinatorDescription) +} +func (x fastReflection_MsgUpdateCoordinatorDescription_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateCoordinatorDescription +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateCoordinatorDescription +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateCoordinatorDescription_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateCoordinatorDescription) New() protoreflect.Message { + return new(fastReflection_MsgUpdateCoordinatorDescription) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateCoordinatorDescription)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_MsgUpdateCoordinatorDescription_address, value) { + return + } + } + if x.Description != nil { + value := protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + if !f(fd_MsgUpdateCoordinatorDescription_description, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorDescription.address": + return x.Address != "" + case "network.profile.v1.MsgUpdateCoordinatorDescription.description": + return x.Description != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorDescription.address": + x.Address = "" + case "network.profile.v1.MsgUpdateCoordinatorDescription.description": + x.Description = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorDescription.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.MsgUpdateCoordinatorDescription.description": + value := x.Description + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescription does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorDescription.address": + x.Address = value.Interface().(string) + case "network.profile.v1.MsgUpdateCoordinatorDescription.description": + x.Description = value.Message().Interface().(*CoordinatorDescription) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorDescription) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorDescription.description": + if x.Description == nil { + x.Description = new(CoordinatorDescription) + } + return protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + case "network.profile.v1.MsgUpdateCoordinatorDescription.address": + panic(fmt.Errorf("field address of message network.profile.v1.MsgUpdateCoordinatorDescription is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateCoordinatorDescription) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorDescription.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.MsgUpdateCoordinatorDescription.description": + m := new(CoordinatorDescription) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescription does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateCoordinatorDescription) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgUpdateCoordinatorDescription", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateCoordinatorDescription) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorDescription) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateCoordinatorDescription) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateCoordinatorDescription) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateCoordinatorDescription) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Description != nil { + l = options.Size(x.Description) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateCoordinatorDescription) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Description != nil { + encoded, err := options.Marshal(x.Description) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateCoordinatorDescription) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateCoordinatorDescription: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateCoordinatorDescription: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Description == nil { + x.Description = &CoordinatorDescription{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Description); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateCoordinatorDescriptionResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgUpdateCoordinatorDescriptionResponse = File_network_profile_v1_tx_proto.Messages().ByName("MsgUpdateCoordinatorDescriptionResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateCoordinatorDescriptionResponse)(nil) + +type fastReflection_MsgUpdateCoordinatorDescriptionResponse MsgUpdateCoordinatorDescriptionResponse + +func (x *MsgUpdateCoordinatorDescriptionResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateCoordinatorDescriptionResponse)(x) +} + +func (x *MsgUpdateCoordinatorDescriptionResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_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) +} + +var _fastReflection_MsgUpdateCoordinatorDescriptionResponse_messageType fastReflection_MsgUpdateCoordinatorDescriptionResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateCoordinatorDescriptionResponse_messageType{} + +type fastReflection_MsgUpdateCoordinatorDescriptionResponse_messageType struct{} + +func (x fastReflection_MsgUpdateCoordinatorDescriptionResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateCoordinatorDescriptionResponse)(nil) +} +func (x fastReflection_MsgUpdateCoordinatorDescriptionResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateCoordinatorDescriptionResponse) +} +func (x fastReflection_MsgUpdateCoordinatorDescriptionResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateCoordinatorDescriptionResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateCoordinatorDescriptionResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateCoordinatorDescriptionResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateCoordinatorDescriptionResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateCoordinatorDescriptionResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescriptionResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorDescriptionResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorDescriptionResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgUpdateCoordinatorDescriptionResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateCoordinatorDescriptionResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateCoordinatorDescriptionResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateCoordinatorDescriptionResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateCoordinatorDescriptionResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateCoordinatorDescriptionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateCoordinatorDescriptionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateCoordinatorAddress protoreflect.MessageDescriptor + fd_MsgUpdateCoordinatorAddress_address protoreflect.FieldDescriptor + fd_MsgUpdateCoordinatorAddress_newAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgUpdateCoordinatorAddress = File_network_profile_v1_tx_proto.Messages().ByName("MsgUpdateCoordinatorAddress") + fd_MsgUpdateCoordinatorAddress_address = md_MsgUpdateCoordinatorAddress.Fields().ByName("address") + fd_MsgUpdateCoordinatorAddress_newAddress = md_MsgUpdateCoordinatorAddress.Fields().ByName("newAddress") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateCoordinatorAddress)(nil) + +type fastReflection_MsgUpdateCoordinatorAddress MsgUpdateCoordinatorAddress + +func (x *MsgUpdateCoordinatorAddress) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateCoordinatorAddress)(x) +} + +func (x *MsgUpdateCoordinatorAddress) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_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) +} + +var _fastReflection_MsgUpdateCoordinatorAddress_messageType fastReflection_MsgUpdateCoordinatorAddress_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateCoordinatorAddress_messageType{} + +type fastReflection_MsgUpdateCoordinatorAddress_messageType struct{} + +func (x fastReflection_MsgUpdateCoordinatorAddress_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateCoordinatorAddress)(nil) +} +func (x fastReflection_MsgUpdateCoordinatorAddress_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateCoordinatorAddress) +} +func (x fastReflection_MsgUpdateCoordinatorAddress_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateCoordinatorAddress +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateCoordinatorAddress +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateCoordinatorAddress_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateCoordinatorAddress) New() protoreflect.Message { + return new(fastReflection_MsgUpdateCoordinatorAddress) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateCoordinatorAddress)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_MsgUpdateCoordinatorAddress_address, value) { + return + } + } + if x.NewAddress != "" { + value := protoreflect.ValueOfString(x.NewAddress) + if !f(fd_MsgUpdateCoordinatorAddress_newAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorAddress.address": + return x.Address != "" + case "network.profile.v1.MsgUpdateCoordinatorAddress.newAddress": + return x.NewAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddress does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorAddress.address": + x.Address = "" + case "network.profile.v1.MsgUpdateCoordinatorAddress.newAddress": + x.NewAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddress does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorAddress.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.MsgUpdateCoordinatorAddress.newAddress": + value := x.NewAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddress does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorAddress.address": + x.Address = value.Interface().(string) + case "network.profile.v1.MsgUpdateCoordinatorAddress.newAddress": + x.NewAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddress does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorAddress) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorAddress.address": + panic(fmt.Errorf("field address of message network.profile.v1.MsgUpdateCoordinatorAddress is not mutable")) + case "network.profile.v1.MsgUpdateCoordinatorAddress.newAddress": + panic(fmt.Errorf("field newAddress of message network.profile.v1.MsgUpdateCoordinatorAddress is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddress does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateCoordinatorAddress) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgUpdateCoordinatorAddress.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.MsgUpdateCoordinatorAddress.newAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddress does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateCoordinatorAddress) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgUpdateCoordinatorAddress", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateCoordinatorAddress) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorAddress) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateCoordinatorAddress) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateCoordinatorAddress) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateCoordinatorAddress) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.NewAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateCoordinatorAddress) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.NewAddress) > 0 { + i -= len(x.NewAddress) + copy(dAtA[i:], x.NewAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NewAddress))) + i-- + dAtA[i] = 0x12 + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateCoordinatorAddress) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateCoordinatorAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateCoordinatorAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NewAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateCoordinatorAddressResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgUpdateCoordinatorAddressResponse = File_network_profile_v1_tx_proto.Messages().ByName("MsgUpdateCoordinatorAddressResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateCoordinatorAddressResponse)(nil) + +type fastReflection_MsgUpdateCoordinatorAddressResponse MsgUpdateCoordinatorAddressResponse + +func (x *MsgUpdateCoordinatorAddressResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateCoordinatorAddressResponse)(x) +} + +func (x *MsgUpdateCoordinatorAddressResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_proto_msgTypes[11] + 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) +} + +var _fastReflection_MsgUpdateCoordinatorAddressResponse_messageType fastReflection_MsgUpdateCoordinatorAddressResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateCoordinatorAddressResponse_messageType{} + +type fastReflection_MsgUpdateCoordinatorAddressResponse_messageType struct{} + +func (x fastReflection_MsgUpdateCoordinatorAddressResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateCoordinatorAddressResponse)(nil) +} +func (x fastReflection_MsgUpdateCoordinatorAddressResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateCoordinatorAddressResponse) +} +func (x fastReflection_MsgUpdateCoordinatorAddressResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateCoordinatorAddressResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateCoordinatorAddressResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateCoordinatorAddressResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateCoordinatorAddressResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateCoordinatorAddressResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddressResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgUpdateCoordinatorAddressResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgUpdateCoordinatorAddressResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgUpdateCoordinatorAddressResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateCoordinatorAddressResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateCoordinatorAddressResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateCoordinatorAddressResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateCoordinatorAddressResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateCoordinatorAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateCoordinatorAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgDisableCoordinator protoreflect.MessageDescriptor + fd_MsgDisableCoordinator_address protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgDisableCoordinator = File_network_profile_v1_tx_proto.Messages().ByName("MsgDisableCoordinator") + fd_MsgDisableCoordinator_address = md_MsgDisableCoordinator.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_MsgDisableCoordinator)(nil) + +type fastReflection_MsgDisableCoordinator MsgDisableCoordinator + +func (x *MsgDisableCoordinator) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgDisableCoordinator)(x) +} + +func (x *MsgDisableCoordinator) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_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) +} + +var _fastReflection_MsgDisableCoordinator_messageType fastReflection_MsgDisableCoordinator_messageType +var _ protoreflect.MessageType = fastReflection_MsgDisableCoordinator_messageType{} + +type fastReflection_MsgDisableCoordinator_messageType struct{} + +func (x fastReflection_MsgDisableCoordinator_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgDisableCoordinator)(nil) +} +func (x fastReflection_MsgDisableCoordinator_messageType) New() protoreflect.Message { + return new(fastReflection_MsgDisableCoordinator) +} +func (x fastReflection_MsgDisableCoordinator_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgDisableCoordinator +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgDisableCoordinator) Descriptor() protoreflect.MessageDescriptor { + return md_MsgDisableCoordinator +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgDisableCoordinator) Type() protoreflect.MessageType { + return _fastReflection_MsgDisableCoordinator_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgDisableCoordinator) New() protoreflect.Message { + return new(fastReflection_MsgDisableCoordinator) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgDisableCoordinator) Interface() protoreflect.ProtoMessage { + return (*MsgDisableCoordinator)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgDisableCoordinator) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_MsgDisableCoordinator_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgDisableCoordinator) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.MsgDisableCoordinator.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinator does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgDisableCoordinator) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.MsgDisableCoordinator.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinator does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgDisableCoordinator) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.MsgDisableCoordinator.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinator does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgDisableCoordinator) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.MsgDisableCoordinator.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinator does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgDisableCoordinator) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgDisableCoordinator.address": + panic(fmt.Errorf("field address of message network.profile.v1.MsgDisableCoordinator is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinator does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgDisableCoordinator) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.MsgDisableCoordinator.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinator")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinator does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgDisableCoordinator) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgDisableCoordinator", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgDisableCoordinator) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgDisableCoordinator) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgDisableCoordinator) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgDisableCoordinator) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgDisableCoordinator) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgDisableCoordinator) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgDisableCoordinator) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgDisableCoordinator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgDisableCoordinator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgDisableCoordinatorResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_profile_v1_tx_proto_init() + md_MsgDisableCoordinatorResponse = File_network_profile_v1_tx_proto.Messages().ByName("MsgDisableCoordinatorResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgDisableCoordinatorResponse)(nil) + +type fastReflection_MsgDisableCoordinatorResponse MsgDisableCoordinatorResponse + +func (x *MsgDisableCoordinatorResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgDisableCoordinatorResponse)(x) +} + +func (x *MsgDisableCoordinatorResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_tx_proto_msgTypes[13] + 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) +} + +var _fastReflection_MsgDisableCoordinatorResponse_messageType fastReflection_MsgDisableCoordinatorResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgDisableCoordinatorResponse_messageType{} + +type fastReflection_MsgDisableCoordinatorResponse_messageType struct{} + +func (x fastReflection_MsgDisableCoordinatorResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgDisableCoordinatorResponse)(nil) +} +func (x fastReflection_MsgDisableCoordinatorResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgDisableCoordinatorResponse) +} +func (x fastReflection_MsgDisableCoordinatorResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgDisableCoordinatorResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgDisableCoordinatorResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgDisableCoordinatorResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgDisableCoordinatorResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgDisableCoordinatorResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgDisableCoordinatorResponse) New() protoreflect.Message { + return new(fastReflection_MsgDisableCoordinatorResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgDisableCoordinatorResponse) Interface() protoreflect.ProtoMessage { + return (*MsgDisableCoordinatorResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgDisableCoordinatorResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgDisableCoordinatorResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgDisableCoordinatorResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgDisableCoordinatorResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinatorResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgDisableCoordinatorResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgDisableCoordinatorResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgDisableCoordinatorResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.MsgDisableCoordinatorResponse")) + } + panic(fmt.Errorf("message network.profile.v1.MsgDisableCoordinatorResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgDisableCoordinatorResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.MsgDisableCoordinatorResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgDisableCoordinatorResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgDisableCoordinatorResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgDisableCoordinatorResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgDisableCoordinatorResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgDisableCoordinatorResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgDisableCoordinatorResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgDisableCoordinatorResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgDisableCoordinatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgDisableCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/profile/v1/tx.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *MsgUpdateParams) Reset() { + *x = MsgUpdateParams{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParams) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgUpdateParams) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +func (x *MsgUpdateParams) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateParamsResponse) Reset() { + *x = MsgUpdateParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParamsResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{1} +} + +type MsgUpdateValidatorDescription struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Description *ValidatorDescription `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *MsgUpdateValidatorDescription) Reset() { + *x = MsgUpdateValidatorDescription{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateValidatorDescription) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateValidatorDescription) ProtoMessage() {} + +// Deprecated: Use MsgUpdateValidatorDescription.ProtoReflect.Descriptor instead. +func (*MsgUpdateValidatorDescription) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{2} +} + +func (x *MsgUpdateValidatorDescription) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *MsgUpdateValidatorDescription) GetDescription() *ValidatorDescription { + if x != nil { + return x.Description + } + return nil +} + +type MsgUpdateValidatorDescriptionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateValidatorDescriptionResponse) Reset() { + *x = MsgUpdateValidatorDescriptionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateValidatorDescriptionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateValidatorDescriptionResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateValidatorDescriptionResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateValidatorDescriptionResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{3} +} + +type MsgAddValidatorOperatorAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ValidatorAddress string `protobuf:"bytes,1,opt,name=validatorAddress,proto3" json:"validatorAddress,omitempty"` + OperatorAddress string `protobuf:"bytes,2,opt,name=operatorAddress,proto3" json:"operatorAddress,omitempty"` +} + +func (x *MsgAddValidatorOperatorAddress) Reset() { + *x = MsgAddValidatorOperatorAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgAddValidatorOperatorAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgAddValidatorOperatorAddress) ProtoMessage() {} + +// Deprecated: Use MsgAddValidatorOperatorAddress.ProtoReflect.Descriptor instead. +func (*MsgAddValidatorOperatorAddress) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{4} +} + +func (x *MsgAddValidatorOperatorAddress) GetValidatorAddress() string { + if x != nil { + return x.ValidatorAddress + } + return "" +} + +func (x *MsgAddValidatorOperatorAddress) GetOperatorAddress() string { + if x != nil { + return x.OperatorAddress + } + return "" +} + +type MsgAddValidatorOperatorAddressResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgAddValidatorOperatorAddressResponse) Reset() { + *x = MsgAddValidatorOperatorAddressResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgAddValidatorOperatorAddressResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgAddValidatorOperatorAddressResponse) ProtoMessage() {} + +// Deprecated: Use MsgAddValidatorOperatorAddressResponse.ProtoReflect.Descriptor instead. +func (*MsgAddValidatorOperatorAddressResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{5} +} + +type MsgCreateCoordinator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Description *CoordinatorDescription `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *MsgCreateCoordinator) Reset() { + *x = MsgCreateCoordinator{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateCoordinator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateCoordinator) ProtoMessage() {} + +// Deprecated: Use MsgCreateCoordinator.ProtoReflect.Descriptor instead. +func (*MsgCreateCoordinator) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{6} +} + +func (x *MsgCreateCoordinator) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *MsgCreateCoordinator) GetDescription() *CoordinatorDescription { + if x != nil { + return x.Description + } + return nil +} + +type MsgCreateCoordinatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CoordinatorID uint64 `protobuf:"varint,1,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` +} + +func (x *MsgCreateCoordinatorResponse) Reset() { + *x = MsgCreateCoordinatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateCoordinatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateCoordinatorResponse) ProtoMessage() {} + +// Deprecated: Use MsgCreateCoordinatorResponse.ProtoReflect.Descriptor instead. +func (*MsgCreateCoordinatorResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{7} +} + +func (x *MsgCreateCoordinatorResponse) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +type MsgUpdateCoordinatorDescription struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Description *CoordinatorDescription `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *MsgUpdateCoordinatorDescription) Reset() { + *x = MsgUpdateCoordinatorDescription{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateCoordinatorDescription) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateCoordinatorDescription) ProtoMessage() {} + +// Deprecated: Use MsgUpdateCoordinatorDescription.ProtoReflect.Descriptor instead. +func (*MsgUpdateCoordinatorDescription) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{8} +} + +func (x *MsgUpdateCoordinatorDescription) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *MsgUpdateCoordinatorDescription) GetDescription() *CoordinatorDescription { + if x != nil { + return x.Description + } + return nil +} + +type MsgUpdateCoordinatorDescriptionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateCoordinatorDescriptionResponse) Reset() { + *x = MsgUpdateCoordinatorDescriptionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateCoordinatorDescriptionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateCoordinatorDescriptionResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateCoordinatorDescriptionResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateCoordinatorDescriptionResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{9} +} + +type MsgUpdateCoordinatorAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + NewAddress string `protobuf:"bytes,2,opt,name=newAddress,proto3" json:"newAddress,omitempty"` +} + +func (x *MsgUpdateCoordinatorAddress) Reset() { + *x = MsgUpdateCoordinatorAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateCoordinatorAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateCoordinatorAddress) ProtoMessage() {} + +// Deprecated: Use MsgUpdateCoordinatorAddress.ProtoReflect.Descriptor instead. +func (*MsgUpdateCoordinatorAddress) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{10} +} + +func (x *MsgUpdateCoordinatorAddress) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *MsgUpdateCoordinatorAddress) GetNewAddress() string { + if x != nil { + return x.NewAddress + } + return "" +} + +type MsgUpdateCoordinatorAddressResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateCoordinatorAddressResponse) Reset() { + *x = MsgUpdateCoordinatorAddressResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateCoordinatorAddressResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateCoordinatorAddressResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateCoordinatorAddressResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateCoordinatorAddressResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{11} +} + +type MsgDisableCoordinator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *MsgDisableCoordinator) Reset() { + *x = MsgDisableCoordinator{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgDisableCoordinator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgDisableCoordinator) ProtoMessage() {} + +// Deprecated: Use MsgDisableCoordinator.ProtoReflect.Descriptor instead. +func (*MsgDisableCoordinator) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{12} +} + +func (x *MsgDisableCoordinator) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type MsgDisableCoordinatorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgDisableCoordinatorResponse) Reset() { + *x = MsgDisableCoordinatorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_tx_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgDisableCoordinatorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgDisableCoordinatorResponse) ProtoMessage() {} + +// Deprecated: Use MsgDisableCoordinatorResponse.ProtoReflect.Descriptor instead. +func (*MsgDisableCoordinatorResponse) Descriptor() ([]byte, []int) { + return file_network_profile_v1_tx_proto_rawDescGZIP(), []int{13} +} + +var File_network_profile_v1_tx_proto protoreflect.FileDescriptor + +var file_network_profile_v1_tx_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbe, 0x01, 0x0a, 0x0f, 0x4d, 0x73, + 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x36, 0x0a, + 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x34, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x21, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x78, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, + 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x1d, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x0c, 0x82, + 0xe7, 0xb0, 0x2a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x27, 0x0a, 0x25, 0x4d, + 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x1e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x15, 0x82, + 0xe7, 0xb0, 0x2a, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x22, 0x28, 0x0a, 0x26, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xac, + 0x01, 0x0a, 0x14, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x52, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, + 0x0c, 0x82, 0xe7, 0xb0, 0x2a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x44, 0x0a, + 0x1c, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, + 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x49, 0x44, 0x22, 0xb7, 0x01, 0x0a, 0x1f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x52, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, + 0x0c, 0x82, 0xe7, 0xb0, 0x2a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x29, 0x0a, + 0x27, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x4d, 0x73, 0x67, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0a, + 0x6e, 0x65, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x0c, 0x82, 0xe7, 0xb0, 0x2a, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x22, 0x25, 0x0a, 0x23, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x15, 0x4d, + 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x0c, 0x82, 0xe7, 0xb0, 0x2a, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8a, 0x07, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, + 0x60, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x31, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8d, + 0x01, 0x0a, 0x1b, 0x41, 0x64, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x1a, 0x3a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, + 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x30, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x90, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x33, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x2f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x1a, 0x37, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x12, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x29, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x31, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, + 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xc7, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, + 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_profile_v1_tx_proto_rawDescOnce sync.Once + file_network_profile_v1_tx_proto_rawDescData = file_network_profile_v1_tx_proto_rawDesc +) + +func file_network_profile_v1_tx_proto_rawDescGZIP() []byte { + file_network_profile_v1_tx_proto_rawDescOnce.Do(func() { + file_network_profile_v1_tx_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_profile_v1_tx_proto_rawDescData) + }) + return file_network_profile_v1_tx_proto_rawDescData +} + +var file_network_profile_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_network_profile_v1_tx_proto_goTypes = []interface{}{ + (*MsgUpdateParams)(nil), // 0: network.profile.v1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 1: network.profile.v1.MsgUpdateParamsResponse + (*MsgUpdateValidatorDescription)(nil), // 2: network.profile.v1.MsgUpdateValidatorDescription + (*MsgUpdateValidatorDescriptionResponse)(nil), // 3: network.profile.v1.MsgUpdateValidatorDescriptionResponse + (*MsgAddValidatorOperatorAddress)(nil), // 4: network.profile.v1.MsgAddValidatorOperatorAddress + (*MsgAddValidatorOperatorAddressResponse)(nil), // 5: network.profile.v1.MsgAddValidatorOperatorAddressResponse + (*MsgCreateCoordinator)(nil), // 6: network.profile.v1.MsgCreateCoordinator + (*MsgCreateCoordinatorResponse)(nil), // 7: network.profile.v1.MsgCreateCoordinatorResponse + (*MsgUpdateCoordinatorDescription)(nil), // 8: network.profile.v1.MsgUpdateCoordinatorDescription + (*MsgUpdateCoordinatorDescriptionResponse)(nil), // 9: network.profile.v1.MsgUpdateCoordinatorDescriptionResponse + (*MsgUpdateCoordinatorAddress)(nil), // 10: network.profile.v1.MsgUpdateCoordinatorAddress + (*MsgUpdateCoordinatorAddressResponse)(nil), // 11: network.profile.v1.MsgUpdateCoordinatorAddressResponse + (*MsgDisableCoordinator)(nil), // 12: network.profile.v1.MsgDisableCoordinator + (*MsgDisableCoordinatorResponse)(nil), // 13: network.profile.v1.MsgDisableCoordinatorResponse + (*Params)(nil), // 14: network.profile.v1.Params + (*ValidatorDescription)(nil), // 15: network.profile.v1.ValidatorDescription + (*CoordinatorDescription)(nil), // 16: network.profile.v1.CoordinatorDescription +} +var file_network_profile_v1_tx_proto_depIdxs = []int32{ + 14, // 0: network.profile.v1.MsgUpdateParams.params:type_name -> network.profile.v1.Params + 15, // 1: network.profile.v1.MsgUpdateValidatorDescription.description:type_name -> network.profile.v1.ValidatorDescription + 16, // 2: network.profile.v1.MsgCreateCoordinator.description:type_name -> network.profile.v1.CoordinatorDescription + 16, // 3: network.profile.v1.MsgUpdateCoordinatorDescription.description:type_name -> network.profile.v1.CoordinatorDescription + 0, // 4: network.profile.v1.Msg.UpdateParams:input_type -> network.profile.v1.MsgUpdateParams + 2, // 5: network.profile.v1.Msg.UpdateValidatorDescription:input_type -> network.profile.v1.MsgUpdateValidatorDescription + 4, // 6: network.profile.v1.Msg.AddValidatorOperatorAddress:input_type -> network.profile.v1.MsgAddValidatorOperatorAddress + 6, // 7: network.profile.v1.Msg.CreateCoordinator:input_type -> network.profile.v1.MsgCreateCoordinator + 8, // 8: network.profile.v1.Msg.UpdateCoordinatorDescription:input_type -> network.profile.v1.MsgUpdateCoordinatorDescription + 10, // 9: network.profile.v1.Msg.UpdateCoordinatorAddress:input_type -> network.profile.v1.MsgUpdateCoordinatorAddress + 12, // 10: network.profile.v1.Msg.DisableCoordinator:input_type -> network.profile.v1.MsgDisableCoordinator + 1, // 11: network.profile.v1.Msg.UpdateParams:output_type -> network.profile.v1.MsgUpdateParamsResponse + 3, // 12: network.profile.v1.Msg.UpdateValidatorDescription:output_type -> network.profile.v1.MsgUpdateValidatorDescriptionResponse + 5, // 13: network.profile.v1.Msg.AddValidatorOperatorAddress:output_type -> network.profile.v1.MsgAddValidatorOperatorAddressResponse + 7, // 14: network.profile.v1.Msg.CreateCoordinator:output_type -> network.profile.v1.MsgCreateCoordinatorResponse + 9, // 15: network.profile.v1.Msg.UpdateCoordinatorDescription:output_type -> network.profile.v1.MsgUpdateCoordinatorDescriptionResponse + 11, // 16: network.profile.v1.Msg.UpdateCoordinatorAddress:output_type -> network.profile.v1.MsgUpdateCoordinatorAddressResponse + 13, // 17: network.profile.v1.Msg.DisableCoordinator:output_type -> network.profile.v1.MsgDisableCoordinatorResponse + 11, // [11:18] is the sub-list for method output_type + 4, // [4:11] 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_network_profile_v1_tx_proto_init() } +func file_network_profile_v1_tx_proto_init() { + if File_network_profile_v1_tx_proto != nil { + return + } + file_network_profile_v1_coordinator_proto_init() + file_network_profile_v1_params_proto_init() + file_network_profile_v1_validator_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_profile_v1_tx_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateValidatorDescription); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateValidatorDescriptionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgAddValidatorOperatorAddress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgAddValidatorOperatorAddressResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgCreateCoordinator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgCreateCoordinatorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateCoordinatorDescription); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateCoordinatorDescriptionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateCoordinatorAddress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateCoordinatorAddressResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgDisableCoordinator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_tx_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgDisableCoordinatorResponse); 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_network_profile_v1_tx_proto_rawDesc, + NumEnums: 0, + NumMessages: 14, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_profile_v1_tx_proto_goTypes, + DependencyIndexes: file_network_profile_v1_tx_proto_depIdxs, + MessageInfos: file_network_profile_v1_tx_proto_msgTypes, + }.Build() + File_network_profile_v1_tx_proto = out.File + file_network_profile_v1_tx_proto_rawDesc = nil + file_network_profile_v1_tx_proto_goTypes = nil + file_network_profile_v1_tx_proto_depIdxs = nil +} diff --git a/api/network/profile/v1/tx_grpc.pb.go b/api/network/profile/v1/tx_grpc.pb.go new file mode 100644 index 00000000..7c720a28 --- /dev/null +++ b/api/network/profile/v1/tx_grpc.pb.go @@ -0,0 +1,335 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/profile/v1/tx.proto + +package profilev1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Msg_UpdateParams_FullMethodName = "/network.profile.v1.Msg/UpdateParams" + Msg_UpdateValidatorDescription_FullMethodName = "/network.profile.v1.Msg/UpdateValidatorDescription" + Msg_AddValidatorOperatorAddress_FullMethodName = "/network.profile.v1.Msg/AddValidatorOperatorAddress" + Msg_CreateCoordinator_FullMethodName = "/network.profile.v1.Msg/CreateCoordinator" + Msg_UpdateCoordinatorDescription_FullMethodName = "/network.profile.v1.Msg/UpdateCoordinatorDescription" + Msg_UpdateCoordinatorAddress_FullMethodName = "/network.profile.v1.Msg/UpdateCoordinatorAddress" + Msg_DisableCoordinator_FullMethodName = "/network.profile.v1.Msg/DisableCoordinator" +) + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + UpdateValidatorDescription(ctx context.Context, in *MsgUpdateValidatorDescription, opts ...grpc.CallOption) (*MsgUpdateValidatorDescriptionResponse, error) + AddValidatorOperatorAddress(ctx context.Context, in *MsgAddValidatorOperatorAddress, opts ...grpc.CallOption) (*MsgAddValidatorOperatorAddressResponse, error) + CreateCoordinator(ctx context.Context, in *MsgCreateCoordinator, opts ...grpc.CallOption) (*MsgCreateCoordinatorResponse, error) + UpdateCoordinatorDescription(ctx context.Context, in *MsgUpdateCoordinatorDescription, opts ...grpc.CallOption) (*MsgUpdateCoordinatorDescriptionResponse, error) + UpdateCoordinatorAddress(ctx context.Context, in *MsgUpdateCoordinatorAddress, opts ...grpc.CallOption) (*MsgUpdateCoordinatorAddressResponse, error) + DisableCoordinator(ctx context.Context, in *MsgDisableCoordinator, opts ...grpc.CallOption) (*MsgDisableCoordinatorResponse, error) +} + +type msgClient struct { + cc grpc.ClientConnInterface +} + +func NewMsgClient(cc grpc.ClientConnInterface) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, Msg_UpdateParams_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateValidatorDescription(ctx context.Context, in *MsgUpdateValidatorDescription, opts ...grpc.CallOption) (*MsgUpdateValidatorDescriptionResponse, error) { + out := new(MsgUpdateValidatorDescriptionResponse) + err := c.cc.Invoke(ctx, Msg_UpdateValidatorDescription_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) AddValidatorOperatorAddress(ctx context.Context, in *MsgAddValidatorOperatorAddress, opts ...grpc.CallOption) (*MsgAddValidatorOperatorAddressResponse, error) { + out := new(MsgAddValidatorOperatorAddressResponse) + err := c.cc.Invoke(ctx, Msg_AddValidatorOperatorAddress_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CreateCoordinator(ctx context.Context, in *MsgCreateCoordinator, opts ...grpc.CallOption) (*MsgCreateCoordinatorResponse, error) { + out := new(MsgCreateCoordinatorResponse) + err := c.cc.Invoke(ctx, Msg_CreateCoordinator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateCoordinatorDescription(ctx context.Context, in *MsgUpdateCoordinatorDescription, opts ...grpc.CallOption) (*MsgUpdateCoordinatorDescriptionResponse, error) { + out := new(MsgUpdateCoordinatorDescriptionResponse) + err := c.cc.Invoke(ctx, Msg_UpdateCoordinatorDescription_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateCoordinatorAddress(ctx context.Context, in *MsgUpdateCoordinatorAddress, opts ...grpc.CallOption) (*MsgUpdateCoordinatorAddressResponse, error) { + out := new(MsgUpdateCoordinatorAddressResponse) + err := c.cc.Invoke(ctx, Msg_UpdateCoordinatorAddress_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) DisableCoordinator(ctx context.Context, in *MsgDisableCoordinator, opts ...grpc.CallOption) (*MsgDisableCoordinatorResponse, error) { + out := new(MsgDisableCoordinatorResponse) + err := c.cc.Invoke(ctx, Msg_DisableCoordinator_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +// All implementations must embed UnimplementedMsgServer +// for forward compatibility +type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + UpdateValidatorDescription(context.Context, *MsgUpdateValidatorDescription) (*MsgUpdateValidatorDescriptionResponse, error) + AddValidatorOperatorAddress(context.Context, *MsgAddValidatorOperatorAddress) (*MsgAddValidatorOperatorAddressResponse, error) + CreateCoordinator(context.Context, *MsgCreateCoordinator) (*MsgCreateCoordinatorResponse, error) + UpdateCoordinatorDescription(context.Context, *MsgUpdateCoordinatorDescription) (*MsgUpdateCoordinatorDescriptionResponse, error) + UpdateCoordinatorAddress(context.Context, *MsgUpdateCoordinatorAddress) (*MsgUpdateCoordinatorAddressResponse, error) + DisableCoordinator(context.Context, *MsgDisableCoordinator) (*MsgDisableCoordinatorResponse, error) + mustEmbedUnimplementedMsgServer() +} + +// UnimplementedMsgServer must be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} +func (UnimplementedMsgServer) UpdateValidatorDescription(context.Context, *MsgUpdateValidatorDescription) (*MsgUpdateValidatorDescriptionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateValidatorDescription not implemented") +} +func (UnimplementedMsgServer) AddValidatorOperatorAddress(context.Context, *MsgAddValidatorOperatorAddress) (*MsgAddValidatorOperatorAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddValidatorOperatorAddress not implemented") +} +func (UnimplementedMsgServer) CreateCoordinator(context.Context, *MsgCreateCoordinator) (*MsgCreateCoordinatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateCoordinator not implemented") +} +func (UnimplementedMsgServer) UpdateCoordinatorDescription(context.Context, *MsgUpdateCoordinatorDescription) (*MsgUpdateCoordinatorDescriptionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateCoordinatorDescription not implemented") +} +func (UnimplementedMsgServer) UpdateCoordinatorAddress(context.Context, *MsgUpdateCoordinatorAddress) (*MsgUpdateCoordinatorAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateCoordinatorAddress not implemented") +} +func (UnimplementedMsgServer) DisableCoordinator(context.Context, *MsgDisableCoordinator) (*MsgDisableCoordinatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DisableCoordinator not implemented") +} +func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} + +// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MsgServer will +// result in compilation errors. +type UnsafeMsgServer interface { + mustEmbedUnimplementedMsgServer() +} + +func RegisterMsgServer(s grpc.ServiceRegistrar, srv MsgServer) { + s.RegisterService(&Msg_ServiceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateParams_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateValidatorDescription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateValidatorDescription) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateValidatorDescription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateValidatorDescription_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateValidatorDescription(ctx, req.(*MsgUpdateValidatorDescription)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_AddValidatorOperatorAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgAddValidatorOperatorAddress) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).AddValidatorOperatorAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_AddValidatorOperatorAddress_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).AddValidatorOperatorAddress(ctx, req.(*MsgAddValidatorOperatorAddress)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CreateCoordinator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateCoordinator) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateCoordinator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_CreateCoordinator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateCoordinator(ctx, req.(*MsgCreateCoordinator)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateCoordinatorDescription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateCoordinatorDescription) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateCoordinatorDescription(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateCoordinatorDescription_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateCoordinatorDescription(ctx, req.(*MsgUpdateCoordinatorDescription)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateCoordinatorAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateCoordinatorAddress) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateCoordinatorAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateCoordinatorAddress_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateCoordinatorAddress(ctx, req.(*MsgUpdateCoordinatorAddress)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_DisableCoordinator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDisableCoordinator) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).DisableCoordinator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_DisableCoordinator_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).DisableCoordinator(ctx, req.(*MsgDisableCoordinator)) + } + return interceptor(ctx, in, info, handler) +} + +// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Msg_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.profile.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + { + MethodName: "UpdateValidatorDescription", + Handler: _Msg_UpdateValidatorDescription_Handler, + }, + { + MethodName: "AddValidatorOperatorAddress", + Handler: _Msg_AddValidatorOperatorAddress_Handler, + }, + { + MethodName: "CreateCoordinator", + Handler: _Msg_CreateCoordinator_Handler, + }, + { + MethodName: "UpdateCoordinatorDescription", + Handler: _Msg_UpdateCoordinatorDescription_Handler, + }, + { + MethodName: "UpdateCoordinatorAddress", + Handler: _Msg_UpdateCoordinatorAddress_Handler, + }, + { + MethodName: "DisableCoordinator", + Handler: _Msg_DisableCoordinator_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/profile/v1/tx.proto", +} diff --git a/api/network/profile/v1/validator.pulsar.go b/api/network/profile/v1/validator.pulsar.go new file mode 100644 index 00000000..58a859d3 --- /dev/null +++ b/api/network/profile/v1/validator.pulsar.go @@ -0,0 +1,2119 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package profilev1 + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_Validator_2_list)(nil) + +type _Validator_2_list struct { + list *[]string +} + +func (x *_Validator_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Validator_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_Validator_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_Validator_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_Validator_2_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message Validator at list field OperatorAddresses as it is not of Message kind")) +} + +func (x *_Validator_2_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_Validator_2_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_Validator_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_Validator protoreflect.MessageDescriptor + fd_Validator_address protoreflect.FieldDescriptor + fd_Validator_operatorAddresses protoreflect.FieldDescriptor + fd_Validator_description protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_validator_proto_init() + md_Validator = File_network_profile_v1_validator_proto.Messages().ByName("Validator") + fd_Validator_address = md_Validator.Fields().ByName("address") + fd_Validator_operatorAddresses = md_Validator.Fields().ByName("operatorAddresses") + fd_Validator_description = md_Validator.Fields().ByName("description") +} + +var _ protoreflect.Message = (*fastReflection_Validator)(nil) + +type fastReflection_Validator Validator + +func (x *Validator) ProtoReflect() protoreflect.Message { + return (*fastReflection_Validator)(x) +} + +func (x *Validator) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_validator_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) +} + +var _fastReflection_Validator_messageType fastReflection_Validator_messageType +var _ protoreflect.MessageType = fastReflection_Validator_messageType{} + +type fastReflection_Validator_messageType struct{} + +func (x fastReflection_Validator_messageType) Zero() protoreflect.Message { + return (*fastReflection_Validator)(nil) +} +func (x fastReflection_Validator_messageType) New() protoreflect.Message { + return new(fastReflection_Validator) +} +func (x fastReflection_Validator_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Validator +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Validator) Descriptor() protoreflect.MessageDescriptor { + return md_Validator +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Validator) Type() protoreflect.MessageType { + return _fastReflection_Validator_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Validator) New() protoreflect.Message { + return new(fastReflection_Validator) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Validator) Interface() protoreflect.ProtoMessage { + return (*Validator)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Validator) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_Validator_address, value) { + return + } + } + if len(x.OperatorAddresses) != 0 { + value := protoreflect.ValueOfList(&_Validator_2_list{list: &x.OperatorAddresses}) + if !f(fd_Validator_operatorAddresses, value) { + return + } + } + if x.Description != nil { + value := protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + if !f(fd_Validator_description, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Validator) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.Validator.address": + return x.Address != "" + case "network.profile.v1.Validator.operatorAddresses": + return len(x.OperatorAddresses) != 0 + case "network.profile.v1.Validator.description": + return x.Description != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Validator")) + } + panic(fmt.Errorf("message network.profile.v1.Validator does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Validator) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.Validator.address": + x.Address = "" + case "network.profile.v1.Validator.operatorAddresses": + x.OperatorAddresses = nil + case "network.profile.v1.Validator.description": + x.Description = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Validator")) + } + panic(fmt.Errorf("message network.profile.v1.Validator does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Validator) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.Validator.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.profile.v1.Validator.operatorAddresses": + if len(x.OperatorAddresses) == 0 { + return protoreflect.ValueOfList(&_Validator_2_list{}) + } + listValue := &_Validator_2_list{list: &x.OperatorAddresses} + return protoreflect.ValueOfList(listValue) + case "network.profile.v1.Validator.description": + value := x.Description + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Validator")) + } + panic(fmt.Errorf("message network.profile.v1.Validator does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Validator) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.Validator.address": + x.Address = value.Interface().(string) + case "network.profile.v1.Validator.operatorAddresses": + lv := value.List() + clv := lv.(*_Validator_2_list) + x.OperatorAddresses = *clv.list + case "network.profile.v1.Validator.description": + x.Description = value.Message().Interface().(*ValidatorDescription) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Validator")) + } + panic(fmt.Errorf("message network.profile.v1.Validator does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Validator) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.Validator.operatorAddresses": + if x.OperatorAddresses == nil { + x.OperatorAddresses = []string{} + } + value := &_Validator_2_list{list: &x.OperatorAddresses} + return protoreflect.ValueOfList(value) + case "network.profile.v1.Validator.description": + if x.Description == nil { + x.Description = new(ValidatorDescription) + } + return protoreflect.ValueOfMessage(x.Description.ProtoReflect()) + case "network.profile.v1.Validator.address": + panic(fmt.Errorf("field address of message network.profile.v1.Validator is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Validator")) + } + panic(fmt.Errorf("message network.profile.v1.Validator does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Validator) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.Validator.address": + return protoreflect.ValueOfString("") + case "network.profile.v1.Validator.operatorAddresses": + list := []string{} + return protoreflect.ValueOfList(&_Validator_2_list{list: &list}) + case "network.profile.v1.Validator.description": + m := new(ValidatorDescription) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.Validator")) + } + panic(fmt.Errorf("message network.profile.v1.Validator does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Validator) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.Validator", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Validator) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Validator) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Validator) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Validator) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Validator) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.OperatorAddresses) > 0 { + for _, s := range x.OperatorAddresses { + l = len(s) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Description != nil { + l = options.Size(x.Description) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Validator) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Description != nil { + encoded, err := options.Marshal(x.Description) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.OperatorAddresses) > 0 { + for iNdEx := len(x.OperatorAddresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.OperatorAddresses[iNdEx]) + copy(dAtA[i:], x.OperatorAddresses[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OperatorAddresses[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Validator) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Validator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OperatorAddresses", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.OperatorAddresses = append(x.OperatorAddresses, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Description == nil { + x.Description = &ValidatorDescription{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Description); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_ValidatorDescription protoreflect.MessageDescriptor + fd_ValidatorDescription_identity protoreflect.FieldDescriptor + fd_ValidatorDescription_moniker protoreflect.FieldDescriptor + fd_ValidatorDescription_website protoreflect.FieldDescriptor + fd_ValidatorDescription_securityContact protoreflect.FieldDescriptor + fd_ValidatorDescription_details protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_validator_proto_init() + md_ValidatorDescription = File_network_profile_v1_validator_proto.Messages().ByName("ValidatorDescription") + fd_ValidatorDescription_identity = md_ValidatorDescription.Fields().ByName("identity") + fd_ValidatorDescription_moniker = md_ValidatorDescription.Fields().ByName("moniker") + fd_ValidatorDescription_website = md_ValidatorDescription.Fields().ByName("website") + fd_ValidatorDescription_securityContact = md_ValidatorDescription.Fields().ByName("securityContact") + fd_ValidatorDescription_details = md_ValidatorDescription.Fields().ByName("details") +} + +var _ protoreflect.Message = (*fastReflection_ValidatorDescription)(nil) + +type fastReflection_ValidatorDescription ValidatorDescription + +func (x *ValidatorDescription) ProtoReflect() protoreflect.Message { + return (*fastReflection_ValidatorDescription)(x) +} + +func (x *ValidatorDescription) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_validator_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) +} + +var _fastReflection_ValidatorDescription_messageType fastReflection_ValidatorDescription_messageType +var _ protoreflect.MessageType = fastReflection_ValidatorDescription_messageType{} + +type fastReflection_ValidatorDescription_messageType struct{} + +func (x fastReflection_ValidatorDescription_messageType) Zero() protoreflect.Message { + return (*fastReflection_ValidatorDescription)(nil) +} +func (x fastReflection_ValidatorDescription_messageType) New() protoreflect.Message { + return new(fastReflection_ValidatorDescription) +} +func (x fastReflection_ValidatorDescription_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ValidatorDescription +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ValidatorDescription) Descriptor() protoreflect.MessageDescriptor { + return md_ValidatorDescription +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ValidatorDescription) Type() protoreflect.MessageType { + return _fastReflection_ValidatorDescription_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ValidatorDescription) New() protoreflect.Message { + return new(fastReflection_ValidatorDescription) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ValidatorDescription) Interface() protoreflect.ProtoMessage { + return (*ValidatorDescription)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ValidatorDescription) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Identity != "" { + value := protoreflect.ValueOfString(x.Identity) + if !f(fd_ValidatorDescription_identity, value) { + return + } + } + if x.Moniker != "" { + value := protoreflect.ValueOfString(x.Moniker) + if !f(fd_ValidatorDescription_moniker, value) { + return + } + } + if x.Website != "" { + value := protoreflect.ValueOfString(x.Website) + if !f(fd_ValidatorDescription_website, value) { + return + } + } + if x.SecurityContact != "" { + value := protoreflect.ValueOfString(x.SecurityContact) + if !f(fd_ValidatorDescription_securityContact, value) { + return + } + } + if x.Details != "" { + value := protoreflect.ValueOfString(x.Details) + if !f(fd_ValidatorDescription_details, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ValidatorDescription) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.ValidatorDescription.identity": + return x.Identity != "" + case "network.profile.v1.ValidatorDescription.moniker": + return x.Moniker != "" + case "network.profile.v1.ValidatorDescription.website": + return x.Website != "" + case "network.profile.v1.ValidatorDescription.securityContact": + return x.SecurityContact != "" + case "network.profile.v1.ValidatorDescription.details": + return x.Details != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorDescription) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.ValidatorDescription.identity": + x.Identity = "" + case "network.profile.v1.ValidatorDescription.moniker": + x.Moniker = "" + case "network.profile.v1.ValidatorDescription.website": + x.Website = "" + case "network.profile.v1.ValidatorDescription.securityContact": + x.SecurityContact = "" + case "network.profile.v1.ValidatorDescription.details": + x.Details = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ValidatorDescription) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.ValidatorDescription.identity": + value := x.Identity + return protoreflect.ValueOfString(value) + case "network.profile.v1.ValidatorDescription.moniker": + value := x.Moniker + return protoreflect.ValueOfString(value) + case "network.profile.v1.ValidatorDescription.website": + value := x.Website + return protoreflect.ValueOfString(value) + case "network.profile.v1.ValidatorDescription.securityContact": + value := x.SecurityContact + return protoreflect.ValueOfString(value) + case "network.profile.v1.ValidatorDescription.details": + value := x.Details + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorDescription does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorDescription) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.ValidatorDescription.identity": + x.Identity = value.Interface().(string) + case "network.profile.v1.ValidatorDescription.moniker": + x.Moniker = value.Interface().(string) + case "network.profile.v1.ValidatorDescription.website": + x.Website = value.Interface().(string) + case "network.profile.v1.ValidatorDescription.securityContact": + x.SecurityContact = value.Interface().(string) + case "network.profile.v1.ValidatorDescription.details": + x.Details = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorDescription) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.ValidatorDescription.identity": + panic(fmt.Errorf("field identity of message network.profile.v1.ValidatorDescription is not mutable")) + case "network.profile.v1.ValidatorDescription.moniker": + panic(fmt.Errorf("field moniker of message network.profile.v1.ValidatorDescription is not mutable")) + case "network.profile.v1.ValidatorDescription.website": + panic(fmt.Errorf("field website of message network.profile.v1.ValidatorDescription is not mutable")) + case "network.profile.v1.ValidatorDescription.securityContact": + panic(fmt.Errorf("field securityContact of message network.profile.v1.ValidatorDescription is not mutable")) + case "network.profile.v1.ValidatorDescription.details": + panic(fmt.Errorf("field details of message network.profile.v1.ValidatorDescription is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ValidatorDescription) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.ValidatorDescription.identity": + return protoreflect.ValueOfString("") + case "network.profile.v1.ValidatorDescription.moniker": + return protoreflect.ValueOfString("") + case "network.profile.v1.ValidatorDescription.website": + return protoreflect.ValueOfString("") + case "network.profile.v1.ValidatorDescription.securityContact": + return protoreflect.ValueOfString("") + case "network.profile.v1.ValidatorDescription.details": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorDescription")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorDescription does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ValidatorDescription) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.ValidatorDescription", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ValidatorDescription) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorDescription) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ValidatorDescription) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ValidatorDescription) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ValidatorDescription) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Identity) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Moniker) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Website) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.SecurityContact) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Details) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ValidatorDescription) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Details) > 0 { + i -= len(x.Details) + copy(dAtA[i:], x.Details) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Details))) + i-- + dAtA[i] = 0x2a + } + if len(x.SecurityContact) > 0 { + i -= len(x.SecurityContact) + copy(dAtA[i:], x.SecurityContact) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SecurityContact))) + i-- + dAtA[i] = 0x22 + } + if len(x.Website) > 0 { + i -= len(x.Website) + copy(dAtA[i:], x.Website) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Website))) + i-- + dAtA[i] = 0x1a + } + if len(x.Moniker) > 0 { + i -= len(x.Moniker) + copy(dAtA[i:], x.Moniker) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Moniker))) + i-- + dAtA[i] = 0x12 + } + if len(x.Identity) > 0 { + i -= len(x.Identity) + copy(dAtA[i:], x.Identity) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Identity))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ValidatorDescription) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ValidatorDescription: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ValidatorDescription: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Identity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Identity = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Moniker", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Moniker = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Website", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Website = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SecurityContact", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SecurityContact = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Details = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_ValidatorByOperatorAddress protoreflect.MessageDescriptor + fd_ValidatorByOperatorAddress_operatorAddress protoreflect.FieldDescriptor + fd_ValidatorByOperatorAddress_validatorAddress protoreflect.FieldDescriptor +) + +func init() { + file_network_profile_v1_validator_proto_init() + md_ValidatorByOperatorAddress = File_network_profile_v1_validator_proto.Messages().ByName("ValidatorByOperatorAddress") + fd_ValidatorByOperatorAddress_operatorAddress = md_ValidatorByOperatorAddress.Fields().ByName("operatorAddress") + fd_ValidatorByOperatorAddress_validatorAddress = md_ValidatorByOperatorAddress.Fields().ByName("validatorAddress") +} + +var _ protoreflect.Message = (*fastReflection_ValidatorByOperatorAddress)(nil) + +type fastReflection_ValidatorByOperatorAddress ValidatorByOperatorAddress + +func (x *ValidatorByOperatorAddress) ProtoReflect() protoreflect.Message { + return (*fastReflection_ValidatorByOperatorAddress)(x) +} + +func (x *ValidatorByOperatorAddress) slowProtoReflect() protoreflect.Message { + mi := &file_network_profile_v1_validator_proto_msgTypes[2] + 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) +} + +var _fastReflection_ValidatorByOperatorAddress_messageType fastReflection_ValidatorByOperatorAddress_messageType +var _ protoreflect.MessageType = fastReflection_ValidatorByOperatorAddress_messageType{} + +type fastReflection_ValidatorByOperatorAddress_messageType struct{} + +func (x fastReflection_ValidatorByOperatorAddress_messageType) Zero() protoreflect.Message { + return (*fastReflection_ValidatorByOperatorAddress)(nil) +} +func (x fastReflection_ValidatorByOperatorAddress_messageType) New() protoreflect.Message { + return new(fastReflection_ValidatorByOperatorAddress) +} +func (x fastReflection_ValidatorByOperatorAddress_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ValidatorByOperatorAddress +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ValidatorByOperatorAddress) Descriptor() protoreflect.MessageDescriptor { + return md_ValidatorByOperatorAddress +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ValidatorByOperatorAddress) Type() protoreflect.MessageType { + return _fastReflection_ValidatorByOperatorAddress_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ValidatorByOperatorAddress) New() protoreflect.Message { + return new(fastReflection_ValidatorByOperatorAddress) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ValidatorByOperatorAddress) Interface() protoreflect.ProtoMessage { + return (*ValidatorByOperatorAddress)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ValidatorByOperatorAddress) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.OperatorAddress != "" { + value := protoreflect.ValueOfString(x.OperatorAddress) + if !f(fd_ValidatorByOperatorAddress_operatorAddress, value) { + return + } + } + if x.ValidatorAddress != "" { + value := protoreflect.ValueOfString(x.ValidatorAddress) + if !f(fd_ValidatorByOperatorAddress_validatorAddress, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ValidatorByOperatorAddress) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.profile.v1.ValidatorByOperatorAddress.operatorAddress": + return x.OperatorAddress != "" + case "network.profile.v1.ValidatorByOperatorAddress.validatorAddress": + return x.ValidatorAddress != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorByOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorByOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorByOperatorAddress) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.profile.v1.ValidatorByOperatorAddress.operatorAddress": + x.OperatorAddress = "" + case "network.profile.v1.ValidatorByOperatorAddress.validatorAddress": + x.ValidatorAddress = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorByOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorByOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ValidatorByOperatorAddress) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.profile.v1.ValidatorByOperatorAddress.operatorAddress": + value := x.OperatorAddress + return protoreflect.ValueOfString(value) + case "network.profile.v1.ValidatorByOperatorAddress.validatorAddress": + value := x.ValidatorAddress + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorByOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorByOperatorAddress does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorByOperatorAddress) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.profile.v1.ValidatorByOperatorAddress.operatorAddress": + x.OperatorAddress = value.Interface().(string) + case "network.profile.v1.ValidatorByOperatorAddress.validatorAddress": + x.ValidatorAddress = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorByOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorByOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorByOperatorAddress) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.ValidatorByOperatorAddress.operatorAddress": + panic(fmt.Errorf("field operatorAddress of message network.profile.v1.ValidatorByOperatorAddress is not mutable")) + case "network.profile.v1.ValidatorByOperatorAddress.validatorAddress": + panic(fmt.Errorf("field validatorAddress of message network.profile.v1.ValidatorByOperatorAddress is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorByOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorByOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ValidatorByOperatorAddress) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.profile.v1.ValidatorByOperatorAddress.operatorAddress": + return protoreflect.ValueOfString("") + case "network.profile.v1.ValidatorByOperatorAddress.validatorAddress": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.profile.v1.ValidatorByOperatorAddress")) + } + panic(fmt.Errorf("message network.profile.v1.ValidatorByOperatorAddress does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ValidatorByOperatorAddress) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.profile.v1.ValidatorByOperatorAddress", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ValidatorByOperatorAddress) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorByOperatorAddress) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ValidatorByOperatorAddress) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ValidatorByOperatorAddress) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ValidatorByOperatorAddress) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.OperatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ValidatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ValidatorByOperatorAddress) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ValidatorAddress) > 0 { + i -= len(x.ValidatorAddress) + copy(dAtA[i:], x.ValidatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(x.OperatorAddress) > 0 { + i -= len(x.OperatorAddress) + copy(dAtA[i:], x.OperatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OperatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ValidatorByOperatorAddress) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ValidatorByOperatorAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ValidatorByOperatorAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OperatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.OperatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/profile/v1/validator.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Validator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + OperatorAddresses []string `protobuf:"bytes,2,rep,name=operatorAddresses,proto3" json:"operatorAddresses,omitempty"` + Description *ValidatorDescription `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *Validator) Reset() { + *x = Validator{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_validator_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Validator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Validator) ProtoMessage() {} + +// Deprecated: Use Validator.ProtoReflect.Descriptor instead. +func (*Validator) Descriptor() ([]byte, []int) { + return file_network_profile_v1_validator_proto_rawDescGZIP(), []int{0} +} + +func (x *Validator) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *Validator) GetOperatorAddresses() []string { + if x != nil { + return x.OperatorAddresses + } + return nil +} + +func (x *Validator) GetDescription() *ValidatorDescription { + if x != nil { + return x.Description + } + return nil +} + +type ValidatorDescription struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + Moniker string `protobuf:"bytes,2,opt,name=moniker,proto3" json:"moniker,omitempty"` + Website string `protobuf:"bytes,3,opt,name=website,proto3" json:"website,omitempty"` + SecurityContact string `protobuf:"bytes,4,opt,name=securityContact,proto3" json:"securityContact,omitempty"` + Details string `protobuf:"bytes,5,opt,name=details,proto3" json:"details,omitempty"` +} + +func (x *ValidatorDescription) Reset() { + *x = ValidatorDescription{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_validator_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatorDescription) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatorDescription) ProtoMessage() {} + +// Deprecated: Use ValidatorDescription.ProtoReflect.Descriptor instead. +func (*ValidatorDescription) Descriptor() ([]byte, []int) { + return file_network_profile_v1_validator_proto_rawDescGZIP(), []int{1} +} + +func (x *ValidatorDescription) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +func (x *ValidatorDescription) GetMoniker() string { + if x != nil { + return x.Moniker + } + return "" +} + +func (x *ValidatorDescription) GetWebsite() string { + if x != nil { + return x.Website + } + return "" +} + +func (x *ValidatorDescription) GetSecurityContact() string { + if x != nil { + return x.SecurityContact + } + return "" +} + +func (x *ValidatorDescription) GetDetails() string { + if x != nil { + return x.Details + } + return "" +} + +type ValidatorByOperatorAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OperatorAddress string `protobuf:"bytes,1,opt,name=operatorAddress,proto3" json:"operatorAddress,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validatorAddress,proto3" json:"validatorAddress,omitempty"` +} + +func (x *ValidatorByOperatorAddress) Reset() { + *x = ValidatorByOperatorAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_network_profile_v1_validator_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatorByOperatorAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatorByOperatorAddress) ProtoMessage() {} + +// Deprecated: Use ValidatorByOperatorAddress.ProtoReflect.Descriptor instead. +func (*ValidatorByOperatorAddress) Descriptor() ([]byte, []int) { + return file_network_profile_v1_validator_proto_rawDescGZIP(), []int{2} +} + +func (x *ValidatorByOperatorAddress) GetOperatorAddress() string { + if x != nil { + return x.OperatorAddress + } + return "" +} + +func (x *ValidatorByOperatorAddress) GetValidatorAddress() string { + if x != nil { + return x.ValidatorAddress + } + return "" +} + +var File_network_profile_v1_validator_proto protoreflect.FileDescriptor + +var file_network_profile_v1_validator_proto_rawDesc = []byte{ + 0x0a, 0x22, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, + 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbf, 0x01, 0x0a, 0x09, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x14, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x6e, 0x69, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x6e, 0x69, 0x6b, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, + 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, + 0x73, 0x69, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x1a, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x44, 0x0a, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0xce, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x42, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_profile_v1_validator_proto_rawDescOnce sync.Once + file_network_profile_v1_validator_proto_rawDescData = file_network_profile_v1_validator_proto_rawDesc +) + +func file_network_profile_v1_validator_proto_rawDescGZIP() []byte { + file_network_profile_v1_validator_proto_rawDescOnce.Do(func() { + file_network_profile_v1_validator_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_profile_v1_validator_proto_rawDescData) + }) + return file_network_profile_v1_validator_proto_rawDescData +} + +var file_network_profile_v1_validator_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_network_profile_v1_validator_proto_goTypes = []interface{}{ + (*Validator)(nil), // 0: network.profile.v1.Validator + (*ValidatorDescription)(nil), // 1: network.profile.v1.ValidatorDescription + (*ValidatorByOperatorAddress)(nil), // 2: network.profile.v1.ValidatorByOperatorAddress +} +var file_network_profile_v1_validator_proto_depIdxs = []int32{ + 1, // 0: network.profile.v1.Validator.description:type_name -> network.profile.v1.ValidatorDescription + 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_network_profile_v1_validator_proto_init() } +func file_network_profile_v1_validator_proto_init() { + if File_network_profile_v1_validator_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_profile_v1_validator_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Validator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_validator_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatorDescription); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_profile_v1_validator_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatorByOperatorAddress); 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_network_profile_v1_validator_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_profile_v1_validator_proto_goTypes, + DependencyIndexes: file_network_profile_v1_validator_proto_depIdxs, + MessageInfos: file_network_profile_v1_validator_proto_msgTypes, + }.Build() + File_network_profile_v1_validator_proto = out.File + file_network_profile_v1_validator_proto_rawDesc = nil + file_network_profile_v1_validator_proto_goTypes = nil + file_network_profile_v1_validator_proto_depIdxs = nil +} diff --git a/api/network/project/module/v1/module.pulsar.go b/api/network/project/module/v1/module.pulsar.go new file mode 100644 index 00000000..2c561cd1 --- /dev/null +++ b/api/network/project/module/v1/module.pulsar.go @@ -0,0 +1,580 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package modulev1 + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Module protoreflect.MessageDescriptor + fd_Module_authority protoreflect.FieldDescriptor +) + +func init() { + file_network_project_module_v1_module_proto_init() + md_Module = File_network_project_module_v1_module_proto.Messages().ByName("Module") + fd_Module_authority = md_Module.Fields().ByName("authority") +} + +var _ protoreflect.Message = (*fastReflection_Module)(nil) + +type fastReflection_Module Module + +func (x *Module) ProtoReflect() protoreflect.Message { + return (*fastReflection_Module)(x) +} + +func (x *Module) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_module_v1_module_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) +} + +var _fastReflection_Module_messageType fastReflection_Module_messageType +var _ protoreflect.MessageType = fastReflection_Module_messageType{} + +type fastReflection_Module_messageType struct{} + +func (x fastReflection_Module_messageType) Zero() protoreflect.Message { + return (*fastReflection_Module)(nil) +} +func (x fastReflection_Module_messageType) New() protoreflect.Message { + return new(fastReflection_Module) +} +func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Module) Type() protoreflect.MessageType { + return _fastReflection_Module_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Module) New() protoreflect.Message { + return new(fastReflection_Module) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage { + return (*Module)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_Module_authority, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.module.v1.Module.authority": + return x.Authority != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.module.v1.Module")) + } + panic(fmt.Errorf("message network.project.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.module.v1.Module.authority": + x.Authority = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.module.v1.Module")) + } + panic(fmt.Errorf("message network.project.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.module.v1.Module.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.module.v1.Module")) + } + panic(fmt.Errorf("message network.project.module.v1.Module does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.module.v1.Module.authority": + x.Authority = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.module.v1.Module")) + } + panic(fmt.Errorf("message network.project.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.module.v1.Module.authority": + panic(fmt.Errorf("field authority of message network.project.module.v1.Module is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.module.v1.Module")) + } + panic(fmt.Errorf("message network.project.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.module.v1.Module.authority": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.module.v1.Module")) + } + panic(fmt.Errorf("message network.project.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.module.v1.Module", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Module) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/module/v1/module.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Module is the config object for the module. +type Module struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (x *Module) Reset() { + *x = Module{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_module_v1_module_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Module) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Module) ProtoMessage() {} + +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { + return file_network_project_module_v1_module_proto_rawDescGZIP(), []int{0} +} + +func (x *Module) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +var File_network_project_module_v1_module_proto protoreflect.FileDescriptor + +var file_network_project_module_v1_module_proto_rawDesc = []byte{ + 0x0a, 0x26, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x53, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x2b, 0xba, + 0xc0, 0x96, 0xda, 0x01, 0x25, 0x0a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x78, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0xf5, 0x01, 0x0a, 0x1d, 0x63, + 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x4e, 0x50, 0x4d, 0xaa, 0x02, 0x19, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, + 0x02, 0x19, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x25, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x1c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_module_v1_module_proto_rawDescOnce sync.Once + file_network_project_module_v1_module_proto_rawDescData = file_network_project_module_v1_module_proto_rawDesc +) + +func file_network_project_module_v1_module_proto_rawDescGZIP() []byte { + file_network_project_module_v1_module_proto_rawDescOnce.Do(func() { + file_network_project_module_v1_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_module_v1_module_proto_rawDescData) + }) + return file_network_project_module_v1_module_proto_rawDescData +} + +var file_network_project_module_v1_module_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_project_module_v1_module_proto_goTypes = []interface{}{ + (*Module)(nil), // 0: network.project.module.v1.Module +} +var file_network_project_module_v1_module_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 +} + +func init() { file_network_project_module_v1_module_proto_init() } +func file_network_project_module_v1_module_proto_init() { + if File_network_project_module_v1_module_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_project_module_v1_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Module); 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_network_project_module_v1_module_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_module_v1_module_proto_goTypes, + DependencyIndexes: file_network_project_module_v1_module_proto_depIdxs, + MessageInfos: file_network_project_module_v1_module_proto_msgTypes, + }.Build() + File_network_project_module_v1_module_proto = out.File + file_network_project_module_v1_module_proto_rawDesc = nil + file_network_project_module_v1_module_proto_goTypes = nil + file_network_project_module_v1_module_proto_depIdxs = nil +} diff --git a/api/network/project/v1/events.pulsar.go b/api/network/project/v1/events.pulsar.go new file mode 100644 index 00000000..6201278c --- /dev/null +++ b/api/network/project/v1/events.pulsar.go @@ -0,0 +1,7537 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_EventProjectCreated protoreflect.MessageDescriptor + fd_EventProjectCreated_projectID protoreflect.FieldDescriptor + fd_EventProjectCreated_coordinatorAddress protoreflect.FieldDescriptor + fd_EventProjectCreated_coordinatorID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventProjectCreated = File_network_project_v1_events_proto.Messages().ByName("EventProjectCreated") + fd_EventProjectCreated_projectID = md_EventProjectCreated.Fields().ByName("projectID") + fd_EventProjectCreated_coordinatorAddress = md_EventProjectCreated.Fields().ByName("coordinatorAddress") + fd_EventProjectCreated_coordinatorID = md_EventProjectCreated.Fields().ByName("coordinatorID") +} + +var _ protoreflect.Message = (*fastReflection_EventProjectCreated)(nil) + +type fastReflection_EventProjectCreated EventProjectCreated + +func (x *EventProjectCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventProjectCreated)(x) +} + +func (x *EventProjectCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_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) +} + +var _fastReflection_EventProjectCreated_messageType fastReflection_EventProjectCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventProjectCreated_messageType{} + +type fastReflection_EventProjectCreated_messageType struct{} + +func (x fastReflection_EventProjectCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventProjectCreated)(nil) +} +func (x fastReflection_EventProjectCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventProjectCreated) +} +func (x fastReflection_EventProjectCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventProjectCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventProjectCreated) Type() protoreflect.MessageType { + return _fastReflection_EventProjectCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventProjectCreated) New() protoreflect.Message { + return new(fastReflection_EventProjectCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventProjectCreated) Interface() protoreflect.ProtoMessage { + return (*EventProjectCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventProjectCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventProjectCreated_projectID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventProjectCreated_coordinatorAddress, value) { + return + } + } + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_EventProjectCreated_coordinatorID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventProjectCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventProjectCreated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventProjectCreated.coordinatorAddress": + return x.CoordinatorAddress != "" + case "network.project.v1.EventProjectCreated.coordinatorID": + return x.CoordinatorID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventProjectCreated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventProjectCreated.coordinatorAddress": + x.CoordinatorAddress = "" + case "network.project.v1.EventProjectCreated.coordinatorID": + x.CoordinatorID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventProjectCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventProjectCreated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventProjectCreated.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + case "network.project.v1.EventProjectCreated.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventProjectCreated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventProjectCreated.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + case "network.project.v1.EventProjectCreated.coordinatorID": + x.CoordinatorID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectCreated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventProjectCreated is not mutable")) + case "network.project.v1.EventProjectCreated.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.project.v1.EventProjectCreated is not mutable")) + case "network.project.v1.EventProjectCreated.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.project.v1.EventProjectCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventProjectCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectCreated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventProjectCreated.coordinatorAddress": + return protoreflect.ValueOfString("") + case "network.project.v1.EventProjectCreated.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventProjectCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventProjectCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventProjectCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventProjectCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventProjectCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventProjectCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventProjectCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x18 + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventProjectCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventProjectChainAdded protoreflect.MessageDescriptor + fd_EventProjectChainAdded_projectID protoreflect.FieldDescriptor + fd_EventProjectChainAdded_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventProjectChainAdded = File_network_project_v1_events_proto.Messages().ByName("EventProjectChainAdded") + fd_EventProjectChainAdded_projectID = md_EventProjectChainAdded.Fields().ByName("projectID") + fd_EventProjectChainAdded_launchID = md_EventProjectChainAdded.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_EventProjectChainAdded)(nil) + +type fastReflection_EventProjectChainAdded EventProjectChainAdded + +func (x *EventProjectChainAdded) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventProjectChainAdded)(x) +} + +func (x *EventProjectChainAdded) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_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) +} + +var _fastReflection_EventProjectChainAdded_messageType fastReflection_EventProjectChainAdded_messageType +var _ protoreflect.MessageType = fastReflection_EventProjectChainAdded_messageType{} + +type fastReflection_EventProjectChainAdded_messageType struct{} + +func (x fastReflection_EventProjectChainAdded_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventProjectChainAdded)(nil) +} +func (x fastReflection_EventProjectChainAdded_messageType) New() protoreflect.Message { + return new(fastReflection_EventProjectChainAdded) +} +func (x fastReflection_EventProjectChainAdded_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectChainAdded +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventProjectChainAdded) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectChainAdded +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventProjectChainAdded) Type() protoreflect.MessageType { + return _fastReflection_EventProjectChainAdded_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventProjectChainAdded) New() protoreflect.Message { + return new(fastReflection_EventProjectChainAdded) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventProjectChainAdded) Interface() protoreflect.ProtoMessage { + return (*EventProjectChainAdded)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventProjectChainAdded) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventProjectChainAdded_projectID, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventProjectChainAdded_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventProjectChainAdded) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventProjectChainAdded.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventProjectChainAdded.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectChainAdded")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectChainAdded does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectChainAdded) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventProjectChainAdded.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventProjectChainAdded.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectChainAdded")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectChainAdded does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventProjectChainAdded) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventProjectChainAdded.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventProjectChainAdded.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectChainAdded")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectChainAdded does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectChainAdded) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventProjectChainAdded.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventProjectChainAdded.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectChainAdded")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectChainAdded does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectChainAdded) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectChainAdded.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventProjectChainAdded is not mutable")) + case "network.project.v1.EventProjectChainAdded.launchID": + panic(fmt.Errorf("field launchID of message network.project.v1.EventProjectChainAdded is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectChainAdded")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectChainAdded does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventProjectChainAdded) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectChainAdded.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventProjectChainAdded.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectChainAdded")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectChainAdded does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventProjectChainAdded) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventProjectChainAdded", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventProjectChainAdded) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectChainAdded) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventProjectChainAdded) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventProjectChainAdded) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventProjectChainAdded) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventProjectChainAdded) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventProjectChainAdded) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectChainAdded: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectChainAdded: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventProjectInfoUpdated protoreflect.MessageDescriptor + fd_EventProjectInfoUpdated_projectID protoreflect.FieldDescriptor + fd_EventProjectInfoUpdated_coordinatorAddress protoreflect.FieldDescriptor + fd_EventProjectInfoUpdated_projectName protoreflect.FieldDescriptor + fd_EventProjectInfoUpdated_metadata protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventProjectInfoUpdated = File_network_project_v1_events_proto.Messages().ByName("EventProjectInfoUpdated") + fd_EventProjectInfoUpdated_projectID = md_EventProjectInfoUpdated.Fields().ByName("projectID") + fd_EventProjectInfoUpdated_coordinatorAddress = md_EventProjectInfoUpdated.Fields().ByName("coordinatorAddress") + fd_EventProjectInfoUpdated_projectName = md_EventProjectInfoUpdated.Fields().ByName("projectName") + fd_EventProjectInfoUpdated_metadata = md_EventProjectInfoUpdated.Fields().ByName("metadata") +} + +var _ protoreflect.Message = (*fastReflection_EventProjectInfoUpdated)(nil) + +type fastReflection_EventProjectInfoUpdated EventProjectInfoUpdated + +func (x *EventProjectInfoUpdated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventProjectInfoUpdated)(x) +} + +func (x *EventProjectInfoUpdated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_proto_msgTypes[2] + 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) +} + +var _fastReflection_EventProjectInfoUpdated_messageType fastReflection_EventProjectInfoUpdated_messageType +var _ protoreflect.MessageType = fastReflection_EventProjectInfoUpdated_messageType{} + +type fastReflection_EventProjectInfoUpdated_messageType struct{} + +func (x fastReflection_EventProjectInfoUpdated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventProjectInfoUpdated)(nil) +} +func (x fastReflection_EventProjectInfoUpdated_messageType) New() protoreflect.Message { + return new(fastReflection_EventProjectInfoUpdated) +} +func (x fastReflection_EventProjectInfoUpdated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectInfoUpdated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventProjectInfoUpdated) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectInfoUpdated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventProjectInfoUpdated) Type() protoreflect.MessageType { + return _fastReflection_EventProjectInfoUpdated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventProjectInfoUpdated) New() protoreflect.Message { + return new(fastReflection_EventProjectInfoUpdated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventProjectInfoUpdated) Interface() protoreflect.ProtoMessage { + return (*EventProjectInfoUpdated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventProjectInfoUpdated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventProjectInfoUpdated_projectID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventProjectInfoUpdated_coordinatorAddress, value) { + return + } + } + if x.ProjectName != "" { + value := protoreflect.ValueOfString(x.ProjectName) + if !f(fd_EventProjectInfoUpdated_projectName, value) { + return + } + } + if len(x.Metadata) != 0 { + value := protoreflect.ValueOfBytes(x.Metadata) + if !f(fd_EventProjectInfoUpdated_metadata, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventProjectInfoUpdated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventProjectInfoUpdated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventProjectInfoUpdated.coordinatorAddress": + return x.CoordinatorAddress != "" + case "network.project.v1.EventProjectInfoUpdated.projectName": + return x.ProjectName != "" + case "network.project.v1.EventProjectInfoUpdated.metadata": + return len(x.Metadata) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectInfoUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectInfoUpdated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectInfoUpdated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventProjectInfoUpdated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventProjectInfoUpdated.coordinatorAddress": + x.CoordinatorAddress = "" + case "network.project.v1.EventProjectInfoUpdated.projectName": + x.ProjectName = "" + case "network.project.v1.EventProjectInfoUpdated.metadata": + x.Metadata = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectInfoUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectInfoUpdated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventProjectInfoUpdated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventProjectInfoUpdated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventProjectInfoUpdated.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + case "network.project.v1.EventProjectInfoUpdated.projectName": + value := x.ProjectName + return protoreflect.ValueOfString(value) + case "network.project.v1.EventProjectInfoUpdated.metadata": + value := x.Metadata + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectInfoUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectInfoUpdated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectInfoUpdated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventProjectInfoUpdated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventProjectInfoUpdated.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + case "network.project.v1.EventProjectInfoUpdated.projectName": + x.ProjectName = value.Interface().(string) + case "network.project.v1.EventProjectInfoUpdated.metadata": + x.Metadata = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectInfoUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectInfoUpdated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectInfoUpdated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectInfoUpdated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventProjectInfoUpdated is not mutable")) + case "network.project.v1.EventProjectInfoUpdated.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.project.v1.EventProjectInfoUpdated is not mutable")) + case "network.project.v1.EventProjectInfoUpdated.projectName": + panic(fmt.Errorf("field projectName of message network.project.v1.EventProjectInfoUpdated is not mutable")) + case "network.project.v1.EventProjectInfoUpdated.metadata": + panic(fmt.Errorf("field metadata of message network.project.v1.EventProjectInfoUpdated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectInfoUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectInfoUpdated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventProjectInfoUpdated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectInfoUpdated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventProjectInfoUpdated.coordinatorAddress": + return protoreflect.ValueOfString("") + case "network.project.v1.EventProjectInfoUpdated.projectName": + return protoreflect.ValueOfString("") + case "network.project.v1.EventProjectInfoUpdated.metadata": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectInfoUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectInfoUpdated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventProjectInfoUpdated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventProjectInfoUpdated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventProjectInfoUpdated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectInfoUpdated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventProjectInfoUpdated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventProjectInfoUpdated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventProjectInfoUpdated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ProjectName) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Metadata) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventProjectInfoUpdated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Metadata) > 0 { + i -= len(x.Metadata) + copy(dAtA[i:], x.Metadata) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Metadata))) + i-- + dAtA[i] = 0x22 + } + if len(x.ProjectName) > 0 { + i -= len(x.ProjectName) + copy(dAtA[i:], x.ProjectName) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ProjectName))) + i-- + dAtA[i] = 0x1a + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventProjectInfoUpdated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectInfoUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectInfoUpdated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Metadata = append(x.Metadata[:0], dAtA[iNdEx:postIndex]...) + if x.Metadata == nil { + x.Metadata = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_EventProjectSharesUpdated_3_list)(nil) + +type _EventProjectSharesUpdated_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_EventProjectSharesUpdated_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_EventProjectSharesUpdated_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_EventProjectSharesUpdated_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_EventProjectSharesUpdated_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_EventProjectSharesUpdated_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventProjectSharesUpdated_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_EventProjectSharesUpdated_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventProjectSharesUpdated_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_EventProjectSharesUpdated protoreflect.MessageDescriptor + fd_EventProjectSharesUpdated_projectID protoreflect.FieldDescriptor + fd_EventProjectSharesUpdated_coordinatorAddress protoreflect.FieldDescriptor + fd_EventProjectSharesUpdated_allocatedShares protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventProjectSharesUpdated = File_network_project_v1_events_proto.Messages().ByName("EventProjectSharesUpdated") + fd_EventProjectSharesUpdated_projectID = md_EventProjectSharesUpdated.Fields().ByName("projectID") + fd_EventProjectSharesUpdated_coordinatorAddress = md_EventProjectSharesUpdated.Fields().ByName("coordinatorAddress") + fd_EventProjectSharesUpdated_allocatedShares = md_EventProjectSharesUpdated.Fields().ByName("allocatedShares") +} + +var _ protoreflect.Message = (*fastReflection_EventProjectSharesUpdated)(nil) + +type fastReflection_EventProjectSharesUpdated EventProjectSharesUpdated + +func (x *EventProjectSharesUpdated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventProjectSharesUpdated)(x) +} + +func (x *EventProjectSharesUpdated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_proto_msgTypes[3] + 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) +} + +var _fastReflection_EventProjectSharesUpdated_messageType fastReflection_EventProjectSharesUpdated_messageType +var _ protoreflect.MessageType = fastReflection_EventProjectSharesUpdated_messageType{} + +type fastReflection_EventProjectSharesUpdated_messageType struct{} + +func (x fastReflection_EventProjectSharesUpdated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventProjectSharesUpdated)(nil) +} +func (x fastReflection_EventProjectSharesUpdated_messageType) New() protoreflect.Message { + return new(fastReflection_EventProjectSharesUpdated) +} +func (x fastReflection_EventProjectSharesUpdated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectSharesUpdated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventProjectSharesUpdated) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectSharesUpdated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventProjectSharesUpdated) Type() protoreflect.MessageType { + return _fastReflection_EventProjectSharesUpdated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventProjectSharesUpdated) New() protoreflect.Message { + return new(fastReflection_EventProjectSharesUpdated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventProjectSharesUpdated) Interface() protoreflect.ProtoMessage { + return (*EventProjectSharesUpdated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventProjectSharesUpdated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventProjectSharesUpdated_projectID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventProjectSharesUpdated_coordinatorAddress, value) { + return + } + } + if len(x.AllocatedShares) != 0 { + value := protoreflect.ValueOfList(&_EventProjectSharesUpdated_3_list{list: &x.AllocatedShares}) + if !f(fd_EventProjectSharesUpdated_allocatedShares, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventProjectSharesUpdated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventProjectSharesUpdated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventProjectSharesUpdated.coordinatorAddress": + return x.CoordinatorAddress != "" + case "network.project.v1.EventProjectSharesUpdated.allocatedShares": + return len(x.AllocatedShares) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectSharesUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectSharesUpdated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectSharesUpdated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventProjectSharesUpdated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventProjectSharesUpdated.coordinatorAddress": + x.CoordinatorAddress = "" + case "network.project.v1.EventProjectSharesUpdated.allocatedShares": + x.AllocatedShares = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectSharesUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectSharesUpdated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventProjectSharesUpdated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventProjectSharesUpdated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventProjectSharesUpdated.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + case "network.project.v1.EventProjectSharesUpdated.allocatedShares": + if len(x.AllocatedShares) == 0 { + return protoreflect.ValueOfList(&_EventProjectSharesUpdated_3_list{}) + } + listValue := &_EventProjectSharesUpdated_3_list{list: &x.AllocatedShares} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectSharesUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectSharesUpdated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectSharesUpdated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventProjectSharesUpdated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventProjectSharesUpdated.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + case "network.project.v1.EventProjectSharesUpdated.allocatedShares": + lv := value.List() + clv := lv.(*_EventProjectSharesUpdated_3_list) + x.AllocatedShares = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectSharesUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectSharesUpdated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectSharesUpdated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectSharesUpdated.allocatedShares": + if x.AllocatedShares == nil { + x.AllocatedShares = []*v1beta1.Coin{} + } + value := &_EventProjectSharesUpdated_3_list{list: &x.AllocatedShares} + return protoreflect.ValueOfList(value) + case "network.project.v1.EventProjectSharesUpdated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventProjectSharesUpdated is not mutable")) + case "network.project.v1.EventProjectSharesUpdated.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.project.v1.EventProjectSharesUpdated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectSharesUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectSharesUpdated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventProjectSharesUpdated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectSharesUpdated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventProjectSharesUpdated.coordinatorAddress": + return protoreflect.ValueOfString("") + case "network.project.v1.EventProjectSharesUpdated.allocatedShares": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_EventProjectSharesUpdated_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectSharesUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectSharesUpdated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventProjectSharesUpdated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventProjectSharesUpdated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventProjectSharesUpdated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectSharesUpdated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventProjectSharesUpdated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventProjectSharesUpdated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventProjectSharesUpdated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.AllocatedShares) > 0 { + for _, e := range x.AllocatedShares { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventProjectSharesUpdated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.AllocatedShares) > 0 { + for iNdEx := len(x.AllocatedShares) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.AllocatedShares[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventProjectSharesUpdated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectSharesUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectSharesUpdated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AllocatedShares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.AllocatedShares = append(x.AllocatedShares, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AllocatedShares[len(x.AllocatedShares)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_EventProjectTotalSupplyUpdated_3_list)(nil) + +type _EventProjectTotalSupplyUpdated_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_EventProjectTotalSupplyUpdated_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_EventProjectTotalSupplyUpdated_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_EventProjectTotalSupplyUpdated_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_EventProjectTotalSupplyUpdated_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_EventProjectTotalSupplyUpdated_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventProjectTotalSupplyUpdated_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_EventProjectTotalSupplyUpdated_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventProjectTotalSupplyUpdated_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_EventProjectTotalSupplyUpdated protoreflect.MessageDescriptor + fd_EventProjectTotalSupplyUpdated_projectID protoreflect.FieldDescriptor + fd_EventProjectTotalSupplyUpdated_coordinatorAddress protoreflect.FieldDescriptor + fd_EventProjectTotalSupplyUpdated_totalSupply protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventProjectTotalSupplyUpdated = File_network_project_v1_events_proto.Messages().ByName("EventProjectTotalSupplyUpdated") + fd_EventProjectTotalSupplyUpdated_projectID = md_EventProjectTotalSupplyUpdated.Fields().ByName("projectID") + fd_EventProjectTotalSupplyUpdated_coordinatorAddress = md_EventProjectTotalSupplyUpdated.Fields().ByName("coordinatorAddress") + fd_EventProjectTotalSupplyUpdated_totalSupply = md_EventProjectTotalSupplyUpdated.Fields().ByName("totalSupply") +} + +var _ protoreflect.Message = (*fastReflection_EventProjectTotalSupplyUpdated)(nil) + +type fastReflection_EventProjectTotalSupplyUpdated EventProjectTotalSupplyUpdated + +func (x *EventProjectTotalSupplyUpdated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventProjectTotalSupplyUpdated)(x) +} + +func (x *EventProjectTotalSupplyUpdated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_proto_msgTypes[4] + 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) +} + +var _fastReflection_EventProjectTotalSupplyUpdated_messageType fastReflection_EventProjectTotalSupplyUpdated_messageType +var _ protoreflect.MessageType = fastReflection_EventProjectTotalSupplyUpdated_messageType{} + +type fastReflection_EventProjectTotalSupplyUpdated_messageType struct{} + +func (x fastReflection_EventProjectTotalSupplyUpdated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventProjectTotalSupplyUpdated)(nil) +} +func (x fastReflection_EventProjectTotalSupplyUpdated_messageType) New() protoreflect.Message { + return new(fastReflection_EventProjectTotalSupplyUpdated) +} +func (x fastReflection_EventProjectTotalSupplyUpdated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectTotalSupplyUpdated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectTotalSupplyUpdated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Type() protoreflect.MessageType { + return _fastReflection_EventProjectTotalSupplyUpdated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventProjectTotalSupplyUpdated) New() protoreflect.Message { + return new(fastReflection_EventProjectTotalSupplyUpdated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Interface() protoreflect.ProtoMessage { + return (*EventProjectTotalSupplyUpdated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventProjectTotalSupplyUpdated_projectID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventProjectTotalSupplyUpdated_coordinatorAddress, value) { + return + } + } + if len(x.TotalSupply) != 0 { + value := protoreflect.ValueOfList(&_EventProjectTotalSupplyUpdated_3_list{list: &x.TotalSupply}) + if !f(fd_EventProjectTotalSupplyUpdated_totalSupply, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventProjectTotalSupplyUpdated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventProjectTotalSupplyUpdated.coordinatorAddress": + return x.CoordinatorAddress != "" + case "network.project.v1.EventProjectTotalSupplyUpdated.totalSupply": + return len(x.TotalSupply) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectTotalSupplyUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectTotalSupplyUpdated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventProjectTotalSupplyUpdated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventProjectTotalSupplyUpdated.coordinatorAddress": + x.CoordinatorAddress = "" + case "network.project.v1.EventProjectTotalSupplyUpdated.totalSupply": + x.TotalSupply = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectTotalSupplyUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectTotalSupplyUpdated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventProjectTotalSupplyUpdated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventProjectTotalSupplyUpdated.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + case "network.project.v1.EventProjectTotalSupplyUpdated.totalSupply": + if len(x.TotalSupply) == 0 { + return protoreflect.ValueOfList(&_EventProjectTotalSupplyUpdated_3_list{}) + } + listValue := &_EventProjectTotalSupplyUpdated_3_list{list: &x.TotalSupply} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectTotalSupplyUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectTotalSupplyUpdated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventProjectTotalSupplyUpdated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventProjectTotalSupplyUpdated.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + case "network.project.v1.EventProjectTotalSupplyUpdated.totalSupply": + lv := value.List() + clv := lv.(*_EventProjectTotalSupplyUpdated_3_list) + x.TotalSupply = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectTotalSupplyUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectTotalSupplyUpdated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectTotalSupplyUpdated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectTotalSupplyUpdated.totalSupply": + if x.TotalSupply == nil { + x.TotalSupply = []*v1beta1.Coin{} + } + value := &_EventProjectTotalSupplyUpdated_3_list{list: &x.TotalSupply} + return protoreflect.ValueOfList(value) + case "network.project.v1.EventProjectTotalSupplyUpdated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventProjectTotalSupplyUpdated is not mutable")) + case "network.project.v1.EventProjectTotalSupplyUpdated.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.project.v1.EventProjectTotalSupplyUpdated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectTotalSupplyUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectTotalSupplyUpdated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventProjectTotalSupplyUpdated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectTotalSupplyUpdated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventProjectTotalSupplyUpdated.coordinatorAddress": + return protoreflect.ValueOfString("") + case "network.project.v1.EventProjectTotalSupplyUpdated.totalSupply": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_EventProjectTotalSupplyUpdated_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectTotalSupplyUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectTotalSupplyUpdated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventProjectTotalSupplyUpdated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventProjectTotalSupplyUpdated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventProjectTotalSupplyUpdated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectTotalSupplyUpdated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventProjectTotalSupplyUpdated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventProjectTotalSupplyUpdated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventProjectTotalSupplyUpdated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.TotalSupply) > 0 { + for _, e := range x.TotalSupply { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventProjectTotalSupplyUpdated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.TotalSupply) > 0 { + for iNdEx := len(x.TotalSupply) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.TotalSupply[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventProjectTotalSupplyUpdated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectTotalSupplyUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectTotalSupplyUpdated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalSupply", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TotalSupply = append(x.TotalSupply, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TotalSupply[len(x.TotalSupply)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventProjectMainnetInitialized protoreflect.MessageDescriptor + fd_EventProjectMainnetInitialized_projectID protoreflect.FieldDescriptor + fd_EventProjectMainnetInitialized_coordinatorAddress protoreflect.FieldDescriptor + fd_EventProjectMainnetInitialized_mainnetID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventProjectMainnetInitialized = File_network_project_v1_events_proto.Messages().ByName("EventProjectMainnetInitialized") + fd_EventProjectMainnetInitialized_projectID = md_EventProjectMainnetInitialized.Fields().ByName("projectID") + fd_EventProjectMainnetInitialized_coordinatorAddress = md_EventProjectMainnetInitialized.Fields().ByName("coordinatorAddress") + fd_EventProjectMainnetInitialized_mainnetID = md_EventProjectMainnetInitialized.Fields().ByName("mainnetID") +} + +var _ protoreflect.Message = (*fastReflection_EventProjectMainnetInitialized)(nil) + +type fastReflection_EventProjectMainnetInitialized EventProjectMainnetInitialized + +func (x *EventProjectMainnetInitialized) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventProjectMainnetInitialized)(x) +} + +func (x *EventProjectMainnetInitialized) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_proto_msgTypes[5] + 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) +} + +var _fastReflection_EventProjectMainnetInitialized_messageType fastReflection_EventProjectMainnetInitialized_messageType +var _ protoreflect.MessageType = fastReflection_EventProjectMainnetInitialized_messageType{} + +type fastReflection_EventProjectMainnetInitialized_messageType struct{} + +func (x fastReflection_EventProjectMainnetInitialized_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventProjectMainnetInitialized)(nil) +} +func (x fastReflection_EventProjectMainnetInitialized_messageType) New() protoreflect.Message { + return new(fastReflection_EventProjectMainnetInitialized) +} +func (x fastReflection_EventProjectMainnetInitialized_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectMainnetInitialized +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventProjectMainnetInitialized) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectMainnetInitialized +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventProjectMainnetInitialized) Type() protoreflect.MessageType { + return _fastReflection_EventProjectMainnetInitialized_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventProjectMainnetInitialized) New() protoreflect.Message { + return new(fastReflection_EventProjectMainnetInitialized) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventProjectMainnetInitialized) Interface() protoreflect.ProtoMessage { + return (*EventProjectMainnetInitialized)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventProjectMainnetInitialized) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventProjectMainnetInitialized_projectID, value) { + return + } + } + if x.CoordinatorAddress != "" { + value := protoreflect.ValueOfString(x.CoordinatorAddress) + if !f(fd_EventProjectMainnetInitialized_coordinatorAddress, value) { + return + } + } + if x.MainnetID != uint64(0) { + value := protoreflect.ValueOfUint64(x.MainnetID) + if !f(fd_EventProjectMainnetInitialized_mainnetID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventProjectMainnetInitialized) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventProjectMainnetInitialized.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventProjectMainnetInitialized.coordinatorAddress": + return x.CoordinatorAddress != "" + case "network.project.v1.EventProjectMainnetInitialized.mainnetID": + return x.MainnetID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectMainnetInitialized")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectMainnetInitialized does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectMainnetInitialized) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventProjectMainnetInitialized.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventProjectMainnetInitialized.coordinatorAddress": + x.CoordinatorAddress = "" + case "network.project.v1.EventProjectMainnetInitialized.mainnetID": + x.MainnetID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectMainnetInitialized")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectMainnetInitialized does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventProjectMainnetInitialized) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventProjectMainnetInitialized.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventProjectMainnetInitialized.coordinatorAddress": + value := x.CoordinatorAddress + return protoreflect.ValueOfString(value) + case "network.project.v1.EventProjectMainnetInitialized.mainnetID": + value := x.MainnetID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectMainnetInitialized")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectMainnetInitialized does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectMainnetInitialized) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventProjectMainnetInitialized.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventProjectMainnetInitialized.coordinatorAddress": + x.CoordinatorAddress = value.Interface().(string) + case "network.project.v1.EventProjectMainnetInitialized.mainnetID": + x.MainnetID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectMainnetInitialized")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectMainnetInitialized does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectMainnetInitialized) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectMainnetInitialized.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventProjectMainnetInitialized is not mutable")) + case "network.project.v1.EventProjectMainnetInitialized.coordinatorAddress": + panic(fmt.Errorf("field coordinatorAddress of message network.project.v1.EventProjectMainnetInitialized is not mutable")) + case "network.project.v1.EventProjectMainnetInitialized.mainnetID": + panic(fmt.Errorf("field mainnetID of message network.project.v1.EventProjectMainnetInitialized is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectMainnetInitialized")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectMainnetInitialized does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventProjectMainnetInitialized) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectMainnetInitialized.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventProjectMainnetInitialized.coordinatorAddress": + return protoreflect.ValueOfString("") + case "network.project.v1.EventProjectMainnetInitialized.mainnetID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectMainnetInitialized")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectMainnetInitialized does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventProjectMainnetInitialized) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventProjectMainnetInitialized", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventProjectMainnetInitialized) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectMainnetInitialized) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventProjectMainnetInitialized) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventProjectMainnetInitialized) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventProjectMainnetInitialized) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.CoordinatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.MainnetID != 0 { + n += 1 + runtime.Sov(uint64(x.MainnetID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventProjectMainnetInitialized) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MainnetID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.MainnetID)) + i-- + dAtA[i] = 0x18 + } + if len(x.CoordinatorAddress) > 0 { + i -= len(x.CoordinatorAddress) + copy(dAtA[i:], x.CoordinatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CoordinatorAddress))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventProjectMainnetInitialized) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectMainnetInitialized: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectMainnetInitialized: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CoordinatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetID", wireType) + } + x.MainnetID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.MainnetID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_EventMainnetAccountCreated_3_list)(nil) + +type _EventMainnetAccountCreated_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_EventMainnetAccountCreated_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_EventMainnetAccountCreated_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_EventMainnetAccountCreated_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_EventMainnetAccountCreated_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_EventMainnetAccountCreated_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventMainnetAccountCreated_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_EventMainnetAccountCreated_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventMainnetAccountCreated_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_EventMainnetAccountCreated protoreflect.MessageDescriptor + fd_EventMainnetAccountCreated_projectID protoreflect.FieldDescriptor + fd_EventMainnetAccountCreated_address protoreflect.FieldDescriptor + fd_EventMainnetAccountCreated_shares protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventMainnetAccountCreated = File_network_project_v1_events_proto.Messages().ByName("EventMainnetAccountCreated") + fd_EventMainnetAccountCreated_projectID = md_EventMainnetAccountCreated.Fields().ByName("projectID") + fd_EventMainnetAccountCreated_address = md_EventMainnetAccountCreated.Fields().ByName("address") + fd_EventMainnetAccountCreated_shares = md_EventMainnetAccountCreated.Fields().ByName("shares") +} + +var _ protoreflect.Message = (*fastReflection_EventMainnetAccountCreated)(nil) + +type fastReflection_EventMainnetAccountCreated EventMainnetAccountCreated + +func (x *EventMainnetAccountCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventMainnetAccountCreated)(x) +} + +func (x *EventMainnetAccountCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_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) +} + +var _fastReflection_EventMainnetAccountCreated_messageType fastReflection_EventMainnetAccountCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventMainnetAccountCreated_messageType{} + +type fastReflection_EventMainnetAccountCreated_messageType struct{} + +func (x fastReflection_EventMainnetAccountCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventMainnetAccountCreated)(nil) +} +func (x fastReflection_EventMainnetAccountCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventMainnetAccountCreated) +} +func (x fastReflection_EventMainnetAccountCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetAccountCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventMainnetAccountCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetAccountCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventMainnetAccountCreated) Type() protoreflect.MessageType { + return _fastReflection_EventMainnetAccountCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventMainnetAccountCreated) New() protoreflect.Message { + return new(fastReflection_EventMainnetAccountCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventMainnetAccountCreated) Interface() protoreflect.ProtoMessage { + return (*EventMainnetAccountCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventMainnetAccountCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventMainnetAccountCreated_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventMainnetAccountCreated_address, value) { + return + } + } + if len(x.Shares) != 0 { + value := protoreflect.ValueOfList(&_EventMainnetAccountCreated_3_list{list: &x.Shares}) + if !f(fd_EventMainnetAccountCreated_shares, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventMainnetAccountCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountCreated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventMainnetAccountCreated.address": + return x.Address != "" + case "network.project.v1.EventMainnetAccountCreated.shares": + return len(x.Shares) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountCreated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventMainnetAccountCreated.address": + x.Address = "" + case "network.project.v1.EventMainnetAccountCreated.shares": + x.Shares = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventMainnetAccountCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventMainnetAccountCreated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventMainnetAccountCreated.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.project.v1.EventMainnetAccountCreated.shares": + if len(x.Shares) == 0 { + return protoreflect.ValueOfList(&_EventMainnetAccountCreated_3_list{}) + } + listValue := &_EventMainnetAccountCreated_3_list{list: &x.Shares} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountCreated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventMainnetAccountCreated.address": + x.Address = value.Interface().(string) + case "network.project.v1.EventMainnetAccountCreated.shares": + lv := value.List() + clv := lv.(*_EventMainnetAccountCreated_3_list) + x.Shares = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountCreated.shares": + if x.Shares == nil { + x.Shares = []*v1beta1.Coin{} + } + value := &_EventMainnetAccountCreated_3_list{list: &x.Shares} + return protoreflect.ValueOfList(value) + case "network.project.v1.EventMainnetAccountCreated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventMainnetAccountCreated is not mutable")) + case "network.project.v1.EventMainnetAccountCreated.address": + panic(fmt.Errorf("field address of message network.project.v1.EventMainnetAccountCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventMainnetAccountCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountCreated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventMainnetAccountCreated.address": + return protoreflect.ValueOfString("") + case "network.project.v1.EventMainnetAccountCreated.shares": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_EventMainnetAccountCreated_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventMainnetAccountCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventMainnetAccountCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventMainnetAccountCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventMainnetAccountCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventMainnetAccountCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventMainnetAccountCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Shares) > 0 { + for _, e := range x.Shares { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetAccountCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Shares) > 0 { + for iNdEx := len(x.Shares) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Shares[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetAccountCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetAccountCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetAccountCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Shares = append(x.Shares, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Shares[len(x.Shares)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_EventMainnetAccountUpdated_3_list)(nil) + +type _EventMainnetAccountUpdated_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_EventMainnetAccountUpdated_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_EventMainnetAccountUpdated_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_EventMainnetAccountUpdated_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_EventMainnetAccountUpdated_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_EventMainnetAccountUpdated_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventMainnetAccountUpdated_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_EventMainnetAccountUpdated_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventMainnetAccountUpdated_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_EventMainnetAccountUpdated protoreflect.MessageDescriptor + fd_EventMainnetAccountUpdated_projectID protoreflect.FieldDescriptor + fd_EventMainnetAccountUpdated_address protoreflect.FieldDescriptor + fd_EventMainnetAccountUpdated_shares protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventMainnetAccountUpdated = File_network_project_v1_events_proto.Messages().ByName("EventMainnetAccountUpdated") + fd_EventMainnetAccountUpdated_projectID = md_EventMainnetAccountUpdated.Fields().ByName("projectID") + fd_EventMainnetAccountUpdated_address = md_EventMainnetAccountUpdated.Fields().ByName("address") + fd_EventMainnetAccountUpdated_shares = md_EventMainnetAccountUpdated.Fields().ByName("shares") +} + +var _ protoreflect.Message = (*fastReflection_EventMainnetAccountUpdated)(nil) + +type fastReflection_EventMainnetAccountUpdated EventMainnetAccountUpdated + +func (x *EventMainnetAccountUpdated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventMainnetAccountUpdated)(x) +} + +func (x *EventMainnetAccountUpdated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_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) +} + +var _fastReflection_EventMainnetAccountUpdated_messageType fastReflection_EventMainnetAccountUpdated_messageType +var _ protoreflect.MessageType = fastReflection_EventMainnetAccountUpdated_messageType{} + +type fastReflection_EventMainnetAccountUpdated_messageType struct{} + +func (x fastReflection_EventMainnetAccountUpdated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventMainnetAccountUpdated)(nil) +} +func (x fastReflection_EventMainnetAccountUpdated_messageType) New() protoreflect.Message { + return new(fastReflection_EventMainnetAccountUpdated) +} +func (x fastReflection_EventMainnetAccountUpdated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetAccountUpdated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventMainnetAccountUpdated) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetAccountUpdated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventMainnetAccountUpdated) Type() protoreflect.MessageType { + return _fastReflection_EventMainnetAccountUpdated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventMainnetAccountUpdated) New() protoreflect.Message { + return new(fastReflection_EventMainnetAccountUpdated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventMainnetAccountUpdated) Interface() protoreflect.ProtoMessage { + return (*EventMainnetAccountUpdated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventMainnetAccountUpdated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventMainnetAccountUpdated_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventMainnetAccountUpdated_address, value) { + return + } + } + if len(x.Shares) != 0 { + value := protoreflect.ValueOfList(&_EventMainnetAccountUpdated_3_list{list: &x.Shares}) + if !f(fd_EventMainnetAccountUpdated_shares, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventMainnetAccountUpdated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountUpdated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventMainnetAccountUpdated.address": + return x.Address != "" + case "network.project.v1.EventMainnetAccountUpdated.shares": + return len(x.Shares) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountUpdated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountUpdated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventMainnetAccountUpdated.address": + x.Address = "" + case "network.project.v1.EventMainnetAccountUpdated.shares": + x.Shares = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventMainnetAccountUpdated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventMainnetAccountUpdated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventMainnetAccountUpdated.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.project.v1.EventMainnetAccountUpdated.shares": + if len(x.Shares) == 0 { + return protoreflect.ValueOfList(&_EventMainnetAccountUpdated_3_list{}) + } + listValue := &_EventMainnetAccountUpdated_3_list{list: &x.Shares} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountUpdated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountUpdated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountUpdated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventMainnetAccountUpdated.address": + x.Address = value.Interface().(string) + case "network.project.v1.EventMainnetAccountUpdated.shares": + lv := value.List() + clv := lv.(*_EventMainnetAccountUpdated_3_list) + x.Shares = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountUpdated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountUpdated.shares": + if x.Shares == nil { + x.Shares = []*v1beta1.Coin{} + } + value := &_EventMainnetAccountUpdated_3_list{list: &x.Shares} + return protoreflect.ValueOfList(value) + case "network.project.v1.EventMainnetAccountUpdated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventMainnetAccountUpdated is not mutable")) + case "network.project.v1.EventMainnetAccountUpdated.address": + panic(fmt.Errorf("field address of message network.project.v1.EventMainnetAccountUpdated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventMainnetAccountUpdated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountUpdated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventMainnetAccountUpdated.address": + return protoreflect.ValueOfString("") + case "network.project.v1.EventMainnetAccountUpdated.shares": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_EventMainnetAccountUpdated_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventMainnetAccountUpdated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventMainnetAccountUpdated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventMainnetAccountUpdated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountUpdated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventMainnetAccountUpdated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventMainnetAccountUpdated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventMainnetAccountUpdated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Shares) > 0 { + for _, e := range x.Shares { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetAccountUpdated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Shares) > 0 { + for iNdEx := len(x.Shares) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Shares[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetAccountUpdated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetAccountUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetAccountUpdated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Shares = append(x.Shares, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Shares[len(x.Shares)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventMainnetAccountRemoved protoreflect.MessageDescriptor + fd_EventMainnetAccountRemoved_projectID protoreflect.FieldDescriptor + fd_EventMainnetAccountRemoved_address protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventMainnetAccountRemoved = File_network_project_v1_events_proto.Messages().ByName("EventMainnetAccountRemoved") + fd_EventMainnetAccountRemoved_projectID = md_EventMainnetAccountRemoved.Fields().ByName("projectID") + fd_EventMainnetAccountRemoved_address = md_EventMainnetAccountRemoved.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_EventMainnetAccountRemoved)(nil) + +type fastReflection_EventMainnetAccountRemoved EventMainnetAccountRemoved + +func (x *EventMainnetAccountRemoved) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventMainnetAccountRemoved)(x) +} + +func (x *EventMainnetAccountRemoved) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_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) +} + +var _fastReflection_EventMainnetAccountRemoved_messageType fastReflection_EventMainnetAccountRemoved_messageType +var _ protoreflect.MessageType = fastReflection_EventMainnetAccountRemoved_messageType{} + +type fastReflection_EventMainnetAccountRemoved_messageType struct{} + +func (x fastReflection_EventMainnetAccountRemoved_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventMainnetAccountRemoved)(nil) +} +func (x fastReflection_EventMainnetAccountRemoved_messageType) New() protoreflect.Message { + return new(fastReflection_EventMainnetAccountRemoved) +} +func (x fastReflection_EventMainnetAccountRemoved_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetAccountRemoved +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventMainnetAccountRemoved) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetAccountRemoved +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventMainnetAccountRemoved) Type() protoreflect.MessageType { + return _fastReflection_EventMainnetAccountRemoved_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventMainnetAccountRemoved) New() protoreflect.Message { + return new(fastReflection_EventMainnetAccountRemoved) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventMainnetAccountRemoved) Interface() protoreflect.ProtoMessage { + return (*EventMainnetAccountRemoved)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventMainnetAccountRemoved) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventMainnetAccountRemoved_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventMainnetAccountRemoved_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventMainnetAccountRemoved) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountRemoved.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventMainnetAccountRemoved.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountRemoved")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountRemoved) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountRemoved.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventMainnetAccountRemoved.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountRemoved")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventMainnetAccountRemoved) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventMainnetAccountRemoved.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventMainnetAccountRemoved.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountRemoved")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountRemoved does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountRemoved) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountRemoved.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventMainnetAccountRemoved.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountRemoved")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountRemoved) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountRemoved.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventMainnetAccountRemoved is not mutable")) + case "network.project.v1.EventMainnetAccountRemoved.address": + panic(fmt.Errorf("field address of message network.project.v1.EventMainnetAccountRemoved is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountRemoved")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventMainnetAccountRemoved) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetAccountRemoved.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventMainnetAccountRemoved.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetAccountRemoved")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetAccountRemoved does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventMainnetAccountRemoved) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventMainnetAccountRemoved", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventMainnetAccountRemoved) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetAccountRemoved) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventMainnetAccountRemoved) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventMainnetAccountRemoved) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventMainnetAccountRemoved) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetAccountRemoved) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetAccountRemoved) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetAccountRemoved: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetAccountRemoved: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventMainnetVestingAccountCreated protoreflect.MessageDescriptor + fd_EventMainnetVestingAccountCreated_projectID protoreflect.FieldDescriptor + fd_EventMainnetVestingAccountCreated_address protoreflect.FieldDescriptor + fd_EventMainnetVestingAccountCreated_vestingOptions protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventMainnetVestingAccountCreated = File_network_project_v1_events_proto.Messages().ByName("EventMainnetVestingAccountCreated") + fd_EventMainnetVestingAccountCreated_projectID = md_EventMainnetVestingAccountCreated.Fields().ByName("projectID") + fd_EventMainnetVestingAccountCreated_address = md_EventMainnetVestingAccountCreated.Fields().ByName("address") + fd_EventMainnetVestingAccountCreated_vestingOptions = md_EventMainnetVestingAccountCreated.Fields().ByName("vestingOptions") +} + +var _ protoreflect.Message = (*fastReflection_EventMainnetVestingAccountCreated)(nil) + +type fastReflection_EventMainnetVestingAccountCreated EventMainnetVestingAccountCreated + +func (x *EventMainnetVestingAccountCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventMainnetVestingAccountCreated)(x) +} + +func (x *EventMainnetVestingAccountCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_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) +} + +var _fastReflection_EventMainnetVestingAccountCreated_messageType fastReflection_EventMainnetVestingAccountCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventMainnetVestingAccountCreated_messageType{} + +type fastReflection_EventMainnetVestingAccountCreated_messageType struct{} + +func (x fastReflection_EventMainnetVestingAccountCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventMainnetVestingAccountCreated)(nil) +} +func (x fastReflection_EventMainnetVestingAccountCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventMainnetVestingAccountCreated) +} +func (x fastReflection_EventMainnetVestingAccountCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetVestingAccountCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventMainnetVestingAccountCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetVestingAccountCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventMainnetVestingAccountCreated) Type() protoreflect.MessageType { + return _fastReflection_EventMainnetVestingAccountCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventMainnetVestingAccountCreated) New() protoreflect.Message { + return new(fastReflection_EventMainnetVestingAccountCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventMainnetVestingAccountCreated) Interface() protoreflect.ProtoMessage { + return (*EventMainnetVestingAccountCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventMainnetVestingAccountCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventMainnetVestingAccountCreated_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventMainnetVestingAccountCreated_address, value) { + return + } + } + if x.VestingOptions != nil { + value := protoreflect.ValueOfMessage(x.VestingOptions.ProtoReflect()) + if !f(fd_EventMainnetVestingAccountCreated_vestingOptions, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventMainnetVestingAccountCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountCreated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventMainnetVestingAccountCreated.address": + return x.Address != "" + case "network.project.v1.EventMainnetVestingAccountCreated.vestingOptions": + return x.VestingOptions != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetVestingAccountCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountCreated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventMainnetVestingAccountCreated.address": + x.Address = "" + case "network.project.v1.EventMainnetVestingAccountCreated.vestingOptions": + x.VestingOptions = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventMainnetVestingAccountCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventMainnetVestingAccountCreated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventMainnetVestingAccountCreated.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.project.v1.EventMainnetVestingAccountCreated.vestingOptions": + value := x.VestingOptions + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetVestingAccountCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountCreated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventMainnetVestingAccountCreated.address": + x.Address = value.Interface().(string) + case "network.project.v1.EventMainnetVestingAccountCreated.vestingOptions": + x.VestingOptions = value.Message().Interface().(*ShareVestingOptions) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetVestingAccountCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountCreated.vestingOptions": + if x.VestingOptions == nil { + x.VestingOptions = new(ShareVestingOptions) + } + return protoreflect.ValueOfMessage(x.VestingOptions.ProtoReflect()) + case "network.project.v1.EventMainnetVestingAccountCreated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventMainnetVestingAccountCreated is not mutable")) + case "network.project.v1.EventMainnetVestingAccountCreated.address": + panic(fmt.Errorf("field address of message network.project.v1.EventMainnetVestingAccountCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventMainnetVestingAccountCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountCreated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventMainnetVestingAccountCreated.address": + return protoreflect.ValueOfString("") + case "network.project.v1.EventMainnetVestingAccountCreated.vestingOptions": + m := new(ShareVestingOptions) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventMainnetVestingAccountCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventMainnetVestingAccountCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventMainnetVestingAccountCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetVestingAccountCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventMainnetVestingAccountCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventMainnetVestingAccountCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventMainnetVestingAccountCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.VestingOptions != nil { + l = options.Size(x.VestingOptions) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetVestingAccountCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.VestingOptions != nil { + encoded, err := options.Marshal(x.VestingOptions) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetVestingAccountCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetVestingAccountCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetVestingAccountCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VestingOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.VestingOptions == nil { + x.VestingOptions = &ShareVestingOptions{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VestingOptions); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventMainnetVestingAccountUpdated protoreflect.MessageDescriptor + fd_EventMainnetVestingAccountUpdated_projectID protoreflect.FieldDescriptor + fd_EventMainnetVestingAccountUpdated_address protoreflect.FieldDescriptor + fd_EventMainnetVestingAccountUpdated_vestingOptions protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventMainnetVestingAccountUpdated = File_network_project_v1_events_proto.Messages().ByName("EventMainnetVestingAccountUpdated") + fd_EventMainnetVestingAccountUpdated_projectID = md_EventMainnetVestingAccountUpdated.Fields().ByName("projectID") + fd_EventMainnetVestingAccountUpdated_address = md_EventMainnetVestingAccountUpdated.Fields().ByName("address") + fd_EventMainnetVestingAccountUpdated_vestingOptions = md_EventMainnetVestingAccountUpdated.Fields().ByName("vestingOptions") +} + +var _ protoreflect.Message = (*fastReflection_EventMainnetVestingAccountUpdated)(nil) + +type fastReflection_EventMainnetVestingAccountUpdated EventMainnetVestingAccountUpdated + +func (x *EventMainnetVestingAccountUpdated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventMainnetVestingAccountUpdated)(x) +} + +func (x *EventMainnetVestingAccountUpdated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_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) +} + +var _fastReflection_EventMainnetVestingAccountUpdated_messageType fastReflection_EventMainnetVestingAccountUpdated_messageType +var _ protoreflect.MessageType = fastReflection_EventMainnetVestingAccountUpdated_messageType{} + +type fastReflection_EventMainnetVestingAccountUpdated_messageType struct{} + +func (x fastReflection_EventMainnetVestingAccountUpdated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventMainnetVestingAccountUpdated)(nil) +} +func (x fastReflection_EventMainnetVestingAccountUpdated_messageType) New() protoreflect.Message { + return new(fastReflection_EventMainnetVestingAccountUpdated) +} +func (x fastReflection_EventMainnetVestingAccountUpdated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetVestingAccountUpdated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Descriptor() protoreflect.MessageDescriptor { + return md_EventMainnetVestingAccountUpdated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Type() protoreflect.MessageType { + return _fastReflection_EventMainnetVestingAccountUpdated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventMainnetVestingAccountUpdated) New() protoreflect.Message { + return new(fastReflection_EventMainnetVestingAccountUpdated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Interface() protoreflect.ProtoMessage { + return (*EventMainnetVestingAccountUpdated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventMainnetVestingAccountUpdated_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_EventMainnetVestingAccountUpdated_address, value) { + return + } + } + if x.VestingOptions != nil { + value := protoreflect.ValueOfMessage(x.VestingOptions.ProtoReflect()) + if !f(fd_EventMainnetVestingAccountUpdated_vestingOptions, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountUpdated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventMainnetVestingAccountUpdated.address": + return x.Address != "" + case "network.project.v1.EventMainnetVestingAccountUpdated.vestingOptions": + return x.VestingOptions != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountUpdated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventMainnetVestingAccountUpdated.address": + x.Address = "" + case "network.project.v1.EventMainnetVestingAccountUpdated.vestingOptions": + x.VestingOptions = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventMainnetVestingAccountUpdated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventMainnetVestingAccountUpdated.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.project.v1.EventMainnetVestingAccountUpdated.vestingOptions": + value := x.VestingOptions + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountUpdated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountUpdated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventMainnetVestingAccountUpdated.address": + x.Address = value.Interface().(string) + case "network.project.v1.EventMainnetVestingAccountUpdated.vestingOptions": + x.VestingOptions = value.Message().Interface().(*ShareVestingOptions) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetVestingAccountUpdated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountUpdated.vestingOptions": + if x.VestingOptions == nil { + x.VestingOptions = new(ShareVestingOptions) + } + return protoreflect.ValueOfMessage(x.VestingOptions.ProtoReflect()) + case "network.project.v1.EventMainnetVestingAccountUpdated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventMainnetVestingAccountUpdated is not mutable")) + case "network.project.v1.EventMainnetVestingAccountUpdated.address": + panic(fmt.Errorf("field address of message network.project.v1.EventMainnetVestingAccountUpdated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventMainnetVestingAccountUpdated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventMainnetVestingAccountUpdated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventMainnetVestingAccountUpdated.address": + return protoreflect.ValueOfString("") + case "network.project.v1.EventMainnetVestingAccountUpdated.vestingOptions": + m := new(ShareVestingOptions) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventMainnetVestingAccountUpdated")) + } + panic(fmt.Errorf("message network.project.v1.EventMainnetVestingAccountUpdated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventMainnetVestingAccountUpdated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventMainnetVestingAccountUpdated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventMainnetVestingAccountUpdated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventMainnetVestingAccountUpdated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventMainnetVestingAccountUpdated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventMainnetVestingAccountUpdated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventMainnetVestingAccountUpdated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.VestingOptions != nil { + l = options.Size(x.VestingOptions) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetVestingAccountUpdated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.VestingOptions != nil { + encoded, err := options.Marshal(x.VestingOptions) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventMainnetVestingAccountUpdated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetVestingAccountUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventMainnetVestingAccountUpdated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VestingOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.VestingOptions == nil { + x.VestingOptions = &ShareVestingOptions{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.VestingOptions); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventProjectAuctionCreated protoreflect.MessageDescriptor + fd_EventProjectAuctionCreated_projectID protoreflect.FieldDescriptor + fd_EventProjectAuctionCreated_auctionID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_events_proto_init() + md_EventProjectAuctionCreated = File_network_project_v1_events_proto.Messages().ByName("EventProjectAuctionCreated") + fd_EventProjectAuctionCreated_projectID = md_EventProjectAuctionCreated.Fields().ByName("projectID") + fd_EventProjectAuctionCreated_auctionID = md_EventProjectAuctionCreated.Fields().ByName("auctionID") +} + +var _ protoreflect.Message = (*fastReflection_EventProjectAuctionCreated)(nil) + +type fastReflection_EventProjectAuctionCreated EventProjectAuctionCreated + +func (x *EventProjectAuctionCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventProjectAuctionCreated)(x) +} + +func (x *EventProjectAuctionCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_events_proto_msgTypes[11] + 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) +} + +var _fastReflection_EventProjectAuctionCreated_messageType fastReflection_EventProjectAuctionCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventProjectAuctionCreated_messageType{} + +type fastReflection_EventProjectAuctionCreated_messageType struct{} + +func (x fastReflection_EventProjectAuctionCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventProjectAuctionCreated)(nil) +} +func (x fastReflection_EventProjectAuctionCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventProjectAuctionCreated) +} +func (x fastReflection_EventProjectAuctionCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectAuctionCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventProjectAuctionCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventProjectAuctionCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventProjectAuctionCreated) Type() protoreflect.MessageType { + return _fastReflection_EventProjectAuctionCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventProjectAuctionCreated) New() protoreflect.Message { + return new(fastReflection_EventProjectAuctionCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventProjectAuctionCreated) Interface() protoreflect.ProtoMessage { + return (*EventProjectAuctionCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventProjectAuctionCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_EventProjectAuctionCreated_projectID, value) { + return + } + } + if x.AuctionID != uint64(0) { + value := protoreflect.ValueOfUint64(x.AuctionID) + if !f(fd_EventProjectAuctionCreated_auctionID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventProjectAuctionCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.EventProjectAuctionCreated.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.EventProjectAuctionCreated.auctionID": + return x.AuctionID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectAuctionCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectAuctionCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectAuctionCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.EventProjectAuctionCreated.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.EventProjectAuctionCreated.auctionID": + x.AuctionID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectAuctionCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectAuctionCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventProjectAuctionCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.EventProjectAuctionCreated.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.EventProjectAuctionCreated.auctionID": + value := x.AuctionID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectAuctionCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectAuctionCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectAuctionCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.EventProjectAuctionCreated.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.EventProjectAuctionCreated.auctionID": + x.AuctionID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectAuctionCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectAuctionCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectAuctionCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectAuctionCreated.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.EventProjectAuctionCreated is not mutable")) + case "network.project.v1.EventProjectAuctionCreated.auctionID": + panic(fmt.Errorf("field auctionID of message network.project.v1.EventProjectAuctionCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectAuctionCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectAuctionCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventProjectAuctionCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.EventProjectAuctionCreated.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.EventProjectAuctionCreated.auctionID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.EventProjectAuctionCreated")) + } + panic(fmt.Errorf("message network.project.v1.EventProjectAuctionCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventProjectAuctionCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.EventProjectAuctionCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventProjectAuctionCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventProjectAuctionCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventProjectAuctionCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventProjectAuctionCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventProjectAuctionCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.AuctionID != 0 { + n += 1 + runtime.Sov(uint64(x.AuctionID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventProjectAuctionCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.AuctionID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.AuctionID)) + i-- + dAtA[i] = 0x10 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventProjectAuctionCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectAuctionCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventProjectAuctionCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) + } + x.AuctionID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.AuctionID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/events.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EventProjectCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,2,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` + CoordinatorID uint64 `protobuf:"varint,3,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` +} + +func (x *EventProjectCreated) Reset() { + *x = EventProjectCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventProjectCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventProjectCreated) ProtoMessage() {} + +// Deprecated: Use EventProjectCreated.ProtoReflect.Descriptor instead. +func (*EventProjectCreated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{0} +} + +func (x *EventProjectCreated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventProjectCreated) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +func (x *EventProjectCreated) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +type EventProjectChainAdded struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *EventProjectChainAdded) Reset() { + *x = EventProjectChainAdded{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventProjectChainAdded) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventProjectChainAdded) ProtoMessage() {} + +// Deprecated: Use EventProjectChainAdded.ProtoReflect.Descriptor instead. +func (*EventProjectChainAdded) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{1} +} + +func (x *EventProjectChainAdded) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventProjectChainAdded) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type EventProjectInfoUpdated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,2,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` + ProjectName string `protobuf:"bytes,3,opt,name=projectName,proto3" json:"projectName,omitempty"` + Metadata []byte `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *EventProjectInfoUpdated) Reset() { + *x = EventProjectInfoUpdated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventProjectInfoUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventProjectInfoUpdated) ProtoMessage() {} + +// Deprecated: Use EventProjectInfoUpdated.ProtoReflect.Descriptor instead. +func (*EventProjectInfoUpdated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{2} +} + +func (x *EventProjectInfoUpdated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventProjectInfoUpdated) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +func (x *EventProjectInfoUpdated) GetProjectName() string { + if x != nil { + return x.ProjectName + } + return "" +} + +func (x *EventProjectInfoUpdated) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +type EventProjectSharesUpdated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,2,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` + AllocatedShares []*v1beta1.Coin `protobuf:"bytes,3,rep,name=allocatedShares,proto3" json:"allocatedShares,omitempty"` +} + +func (x *EventProjectSharesUpdated) Reset() { + *x = EventProjectSharesUpdated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventProjectSharesUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventProjectSharesUpdated) ProtoMessage() {} + +// Deprecated: Use EventProjectSharesUpdated.ProtoReflect.Descriptor instead. +func (*EventProjectSharesUpdated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{3} +} + +func (x *EventProjectSharesUpdated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventProjectSharesUpdated) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +func (x *EventProjectSharesUpdated) GetAllocatedShares() []*v1beta1.Coin { + if x != nil { + return x.AllocatedShares + } + return nil +} + +type EventProjectTotalSupplyUpdated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,2,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` + TotalSupply []*v1beta1.Coin `protobuf:"bytes,3,rep,name=totalSupply,proto3" json:"totalSupply,omitempty"` +} + +func (x *EventProjectTotalSupplyUpdated) Reset() { + *x = EventProjectTotalSupplyUpdated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventProjectTotalSupplyUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventProjectTotalSupplyUpdated) ProtoMessage() {} + +// Deprecated: Use EventProjectTotalSupplyUpdated.ProtoReflect.Descriptor instead. +func (*EventProjectTotalSupplyUpdated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{4} +} + +func (x *EventProjectTotalSupplyUpdated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventProjectTotalSupplyUpdated) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +func (x *EventProjectTotalSupplyUpdated) GetTotalSupply() []*v1beta1.Coin { + if x != nil { + return x.TotalSupply + } + return nil +} + +type EventProjectMainnetInitialized struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + CoordinatorAddress string `protobuf:"bytes,2,opt,name=coordinatorAddress,proto3" json:"coordinatorAddress,omitempty"` + MainnetID uint64 `protobuf:"varint,3,opt,name=mainnetID,proto3" json:"mainnetID,omitempty"` +} + +func (x *EventProjectMainnetInitialized) Reset() { + *x = EventProjectMainnetInitialized{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventProjectMainnetInitialized) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventProjectMainnetInitialized) ProtoMessage() {} + +// Deprecated: Use EventProjectMainnetInitialized.ProtoReflect.Descriptor instead. +func (*EventProjectMainnetInitialized) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{5} +} + +func (x *EventProjectMainnetInitialized) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventProjectMainnetInitialized) GetCoordinatorAddress() string { + if x != nil { + return x.CoordinatorAddress + } + return "" +} + +func (x *EventProjectMainnetInitialized) GetMainnetID() uint64 { + if x != nil { + return x.MainnetID + } + return 0 +} + +type EventMainnetAccountCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Shares []*v1beta1.Coin `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"` +} + +func (x *EventMainnetAccountCreated) Reset() { + *x = EventMainnetAccountCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventMainnetAccountCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventMainnetAccountCreated) ProtoMessage() {} + +// Deprecated: Use EventMainnetAccountCreated.ProtoReflect.Descriptor instead. +func (*EventMainnetAccountCreated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{6} +} + +func (x *EventMainnetAccountCreated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventMainnetAccountCreated) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventMainnetAccountCreated) GetShares() []*v1beta1.Coin { + if x != nil { + return x.Shares + } + return nil +} + +type EventMainnetAccountUpdated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Shares []*v1beta1.Coin `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"` +} + +func (x *EventMainnetAccountUpdated) Reset() { + *x = EventMainnetAccountUpdated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventMainnetAccountUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventMainnetAccountUpdated) ProtoMessage() {} + +// Deprecated: Use EventMainnetAccountUpdated.ProtoReflect.Descriptor instead. +func (*EventMainnetAccountUpdated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{7} +} + +func (x *EventMainnetAccountUpdated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventMainnetAccountUpdated) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventMainnetAccountUpdated) GetShares() []*v1beta1.Coin { + if x != nil { + return x.Shares + } + return nil +} + +type EventMainnetAccountRemoved struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *EventMainnetAccountRemoved) Reset() { + *x = EventMainnetAccountRemoved{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventMainnetAccountRemoved) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventMainnetAccountRemoved) ProtoMessage() {} + +// Deprecated: Use EventMainnetAccountRemoved.ProtoReflect.Descriptor instead. +func (*EventMainnetAccountRemoved) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{8} +} + +func (x *EventMainnetAccountRemoved) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventMainnetAccountRemoved) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type EventMainnetVestingAccountCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + VestingOptions *ShareVestingOptions `protobuf:"bytes,3,opt,name=vestingOptions,proto3" json:"vestingOptions,omitempty"` +} + +func (x *EventMainnetVestingAccountCreated) Reset() { + *x = EventMainnetVestingAccountCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventMainnetVestingAccountCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventMainnetVestingAccountCreated) ProtoMessage() {} + +// Deprecated: Use EventMainnetVestingAccountCreated.ProtoReflect.Descriptor instead. +func (*EventMainnetVestingAccountCreated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{9} +} + +func (x *EventMainnetVestingAccountCreated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventMainnetVestingAccountCreated) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventMainnetVestingAccountCreated) GetVestingOptions() *ShareVestingOptions { + if x != nil { + return x.VestingOptions + } + return nil +} + +type EventMainnetVestingAccountUpdated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + VestingOptions *ShareVestingOptions `protobuf:"bytes,3,opt,name=vestingOptions,proto3" json:"vestingOptions,omitempty"` +} + +func (x *EventMainnetVestingAccountUpdated) Reset() { + *x = EventMainnetVestingAccountUpdated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventMainnetVestingAccountUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventMainnetVestingAccountUpdated) ProtoMessage() {} + +// Deprecated: Use EventMainnetVestingAccountUpdated.ProtoReflect.Descriptor instead. +func (*EventMainnetVestingAccountUpdated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{10} +} + +func (x *EventMainnetVestingAccountUpdated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventMainnetVestingAccountUpdated) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *EventMainnetVestingAccountUpdated) GetVestingOptions() *ShareVestingOptions { + if x != nil { + return x.VestingOptions + } + return nil +} + +type EventProjectAuctionCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` +} + +func (x *EventProjectAuctionCreated) Reset() { + *x = EventProjectAuctionCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_events_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventProjectAuctionCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventProjectAuctionCreated) ProtoMessage() {} + +// Deprecated: Use EventProjectAuctionCreated.ProtoReflect.Descriptor instead. +func (*EventProjectAuctionCreated) Descriptor() ([]byte, []int) { + return file_network_project_v1_events_proto_rawDescGZIP(), []int{11} +} + +func (x *EventProjectAuctionCreated) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *EventProjectAuctionCreated) GetAuctionID() uint64 { + if x != nil { + return x.AuctionID + } + return 0 +} + +var File_network_project_v1_events_proto protoreflect.FileDescriptor + +var file_network_project_v1_events_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, + 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, + 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, + 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa3, 0x01, 0x0a, 0x13, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x12, 0x48, 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, + 0x44, 0x22, 0x52, 0x0a, 0x16, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x49, 0x44, 0x22, 0xbf, 0x01, 0x0a, 0x17, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, + 0x48, 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, + 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, + 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9a, 0x02, 0x0a, 0x19, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, + 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x94, 0x01, + 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x9a, 0xe7, 0xb0, + 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x1e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x48, 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0xae, 0x01, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, + 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, + 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, + 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, + 0x22, 0xa6, 0x01, 0x0a, 0x1e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x12, 0x48, 0x0a, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6d, + 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x49, 0x44, 0x22, 0xf3, 0x01, 0x0a, 0x1a, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, + 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, + 0xf3, 0x01, 0x0a, 0x1a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x82, 0x01, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, + 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, + 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, + 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, + 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x61, + 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x21, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, + 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, + 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x21, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x61, + 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x0e, + 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x56, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, 0xc8, + 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x58, 0x0a, 0x1a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x42, 0xcb, 0x01, + 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_v1_events_proto_rawDescOnce sync.Once + file_network_project_v1_events_proto_rawDescData = file_network_project_v1_events_proto_rawDesc +) + +func file_network_project_v1_events_proto_rawDescGZIP() []byte { + file_network_project_v1_events_proto_rawDescOnce.Do(func() { + file_network_project_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_events_proto_rawDescData) + }) + return file_network_project_v1_events_proto_rawDescData +} + +var file_network_project_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_network_project_v1_events_proto_goTypes = []interface{}{ + (*EventProjectCreated)(nil), // 0: network.project.v1.EventProjectCreated + (*EventProjectChainAdded)(nil), // 1: network.project.v1.EventProjectChainAdded + (*EventProjectInfoUpdated)(nil), // 2: network.project.v1.EventProjectInfoUpdated + (*EventProjectSharesUpdated)(nil), // 3: network.project.v1.EventProjectSharesUpdated + (*EventProjectTotalSupplyUpdated)(nil), // 4: network.project.v1.EventProjectTotalSupplyUpdated + (*EventProjectMainnetInitialized)(nil), // 5: network.project.v1.EventProjectMainnetInitialized + (*EventMainnetAccountCreated)(nil), // 6: network.project.v1.EventMainnetAccountCreated + (*EventMainnetAccountUpdated)(nil), // 7: network.project.v1.EventMainnetAccountUpdated + (*EventMainnetAccountRemoved)(nil), // 8: network.project.v1.EventMainnetAccountRemoved + (*EventMainnetVestingAccountCreated)(nil), // 9: network.project.v1.EventMainnetVestingAccountCreated + (*EventMainnetVestingAccountUpdated)(nil), // 10: network.project.v1.EventMainnetVestingAccountUpdated + (*EventProjectAuctionCreated)(nil), // 11: network.project.v1.EventProjectAuctionCreated + (*v1beta1.Coin)(nil), // 12: cosmos.base.v1beta1.Coin + (*ShareVestingOptions)(nil), // 13: network.project.v1.ShareVestingOptions +} +var file_network_project_v1_events_proto_depIdxs = []int32{ + 12, // 0: network.project.v1.EventProjectSharesUpdated.allocatedShares:type_name -> cosmos.base.v1beta1.Coin + 12, // 1: network.project.v1.EventProjectTotalSupplyUpdated.totalSupply:type_name -> cosmos.base.v1beta1.Coin + 12, // 2: network.project.v1.EventMainnetAccountCreated.shares:type_name -> cosmos.base.v1beta1.Coin + 12, // 3: network.project.v1.EventMainnetAccountUpdated.shares:type_name -> cosmos.base.v1beta1.Coin + 13, // 4: network.project.v1.EventMainnetVestingAccountCreated.vestingOptions:type_name -> network.project.v1.ShareVestingOptions + 13, // 5: network.project.v1.EventMainnetVestingAccountUpdated.vestingOptions:type_name -> network.project.v1.ShareVestingOptions + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_network_project_v1_events_proto_init() } +func file_network_project_v1_events_proto_init() { + if File_network_project_v1_events_proto != nil { + return + } + file_network_project_v1_vesting_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_project_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventProjectCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventProjectChainAdded); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventProjectInfoUpdated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventProjectSharesUpdated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventProjectTotalSupplyUpdated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventProjectMainnetInitialized); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventMainnetAccountCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventMainnetAccountUpdated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventMainnetAccountRemoved); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventMainnetVestingAccountCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventMainnetVestingAccountUpdated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_events_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventProjectAuctionCreated); 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_network_project_v1_events_proto_rawDesc, + NumEnums: 0, + NumMessages: 12, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_events_proto_goTypes, + DependencyIndexes: file_network_project_v1_events_proto_depIdxs, + MessageInfos: file_network_project_v1_events_proto_msgTypes, + }.Build() + File_network_project_v1_events_proto = out.File + file_network_project_v1_events_proto_rawDesc = nil + file_network_project_v1_events_proto_goTypes = nil + file_network_project_v1_events_proto_depIdxs = nil +} diff --git a/api/network/project/v1/genesis.pulsar.go b/api/network/project/v1/genesis.pulsar.go new file mode 100644 index 00000000..8e398c6e --- /dev/null +++ b/api/network/project/v1/genesis.pulsar.go @@ -0,0 +1,1184 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_GenesisState_2_list)(nil) + +type _GenesisState_2_list struct { + list *[]*Project +} + +func (x *_GenesisState_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Project) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Project) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_2_list) AppendMutable() protoreflect.Value { + v := new(Project) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_2_list) NewElement() protoreflect.Value { + v := new(Project) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_4_list)(nil) + +type _GenesisState_4_list struct { + list *[]*ProjectChains +} + +func (x *_GenesisState_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ProjectChains) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*ProjectChains) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_4_list) AppendMutable() protoreflect.Value { + v := new(ProjectChains) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_4_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_4_list) NewElement() protoreflect.Value { + v := new(ProjectChains) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_4_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_GenesisState_5_list)(nil) + +type _GenesisState_5_list struct { + list *[]*MainnetAccount +} + +func (x *_GenesisState_5_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_5_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_5_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*MainnetAccount) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_5_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*MainnetAccount) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_5_list) AppendMutable() protoreflect.Value { + v := new(MainnetAccount) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_5_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_5_list) NewElement() protoreflect.Value { + v := new(MainnetAccount) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_5_list) IsValid() bool { + return x.list != nil +} + +var ( + md_GenesisState protoreflect.MessageDescriptor + fd_GenesisState_params protoreflect.FieldDescriptor + fd_GenesisState_projectList protoreflect.FieldDescriptor + fd_GenesisState_projectCount protoreflect.FieldDescriptor + fd_GenesisState_projectChainsList protoreflect.FieldDescriptor + fd_GenesisState_mainnetAccountList protoreflect.FieldDescriptor + fd_GenesisState_totalShares protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_genesis_proto_init() + md_GenesisState = File_network_project_v1_genesis_proto.Messages().ByName("GenesisState") + fd_GenesisState_params = md_GenesisState.Fields().ByName("params") + fd_GenesisState_projectList = md_GenesisState.Fields().ByName("projectList") + fd_GenesisState_projectCount = md_GenesisState.Fields().ByName("projectCount") + fd_GenesisState_projectChainsList = md_GenesisState.Fields().ByName("projectChainsList") + fd_GenesisState_mainnetAccountList = md_GenesisState.Fields().ByName("mainnetAccountList") + fd_GenesisState_totalShares = md_GenesisState.Fields().ByName("totalShares") +} + +var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) + +type fastReflection_GenesisState GenesisState + +func (x *GenesisState) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisState)(x) +} + +func (x *GenesisState) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_genesis_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) +} + +var _fastReflection_GenesisState_messageType fastReflection_GenesisState_messageType +var _ protoreflect.MessageType = fastReflection_GenesisState_messageType{} + +type fastReflection_GenesisState_messageType struct{} + +func (x fastReflection_GenesisState_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisState)(nil) +} +func (x fastReflection_GenesisState_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} +func (x fastReflection_GenesisState_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisState) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisState) Type() protoreflect.MessageType { + return _fastReflection_GenesisState_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisState) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisState) Interface() protoreflect.ProtoMessage { + return (*GenesisState)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_GenesisState_params, value) { + return + } + } + if len(x.ProjectList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_2_list{list: &x.ProjectList}) + if !f(fd_GenesisState_projectList, value) { + return + } + } + if x.ProjectCount != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectCount) + if !f(fd_GenesisState_projectCount, value) { + return + } + } + if len(x.ProjectChainsList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_4_list{list: &x.ProjectChainsList}) + if !f(fd_GenesisState_projectChainsList, value) { + return + } + } + if len(x.MainnetAccountList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_5_list{list: &x.MainnetAccountList}) + if !f(fd_GenesisState_mainnetAccountList, value) { + return + } + } + if x.TotalShares != uint64(0) { + value := protoreflect.ValueOfUint64(x.TotalShares) + if !f(fd_GenesisState_totalShares, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.GenesisState.params": + return x.Params != nil + case "network.project.v1.GenesisState.projectList": + return len(x.ProjectList) != 0 + case "network.project.v1.GenesisState.projectCount": + return x.ProjectCount != uint64(0) + case "network.project.v1.GenesisState.projectChainsList": + return len(x.ProjectChainsList) != 0 + case "network.project.v1.GenesisState.mainnetAccountList": + return len(x.MainnetAccountList) != 0 + case "network.project.v1.GenesisState.totalShares": + return x.TotalShares != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.GenesisState")) + } + panic(fmt.Errorf("message network.project.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.GenesisState.params": + x.Params = nil + case "network.project.v1.GenesisState.projectList": + x.ProjectList = nil + case "network.project.v1.GenesisState.projectCount": + x.ProjectCount = uint64(0) + case "network.project.v1.GenesisState.projectChainsList": + x.ProjectChainsList = nil + case "network.project.v1.GenesisState.mainnetAccountList": + x.MainnetAccountList = nil + case "network.project.v1.GenesisState.totalShares": + x.TotalShares = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.GenesisState")) + } + panic(fmt.Errorf("message network.project.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.GenesisState.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.project.v1.GenesisState.projectList": + if len(x.ProjectList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_2_list{}) + } + listValue := &_GenesisState_2_list{list: &x.ProjectList} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.GenesisState.projectCount": + value := x.ProjectCount + return protoreflect.ValueOfUint64(value) + case "network.project.v1.GenesisState.projectChainsList": + if len(x.ProjectChainsList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_4_list{}) + } + listValue := &_GenesisState_4_list{list: &x.ProjectChainsList} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.GenesisState.mainnetAccountList": + if len(x.MainnetAccountList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_5_list{}) + } + listValue := &_GenesisState_5_list{list: &x.MainnetAccountList} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.GenesisState.totalShares": + value := x.TotalShares + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.GenesisState")) + } + panic(fmt.Errorf("message network.project.v1.GenesisState does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.GenesisState.params": + x.Params = value.Message().Interface().(*Params) + case "network.project.v1.GenesisState.projectList": + lv := value.List() + clv := lv.(*_GenesisState_2_list) + x.ProjectList = *clv.list + case "network.project.v1.GenesisState.projectCount": + x.ProjectCount = value.Uint() + case "network.project.v1.GenesisState.projectChainsList": + lv := value.List() + clv := lv.(*_GenesisState_4_list) + x.ProjectChainsList = *clv.list + case "network.project.v1.GenesisState.mainnetAccountList": + lv := value.List() + clv := lv.(*_GenesisState_5_list) + x.MainnetAccountList = *clv.list + case "network.project.v1.GenesisState.totalShares": + x.TotalShares = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.GenesisState")) + } + panic(fmt.Errorf("message network.project.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.GenesisState.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.project.v1.GenesisState.projectList": + if x.ProjectList == nil { + x.ProjectList = []*Project{} + } + value := &_GenesisState_2_list{list: &x.ProjectList} + return protoreflect.ValueOfList(value) + case "network.project.v1.GenesisState.projectChainsList": + if x.ProjectChainsList == nil { + x.ProjectChainsList = []*ProjectChains{} + } + value := &_GenesisState_4_list{list: &x.ProjectChainsList} + return protoreflect.ValueOfList(value) + case "network.project.v1.GenesisState.mainnetAccountList": + if x.MainnetAccountList == nil { + x.MainnetAccountList = []*MainnetAccount{} + } + value := &_GenesisState_5_list{list: &x.MainnetAccountList} + return protoreflect.ValueOfList(value) + case "network.project.v1.GenesisState.projectCount": + panic(fmt.Errorf("field projectCount of message network.project.v1.GenesisState is not mutable")) + case "network.project.v1.GenesisState.totalShares": + panic(fmt.Errorf("field totalShares of message network.project.v1.GenesisState is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.GenesisState")) + } + panic(fmt.Errorf("message network.project.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.GenesisState.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.project.v1.GenesisState.projectList": + list := []*Project{} + return protoreflect.ValueOfList(&_GenesisState_2_list{list: &list}) + case "network.project.v1.GenesisState.projectCount": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.GenesisState.projectChainsList": + list := []*ProjectChains{} + return protoreflect.ValueOfList(&_GenesisState_4_list{list: &list}) + case "network.project.v1.GenesisState.mainnetAccountList": + list := []*MainnetAccount{} + return protoreflect.ValueOfList(&_GenesisState_5_list{list: &list}) + case "network.project.v1.GenesisState.totalShares": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.GenesisState")) + } + panic(fmt.Errorf("message network.project.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisState) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.GenesisState", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisState) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisState) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.ProjectList) > 0 { + for _, e := range x.ProjectList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.ProjectCount != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectCount)) + } + if len(x.ProjectChainsList) > 0 { + for _, e := range x.ProjectChainsList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.MainnetAccountList) > 0 { + for _, e := range x.MainnetAccountList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.TotalShares != 0 { + n += 1 + runtime.Sov(uint64(x.TotalShares)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.TotalShares != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.TotalShares)) + i-- + dAtA[i] = 0x30 + } + if len(x.MainnetAccountList) > 0 { + for iNdEx := len(x.MainnetAccountList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.MainnetAccountList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x2a + } + } + if len(x.ProjectChainsList) > 0 { + for iNdEx := len(x.ProjectChainsList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ProjectChainsList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + } + if x.ProjectCount != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectCount)) + i-- + dAtA[i] = 0x18 + } + if len(x.ProjectList) > 0 { + for iNdEx := len(x.ProjectList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ProjectList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProjectList = append(x.ProjectList, &Project{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ProjectList[len(x.ProjectList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectCount", wireType) + } + x.ProjectCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectChainsList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProjectChainsList = append(x.ProjectChainsList, &ProjectChains{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ProjectChainsList[len(x.ProjectChainsList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetAccountList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MainnetAccountList = append(x.MainnetAccountList, &MainnetAccount{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MainnetAccountList[len(x.MainnetAccountList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalShares", wireType) + } + x.TotalShares = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.TotalShares |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/genesis.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// GenesisState defines the project module's genesis state. +type GenesisState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params defines all the parameters of the module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + ProjectList []*Project `protobuf:"bytes,2,rep,name=projectList,proto3" json:"projectList,omitempty"` + ProjectCount uint64 `protobuf:"varint,3,opt,name=projectCount,proto3" json:"projectCount,omitempty"` + ProjectChainsList []*ProjectChains `protobuf:"bytes,4,rep,name=projectChainsList,proto3" json:"projectChainsList,omitempty"` + MainnetAccountList []*MainnetAccount `protobuf:"bytes,5,rep,name=mainnetAccountList,proto3" json:"mainnetAccountList,omitempty"` + TotalShares uint64 `protobuf:"varint,6,opt,name=totalShares,proto3" json:"totalShares,omitempty"` +} + +func (x *GenesisState) Reset() { + *x = GenesisState{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_genesis_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisState) ProtoMessage() {} + +// Deprecated: Use GenesisState.ProtoReflect.Descriptor instead. +func (*GenesisState) Descriptor() ([]byte, []int) { + return file_network_project_v1_genesis_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisState) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +func (x *GenesisState) GetProjectList() []*Project { + if x != nil { + return x.ProjectList + } + return nil +} + +func (x *GenesisState) GetProjectCount() uint64 { + if x != nil { + return x.ProjectCount + } + return 0 +} + +func (x *GenesisState) GetProjectChainsList() []*ProjectChains { + if x != nil { + return x.ProjectChainsList + } + return nil +} + +func (x *GenesisState) GetMainnetAccountList() []*MainnetAccount { + if x != nil { + return x.MainnetAccountList + } + return nil +} + +func (x *GenesisState) GetTotalShares() uint64 { + if x != nil { + return x.TotalShares + } + return 0 +} + +var File_network_project_v1_genesis_proto protoreflect.FileDescriptor + +var file_network_project_v1_genesis_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, + 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x28, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x89, 0x03, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x55, + 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x12, 0x6d, 0x61, 0x69, + 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x42, 0xcc, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x47, 0x65, + 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, + 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_v1_genesis_proto_rawDescOnce sync.Once + file_network_project_v1_genesis_proto_rawDescData = file_network_project_v1_genesis_proto_rawDesc +) + +func file_network_project_v1_genesis_proto_rawDescGZIP() []byte { + file_network_project_v1_genesis_proto_rawDescOnce.Do(func() { + file_network_project_v1_genesis_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_genesis_proto_rawDescData) + }) + return file_network_project_v1_genesis_proto_rawDescData +} + +var file_network_project_v1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_project_v1_genesis_proto_goTypes = []interface{}{ + (*GenesisState)(nil), // 0: network.project.v1.GenesisState + (*Params)(nil), // 1: network.project.v1.Params + (*Project)(nil), // 2: network.project.v1.Project + (*ProjectChains)(nil), // 3: network.project.v1.ProjectChains + (*MainnetAccount)(nil), // 4: network.project.v1.MainnetAccount +} +var file_network_project_v1_genesis_proto_depIdxs = []int32{ + 1, // 0: network.project.v1.GenesisState.params:type_name -> network.project.v1.Params + 2, // 1: network.project.v1.GenesisState.projectList:type_name -> network.project.v1.Project + 3, // 2: network.project.v1.GenesisState.projectChainsList:type_name -> network.project.v1.ProjectChains + 4, // 3: network.project.v1.GenesisState.mainnetAccountList:type_name -> network.project.v1.MainnetAccount + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] 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_network_project_v1_genesis_proto_init() } +func file_network_project_v1_genesis_proto_init() { + if File_network_project_v1_genesis_proto != nil { + return + } + file_network_project_v1_mainnet_account_proto_init() + file_network_project_v1_params_proto_init() + file_network_project_v1_project_proto_init() + file_network_project_v1_project_chains_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_project_v1_genesis_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisState); 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_network_project_v1_genesis_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_genesis_proto_goTypes, + DependencyIndexes: file_network_project_v1_genesis_proto_depIdxs, + MessageInfos: file_network_project_v1_genesis_proto_msgTypes, + }.Build() + File_network_project_v1_genesis_proto = out.File + file_network_project_v1_genesis_proto_rawDesc = nil + file_network_project_v1_genesis_proto_goTypes = nil + file_network_project_v1_genesis_proto_depIdxs = nil +} diff --git a/api/network/project/v1/mainnet_account.pulsar.go b/api/network/project/v1/mainnet_account.pulsar.go new file mode 100644 index 00000000..f8808493 --- /dev/null +++ b/api/network/project/v1/mainnet_account.pulsar.go @@ -0,0 +1,1484 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_MainnetAccount_3_list)(nil) + +type _MainnetAccount_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MainnetAccount_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MainnetAccount_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MainnetAccount_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MainnetAccount_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MainnetAccount_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MainnetAccount_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MainnetAccount_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MainnetAccount_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MainnetAccount protoreflect.MessageDescriptor + fd_MainnetAccount_projectID protoreflect.FieldDescriptor + fd_MainnetAccount_address protoreflect.FieldDescriptor + fd_MainnetAccount_shares protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_mainnet_account_proto_init() + md_MainnetAccount = File_network_project_v1_mainnet_account_proto.Messages().ByName("MainnetAccount") + fd_MainnetAccount_projectID = md_MainnetAccount.Fields().ByName("projectID") + fd_MainnetAccount_address = md_MainnetAccount.Fields().ByName("address") + fd_MainnetAccount_shares = md_MainnetAccount.Fields().ByName("shares") +} + +var _ protoreflect.Message = (*fastReflection_MainnetAccount)(nil) + +type fastReflection_MainnetAccount MainnetAccount + +func (x *MainnetAccount) ProtoReflect() protoreflect.Message { + return (*fastReflection_MainnetAccount)(x) +} + +func (x *MainnetAccount) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_mainnet_account_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) +} + +var _fastReflection_MainnetAccount_messageType fastReflection_MainnetAccount_messageType +var _ protoreflect.MessageType = fastReflection_MainnetAccount_messageType{} + +type fastReflection_MainnetAccount_messageType struct{} + +func (x fastReflection_MainnetAccount_messageType) Zero() protoreflect.Message { + return (*fastReflection_MainnetAccount)(nil) +} +func (x fastReflection_MainnetAccount_messageType) New() protoreflect.Message { + return new(fastReflection_MainnetAccount) +} +func (x fastReflection_MainnetAccount_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MainnetAccount +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MainnetAccount) Descriptor() protoreflect.MessageDescriptor { + return md_MainnetAccount +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MainnetAccount) Type() protoreflect.MessageType { + return _fastReflection_MainnetAccount_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MainnetAccount) New() protoreflect.Message { + return new(fastReflection_MainnetAccount) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MainnetAccount) Interface() protoreflect.ProtoMessage { + return (*MainnetAccount)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MainnetAccount) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MainnetAccount_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_MainnetAccount_address, value) { + return + } + } + if len(x.Shares) != 0 { + value := protoreflect.ValueOfList(&_MainnetAccount_3_list{list: &x.Shares}) + if !f(fd_MainnetAccount_shares, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MainnetAccount) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MainnetAccount.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MainnetAccount.address": + return x.Address != "" + case "network.project.v1.MainnetAccount.shares": + return len(x.Shares) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccount")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccount does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MainnetAccount) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MainnetAccount.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MainnetAccount.address": + x.Address = "" + case "network.project.v1.MainnetAccount.shares": + x.Shares = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccount")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccount does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MainnetAccount) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MainnetAccount.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MainnetAccount.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.project.v1.MainnetAccount.shares": + if len(x.Shares) == 0 { + return protoreflect.ValueOfList(&_MainnetAccount_3_list{}) + } + listValue := &_MainnetAccount_3_list{list: &x.Shares} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccount")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccount does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MainnetAccount) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MainnetAccount.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MainnetAccount.address": + x.Address = value.Interface().(string) + case "network.project.v1.MainnetAccount.shares": + lv := value.List() + clv := lv.(*_MainnetAccount_3_list) + x.Shares = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccount")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccount does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MainnetAccount) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MainnetAccount.shares": + if x.Shares == nil { + x.Shares = []*v1beta1.Coin{} + } + value := &_MainnetAccount_3_list{list: &x.Shares} + return protoreflect.ValueOfList(value) + case "network.project.v1.MainnetAccount.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MainnetAccount is not mutable")) + case "network.project.v1.MainnetAccount.address": + panic(fmt.Errorf("field address of message network.project.v1.MainnetAccount is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccount")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccount does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MainnetAccount) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MainnetAccount.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MainnetAccount.address": + return protoreflect.ValueOfString("") + case "network.project.v1.MainnetAccount.shares": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MainnetAccount_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccount")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccount does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MainnetAccount) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MainnetAccount", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MainnetAccount) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MainnetAccount) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MainnetAccount) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MainnetAccount) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MainnetAccount) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Shares) > 0 { + for _, e := range x.Shares { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MainnetAccount) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Shares) > 0 { + for iNdEx := len(x.Shares) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Shares[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MainnetAccount) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MainnetAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MainnetAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Shares = append(x.Shares, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Shares[len(x.Shares)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MainnetAccountBalance_3_list)(nil) + +type _MainnetAccountBalance_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MainnetAccountBalance_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MainnetAccountBalance_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MainnetAccountBalance_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MainnetAccountBalance_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MainnetAccountBalance_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MainnetAccountBalance_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MainnetAccountBalance_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MainnetAccountBalance_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MainnetAccountBalance protoreflect.MessageDescriptor + fd_MainnetAccountBalance_projectID protoreflect.FieldDescriptor + fd_MainnetAccountBalance_address protoreflect.FieldDescriptor + fd_MainnetAccountBalance_coins protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_mainnet_account_proto_init() + md_MainnetAccountBalance = File_network_project_v1_mainnet_account_proto.Messages().ByName("MainnetAccountBalance") + fd_MainnetAccountBalance_projectID = md_MainnetAccountBalance.Fields().ByName("projectID") + fd_MainnetAccountBalance_address = md_MainnetAccountBalance.Fields().ByName("address") + fd_MainnetAccountBalance_coins = md_MainnetAccountBalance.Fields().ByName("coins") +} + +var _ protoreflect.Message = (*fastReflection_MainnetAccountBalance)(nil) + +type fastReflection_MainnetAccountBalance MainnetAccountBalance + +func (x *MainnetAccountBalance) ProtoReflect() protoreflect.Message { + return (*fastReflection_MainnetAccountBalance)(x) +} + +func (x *MainnetAccountBalance) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_mainnet_account_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) +} + +var _fastReflection_MainnetAccountBalance_messageType fastReflection_MainnetAccountBalance_messageType +var _ protoreflect.MessageType = fastReflection_MainnetAccountBalance_messageType{} + +type fastReflection_MainnetAccountBalance_messageType struct{} + +func (x fastReflection_MainnetAccountBalance_messageType) Zero() protoreflect.Message { + return (*fastReflection_MainnetAccountBalance)(nil) +} +func (x fastReflection_MainnetAccountBalance_messageType) New() protoreflect.Message { + return new(fastReflection_MainnetAccountBalance) +} +func (x fastReflection_MainnetAccountBalance_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MainnetAccountBalance +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MainnetAccountBalance) Descriptor() protoreflect.MessageDescriptor { + return md_MainnetAccountBalance +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MainnetAccountBalance) Type() protoreflect.MessageType { + return _fastReflection_MainnetAccountBalance_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MainnetAccountBalance) New() protoreflect.Message { + return new(fastReflection_MainnetAccountBalance) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MainnetAccountBalance) Interface() protoreflect.ProtoMessage { + return (*MainnetAccountBalance)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MainnetAccountBalance) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MainnetAccountBalance_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_MainnetAccountBalance_address, value) { + return + } + } + if len(x.Coins) != 0 { + value := protoreflect.ValueOfList(&_MainnetAccountBalance_3_list{list: &x.Coins}) + if !f(fd_MainnetAccountBalance_coins, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MainnetAccountBalance) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MainnetAccountBalance.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MainnetAccountBalance.address": + return x.Address != "" + case "network.project.v1.MainnetAccountBalance.coins": + return len(x.Coins) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccountBalance")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccountBalance does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MainnetAccountBalance) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MainnetAccountBalance.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MainnetAccountBalance.address": + x.Address = "" + case "network.project.v1.MainnetAccountBalance.coins": + x.Coins = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccountBalance")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccountBalance does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MainnetAccountBalance) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MainnetAccountBalance.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MainnetAccountBalance.address": + value := x.Address + return protoreflect.ValueOfString(value) + case "network.project.v1.MainnetAccountBalance.coins": + if len(x.Coins) == 0 { + return protoreflect.ValueOfList(&_MainnetAccountBalance_3_list{}) + } + listValue := &_MainnetAccountBalance_3_list{list: &x.Coins} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccountBalance")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccountBalance does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MainnetAccountBalance) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MainnetAccountBalance.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MainnetAccountBalance.address": + x.Address = value.Interface().(string) + case "network.project.v1.MainnetAccountBalance.coins": + lv := value.List() + clv := lv.(*_MainnetAccountBalance_3_list) + x.Coins = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccountBalance")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccountBalance does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MainnetAccountBalance) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MainnetAccountBalance.coins": + if x.Coins == nil { + x.Coins = []*v1beta1.Coin{} + } + value := &_MainnetAccountBalance_3_list{list: &x.Coins} + return protoreflect.ValueOfList(value) + case "network.project.v1.MainnetAccountBalance.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MainnetAccountBalance is not mutable")) + case "network.project.v1.MainnetAccountBalance.address": + panic(fmt.Errorf("field address of message network.project.v1.MainnetAccountBalance is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccountBalance")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccountBalance does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MainnetAccountBalance) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MainnetAccountBalance.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MainnetAccountBalance.address": + return protoreflect.ValueOfString("") + case "network.project.v1.MainnetAccountBalance.coins": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MainnetAccountBalance_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MainnetAccountBalance")) + } + panic(fmt.Errorf("message network.project.v1.MainnetAccountBalance does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MainnetAccountBalance) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MainnetAccountBalance", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MainnetAccountBalance) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MainnetAccountBalance) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MainnetAccountBalance) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MainnetAccountBalance) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MainnetAccountBalance) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Coins) > 0 { + for _, e := range x.Coins { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MainnetAccountBalance) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Coins) > 0 { + for iNdEx := len(x.Coins) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Coins[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MainnetAccountBalance) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MainnetAccountBalance: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MainnetAccountBalance: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coins = append(x.Coins, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Coins[len(x.Coins)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/mainnet_account.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type MainnetAccount struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Shares []*v1beta1.Coin `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"` +} + +func (x *MainnetAccount) Reset() { + *x = MainnetAccount{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_mainnet_account_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MainnetAccount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MainnetAccount) ProtoMessage() {} + +// Deprecated: Use MainnetAccount.ProtoReflect.Descriptor instead. +func (*MainnetAccount) Descriptor() ([]byte, []int) { + return file_network_project_v1_mainnet_account_proto_rawDescGZIP(), []int{0} +} + +func (x *MainnetAccount) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MainnetAccount) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *MainnetAccount) GetShares() []*v1beta1.Coin { + if x != nil { + return x.Shares + } + return nil +} + +type MainnetAccountBalance struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Coins []*v1beta1.Coin `protobuf:"bytes,3,rep,name=coins,proto3" json:"coins,omitempty"` +} + +func (x *MainnetAccountBalance) Reset() { + *x = MainnetAccountBalance{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_mainnet_account_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MainnetAccountBalance) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MainnetAccountBalance) ProtoMessage() {} + +// Deprecated: Use MainnetAccountBalance.ProtoReflect.Descriptor instead. +func (*MainnetAccountBalance) Descriptor() ([]byte, []int) { + return file_network_project_v1_mainnet_account_proto_rawDescGZIP(), []int{1} +} + +func (x *MainnetAccountBalance) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MainnetAccountBalance) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *MainnetAccountBalance) GetCoins() []*v1beta1.Coin { + if x != nil { + return x.Coins + } + return nil +} + +var File_network_project_v1_mainnet_account_proto protoreflect.FileDescriptor + +var file_network_project_v1_mainnet_account_proto_rawDesc = []byte{ + 0x0a, 0x28, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x11, + 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, + 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xe7, 0x01, 0x0a, 0x0e, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x9a, 0xe7, + 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x8e, 0x02, 0x0a, + 0x15, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x05, 0x63, 0x6f, 0x69, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, + 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, + 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x42, 0xd3, 0x01, + 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, + 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, + 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, + 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_v1_mainnet_account_proto_rawDescOnce sync.Once + file_network_project_v1_mainnet_account_proto_rawDescData = file_network_project_v1_mainnet_account_proto_rawDesc +) + +func file_network_project_v1_mainnet_account_proto_rawDescGZIP() []byte { + file_network_project_v1_mainnet_account_proto_rawDescOnce.Do(func() { + file_network_project_v1_mainnet_account_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_mainnet_account_proto_rawDescData) + }) + return file_network_project_v1_mainnet_account_proto_rawDescData +} + +var file_network_project_v1_mainnet_account_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_project_v1_mainnet_account_proto_goTypes = []interface{}{ + (*MainnetAccount)(nil), // 0: network.project.v1.MainnetAccount + (*MainnetAccountBalance)(nil), // 1: network.project.v1.MainnetAccountBalance + (*v1beta1.Coin)(nil), // 2: cosmos.base.v1beta1.Coin +} +var file_network_project_v1_mainnet_account_proto_depIdxs = []int32{ + 2, // 0: network.project.v1.MainnetAccount.shares:type_name -> cosmos.base.v1beta1.Coin + 2, // 1: network.project.v1.MainnetAccountBalance.coins:type_name -> cosmos.base.v1beta1.Coin + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_network_project_v1_mainnet_account_proto_init() } +func file_network_project_v1_mainnet_account_proto_init() { + if File_network_project_v1_mainnet_account_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_project_v1_mainnet_account_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MainnetAccount); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_mainnet_account_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MainnetAccountBalance); 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_network_project_v1_mainnet_account_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_mainnet_account_proto_goTypes, + DependencyIndexes: file_network_project_v1_mainnet_account_proto_depIdxs, + MessageInfos: file_network_project_v1_mainnet_account_proto_msgTypes, + }.Build() + File_network_project_v1_mainnet_account_proto = out.File + file_network_project_v1_mainnet_account_proto_rawDesc = nil + file_network_project_v1_mainnet_account_proto_goTypes = nil + file_network_project_v1_mainnet_account_proto_depIdxs = nil +} diff --git a/api/network/project/v1/mainnet_account_balance.pulsar.go b/api/network/project/v1/mainnet_account_balance.pulsar.go new file mode 100644 index 00000000..c68d8145 --- /dev/null +++ b/api/network/project/v1/mainnet_account_balance.pulsar.go @@ -0,0 +1,81 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + reflect "reflect" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/mainnet_account_balance.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var File_network_project_v1_mainnet_account_balance_proto protoreflect.FileDescriptor + +var file_network_project_v1_mainnet_account_balance_proto_rawDesc = []byte{ + 0x0a, 0x30, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0xda, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x42, 0x1a, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, + 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, + 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, + 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_v1_mainnet_account_balance_proto_goTypes = []interface{}{} + file_network_project_v1_mainnet_account_balance_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 + } +) + +func init() { file_network_project_v1_mainnet_account_balance_proto_init() } +func file_network_project_v1_mainnet_account_balance_proto_init() { + if File_network_project_v1_mainnet_account_balance_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_project_v1_mainnet_account_balance_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_mainnet_account_balance_proto_goTypes, + DependencyIndexes: file_network_project_v1_mainnet_account_balance_proto_depIdxs, + }.Build() + File_network_project_v1_mainnet_account_balance_proto = out.File + file_network_project_v1_mainnet_account_balance_proto_rawDesc = nil + file_network_project_v1_mainnet_account_balance_proto_goTypes = nil + file_network_project_v1_mainnet_account_balance_proto_depIdxs = nil +} diff --git a/api/network/project/v1/params.pulsar.go b/api/network/project/v1/params.pulsar.go new file mode 100644 index 00000000..61351895 --- /dev/null +++ b/api/network/project/v1/params.pulsar.go @@ -0,0 +1,1374 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_Params_2_list)(nil) + +type _Params_2_list struct { + list *[]*v1beta1.Coin +} + +func (x *_Params_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Params_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Params_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_Params_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Params_2_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Params_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Params_2_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Params_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_Params protoreflect.MessageDescriptor + fd_Params_totalSupplyRange protoreflect.FieldDescriptor + fd_Params_projectCreationFee protoreflect.FieldDescriptor + fd_Params_maxMetadataLength protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_params_proto_init() + md_Params = File_network_project_v1_params_proto.Messages().ByName("Params") + fd_Params_totalSupplyRange = md_Params.Fields().ByName("totalSupplyRange") + fd_Params_projectCreationFee = md_Params.Fields().ByName("projectCreationFee") + fd_Params_maxMetadataLength = md_Params.Fields().ByName("maxMetadataLength") +} + +var _ protoreflect.Message = (*fastReflection_Params)(nil) + +type fastReflection_Params Params + +func (x *Params) ProtoReflect() protoreflect.Message { + return (*fastReflection_Params)(x) +} + +func (x *Params) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_params_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) +} + +var _fastReflection_Params_messageType fastReflection_Params_messageType +var _ protoreflect.MessageType = fastReflection_Params_messageType{} + +type fastReflection_Params_messageType struct{} + +func (x fastReflection_Params_messageType) Zero() protoreflect.Message { + return (*fastReflection_Params)(nil) +} +func (x fastReflection_Params_messageType) New() protoreflect.Message { + return new(fastReflection_Params) +} +func (x fastReflection_Params_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Params) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Params) Type() protoreflect.MessageType { + return _fastReflection_Params_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Params) New() protoreflect.Message { + return new(fastReflection_Params) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Params) Interface() protoreflect.ProtoMessage { + return (*Params)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.TotalSupplyRange != nil { + value := protoreflect.ValueOfMessage(x.TotalSupplyRange.ProtoReflect()) + if !f(fd_Params_totalSupplyRange, value) { + return + } + } + if len(x.ProjectCreationFee) != 0 { + value := protoreflect.ValueOfList(&_Params_2_list{list: &x.ProjectCreationFee}) + if !f(fd_Params_projectCreationFee, value) { + return + } + } + if x.MaxMetadataLength != uint64(0) { + value := protoreflect.ValueOfUint64(x.MaxMetadataLength) + if !f(fd_Params_maxMetadataLength, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.Params.totalSupplyRange": + return x.TotalSupplyRange != nil + case "network.project.v1.Params.projectCreationFee": + return len(x.ProjectCreationFee) != 0 + case "network.project.v1.Params.maxMetadataLength": + return x.MaxMetadataLength != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Params")) + } + panic(fmt.Errorf("message network.project.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.Params.totalSupplyRange": + x.TotalSupplyRange = nil + case "network.project.v1.Params.projectCreationFee": + x.ProjectCreationFee = nil + case "network.project.v1.Params.maxMetadataLength": + x.MaxMetadataLength = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Params")) + } + panic(fmt.Errorf("message network.project.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.Params.totalSupplyRange": + value := x.TotalSupplyRange + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.project.v1.Params.projectCreationFee": + if len(x.ProjectCreationFee) == 0 { + return protoreflect.ValueOfList(&_Params_2_list{}) + } + listValue := &_Params_2_list{list: &x.ProjectCreationFee} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.Params.maxMetadataLength": + value := x.MaxMetadataLength + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Params")) + } + panic(fmt.Errorf("message network.project.v1.Params does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.Params.totalSupplyRange": + x.TotalSupplyRange = value.Message().Interface().(*TotalSupplyRange) + case "network.project.v1.Params.projectCreationFee": + lv := value.List() + clv := lv.(*_Params_2_list) + x.ProjectCreationFee = *clv.list + case "network.project.v1.Params.maxMetadataLength": + x.MaxMetadataLength = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Params")) + } + panic(fmt.Errorf("message network.project.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.Params.totalSupplyRange": + if x.TotalSupplyRange == nil { + x.TotalSupplyRange = new(TotalSupplyRange) + } + return protoreflect.ValueOfMessage(x.TotalSupplyRange.ProtoReflect()) + case "network.project.v1.Params.projectCreationFee": + if x.ProjectCreationFee == nil { + x.ProjectCreationFee = []*v1beta1.Coin{} + } + value := &_Params_2_list{list: &x.ProjectCreationFee} + return protoreflect.ValueOfList(value) + case "network.project.v1.Params.maxMetadataLength": + panic(fmt.Errorf("field maxMetadataLength of message network.project.v1.Params is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Params")) + } + panic(fmt.Errorf("message network.project.v1.Params does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.Params.totalSupplyRange": + m := new(TotalSupplyRange) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.project.v1.Params.projectCreationFee": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_Params_2_list{list: &list}) + case "network.project.v1.Params.maxMetadataLength": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Params")) + } + panic(fmt.Errorf("message network.project.v1.Params does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Params) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.Params", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Params) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Params) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.TotalSupplyRange != nil { + l = options.Size(x.TotalSupplyRange) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.ProjectCreationFee) > 0 { + for _, e := range x.ProjectCreationFee { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.MaxMetadataLength != 0 { + n += 1 + runtime.Sov(uint64(x.MaxMetadataLength)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MaxMetadataLength != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.MaxMetadataLength)) + i-- + dAtA[i] = 0x18 + } + if len(x.ProjectCreationFee) > 0 { + for iNdEx := len(x.ProjectCreationFee) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ProjectCreationFee[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.TotalSupplyRange != nil { + encoded, err := options.Marshal(x.TotalSupplyRange) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalSupplyRange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.TotalSupplyRange == nil { + x.TotalSupplyRange = &TotalSupplyRange{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TotalSupplyRange); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectCreationFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProjectCreationFee = append(x.ProjectCreationFee, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ProjectCreationFee[len(x.ProjectCreationFee)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MaxMetadataLength", wireType) + } + x.MaxMetadataLength = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.MaxMetadataLength |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_TotalSupplyRange protoreflect.MessageDescriptor + fd_TotalSupplyRange_minTotalSupply protoreflect.FieldDescriptor + fd_TotalSupplyRange_maxTotalSupply protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_params_proto_init() + md_TotalSupplyRange = File_network_project_v1_params_proto.Messages().ByName("TotalSupplyRange") + fd_TotalSupplyRange_minTotalSupply = md_TotalSupplyRange.Fields().ByName("minTotalSupply") + fd_TotalSupplyRange_maxTotalSupply = md_TotalSupplyRange.Fields().ByName("maxTotalSupply") +} + +var _ protoreflect.Message = (*fastReflection_TotalSupplyRange)(nil) + +type fastReflection_TotalSupplyRange TotalSupplyRange + +func (x *TotalSupplyRange) ProtoReflect() protoreflect.Message { + return (*fastReflection_TotalSupplyRange)(x) +} + +func (x *TotalSupplyRange) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_params_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) +} + +var _fastReflection_TotalSupplyRange_messageType fastReflection_TotalSupplyRange_messageType +var _ protoreflect.MessageType = fastReflection_TotalSupplyRange_messageType{} + +type fastReflection_TotalSupplyRange_messageType struct{} + +func (x fastReflection_TotalSupplyRange_messageType) Zero() protoreflect.Message { + return (*fastReflection_TotalSupplyRange)(nil) +} +func (x fastReflection_TotalSupplyRange_messageType) New() protoreflect.Message { + return new(fastReflection_TotalSupplyRange) +} +func (x fastReflection_TotalSupplyRange_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_TotalSupplyRange +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_TotalSupplyRange) Descriptor() protoreflect.MessageDescriptor { + return md_TotalSupplyRange +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_TotalSupplyRange) Type() protoreflect.MessageType { + return _fastReflection_TotalSupplyRange_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_TotalSupplyRange) New() protoreflect.Message { + return new(fastReflection_TotalSupplyRange) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_TotalSupplyRange) Interface() protoreflect.ProtoMessage { + return (*TotalSupplyRange)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_TotalSupplyRange) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.MinTotalSupply != "" { + value := protoreflect.ValueOfString(x.MinTotalSupply) + if !f(fd_TotalSupplyRange_minTotalSupply, value) { + return + } + } + if x.MaxTotalSupply != "" { + value := protoreflect.ValueOfString(x.MaxTotalSupply) + if !f(fd_TotalSupplyRange_maxTotalSupply, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_TotalSupplyRange) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.TotalSupplyRange.minTotalSupply": + return x.MinTotalSupply != "" + case "network.project.v1.TotalSupplyRange.maxTotalSupply": + return x.MaxTotalSupply != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.TotalSupplyRange")) + } + panic(fmt.Errorf("message network.project.v1.TotalSupplyRange does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_TotalSupplyRange) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.TotalSupplyRange.minTotalSupply": + x.MinTotalSupply = "" + case "network.project.v1.TotalSupplyRange.maxTotalSupply": + x.MaxTotalSupply = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.TotalSupplyRange")) + } + panic(fmt.Errorf("message network.project.v1.TotalSupplyRange does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_TotalSupplyRange) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.TotalSupplyRange.minTotalSupply": + value := x.MinTotalSupply + return protoreflect.ValueOfString(value) + case "network.project.v1.TotalSupplyRange.maxTotalSupply": + value := x.MaxTotalSupply + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.TotalSupplyRange")) + } + panic(fmt.Errorf("message network.project.v1.TotalSupplyRange does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_TotalSupplyRange) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.TotalSupplyRange.minTotalSupply": + x.MinTotalSupply = value.Interface().(string) + case "network.project.v1.TotalSupplyRange.maxTotalSupply": + x.MaxTotalSupply = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.TotalSupplyRange")) + } + panic(fmt.Errorf("message network.project.v1.TotalSupplyRange does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_TotalSupplyRange) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.TotalSupplyRange.minTotalSupply": + panic(fmt.Errorf("field minTotalSupply of message network.project.v1.TotalSupplyRange is not mutable")) + case "network.project.v1.TotalSupplyRange.maxTotalSupply": + panic(fmt.Errorf("field maxTotalSupply of message network.project.v1.TotalSupplyRange is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.TotalSupplyRange")) + } + panic(fmt.Errorf("message network.project.v1.TotalSupplyRange does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_TotalSupplyRange) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.TotalSupplyRange.minTotalSupply": + return protoreflect.ValueOfString("") + case "network.project.v1.TotalSupplyRange.maxTotalSupply": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.TotalSupplyRange")) + } + panic(fmt.Errorf("message network.project.v1.TotalSupplyRange does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_TotalSupplyRange) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.TotalSupplyRange", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_TotalSupplyRange) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_TotalSupplyRange) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_TotalSupplyRange) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_TotalSupplyRange) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*TotalSupplyRange) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.MinTotalSupply) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.MaxTotalSupply) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*TotalSupplyRange) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.MaxTotalSupply) > 0 { + i -= len(x.MaxTotalSupply) + copy(dAtA[i:], x.MaxTotalSupply) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MaxTotalSupply))) + i-- + dAtA[i] = 0x12 + } + if len(x.MinTotalSupply) > 0 { + i -= len(x.MinTotalSupply) + copy(dAtA[i:], x.MinTotalSupply) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MinTotalSupply))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*TotalSupplyRange) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: TotalSupplyRange: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: TotalSupplyRange: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MinTotalSupply", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MinTotalSupply = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MaxTotalSupply", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MaxTotalSupply = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/params.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Params defines the parameters for the module. +type Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TotalSupplyRange *TotalSupplyRange `protobuf:"bytes,1,opt,name=totalSupplyRange,proto3" json:"totalSupplyRange,omitempty"` + ProjectCreationFee []*v1beta1.Coin `protobuf:"bytes,2,rep,name=projectCreationFee,proto3" json:"projectCreationFee,omitempty"` + MaxMetadataLength uint64 `protobuf:"varint,3,opt,name=maxMetadataLength,proto3" json:"maxMetadataLength,omitempty"` +} + +func (x *Params) Reset() { + *x = Params{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_params_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Params) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Params) ProtoMessage() {} + +// Deprecated: Use Params.ProtoReflect.Descriptor instead. +func (*Params) Descriptor() ([]byte, []int) { + return file_network_project_v1_params_proto_rawDescGZIP(), []int{0} +} + +func (x *Params) GetTotalSupplyRange() *TotalSupplyRange { + if x != nil { + return x.TotalSupplyRange + } + return nil +} + +func (x *Params) GetProjectCreationFee() []*v1beta1.Coin { + if x != nil { + return x.ProjectCreationFee + } + return nil +} + +func (x *Params) GetMaxMetadataLength() uint64 { + if x != nil { + return x.MaxMetadataLength + } + return 0 +} + +// TotalSupplyRange defines the range of allowed values for total supply +type TotalSupplyRange struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MinTotalSupply string `protobuf:"bytes,1,opt,name=minTotalSupply,proto3" json:"minTotalSupply,omitempty"` + MaxTotalSupply string `protobuf:"bytes,2,opt,name=maxTotalSupply,proto3" json:"maxTotalSupply,omitempty"` +} + +func (x *TotalSupplyRange) Reset() { + *x = TotalSupplyRange{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_params_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TotalSupplyRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TotalSupplyRange) ProtoMessage() {} + +// Deprecated: Use TotalSupplyRange.ProtoReflect.Descriptor instead. +func (*TotalSupplyRange) Descriptor() ([]byte, []int) { + return file_network_project_v1_params_proto_rawDescGZIP(), []int{1} +} + +func (x *TotalSupplyRange) GetMinTotalSupply() string { + if x != nil { + return x.MinTotalSupply + } + return "" +} + +func (x *TotalSupplyRange) GetMaxTotalSupply() string { + if x != nil { + return x.MaxTotalSupply + } + return "" +} + +var File_network_project_v1_params_proto protoreflect.FileDescriptor + +var file_network_project_v1_params_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, + 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, + 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, + 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf0, 0x02, 0x0a, 0x06, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x56, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, + 0x70, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0xbc, 0x01, 0x0a, + 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x46, 0x65, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, + 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6d, + 0x61, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x21, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, + 0xe7, 0xb0, 0x2a, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xbc, 0x01, 0x0a, + 0x10, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, + 0x70, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, + 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, + 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x6d, 0x69, 0x6e, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x53, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, + 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, + 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, + 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x6d, 0x61, 0x78, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x42, 0xcb, 0x01, 0x0a, 0x16, + 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_project_v1_params_proto_rawDescOnce sync.Once + file_network_project_v1_params_proto_rawDescData = file_network_project_v1_params_proto_rawDesc +) + +func file_network_project_v1_params_proto_rawDescGZIP() []byte { + file_network_project_v1_params_proto_rawDescOnce.Do(func() { + file_network_project_v1_params_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_params_proto_rawDescData) + }) + return file_network_project_v1_params_proto_rawDescData +} + +var file_network_project_v1_params_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_project_v1_params_proto_goTypes = []interface{}{ + (*Params)(nil), // 0: network.project.v1.Params + (*TotalSupplyRange)(nil), // 1: network.project.v1.TotalSupplyRange + (*v1beta1.Coin)(nil), // 2: cosmos.base.v1beta1.Coin +} +var file_network_project_v1_params_proto_depIdxs = []int32{ + 1, // 0: network.project.v1.Params.totalSupplyRange:type_name -> network.project.v1.TotalSupplyRange + 2, // 1: network.project.v1.Params.projectCreationFee:type_name -> cosmos.base.v1beta1.Coin + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_network_project_v1_params_proto_init() } +func file_network_project_v1_params_proto_init() { + if File_network_project_v1_params_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_project_v1_params_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Params); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_params_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TotalSupplyRange); 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_network_project_v1_params_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_params_proto_goTypes, + DependencyIndexes: file_network_project_v1_params_proto_depIdxs, + MessageInfos: file_network_project_v1_params_proto_msgTypes, + }.Build() + File_network_project_v1_params_proto = out.File + file_network_project_v1_params_proto_rawDesc = nil + file_network_project_v1_params_proto_goTypes = nil + file_network_project_v1_params_proto_depIdxs = nil +} diff --git a/api/network/project/v1/project.pulsar.go b/api/network/project/v1/project.pulsar.go new file mode 100644 index 00000000..061b6faa --- /dev/null +++ b/api/network/project/v1/project.pulsar.go @@ -0,0 +1,1366 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_Project_7_list)(nil) + +type _Project_7_list struct { + list *[]*v1beta1.Coin +} + +func (x *_Project_7_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Project_7_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Project_7_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_Project_7_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Project_7_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Project_7_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Project_7_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Project_7_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_Project_8_list)(nil) + +type _Project_8_list struct { + list *[]*v1beta1.Coin +} + +func (x *_Project_8_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Project_8_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Project_8_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_Project_8_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Project_8_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Project_8_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Project_8_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Project_8_list) IsValid() bool { + return x.list != nil +} + +var ( + md_Project protoreflect.MessageDescriptor + fd_Project_projectID protoreflect.FieldDescriptor + fd_Project_projectName protoreflect.FieldDescriptor + fd_Project_coordinatorID protoreflect.FieldDescriptor + fd_Project_createdAt protoreflect.FieldDescriptor + fd_Project_mainnetID protoreflect.FieldDescriptor + fd_Project_mainnetInitialized protoreflect.FieldDescriptor + fd_Project_totalSupply protoreflect.FieldDescriptor + fd_Project_allocatedShares protoreflect.FieldDescriptor + fd_Project_specialAllocations protoreflect.FieldDescriptor + fd_Project_metadata protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_project_proto_init() + md_Project = File_network_project_v1_project_proto.Messages().ByName("Project") + fd_Project_projectID = md_Project.Fields().ByName("projectID") + fd_Project_projectName = md_Project.Fields().ByName("projectName") + fd_Project_coordinatorID = md_Project.Fields().ByName("coordinatorID") + fd_Project_createdAt = md_Project.Fields().ByName("createdAt") + fd_Project_mainnetID = md_Project.Fields().ByName("mainnetID") + fd_Project_mainnetInitialized = md_Project.Fields().ByName("mainnetInitialized") + fd_Project_totalSupply = md_Project.Fields().ByName("totalSupply") + fd_Project_allocatedShares = md_Project.Fields().ByName("allocatedShares") + fd_Project_specialAllocations = md_Project.Fields().ByName("specialAllocations") + fd_Project_metadata = md_Project.Fields().ByName("metadata") +} + +var _ protoreflect.Message = (*fastReflection_Project)(nil) + +type fastReflection_Project Project + +func (x *Project) ProtoReflect() protoreflect.Message { + return (*fastReflection_Project)(x) +} + +func (x *Project) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_project_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) +} + +var _fastReflection_Project_messageType fastReflection_Project_messageType +var _ protoreflect.MessageType = fastReflection_Project_messageType{} + +type fastReflection_Project_messageType struct{} + +func (x fastReflection_Project_messageType) Zero() protoreflect.Message { + return (*fastReflection_Project)(nil) +} +func (x fastReflection_Project_messageType) New() protoreflect.Message { + return new(fastReflection_Project) +} +func (x fastReflection_Project_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Project +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Project) Descriptor() protoreflect.MessageDescriptor { + return md_Project +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Project) Type() protoreflect.MessageType { + return _fastReflection_Project_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Project) New() protoreflect.Message { + return new(fastReflection_Project) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Project) Interface() protoreflect.ProtoMessage { + return (*Project)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Project) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_Project_projectID, value) { + return + } + } + if x.ProjectName != "" { + value := protoreflect.ValueOfString(x.ProjectName) + if !f(fd_Project_projectName, value) { + return + } + } + if x.CoordinatorID != uint64(0) { + value := protoreflect.ValueOfUint64(x.CoordinatorID) + if !f(fd_Project_coordinatorID, value) { + return + } + } + if x.CreatedAt != int64(0) { + value := protoreflect.ValueOfInt64(x.CreatedAt) + if !f(fd_Project_createdAt, value) { + return + } + } + if x.MainnetID != uint64(0) { + value := protoreflect.ValueOfUint64(x.MainnetID) + if !f(fd_Project_mainnetID, value) { + return + } + } + if x.MainnetInitialized != false { + value := protoreflect.ValueOfBool(x.MainnetInitialized) + if !f(fd_Project_mainnetInitialized, value) { + return + } + } + if len(x.TotalSupply) != 0 { + value := protoreflect.ValueOfList(&_Project_7_list{list: &x.TotalSupply}) + if !f(fd_Project_totalSupply, value) { + return + } + } + if len(x.AllocatedShares) != 0 { + value := protoreflect.ValueOfList(&_Project_8_list{list: &x.AllocatedShares}) + if !f(fd_Project_allocatedShares, value) { + return + } + } + if x.SpecialAllocations != nil { + value := protoreflect.ValueOfMessage(x.SpecialAllocations.ProtoReflect()) + if !f(fd_Project_specialAllocations, value) { + return + } + } + if len(x.Metadata) != 0 { + value := protoreflect.ValueOfBytes(x.Metadata) + if !f(fd_Project_metadata, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Project) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.Project.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.Project.projectName": + return x.ProjectName != "" + case "network.project.v1.Project.coordinatorID": + return x.CoordinatorID != uint64(0) + case "network.project.v1.Project.createdAt": + return x.CreatedAt != int64(0) + case "network.project.v1.Project.mainnetID": + return x.MainnetID != uint64(0) + case "network.project.v1.Project.mainnetInitialized": + return x.MainnetInitialized != false + case "network.project.v1.Project.totalSupply": + return len(x.TotalSupply) != 0 + case "network.project.v1.Project.allocatedShares": + return len(x.AllocatedShares) != 0 + case "network.project.v1.Project.specialAllocations": + return x.SpecialAllocations != nil + case "network.project.v1.Project.metadata": + return len(x.Metadata) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Project")) + } + panic(fmt.Errorf("message network.project.v1.Project does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Project) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.Project.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.Project.projectName": + x.ProjectName = "" + case "network.project.v1.Project.coordinatorID": + x.CoordinatorID = uint64(0) + case "network.project.v1.Project.createdAt": + x.CreatedAt = int64(0) + case "network.project.v1.Project.mainnetID": + x.MainnetID = uint64(0) + case "network.project.v1.Project.mainnetInitialized": + x.MainnetInitialized = false + case "network.project.v1.Project.totalSupply": + x.TotalSupply = nil + case "network.project.v1.Project.allocatedShares": + x.AllocatedShares = nil + case "network.project.v1.Project.specialAllocations": + x.SpecialAllocations = nil + case "network.project.v1.Project.metadata": + x.Metadata = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Project")) + } + panic(fmt.Errorf("message network.project.v1.Project does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Project) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.Project.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.Project.projectName": + value := x.ProjectName + return protoreflect.ValueOfString(value) + case "network.project.v1.Project.coordinatorID": + value := x.CoordinatorID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.Project.createdAt": + value := x.CreatedAt + return protoreflect.ValueOfInt64(value) + case "network.project.v1.Project.mainnetID": + value := x.MainnetID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.Project.mainnetInitialized": + value := x.MainnetInitialized + return protoreflect.ValueOfBool(value) + case "network.project.v1.Project.totalSupply": + if len(x.TotalSupply) == 0 { + return protoreflect.ValueOfList(&_Project_7_list{}) + } + listValue := &_Project_7_list{list: &x.TotalSupply} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.Project.allocatedShares": + if len(x.AllocatedShares) == 0 { + return protoreflect.ValueOfList(&_Project_8_list{}) + } + listValue := &_Project_8_list{list: &x.AllocatedShares} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.Project.specialAllocations": + value := x.SpecialAllocations + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.project.v1.Project.metadata": + value := x.Metadata + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Project")) + } + panic(fmt.Errorf("message network.project.v1.Project does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Project) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.Project.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.Project.projectName": + x.ProjectName = value.Interface().(string) + case "network.project.v1.Project.coordinatorID": + x.CoordinatorID = value.Uint() + case "network.project.v1.Project.createdAt": + x.CreatedAt = value.Int() + case "network.project.v1.Project.mainnetID": + x.MainnetID = value.Uint() + case "network.project.v1.Project.mainnetInitialized": + x.MainnetInitialized = value.Bool() + case "network.project.v1.Project.totalSupply": + lv := value.List() + clv := lv.(*_Project_7_list) + x.TotalSupply = *clv.list + case "network.project.v1.Project.allocatedShares": + lv := value.List() + clv := lv.(*_Project_8_list) + x.AllocatedShares = *clv.list + case "network.project.v1.Project.specialAllocations": + x.SpecialAllocations = value.Message().Interface().(*SpecialAllocations) + case "network.project.v1.Project.metadata": + x.Metadata = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Project")) + } + panic(fmt.Errorf("message network.project.v1.Project does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Project) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.Project.totalSupply": + if x.TotalSupply == nil { + x.TotalSupply = []*v1beta1.Coin{} + } + value := &_Project_7_list{list: &x.TotalSupply} + return protoreflect.ValueOfList(value) + case "network.project.v1.Project.allocatedShares": + if x.AllocatedShares == nil { + x.AllocatedShares = []*v1beta1.Coin{} + } + value := &_Project_8_list{list: &x.AllocatedShares} + return protoreflect.ValueOfList(value) + case "network.project.v1.Project.specialAllocations": + if x.SpecialAllocations == nil { + x.SpecialAllocations = new(SpecialAllocations) + } + return protoreflect.ValueOfMessage(x.SpecialAllocations.ProtoReflect()) + case "network.project.v1.Project.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.Project is not mutable")) + case "network.project.v1.Project.projectName": + panic(fmt.Errorf("field projectName of message network.project.v1.Project is not mutable")) + case "network.project.v1.Project.coordinatorID": + panic(fmt.Errorf("field coordinatorID of message network.project.v1.Project is not mutable")) + case "network.project.v1.Project.createdAt": + panic(fmt.Errorf("field createdAt of message network.project.v1.Project is not mutable")) + case "network.project.v1.Project.mainnetID": + panic(fmt.Errorf("field mainnetID of message network.project.v1.Project is not mutable")) + case "network.project.v1.Project.mainnetInitialized": + panic(fmt.Errorf("field mainnetInitialized of message network.project.v1.Project is not mutable")) + case "network.project.v1.Project.metadata": + panic(fmt.Errorf("field metadata of message network.project.v1.Project is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Project")) + } + panic(fmt.Errorf("message network.project.v1.Project does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Project) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.Project.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.Project.projectName": + return protoreflect.ValueOfString("") + case "network.project.v1.Project.coordinatorID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.Project.createdAt": + return protoreflect.ValueOfInt64(int64(0)) + case "network.project.v1.Project.mainnetID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.Project.mainnetInitialized": + return protoreflect.ValueOfBool(false) + case "network.project.v1.Project.totalSupply": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_Project_7_list{list: &list}) + case "network.project.v1.Project.allocatedShares": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_Project_8_list{list: &list}) + case "network.project.v1.Project.specialAllocations": + m := new(SpecialAllocations) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.project.v1.Project.metadata": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.Project")) + } + panic(fmt.Errorf("message network.project.v1.Project does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Project) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.Project", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Project) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Project) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Project) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Project) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Project) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.ProjectName) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.CoordinatorID != 0 { + n += 1 + runtime.Sov(uint64(x.CoordinatorID)) + } + if x.CreatedAt != 0 { + n += 1 + runtime.Sov(uint64(x.CreatedAt)) + } + if x.MainnetID != 0 { + n += 1 + runtime.Sov(uint64(x.MainnetID)) + } + if x.MainnetInitialized { + n += 2 + } + if len(x.TotalSupply) > 0 { + for _, e := range x.TotalSupply { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.AllocatedShares) > 0 { + for _, e := range x.AllocatedShares { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.SpecialAllocations != nil { + l = options.Size(x.SpecialAllocations) + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Metadata) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Project) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Metadata) > 0 { + i -= len(x.Metadata) + copy(dAtA[i:], x.Metadata) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Metadata))) + i-- + dAtA[i] = 0x52 + } + if x.SpecialAllocations != nil { + encoded, err := options.Marshal(x.SpecialAllocations) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x4a + } + if len(x.AllocatedShares) > 0 { + for iNdEx := len(x.AllocatedShares) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.AllocatedShares[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x42 + } + } + if len(x.TotalSupply) > 0 { + for iNdEx := len(x.TotalSupply) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.TotalSupply[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x3a + } + } + if x.MainnetInitialized { + i-- + if x.MainnetInitialized { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + } + if x.MainnetID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.MainnetID)) + i-- + dAtA[i] = 0x28 + } + if x.CreatedAt != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CreatedAt)) + i-- + dAtA[i] = 0x20 + } + if x.CoordinatorID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CoordinatorID)) + i-- + dAtA[i] = 0x18 + } + if len(x.ProjectName) > 0 { + i -= len(x.ProjectName) + copy(dAtA[i:], x.ProjectName) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ProjectName))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Project) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Project: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Project: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + } + x.CoordinatorID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CoordinatorID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) + } + x.CreatedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CreatedAt |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetID", wireType) + } + x.MainnetID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.MainnetID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetInitialized", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.MainnetInitialized = bool(v != 0) + case 7: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalSupply", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TotalSupply = append(x.TotalSupply, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TotalSupply[len(x.TotalSupply)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AllocatedShares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.AllocatedShares = append(x.AllocatedShares, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AllocatedShares[len(x.AllocatedShares)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SpecialAllocations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.SpecialAllocations == nil { + x.SpecialAllocations = &SpecialAllocations{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.SpecialAllocations); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Metadata = append(x.Metadata[:0], dAtA[iNdEx:postIndex]...) + if x.Metadata == nil { + x.Metadata = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/project.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Project struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + ProjectName string `protobuf:"bytes,2,opt,name=projectName,proto3" json:"projectName,omitempty"` + CoordinatorID uint64 `protobuf:"varint,3,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` + CreatedAt int64 `protobuf:"varint,4,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + MainnetID uint64 `protobuf:"varint,5,opt,name=mainnetID,proto3" json:"mainnetID,omitempty"` + MainnetInitialized bool `protobuf:"varint,6,opt,name=mainnetInitialized,proto3" json:"mainnetInitialized,omitempty"` + TotalSupply []*v1beta1.Coin `protobuf:"bytes,7,rep,name=totalSupply,proto3" json:"totalSupply,omitempty"` + AllocatedShares []*v1beta1.Coin `protobuf:"bytes,8,rep,name=allocatedShares,proto3" json:"allocatedShares,omitempty"` + SpecialAllocations *SpecialAllocations `protobuf:"bytes,9,opt,name=specialAllocations,proto3" json:"specialAllocations,omitempty"` + Metadata []byte `protobuf:"bytes,10,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *Project) Reset() { + *x = Project{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_project_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Project) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Project) ProtoMessage() {} + +// Deprecated: Use Project.ProtoReflect.Descriptor instead. +func (*Project) Descriptor() ([]byte, []int) { + return file_network_project_v1_project_proto_rawDescGZIP(), []int{0} +} + +func (x *Project) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *Project) GetProjectName() string { + if x != nil { + return x.ProjectName + } + return "" +} + +func (x *Project) GetCoordinatorID() uint64 { + if x != nil { + return x.CoordinatorID + } + return 0 +} + +func (x *Project) GetCreatedAt() int64 { + if x != nil { + return x.CreatedAt + } + return 0 +} + +func (x *Project) GetMainnetID() uint64 { + if x != nil { + return x.MainnetID + } + return 0 +} + +func (x *Project) GetMainnetInitialized() bool { + if x != nil { + return x.MainnetInitialized + } + return false +} + +func (x *Project) GetTotalSupply() []*v1beta1.Coin { + if x != nil { + return x.TotalSupply + } + return nil +} + +func (x *Project) GetAllocatedShares() []*v1beta1.Coin { + if x != nil { + return x.AllocatedShares + } + return nil +} + +func (x *Project) GetSpecialAllocations() *SpecialAllocations { + if x != nil { + return x.SpecialAllocations + } + return nil +} + +func (x *Project) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +var File_network_project_v1_project_proto protoreflect.FileDescriptor + +var file_network_project_v1_project_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, + 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, + 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9d, 0x05, 0x0a, 0x07, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x69, 0x6e, + 0x6e, 0x65, 0x74, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x69, + 0x6e, 0x6e, 0x65, 0x74, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, + 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0xae, 0x01, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, + 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, + 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x94, 0x01, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, + 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, + 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, + 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, + 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0f, 0x61, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x5c, + 0x0a, 0x12, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x12, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, + 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0xcc, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x76, 0x31, 0xa2, + 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_v1_project_proto_rawDescOnce sync.Once + file_network_project_v1_project_proto_rawDescData = file_network_project_v1_project_proto_rawDesc +) + +func file_network_project_v1_project_proto_rawDescGZIP() []byte { + file_network_project_v1_project_proto_rawDescOnce.Do(func() { + file_network_project_v1_project_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_project_proto_rawDescData) + }) + return file_network_project_v1_project_proto_rawDescData +} + +var file_network_project_v1_project_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_project_v1_project_proto_goTypes = []interface{}{ + (*Project)(nil), // 0: network.project.v1.Project + (*v1beta1.Coin)(nil), // 1: cosmos.base.v1beta1.Coin + (*SpecialAllocations)(nil), // 2: network.project.v1.SpecialAllocations +} +var file_network_project_v1_project_proto_depIdxs = []int32{ + 1, // 0: network.project.v1.Project.totalSupply:type_name -> cosmos.base.v1beta1.Coin + 1, // 1: network.project.v1.Project.allocatedShares:type_name -> cosmos.base.v1beta1.Coin + 2, // 2: network.project.v1.Project.specialAllocations:type_name -> network.project.v1.SpecialAllocations + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] 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 +} + +func init() { file_network_project_v1_project_proto_init() } +func file_network_project_v1_project_proto_init() { + if File_network_project_v1_project_proto != nil { + return + } + file_network_project_v1_special_allocations_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_project_v1_project_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Project); 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_network_project_v1_project_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_project_proto_goTypes, + DependencyIndexes: file_network_project_v1_project_proto_depIdxs, + MessageInfos: file_network_project_v1_project_proto_msgTypes, + }.Build() + File_network_project_v1_project_proto = out.File + file_network_project_v1_project_proto_rawDesc = nil + file_network_project_v1_project_proto_goTypes = nil + file_network_project_v1_project_proto_depIdxs = nil +} diff --git a/api/network/project/v1/project_chains.pulsar.go b/api/network/project/v1/project_chains.pulsar.go new file mode 100644 index 00000000..7f3c206e --- /dev/null +++ b/api/network/project/v1/project_chains.pulsar.go @@ -0,0 +1,744 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_ProjectChains_2_list)(nil) + +type _ProjectChains_2_list struct { + list *[]uint64 +} + +func (x *_ProjectChains_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ProjectChains_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfUint64((*x.list)[i]) +} + +func (x *_ProjectChains_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Uint() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_ProjectChains_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Uint() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_ProjectChains_2_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message ProjectChains at list field Chains as it is not of Message kind")) +} + +func (x *_ProjectChains_2_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_ProjectChains_2_list) NewElement() protoreflect.Value { + v := uint64(0) + return protoreflect.ValueOfUint64(v) +} + +func (x *_ProjectChains_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_ProjectChains protoreflect.MessageDescriptor + fd_ProjectChains_projectID protoreflect.FieldDescriptor + fd_ProjectChains_chains protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_project_chains_proto_init() + md_ProjectChains = File_network_project_v1_project_chains_proto.Messages().ByName("ProjectChains") + fd_ProjectChains_projectID = md_ProjectChains.Fields().ByName("projectID") + fd_ProjectChains_chains = md_ProjectChains.Fields().ByName("chains") +} + +var _ protoreflect.Message = (*fastReflection_ProjectChains)(nil) + +type fastReflection_ProjectChains ProjectChains + +func (x *ProjectChains) ProtoReflect() protoreflect.Message { + return (*fastReflection_ProjectChains)(x) +} + +func (x *ProjectChains) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_project_chains_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) +} + +var _fastReflection_ProjectChains_messageType fastReflection_ProjectChains_messageType +var _ protoreflect.MessageType = fastReflection_ProjectChains_messageType{} + +type fastReflection_ProjectChains_messageType struct{} + +func (x fastReflection_ProjectChains_messageType) Zero() protoreflect.Message { + return (*fastReflection_ProjectChains)(nil) +} +func (x fastReflection_ProjectChains_messageType) New() protoreflect.Message { + return new(fastReflection_ProjectChains) +} +func (x fastReflection_ProjectChains_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ProjectChains +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ProjectChains) Descriptor() protoreflect.MessageDescriptor { + return md_ProjectChains +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ProjectChains) Type() protoreflect.MessageType { + return _fastReflection_ProjectChains_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ProjectChains) New() protoreflect.Message { + return new(fastReflection_ProjectChains) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ProjectChains) Interface() protoreflect.ProtoMessage { + return (*ProjectChains)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ProjectChains) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_ProjectChains_projectID, value) { + return + } + } + if len(x.Chains) != 0 { + value := protoreflect.ValueOfList(&_ProjectChains_2_list{list: &x.Chains}) + if !f(fd_ProjectChains_chains, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ProjectChains) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.ProjectChains.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.ProjectChains.chains": + return len(x.Chains) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ProjectChains")) + } + panic(fmt.Errorf("message network.project.v1.ProjectChains does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ProjectChains) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.ProjectChains.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.ProjectChains.chains": + x.Chains = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ProjectChains")) + } + panic(fmt.Errorf("message network.project.v1.ProjectChains does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ProjectChains) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.ProjectChains.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.ProjectChains.chains": + if len(x.Chains) == 0 { + return protoreflect.ValueOfList(&_ProjectChains_2_list{}) + } + listValue := &_ProjectChains_2_list{list: &x.Chains} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ProjectChains")) + } + panic(fmt.Errorf("message network.project.v1.ProjectChains does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ProjectChains) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.ProjectChains.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.ProjectChains.chains": + lv := value.List() + clv := lv.(*_ProjectChains_2_list) + x.Chains = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ProjectChains")) + } + panic(fmt.Errorf("message network.project.v1.ProjectChains does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ProjectChains) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.ProjectChains.chains": + if x.Chains == nil { + x.Chains = []uint64{} + } + value := &_ProjectChains_2_list{list: &x.Chains} + return protoreflect.ValueOfList(value) + case "network.project.v1.ProjectChains.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.ProjectChains is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ProjectChains")) + } + panic(fmt.Errorf("message network.project.v1.ProjectChains does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ProjectChains) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.ProjectChains.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.ProjectChains.chains": + list := []uint64{} + return protoreflect.ValueOfList(&_ProjectChains_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ProjectChains")) + } + panic(fmt.Errorf("message network.project.v1.ProjectChains does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ProjectChains) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.ProjectChains", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ProjectChains) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ProjectChains) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ProjectChains) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ProjectChains) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ProjectChains) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if len(x.Chains) > 0 { + l = 0 + for _, e := range x.Chains { + l += runtime.Sov(uint64(e)) + } + n += 1 + runtime.Sov(uint64(l)) + l + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ProjectChains) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Chains) > 0 { + var pksize2 int + for _, num := range x.Chains { + pksize2 += runtime.Sov(uint64(num)) + } + i -= pksize2 + j1 := i + for _, num := range x.Chains { + for num >= 1<<7 { + dAtA[j1] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j1++ + } + dAtA[j1] = uint8(num) + j1++ + } + i = runtime.EncodeVarint(dAtA, i, uint64(pksize2)) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ProjectChains) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ProjectChains: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ProjectChains: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Chains = append(x.Chains, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(x.Chains) == 0 { + x.Chains = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Chains = append(x.Chains, v) + } + } else { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Chains", wireType) + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/project_chains.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ProjectChains struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Chains []uint64 `protobuf:"varint,2,rep,packed,name=chains,proto3" json:"chains,omitempty"` +} + +func (x *ProjectChains) Reset() { + *x = ProjectChains{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_project_chains_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProjectChains) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProjectChains) ProtoMessage() {} + +// Deprecated: Use ProjectChains.ProtoReflect.Descriptor instead. +func (*ProjectChains) Descriptor() ([]byte, []int) { + return file_network_project_v1_project_chains_proto_rawDescGZIP(), []int{0} +} + +func (x *ProjectChains) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *ProjectChains) GetChains() []uint64 { + if x != nil { + return x.Chains + } + return nil +} + +var File_network_project_v1_project_chains_proto protoreflect.FileDescriptor + +var file_network_project_v1_project_chains_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x22, 0x45, 0x0a, + 0x0d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x73, 0x42, 0xd2, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, + 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x76, + 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_project_v1_project_chains_proto_rawDescOnce sync.Once + file_network_project_v1_project_chains_proto_rawDescData = file_network_project_v1_project_chains_proto_rawDesc +) + +func file_network_project_v1_project_chains_proto_rawDescGZIP() []byte { + file_network_project_v1_project_chains_proto_rawDescOnce.Do(func() { + file_network_project_v1_project_chains_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_project_chains_proto_rawDescData) + }) + return file_network_project_v1_project_chains_proto_rawDescData +} + +var file_network_project_v1_project_chains_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_project_v1_project_chains_proto_goTypes = []interface{}{ + (*ProjectChains)(nil), // 0: network.project.v1.ProjectChains +} +var file_network_project_v1_project_chains_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 +} + +func init() { file_network_project_v1_project_chains_proto_init() } +func file_network_project_v1_project_chains_proto_init() { + if File_network_project_v1_project_chains_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_project_v1_project_chains_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProjectChains); 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_network_project_v1_project_chains_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_project_chains_proto_goTypes, + DependencyIndexes: file_network_project_v1_project_chains_proto_depIdxs, + MessageInfos: file_network_project_v1_project_chains_proto_msgTypes, + }.Build() + File_network_project_v1_project_chains_proto = out.File + file_network_project_v1_project_chains_proto_rawDesc = nil + file_network_project_v1_project_chains_proto_goTypes = nil + file_network_project_v1_project_chains_proto_depIdxs = nil +} diff --git a/api/network/project/v1/query.pulsar.go b/api/network/project/v1/query.pulsar.go new file mode 100644 index 00000000..e909f937 --- /dev/null +++ b/api/network/project/v1/query.pulsar.go @@ -0,0 +1,10640 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1" + v1beta11 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_QueryParamsRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryParamsRequest = File_network_project_v1_query_proto.Messages().ByName("QueryParamsRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsRequest)(nil) + +type fastReflection_QueryParamsRequest QueryParamsRequest + +func (x *QueryParamsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(x) +} + +func (x *QueryParamsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QueryParamsRequest_messageType fastReflection_QueryParamsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsRequest_messageType{} + +type fastReflection_QueryParamsRequest_messageType struct{} + +func (x fastReflection_QueryParamsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(nil) +} +func (x fastReflection_QueryParamsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} +func (x fastReflection_QueryParamsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsRequest) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryParamsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryParamsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryParamsResponse protoreflect.MessageDescriptor + fd_QueryParamsResponse_params protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryParamsResponse = File_network_project_v1_query_proto.Messages().ByName("QueryParamsResponse") + fd_QueryParamsResponse_params = md_QueryParamsResponse.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsResponse)(nil) + +type fastReflection_QueryParamsResponse QueryParamsResponse + +func (x *QueryParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(x) +} + +func (x *QueryParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QueryParamsResponse_messageType fastReflection_QueryParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsResponse_messageType{} + +type fastReflection_QueryParamsResponse_messageType struct{} + +func (x fastReflection_QueryParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(nil) +} +func (x fastReflection_QueryParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} +func (x fastReflection_QueryParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsResponse) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_QueryParamsResponse_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryParamsResponse.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryParamsResponse.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryParamsResponse.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryParamsResponse.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryParamsResponse.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryParamsResponse.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetMainnetAccountRequest protoreflect.MessageDescriptor + fd_QueryGetMainnetAccountRequest_projectID protoreflect.FieldDescriptor + fd_QueryGetMainnetAccountRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryGetMainnetAccountRequest = File_network_project_v1_query_proto.Messages().ByName("QueryGetMainnetAccountRequest") + fd_QueryGetMainnetAccountRequest_projectID = md_QueryGetMainnetAccountRequest.Fields().ByName("projectID") + fd_QueryGetMainnetAccountRequest_address = md_QueryGetMainnetAccountRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetMainnetAccountRequest)(nil) + +type fastReflection_QueryGetMainnetAccountRequest QueryGetMainnetAccountRequest + +func (x *QueryGetMainnetAccountRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetMainnetAccountRequest)(x) +} + +func (x *QueryGetMainnetAccountRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[2] + 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) +} + +var _fastReflection_QueryGetMainnetAccountRequest_messageType fastReflection_QueryGetMainnetAccountRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetMainnetAccountRequest_messageType{} + +type fastReflection_QueryGetMainnetAccountRequest_messageType struct{} + +func (x fastReflection_QueryGetMainnetAccountRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetMainnetAccountRequest)(nil) +} +func (x fastReflection_QueryGetMainnetAccountRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetMainnetAccountRequest) +} +func (x fastReflection_QueryGetMainnetAccountRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMainnetAccountRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetMainnetAccountRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMainnetAccountRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetMainnetAccountRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetMainnetAccountRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetMainnetAccountRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetMainnetAccountRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetMainnetAccountRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetMainnetAccountRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetMainnetAccountRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_QueryGetMainnetAccountRequest_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryGetMainnetAccountRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetMainnetAccountRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountRequest.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.QueryGetMainnetAccountRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMainnetAccountRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountRequest.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.QueryGetMainnetAccountRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetMainnetAccountRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryGetMainnetAccountRequest.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.QueryGetMainnetAccountRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMainnetAccountRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountRequest.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.QueryGetMainnetAccountRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMainnetAccountRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountRequest.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.QueryGetMainnetAccountRequest is not mutable")) + case "network.project.v1.QueryGetMainnetAccountRequest.address": + panic(fmt.Errorf("field address of message network.project.v1.QueryGetMainnetAccountRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetMainnetAccountRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountRequest.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.QueryGetMainnetAccountRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetMainnetAccountRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryGetMainnetAccountRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetMainnetAccountRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMainnetAccountRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetMainnetAccountRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetMainnetAccountRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetMainnetAccountRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMainnetAccountRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMainnetAccountRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMainnetAccountRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMainnetAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetMainnetAccountResponse protoreflect.MessageDescriptor + fd_QueryGetMainnetAccountResponse_mainnetAccount protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryGetMainnetAccountResponse = File_network_project_v1_query_proto.Messages().ByName("QueryGetMainnetAccountResponse") + fd_QueryGetMainnetAccountResponse_mainnetAccount = md_QueryGetMainnetAccountResponse.Fields().ByName("mainnetAccount") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetMainnetAccountResponse)(nil) + +type fastReflection_QueryGetMainnetAccountResponse QueryGetMainnetAccountResponse + +func (x *QueryGetMainnetAccountResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetMainnetAccountResponse)(x) +} + +func (x *QueryGetMainnetAccountResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[3] + 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) +} + +var _fastReflection_QueryGetMainnetAccountResponse_messageType fastReflection_QueryGetMainnetAccountResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetMainnetAccountResponse_messageType{} + +type fastReflection_QueryGetMainnetAccountResponse_messageType struct{} + +func (x fastReflection_QueryGetMainnetAccountResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetMainnetAccountResponse)(nil) +} +func (x fastReflection_QueryGetMainnetAccountResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetMainnetAccountResponse) +} +func (x fastReflection_QueryGetMainnetAccountResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMainnetAccountResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetMainnetAccountResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetMainnetAccountResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetMainnetAccountResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetMainnetAccountResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetMainnetAccountResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetMainnetAccountResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetMainnetAccountResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetMainnetAccountResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetMainnetAccountResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.MainnetAccount != nil { + value := protoreflect.ValueOfMessage(x.MainnetAccount.ProtoReflect()) + if !f(fd_QueryGetMainnetAccountResponse_mainnetAccount, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetMainnetAccountResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountResponse.mainnetAccount": + return x.MainnetAccount != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMainnetAccountResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountResponse.mainnetAccount": + x.MainnetAccount = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetMainnetAccountResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryGetMainnetAccountResponse.mainnetAccount": + value := x.MainnetAccount + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMainnetAccountResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountResponse.mainnetAccount": + x.MainnetAccount = value.Message().Interface().(*MainnetAccount) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMainnetAccountResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountResponse.mainnetAccount": + if x.MainnetAccount == nil { + x.MainnetAccount = new(MainnetAccount) + } + return protoreflect.ValueOfMessage(x.MainnetAccount.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetMainnetAccountResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetMainnetAccountResponse.mainnetAccount": + m := new(MainnetAccount) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetMainnetAccountResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryGetMainnetAccountResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetMainnetAccountResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetMainnetAccountResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetMainnetAccountResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetMainnetAccountResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetMainnetAccountResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.MainnetAccount != nil { + l = options.Size(x.MainnetAccount) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMainnetAccountResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MainnetAccount != nil { + encoded, err := options.Marshal(x.MainnetAccount) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetMainnetAccountResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMainnetAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetMainnetAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.MainnetAccount == nil { + x.MainnetAccount = &MainnetAccount{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MainnetAccount); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllMainnetAccountRequest protoreflect.MessageDescriptor + fd_QueryAllMainnetAccountRequest_projectID protoreflect.FieldDescriptor + fd_QueryAllMainnetAccountRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryAllMainnetAccountRequest = File_network_project_v1_query_proto.Messages().ByName("QueryAllMainnetAccountRequest") + fd_QueryAllMainnetAccountRequest_projectID = md_QueryAllMainnetAccountRequest.Fields().ByName("projectID") + fd_QueryAllMainnetAccountRequest_pagination = md_QueryAllMainnetAccountRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllMainnetAccountRequest)(nil) + +type fastReflection_QueryAllMainnetAccountRequest QueryAllMainnetAccountRequest + +func (x *QueryAllMainnetAccountRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllMainnetAccountRequest)(x) +} + +func (x *QueryAllMainnetAccountRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[4] + 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) +} + +var _fastReflection_QueryAllMainnetAccountRequest_messageType fastReflection_QueryAllMainnetAccountRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllMainnetAccountRequest_messageType{} + +type fastReflection_QueryAllMainnetAccountRequest_messageType struct{} + +func (x fastReflection_QueryAllMainnetAccountRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllMainnetAccountRequest)(nil) +} +func (x fastReflection_QueryAllMainnetAccountRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllMainnetAccountRequest) +} +func (x fastReflection_QueryAllMainnetAccountRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllMainnetAccountRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllMainnetAccountRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllMainnetAccountRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllMainnetAccountRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllMainnetAccountRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllMainnetAccountRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllMainnetAccountRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllMainnetAccountRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllMainnetAccountRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllMainnetAccountRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_QueryAllMainnetAccountRequest_projectID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllMainnetAccountRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllMainnetAccountRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountRequest.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.QueryAllMainnetAccountRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllMainnetAccountRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountRequest.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.QueryAllMainnetAccountRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllMainnetAccountRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryAllMainnetAccountRequest.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.QueryAllMainnetAccountRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllMainnetAccountRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountRequest.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.QueryAllMainnetAccountRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllMainnetAccountRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + case "network.project.v1.QueryAllMainnetAccountRequest.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.QueryAllMainnetAccountRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllMainnetAccountRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountRequest.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.QueryAllMainnetAccountRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllMainnetAccountRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryAllMainnetAccountRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllMainnetAccountRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllMainnetAccountRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllMainnetAccountRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllMainnetAccountRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllMainnetAccountRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllMainnetAccountRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllMainnetAccountRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllMainnetAccountRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllMainnetAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllMainnetAccountResponse_1_list)(nil) + +type _QueryAllMainnetAccountResponse_1_list struct { + list *[]*MainnetAccount +} + +func (x *_QueryAllMainnetAccountResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllMainnetAccountResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllMainnetAccountResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*MainnetAccount) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllMainnetAccountResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*MainnetAccount) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllMainnetAccountResponse_1_list) AppendMutable() protoreflect.Value { + v := new(MainnetAccount) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllMainnetAccountResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllMainnetAccountResponse_1_list) NewElement() protoreflect.Value { + v := new(MainnetAccount) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllMainnetAccountResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllMainnetAccountResponse protoreflect.MessageDescriptor + fd_QueryAllMainnetAccountResponse_mainnetAccount protoreflect.FieldDescriptor + fd_QueryAllMainnetAccountResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryAllMainnetAccountResponse = File_network_project_v1_query_proto.Messages().ByName("QueryAllMainnetAccountResponse") + fd_QueryAllMainnetAccountResponse_mainnetAccount = md_QueryAllMainnetAccountResponse.Fields().ByName("mainnetAccount") + fd_QueryAllMainnetAccountResponse_pagination = md_QueryAllMainnetAccountResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllMainnetAccountResponse)(nil) + +type fastReflection_QueryAllMainnetAccountResponse QueryAllMainnetAccountResponse + +func (x *QueryAllMainnetAccountResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllMainnetAccountResponse)(x) +} + +func (x *QueryAllMainnetAccountResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[5] + 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) +} + +var _fastReflection_QueryAllMainnetAccountResponse_messageType fastReflection_QueryAllMainnetAccountResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllMainnetAccountResponse_messageType{} + +type fastReflection_QueryAllMainnetAccountResponse_messageType struct{} + +func (x fastReflection_QueryAllMainnetAccountResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllMainnetAccountResponse)(nil) +} +func (x fastReflection_QueryAllMainnetAccountResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllMainnetAccountResponse) +} +func (x fastReflection_QueryAllMainnetAccountResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllMainnetAccountResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllMainnetAccountResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllMainnetAccountResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllMainnetAccountResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllMainnetAccountResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllMainnetAccountResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllMainnetAccountResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllMainnetAccountResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllMainnetAccountResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllMainnetAccountResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.MainnetAccount) != 0 { + value := protoreflect.ValueOfList(&_QueryAllMainnetAccountResponse_1_list{list: &x.MainnetAccount}) + if !f(fd_QueryAllMainnetAccountResponse_mainnetAccount, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllMainnetAccountResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllMainnetAccountResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountResponse.mainnetAccount": + return len(x.MainnetAccount) != 0 + case "network.project.v1.QueryAllMainnetAccountResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllMainnetAccountResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountResponse.mainnetAccount": + x.MainnetAccount = nil + case "network.project.v1.QueryAllMainnetAccountResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllMainnetAccountResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryAllMainnetAccountResponse.mainnetAccount": + if len(x.MainnetAccount) == 0 { + return protoreflect.ValueOfList(&_QueryAllMainnetAccountResponse_1_list{}) + } + listValue := &_QueryAllMainnetAccountResponse_1_list{list: &x.MainnetAccount} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.QueryAllMainnetAccountResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllMainnetAccountResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountResponse.mainnetAccount": + lv := value.List() + clv := lv.(*_QueryAllMainnetAccountResponse_1_list) + x.MainnetAccount = *clv.list + case "network.project.v1.QueryAllMainnetAccountResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllMainnetAccountResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountResponse.mainnetAccount": + if x.MainnetAccount == nil { + x.MainnetAccount = []*MainnetAccount{} + } + value := &_QueryAllMainnetAccountResponse_1_list{list: &x.MainnetAccount} + return protoreflect.ValueOfList(value) + case "network.project.v1.QueryAllMainnetAccountResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllMainnetAccountResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryAllMainnetAccountResponse.mainnetAccount": + list := []*MainnetAccount{} + return protoreflect.ValueOfList(&_QueryAllMainnetAccountResponse_1_list{list: &list}) + case "network.project.v1.QueryAllMainnetAccountResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllMainnetAccountResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllMainnetAccountResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllMainnetAccountResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryAllMainnetAccountResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllMainnetAccountResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllMainnetAccountResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllMainnetAccountResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllMainnetAccountResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllMainnetAccountResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.MainnetAccount) > 0 { + for _, e := range x.MainnetAccount { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllMainnetAccountResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.MainnetAccount) > 0 { + for iNdEx := len(x.MainnetAccount) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.MainnetAccount[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllMainnetAccountResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllMainnetAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllMainnetAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MainnetAccount = append(x.MainnetAccount, &MainnetAccount{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MainnetAccount[len(x.MainnetAccount)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetProjectRequest protoreflect.MessageDescriptor + fd_QueryGetProjectRequest_projectID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryGetProjectRequest = File_network_project_v1_query_proto.Messages().ByName("QueryGetProjectRequest") + fd_QueryGetProjectRequest_projectID = md_QueryGetProjectRequest.Fields().ByName("projectID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetProjectRequest)(nil) + +type fastReflection_QueryGetProjectRequest QueryGetProjectRequest + +func (x *QueryGetProjectRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetProjectRequest)(x) +} + +func (x *QueryGetProjectRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QueryGetProjectRequest_messageType fastReflection_QueryGetProjectRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetProjectRequest_messageType{} + +type fastReflection_QueryGetProjectRequest_messageType struct{} + +func (x fastReflection_QueryGetProjectRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetProjectRequest)(nil) +} +func (x fastReflection_QueryGetProjectRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetProjectRequest) +} +func (x fastReflection_QueryGetProjectRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProjectRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetProjectRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProjectRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetProjectRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetProjectRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetProjectRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetProjectRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetProjectRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetProjectRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetProjectRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_QueryGetProjectRequest_projectID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetProjectRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectRequest.projectID": + return x.ProjectID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectRequest.projectID": + x.ProjectID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetProjectRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryGetProjectRequest.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectRequest.projectID": + x.ProjectID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectRequest.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.QueryGetProjectRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetProjectRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectRequest.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetProjectRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryGetProjectRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetProjectRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetProjectRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetProjectRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetProjectRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProjectRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProjectRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProjectRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetProjectResponse protoreflect.MessageDescriptor + fd_QueryGetProjectResponse_Project protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryGetProjectResponse = File_network_project_v1_query_proto.Messages().ByName("QueryGetProjectResponse") + fd_QueryGetProjectResponse_Project = md_QueryGetProjectResponse.Fields().ByName("Project") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetProjectResponse)(nil) + +type fastReflection_QueryGetProjectResponse QueryGetProjectResponse + +func (x *QueryGetProjectResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetProjectResponse)(x) +} + +func (x *QueryGetProjectResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QueryGetProjectResponse_messageType fastReflection_QueryGetProjectResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetProjectResponse_messageType{} + +type fastReflection_QueryGetProjectResponse_messageType struct{} + +func (x fastReflection_QueryGetProjectResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetProjectResponse)(nil) +} +func (x fastReflection_QueryGetProjectResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetProjectResponse) +} +func (x fastReflection_QueryGetProjectResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProjectResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetProjectResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProjectResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetProjectResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetProjectResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetProjectResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetProjectResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetProjectResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetProjectResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetProjectResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Project != nil { + value := protoreflect.ValueOfMessage(x.Project.ProtoReflect()) + if !f(fd_QueryGetProjectResponse_Project, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetProjectResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectResponse.Project": + return x.Project != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectResponse.Project": + x.Project = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetProjectResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryGetProjectResponse.Project": + value := x.Project + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectResponse.Project": + x.Project = value.Message().Interface().(*Project) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectResponse.Project": + if x.Project == nil { + x.Project = new(Project) + } + return protoreflect.ValueOfMessage(x.Project.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetProjectResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectResponse.Project": + m := new(Project) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetProjectResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryGetProjectResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetProjectResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetProjectResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetProjectResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetProjectResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Project != nil { + l = options.Size(x.Project) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProjectResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Project != nil { + encoded, err := options.Marshal(x.Project) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProjectResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProjectResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Project", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Project == nil { + x.Project = &Project{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Project); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllProjectRequest protoreflect.MessageDescriptor + fd_QueryAllProjectRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryAllProjectRequest = File_network_project_v1_query_proto.Messages().ByName("QueryAllProjectRequest") + fd_QueryAllProjectRequest_pagination = md_QueryAllProjectRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllProjectRequest)(nil) + +type fastReflection_QueryAllProjectRequest QueryAllProjectRequest + +func (x *QueryAllProjectRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllProjectRequest)(x) +} + +func (x *QueryAllProjectRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QueryAllProjectRequest_messageType fastReflection_QueryAllProjectRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllProjectRequest_messageType{} + +type fastReflection_QueryAllProjectRequest_messageType struct{} + +func (x fastReflection_QueryAllProjectRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllProjectRequest)(nil) +} +func (x fastReflection_QueryAllProjectRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllProjectRequest) +} +func (x fastReflection_QueryAllProjectRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllProjectRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllProjectRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllProjectRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllProjectRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllProjectRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllProjectRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllProjectRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllProjectRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllProjectRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllProjectRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllProjectRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllProjectRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProjectRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllProjectRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryAllProjectRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProjectRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProjectRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllProjectRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllProjectRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryAllProjectRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllProjectRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProjectRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllProjectRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllProjectRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllProjectRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllProjectRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllProjectRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllProjectRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllProjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllProjectResponse_1_list)(nil) + +type _QueryAllProjectResponse_1_list struct { + list *[]*Project +} + +func (x *_QueryAllProjectResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllProjectResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllProjectResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Project) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllProjectResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Project) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllProjectResponse_1_list) AppendMutable() protoreflect.Value { + v := new(Project) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllProjectResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllProjectResponse_1_list) NewElement() protoreflect.Value { + v := new(Project) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllProjectResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllProjectResponse protoreflect.MessageDescriptor + fd_QueryAllProjectResponse_Project protoreflect.FieldDescriptor + fd_QueryAllProjectResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryAllProjectResponse = File_network_project_v1_query_proto.Messages().ByName("QueryAllProjectResponse") + fd_QueryAllProjectResponse_Project = md_QueryAllProjectResponse.Fields().ByName("Project") + fd_QueryAllProjectResponse_pagination = md_QueryAllProjectResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllProjectResponse)(nil) + +type fastReflection_QueryAllProjectResponse QueryAllProjectResponse + +func (x *QueryAllProjectResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllProjectResponse)(x) +} + +func (x *QueryAllProjectResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QueryAllProjectResponse_messageType fastReflection_QueryAllProjectResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllProjectResponse_messageType{} + +type fastReflection_QueryAllProjectResponse_messageType struct{} + +func (x fastReflection_QueryAllProjectResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllProjectResponse)(nil) +} +func (x fastReflection_QueryAllProjectResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllProjectResponse) +} +func (x fastReflection_QueryAllProjectResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllProjectResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllProjectResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllProjectResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllProjectResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllProjectResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllProjectResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllProjectResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllProjectResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllProjectResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllProjectResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Project) != 0 { + value := protoreflect.ValueOfList(&_QueryAllProjectResponse_1_list{list: &x.Project}) + if !f(fd_QueryAllProjectResponse_Project, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllProjectResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllProjectResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectResponse.Project": + return len(x.Project) != 0 + case "network.project.v1.QueryAllProjectResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProjectResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectResponse.Project": + x.Project = nil + case "network.project.v1.QueryAllProjectResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllProjectResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryAllProjectResponse.Project": + if len(x.Project) == 0 { + return protoreflect.ValueOfList(&_QueryAllProjectResponse_1_list{}) + } + listValue := &_QueryAllProjectResponse_1_list{list: &x.Project} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.QueryAllProjectResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProjectResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectResponse.Project": + lv := value.List() + clv := lv.(*_QueryAllProjectResponse_1_list) + x.Project = *clv.list + case "network.project.v1.QueryAllProjectResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProjectResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectResponse.Project": + if x.Project == nil { + x.Project = []*Project{} + } + value := &_QueryAllProjectResponse_1_list{list: &x.Project} + return protoreflect.ValueOfList(value) + case "network.project.v1.QueryAllProjectResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllProjectResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryAllProjectResponse.Project": + list := []*Project{} + return protoreflect.ValueOfList(&_QueryAllProjectResponse_1_list{list: &list}) + case "network.project.v1.QueryAllProjectResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryAllProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryAllProjectResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllProjectResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryAllProjectResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllProjectResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllProjectResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllProjectResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllProjectResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllProjectResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Project) > 0 { + for _, e := range x.Project { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllProjectResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Project) > 0 { + for iNdEx := len(x.Project) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Project[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllProjectResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllProjectResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllProjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Project", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Project = append(x.Project, &Project{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Project[len(x.Project)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetProjectChainsRequest protoreflect.MessageDescriptor + fd_QueryGetProjectChainsRequest_projectID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryGetProjectChainsRequest = File_network_project_v1_query_proto.Messages().ByName("QueryGetProjectChainsRequest") + fd_QueryGetProjectChainsRequest_projectID = md_QueryGetProjectChainsRequest.Fields().ByName("projectID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetProjectChainsRequest)(nil) + +type fastReflection_QueryGetProjectChainsRequest QueryGetProjectChainsRequest + +func (x *QueryGetProjectChainsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetProjectChainsRequest)(x) +} + +func (x *QueryGetProjectChainsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QueryGetProjectChainsRequest_messageType fastReflection_QueryGetProjectChainsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetProjectChainsRequest_messageType{} + +type fastReflection_QueryGetProjectChainsRequest_messageType struct{} + +func (x fastReflection_QueryGetProjectChainsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetProjectChainsRequest)(nil) +} +func (x fastReflection_QueryGetProjectChainsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetProjectChainsRequest) +} +func (x fastReflection_QueryGetProjectChainsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProjectChainsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetProjectChainsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProjectChainsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetProjectChainsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetProjectChainsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetProjectChainsRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetProjectChainsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetProjectChainsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetProjectChainsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetProjectChainsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_QueryGetProjectChainsRequest_projectID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetProjectChainsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsRequest.projectID": + return x.ProjectID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectChainsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsRequest.projectID": + x.ProjectID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetProjectChainsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryGetProjectChainsRequest.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectChainsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsRequest.projectID": + x.ProjectID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectChainsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsRequest.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.QueryGetProjectChainsRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetProjectChainsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsRequest.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetProjectChainsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryGetProjectChainsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetProjectChainsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectChainsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetProjectChainsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetProjectChainsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetProjectChainsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProjectChainsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProjectChainsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProjectChainsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProjectChainsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetProjectChainsResponse protoreflect.MessageDescriptor + fd_QueryGetProjectChainsResponse_projectChains protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryGetProjectChainsResponse = File_network_project_v1_query_proto.Messages().ByName("QueryGetProjectChainsResponse") + fd_QueryGetProjectChainsResponse_projectChains = md_QueryGetProjectChainsResponse.Fields().ByName("projectChains") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetProjectChainsResponse)(nil) + +type fastReflection_QueryGetProjectChainsResponse QueryGetProjectChainsResponse + +func (x *QueryGetProjectChainsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetProjectChainsResponse)(x) +} + +func (x *QueryGetProjectChainsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[11] + 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) +} + +var _fastReflection_QueryGetProjectChainsResponse_messageType fastReflection_QueryGetProjectChainsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetProjectChainsResponse_messageType{} + +type fastReflection_QueryGetProjectChainsResponse_messageType struct{} + +func (x fastReflection_QueryGetProjectChainsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetProjectChainsResponse)(nil) +} +func (x fastReflection_QueryGetProjectChainsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetProjectChainsResponse) +} +func (x fastReflection_QueryGetProjectChainsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProjectChainsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetProjectChainsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetProjectChainsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetProjectChainsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetProjectChainsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetProjectChainsResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetProjectChainsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetProjectChainsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetProjectChainsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetProjectChainsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectChains != nil { + value := protoreflect.ValueOfMessage(x.ProjectChains.ProtoReflect()) + if !f(fd_QueryGetProjectChainsResponse_projectChains, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetProjectChainsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsResponse.projectChains": + return x.ProjectChains != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectChainsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsResponse.projectChains": + x.ProjectChains = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetProjectChainsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryGetProjectChainsResponse.projectChains": + value := x.ProjectChains + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectChainsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsResponse.projectChains": + x.ProjectChains = value.Message().Interface().(*ProjectChains) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectChainsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsResponse.projectChains": + if x.ProjectChains == nil { + x.ProjectChains = new(ProjectChains) + } + return protoreflect.ValueOfMessage(x.ProjectChains.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetProjectChainsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryGetProjectChainsResponse.projectChains": + m := new(ProjectChains) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryGetProjectChainsResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryGetProjectChainsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetProjectChainsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryGetProjectChainsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetProjectChainsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetProjectChainsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetProjectChainsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetProjectChainsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetProjectChainsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectChains != nil { + l = options.Size(x.ProjectChains) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProjectChainsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ProjectChains != nil { + encoded, err := options.Marshal(x.ProjectChains) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetProjectChainsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProjectChainsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetProjectChainsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectChains", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ProjectChains == nil { + x.ProjectChains = &ProjectChains{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ProjectChains); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QuerySpecialAllocationsBalanceRequest protoreflect.MessageDescriptor + fd_QuerySpecialAllocationsBalanceRequest_projectID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QuerySpecialAllocationsBalanceRequest = File_network_project_v1_query_proto.Messages().ByName("QuerySpecialAllocationsBalanceRequest") + fd_QuerySpecialAllocationsBalanceRequest_projectID = md_QuerySpecialAllocationsBalanceRequest.Fields().ByName("projectID") +} + +var _ protoreflect.Message = (*fastReflection_QuerySpecialAllocationsBalanceRequest)(nil) + +type fastReflection_QuerySpecialAllocationsBalanceRequest QuerySpecialAllocationsBalanceRequest + +func (x *QuerySpecialAllocationsBalanceRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QuerySpecialAllocationsBalanceRequest)(x) +} + +func (x *QuerySpecialAllocationsBalanceRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QuerySpecialAllocationsBalanceRequest_messageType fastReflection_QuerySpecialAllocationsBalanceRequest_messageType +var _ protoreflect.MessageType = fastReflection_QuerySpecialAllocationsBalanceRequest_messageType{} + +type fastReflection_QuerySpecialAllocationsBalanceRequest_messageType struct{} + +func (x fastReflection_QuerySpecialAllocationsBalanceRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QuerySpecialAllocationsBalanceRequest)(nil) +} +func (x fastReflection_QuerySpecialAllocationsBalanceRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QuerySpecialAllocationsBalanceRequest) +} +func (x fastReflection_QuerySpecialAllocationsBalanceRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QuerySpecialAllocationsBalanceRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QuerySpecialAllocationsBalanceRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Type() protoreflect.MessageType { + return _fastReflection_QuerySpecialAllocationsBalanceRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) New() protoreflect.Message { + return new(fastReflection_QuerySpecialAllocationsBalanceRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Interface() protoreflect.ProtoMessage { + return (*QuerySpecialAllocationsBalanceRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_QuerySpecialAllocationsBalanceRequest_projectID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceRequest.projectID": + return x.ProjectID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceRequest.projectID": + x.ProjectID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceRequest.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceRequest.projectID": + x.ProjectID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceRequest.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.QuerySpecialAllocationsBalanceRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceRequest.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QuerySpecialAllocationsBalanceRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QuerySpecialAllocationsBalanceRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QuerySpecialAllocationsBalanceRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QuerySpecialAllocationsBalanceRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QuerySpecialAllocationsBalanceRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QuerySpecialAllocationsBalanceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QuerySpecialAllocationsBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QuerySpecialAllocationsBalanceResponse_1_list)(nil) + +type _QuerySpecialAllocationsBalanceResponse_1_list struct { + list *[]*v1beta11.Coin +} + +func (x *_QuerySpecialAllocationsBalanceResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta11.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_QuerySpecialAllocationsBalanceResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta11.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_1_list) AppendMutable() protoreflect.Value { + v := new(v1beta11.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QuerySpecialAllocationsBalanceResponse_1_list) NewElement() protoreflect.Value { + v := new(v1beta11.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_1_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_QuerySpecialAllocationsBalanceResponse_2_list)(nil) + +type _QuerySpecialAllocationsBalanceResponse_2_list struct { + list *[]*v1beta11.Coin +} + +func (x *_QuerySpecialAllocationsBalanceResponse_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta11.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_QuerySpecialAllocationsBalanceResponse_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta11.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_2_list) AppendMutable() protoreflect.Value { + v := new(v1beta11.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QuerySpecialAllocationsBalanceResponse_2_list) NewElement() protoreflect.Value { + v := new(v1beta11.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QuerySpecialAllocationsBalanceResponse_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QuerySpecialAllocationsBalanceResponse protoreflect.MessageDescriptor + fd_QuerySpecialAllocationsBalanceResponse_genesisDistribution protoreflect.FieldDescriptor + fd_QuerySpecialAllocationsBalanceResponse_claimableAirdrop protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QuerySpecialAllocationsBalanceResponse = File_network_project_v1_query_proto.Messages().ByName("QuerySpecialAllocationsBalanceResponse") + fd_QuerySpecialAllocationsBalanceResponse_genesisDistribution = md_QuerySpecialAllocationsBalanceResponse.Fields().ByName("genesisDistribution") + fd_QuerySpecialAllocationsBalanceResponse_claimableAirdrop = md_QuerySpecialAllocationsBalanceResponse.Fields().ByName("claimableAirdrop") +} + +var _ protoreflect.Message = (*fastReflection_QuerySpecialAllocationsBalanceResponse)(nil) + +type fastReflection_QuerySpecialAllocationsBalanceResponse QuerySpecialAllocationsBalanceResponse + +func (x *QuerySpecialAllocationsBalanceResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QuerySpecialAllocationsBalanceResponse)(x) +} + +func (x *QuerySpecialAllocationsBalanceResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[13] + 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) +} + +var _fastReflection_QuerySpecialAllocationsBalanceResponse_messageType fastReflection_QuerySpecialAllocationsBalanceResponse_messageType +var _ protoreflect.MessageType = fastReflection_QuerySpecialAllocationsBalanceResponse_messageType{} + +type fastReflection_QuerySpecialAllocationsBalanceResponse_messageType struct{} + +func (x fastReflection_QuerySpecialAllocationsBalanceResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QuerySpecialAllocationsBalanceResponse)(nil) +} +func (x fastReflection_QuerySpecialAllocationsBalanceResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QuerySpecialAllocationsBalanceResponse) +} +func (x fastReflection_QuerySpecialAllocationsBalanceResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QuerySpecialAllocationsBalanceResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QuerySpecialAllocationsBalanceResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Type() protoreflect.MessageType { + return _fastReflection_QuerySpecialAllocationsBalanceResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) New() protoreflect.Message { + return new(fastReflection_QuerySpecialAllocationsBalanceResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Interface() protoreflect.ProtoMessage { + return (*QuerySpecialAllocationsBalanceResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.GenesisDistribution) != 0 { + value := protoreflect.ValueOfList(&_QuerySpecialAllocationsBalanceResponse_1_list{list: &x.GenesisDistribution}) + if !f(fd_QuerySpecialAllocationsBalanceResponse_genesisDistribution, value) { + return + } + } + if len(x.ClaimableAirdrop) != 0 { + value := protoreflect.ValueOfList(&_QuerySpecialAllocationsBalanceResponse_2_list{list: &x.ClaimableAirdrop}) + if !f(fd_QuerySpecialAllocationsBalanceResponse_claimableAirdrop, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.genesisDistribution": + return len(x.GenesisDistribution) != 0 + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.claimableAirdrop": + return len(x.ClaimableAirdrop) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.genesisDistribution": + x.GenesisDistribution = nil + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.claimableAirdrop": + x.ClaimableAirdrop = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.genesisDistribution": + if len(x.GenesisDistribution) == 0 { + return protoreflect.ValueOfList(&_QuerySpecialAllocationsBalanceResponse_1_list{}) + } + listValue := &_QuerySpecialAllocationsBalanceResponse_1_list{list: &x.GenesisDistribution} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.claimableAirdrop": + if len(x.ClaimableAirdrop) == 0 { + return protoreflect.ValueOfList(&_QuerySpecialAllocationsBalanceResponse_2_list{}) + } + listValue := &_QuerySpecialAllocationsBalanceResponse_2_list{list: &x.ClaimableAirdrop} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.genesisDistribution": + lv := value.List() + clv := lv.(*_QuerySpecialAllocationsBalanceResponse_1_list) + x.GenesisDistribution = *clv.list + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.claimableAirdrop": + lv := value.List() + clv := lv.(*_QuerySpecialAllocationsBalanceResponse_2_list) + x.ClaimableAirdrop = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.genesisDistribution": + if x.GenesisDistribution == nil { + x.GenesisDistribution = []*v1beta11.Coin{} + } + value := &_QuerySpecialAllocationsBalanceResponse_1_list{list: &x.GenesisDistribution} + return protoreflect.ValueOfList(value) + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.claimableAirdrop": + if x.ClaimableAirdrop == nil { + x.ClaimableAirdrop = []*v1beta11.Coin{} + } + value := &_QuerySpecialAllocationsBalanceResponse_2_list{list: &x.ClaimableAirdrop} + return protoreflect.ValueOfList(value) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.genesisDistribution": + list := []*v1beta11.Coin{} + return protoreflect.ValueOfList(&_QuerySpecialAllocationsBalanceResponse_1_list{list: &list}) + case "network.project.v1.QuerySpecialAllocationsBalanceResponse.claimableAirdrop": + list := []*v1beta11.Coin{} + return protoreflect.ValueOfList(&_QuerySpecialAllocationsBalanceResponse_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QuerySpecialAllocationsBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QuerySpecialAllocationsBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QuerySpecialAllocationsBalanceResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QuerySpecialAllocationsBalanceResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QuerySpecialAllocationsBalanceResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.GenesisDistribution) > 0 { + for _, e := range x.GenesisDistribution { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.ClaimableAirdrop) > 0 { + for _, e := range x.ClaimableAirdrop { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QuerySpecialAllocationsBalanceResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ClaimableAirdrop) > 0 { + for iNdEx := len(x.ClaimableAirdrop) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ClaimableAirdrop[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.GenesisDistribution) > 0 { + for iNdEx := len(x.GenesisDistribution) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.GenesisDistribution[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QuerySpecialAllocationsBalanceResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QuerySpecialAllocationsBalanceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QuerySpecialAllocationsBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisDistribution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisDistribution = append(x.GenesisDistribution, &v1beta11.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.GenesisDistribution[len(x.GenesisDistribution)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ClaimableAirdrop", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ClaimableAirdrop = append(x.ClaimableAirdrop, &v1beta11.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ClaimableAirdrop[len(x.ClaimableAirdrop)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryMainnetAccountBalanceRequest protoreflect.MessageDescriptor + fd_QueryMainnetAccountBalanceRequest_projectID protoreflect.FieldDescriptor + fd_QueryMainnetAccountBalanceRequest_address protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryMainnetAccountBalanceRequest = File_network_project_v1_query_proto.Messages().ByName("QueryMainnetAccountBalanceRequest") + fd_QueryMainnetAccountBalanceRequest_projectID = md_QueryMainnetAccountBalanceRequest.Fields().ByName("projectID") + fd_QueryMainnetAccountBalanceRequest_address = md_QueryMainnetAccountBalanceRequest.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_QueryMainnetAccountBalanceRequest)(nil) + +type fastReflection_QueryMainnetAccountBalanceRequest QueryMainnetAccountBalanceRequest + +func (x *QueryMainnetAccountBalanceRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryMainnetAccountBalanceRequest)(x) +} + +func (x *QueryMainnetAccountBalanceRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[14] + 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) +} + +var _fastReflection_QueryMainnetAccountBalanceRequest_messageType fastReflection_QueryMainnetAccountBalanceRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryMainnetAccountBalanceRequest_messageType{} + +type fastReflection_QueryMainnetAccountBalanceRequest_messageType struct{} + +func (x fastReflection_QueryMainnetAccountBalanceRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryMainnetAccountBalanceRequest)(nil) +} +func (x fastReflection_QueryMainnetAccountBalanceRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryMainnetAccountBalanceRequest) +} +func (x fastReflection_QueryMainnetAccountBalanceRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryMainnetAccountBalanceRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryMainnetAccountBalanceRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryMainnetAccountBalanceRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) New() protoreflect.Message { + return new(fastReflection_QueryMainnetAccountBalanceRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Interface() protoreflect.ProtoMessage { + return (*QueryMainnetAccountBalanceRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_QueryMainnetAccountBalanceRequest_projectID, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_QueryMainnetAccountBalanceRequest_address, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceRequest.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.QueryMainnetAccountBalanceRequest.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceRequest.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.QueryMainnetAccountBalanceRequest.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceRequest.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.QueryMainnetAccountBalanceRequest.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceRequest.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.QueryMainnetAccountBalanceRequest.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceRequest.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.QueryMainnetAccountBalanceRequest is not mutable")) + case "network.project.v1.QueryMainnetAccountBalanceRequest.address": + panic(fmt.Errorf("field address of message network.project.v1.QueryMainnetAccountBalanceRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceRequest.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.QueryMainnetAccountBalanceRequest.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryMainnetAccountBalanceRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryMainnetAccountBalanceRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryMainnetAccountBalanceRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Address) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryMainnetAccountBalanceRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryMainnetAccountBalanceRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryMainnetAccountBalanceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryMainnetAccountBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryMainnetAccountBalanceResponse protoreflect.MessageDescriptor + fd_QueryMainnetAccountBalanceResponse_mainnetAccountBalance protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryMainnetAccountBalanceResponse = File_network_project_v1_query_proto.Messages().ByName("QueryMainnetAccountBalanceResponse") + fd_QueryMainnetAccountBalanceResponse_mainnetAccountBalance = md_QueryMainnetAccountBalanceResponse.Fields().ByName("mainnetAccountBalance") +} + +var _ protoreflect.Message = (*fastReflection_QueryMainnetAccountBalanceResponse)(nil) + +type fastReflection_QueryMainnetAccountBalanceResponse QueryMainnetAccountBalanceResponse + +func (x *QueryMainnetAccountBalanceResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryMainnetAccountBalanceResponse)(x) +} + +func (x *QueryMainnetAccountBalanceResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[15] + 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) +} + +var _fastReflection_QueryMainnetAccountBalanceResponse_messageType fastReflection_QueryMainnetAccountBalanceResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryMainnetAccountBalanceResponse_messageType{} + +type fastReflection_QueryMainnetAccountBalanceResponse_messageType struct{} + +func (x fastReflection_QueryMainnetAccountBalanceResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryMainnetAccountBalanceResponse)(nil) +} +func (x fastReflection_QueryMainnetAccountBalanceResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryMainnetAccountBalanceResponse) +} +func (x fastReflection_QueryMainnetAccountBalanceResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryMainnetAccountBalanceResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryMainnetAccountBalanceResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryMainnetAccountBalanceResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) New() protoreflect.Message { + return new(fastReflection_QueryMainnetAccountBalanceResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Interface() protoreflect.ProtoMessage { + return (*QueryMainnetAccountBalanceResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.MainnetAccountBalance != nil { + value := protoreflect.ValueOfMessage(x.MainnetAccountBalance.ProtoReflect()) + if !f(fd_QueryMainnetAccountBalanceResponse_mainnetAccountBalance, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceResponse.mainnetAccountBalance": + return x.MainnetAccountBalance != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceResponse.mainnetAccountBalance": + x.MainnetAccountBalance = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceResponse.mainnetAccountBalance": + value := x.MainnetAccountBalance + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceResponse.mainnetAccountBalance": + x.MainnetAccountBalance = value.Message().Interface().(*MainnetAccountBalance) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceResponse.mainnetAccountBalance": + if x.MainnetAccountBalance == nil { + x.MainnetAccountBalance = new(MainnetAccountBalance) + } + return protoreflect.ValueOfMessage(x.MainnetAccountBalance.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryMainnetAccountBalanceResponse.mainnetAccountBalance": + m := new(MainnetAccountBalance) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryMainnetAccountBalanceResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryMainnetAccountBalanceResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryMainnetAccountBalanceResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.MainnetAccountBalance != nil { + l = options.Size(x.MainnetAccountBalance) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryMainnetAccountBalanceResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MainnetAccountBalance != nil { + encoded, err := options.Marshal(x.MainnetAccountBalance) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryMainnetAccountBalanceResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryMainnetAccountBalanceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryMainnetAccountBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetAccountBalance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.MainnetAccountBalance == nil { + x.MainnetAccountBalance = &MainnetAccountBalance{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MainnetAccountBalance); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryListMainnetAccountBalanceRequest protoreflect.MessageDescriptor + fd_QueryListMainnetAccountBalanceRequest_projectID protoreflect.FieldDescriptor + fd_QueryListMainnetAccountBalanceRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryListMainnetAccountBalanceRequest = File_network_project_v1_query_proto.Messages().ByName("QueryListMainnetAccountBalanceRequest") + fd_QueryListMainnetAccountBalanceRequest_projectID = md_QueryListMainnetAccountBalanceRequest.Fields().ByName("projectID") + fd_QueryListMainnetAccountBalanceRequest_pagination = md_QueryListMainnetAccountBalanceRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryListMainnetAccountBalanceRequest)(nil) + +type fastReflection_QueryListMainnetAccountBalanceRequest QueryListMainnetAccountBalanceRequest + +func (x *QueryListMainnetAccountBalanceRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryListMainnetAccountBalanceRequest)(x) +} + +func (x *QueryListMainnetAccountBalanceRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[16] + 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) +} + +var _fastReflection_QueryListMainnetAccountBalanceRequest_messageType fastReflection_QueryListMainnetAccountBalanceRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryListMainnetAccountBalanceRequest_messageType{} + +type fastReflection_QueryListMainnetAccountBalanceRequest_messageType struct{} + +func (x fastReflection_QueryListMainnetAccountBalanceRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryListMainnetAccountBalanceRequest)(nil) +} +func (x fastReflection_QueryListMainnetAccountBalanceRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryListMainnetAccountBalanceRequest) +} +func (x fastReflection_QueryListMainnetAccountBalanceRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryListMainnetAccountBalanceRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryListMainnetAccountBalanceRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryListMainnetAccountBalanceRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) New() protoreflect.Message { + return new(fastReflection_QueryListMainnetAccountBalanceRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Interface() protoreflect.ProtoMessage { + return (*QueryListMainnetAccountBalanceRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_QueryListMainnetAccountBalanceRequest_projectID, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryListMainnetAccountBalanceRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceRequest.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.QueryListMainnetAccountBalanceRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceRequest.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.QueryListMainnetAccountBalanceRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceRequest.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.QueryListMainnetAccountBalanceRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceRequest.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.QueryListMainnetAccountBalanceRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + case "network.project.v1.QueryListMainnetAccountBalanceRequest.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.QueryListMainnetAccountBalanceRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceRequest.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.QueryListMainnetAccountBalanceRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryListMainnetAccountBalanceRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryListMainnetAccountBalanceRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryListMainnetAccountBalanceRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryListMainnetAccountBalanceRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryListMainnetAccountBalanceRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryListMainnetAccountBalanceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryListMainnetAccountBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryListMainnetAccountBalanceResponse_1_list)(nil) + +type _QueryListMainnetAccountBalanceResponse_1_list struct { + list *[]*MainnetAccountBalance +} + +func (x *_QueryListMainnetAccountBalanceResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryListMainnetAccountBalanceResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryListMainnetAccountBalanceResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*MainnetAccountBalance) + (*x.list)[i] = concreteValue +} + +func (x *_QueryListMainnetAccountBalanceResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*MainnetAccountBalance) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryListMainnetAccountBalanceResponse_1_list) AppendMutable() protoreflect.Value { + v := new(MainnetAccountBalance) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryListMainnetAccountBalanceResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryListMainnetAccountBalanceResponse_1_list) NewElement() protoreflect.Value { + v := new(MainnetAccountBalance) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryListMainnetAccountBalanceResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryListMainnetAccountBalanceResponse protoreflect.MessageDescriptor + fd_QueryListMainnetAccountBalanceResponse_mainnetAccountBalance protoreflect.FieldDescriptor + fd_QueryListMainnetAccountBalanceResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryListMainnetAccountBalanceResponse = File_network_project_v1_query_proto.Messages().ByName("QueryListMainnetAccountBalanceResponse") + fd_QueryListMainnetAccountBalanceResponse_mainnetAccountBalance = md_QueryListMainnetAccountBalanceResponse.Fields().ByName("mainnetAccountBalance") + fd_QueryListMainnetAccountBalanceResponse_pagination = md_QueryListMainnetAccountBalanceResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryListMainnetAccountBalanceResponse)(nil) + +type fastReflection_QueryListMainnetAccountBalanceResponse QueryListMainnetAccountBalanceResponse + +func (x *QueryListMainnetAccountBalanceResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryListMainnetAccountBalanceResponse)(x) +} + +func (x *QueryListMainnetAccountBalanceResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_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) +} + +var _fastReflection_QueryListMainnetAccountBalanceResponse_messageType fastReflection_QueryListMainnetAccountBalanceResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryListMainnetAccountBalanceResponse_messageType{} + +type fastReflection_QueryListMainnetAccountBalanceResponse_messageType struct{} + +func (x fastReflection_QueryListMainnetAccountBalanceResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryListMainnetAccountBalanceResponse)(nil) +} +func (x fastReflection_QueryListMainnetAccountBalanceResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryListMainnetAccountBalanceResponse) +} +func (x fastReflection_QueryListMainnetAccountBalanceResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryListMainnetAccountBalanceResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryListMainnetAccountBalanceResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryListMainnetAccountBalanceResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) New() protoreflect.Message { + return new(fastReflection_QueryListMainnetAccountBalanceResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Interface() protoreflect.ProtoMessage { + return (*QueryListMainnetAccountBalanceResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.MainnetAccountBalance) != 0 { + value := protoreflect.ValueOfList(&_QueryListMainnetAccountBalanceResponse_1_list{list: &x.MainnetAccountBalance}) + if !f(fd_QueryListMainnetAccountBalanceResponse_mainnetAccountBalance, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryListMainnetAccountBalanceResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceResponse.mainnetAccountBalance": + return len(x.MainnetAccountBalance) != 0 + case "network.project.v1.QueryListMainnetAccountBalanceResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceResponse.mainnetAccountBalance": + x.MainnetAccountBalance = nil + case "network.project.v1.QueryListMainnetAccountBalanceResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceResponse.mainnetAccountBalance": + if len(x.MainnetAccountBalance) == 0 { + return protoreflect.ValueOfList(&_QueryListMainnetAccountBalanceResponse_1_list{}) + } + listValue := &_QueryListMainnetAccountBalanceResponse_1_list{list: &x.MainnetAccountBalance} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.QueryListMainnetAccountBalanceResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceResponse.mainnetAccountBalance": + lv := value.List() + clv := lv.(*_QueryListMainnetAccountBalanceResponse_1_list) + x.MainnetAccountBalance = *clv.list + case "network.project.v1.QueryListMainnetAccountBalanceResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceResponse.mainnetAccountBalance": + if x.MainnetAccountBalance == nil { + x.MainnetAccountBalance = []*MainnetAccountBalance{} + } + value := &_QueryListMainnetAccountBalanceResponse_1_list{list: &x.MainnetAccountBalance} + return protoreflect.ValueOfList(value) + case "network.project.v1.QueryListMainnetAccountBalanceResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryListMainnetAccountBalanceResponse.mainnetAccountBalance": + list := []*MainnetAccountBalance{} + return protoreflect.ValueOfList(&_QueryListMainnetAccountBalanceResponse_1_list{list: &list}) + case "network.project.v1.QueryListMainnetAccountBalanceResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryListMainnetAccountBalanceResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryListMainnetAccountBalanceResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryListMainnetAccountBalanceResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryListMainnetAccountBalanceResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryListMainnetAccountBalanceResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.MainnetAccountBalance) > 0 { + for _, e := range x.MainnetAccountBalance { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryListMainnetAccountBalanceResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.MainnetAccountBalance) > 0 { + for iNdEx := len(x.MainnetAccountBalance) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.MainnetAccountBalance[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryListMainnetAccountBalanceResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryListMainnetAccountBalanceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryListMainnetAccountBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetAccountBalance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MainnetAccountBalance = append(x.MainnetAccountBalance, &MainnetAccountBalance{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.MainnetAccountBalance[len(x.MainnetAccountBalance)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryTotalSharesRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryTotalSharesRequest = File_network_project_v1_query_proto.Messages().ByName("QueryTotalSharesRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryTotalSharesRequest)(nil) + +type fastReflection_QueryTotalSharesRequest QueryTotalSharesRequest + +func (x *QueryTotalSharesRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTotalSharesRequest)(x) +} + +func (x *QueryTotalSharesRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[18] + 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) +} + +var _fastReflection_QueryTotalSharesRequest_messageType fastReflection_QueryTotalSharesRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryTotalSharesRequest_messageType{} + +type fastReflection_QueryTotalSharesRequest_messageType struct{} + +func (x fastReflection_QueryTotalSharesRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTotalSharesRequest)(nil) +} +func (x fastReflection_QueryTotalSharesRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTotalSharesRequest) +} +func (x fastReflection_QueryTotalSharesRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalSharesRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTotalSharesRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalSharesRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryTotalSharesRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryTotalSharesRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTotalSharesRequest) New() protoreflect.Message { + return new(fastReflection_QueryTotalSharesRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTotalSharesRequest) Interface() protoreflect.ProtoMessage { + return (*QueryTotalSharesRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryTotalSharesRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryTotalSharesRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalSharesRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryTotalSharesRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalSharesRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalSharesRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryTotalSharesRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesRequest")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryTotalSharesRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryTotalSharesRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryTotalSharesRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalSharesRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryTotalSharesRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryTotalSharesRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTotalSharesRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalSharesRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalSharesRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalSharesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryTotalSharesResponse protoreflect.MessageDescriptor + fd_QueryTotalSharesResponse_totalShares protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_query_proto_init() + md_QueryTotalSharesResponse = File_network_project_v1_query_proto.Messages().ByName("QueryTotalSharesResponse") + fd_QueryTotalSharesResponse_totalShares = md_QueryTotalSharesResponse.Fields().ByName("totalShares") +} + +var _ protoreflect.Message = (*fastReflection_QueryTotalSharesResponse)(nil) + +type fastReflection_QueryTotalSharesResponse QueryTotalSharesResponse + +func (x *QueryTotalSharesResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryTotalSharesResponse)(x) +} + +func (x *QueryTotalSharesResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_query_proto_msgTypes[19] + 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) +} + +var _fastReflection_QueryTotalSharesResponse_messageType fastReflection_QueryTotalSharesResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryTotalSharesResponse_messageType{} + +type fastReflection_QueryTotalSharesResponse_messageType struct{} + +func (x fastReflection_QueryTotalSharesResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryTotalSharesResponse)(nil) +} +func (x fastReflection_QueryTotalSharesResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryTotalSharesResponse) +} +func (x fastReflection_QueryTotalSharesResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalSharesResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryTotalSharesResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryTotalSharesResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryTotalSharesResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryTotalSharesResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryTotalSharesResponse) New() protoreflect.Message { + return new(fastReflection_QueryTotalSharesResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryTotalSharesResponse) Interface() protoreflect.ProtoMessage { + return (*QueryTotalSharesResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryTotalSharesResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.TotalShares != uint64(0) { + value := protoreflect.ValueOfUint64(x.TotalShares) + if !f(fd_QueryTotalSharesResponse_totalShares, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryTotalSharesResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.QueryTotalSharesResponse.totalShares": + return x.TotalShares != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalSharesResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.QueryTotalSharesResponse.totalShares": + x.TotalShares = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryTotalSharesResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.QueryTotalSharesResponse.totalShares": + value := x.TotalShares + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalSharesResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.QueryTotalSharesResponse.totalShares": + x.TotalShares = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalSharesResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryTotalSharesResponse.totalShares": + panic(fmt.Errorf("field totalShares of message network.project.v1.QueryTotalSharesResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryTotalSharesResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.QueryTotalSharesResponse.totalShares": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.QueryTotalSharesResponse")) + } + panic(fmt.Errorf("message network.project.v1.QueryTotalSharesResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryTotalSharesResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.QueryTotalSharesResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryTotalSharesResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryTotalSharesResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryTotalSharesResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryTotalSharesResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryTotalSharesResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.TotalShares != 0 { + n += 1 + runtime.Sov(uint64(x.TotalShares)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalSharesResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.TotalShares != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.TotalShares)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryTotalSharesResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryTotalSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalShares", wireType) + } + x.TotalShares = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.TotalShares |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/query.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryParamsRequest) Reset() { + *x = QueryParamsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsRequest) ProtoMessage() {} + +// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{0} +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params holds all the parameters of this module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryParamsResponse) Reset() { + *x = QueryParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsResponse) ProtoMessage() {} + +// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryParamsResponse) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +type QueryGetMainnetAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryGetMainnetAccountRequest) Reset() { + *x = QueryGetMainnetAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetMainnetAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetMainnetAccountRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetMainnetAccountRequest.ProtoReflect.Descriptor instead. +func (*QueryGetMainnetAccountRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{2} +} + +func (x *QueryGetMainnetAccountRequest) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *QueryGetMainnetAccountRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryGetMainnetAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MainnetAccount *MainnetAccount `protobuf:"bytes,1,opt,name=mainnetAccount,proto3" json:"mainnetAccount,omitempty"` +} + +func (x *QueryGetMainnetAccountResponse) Reset() { + *x = QueryGetMainnetAccountResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetMainnetAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetMainnetAccountResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetMainnetAccountResponse.ProtoReflect.Descriptor instead. +func (*QueryGetMainnetAccountResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryGetMainnetAccountResponse) GetMainnetAccount() *MainnetAccount { + if x != nil { + return x.MainnetAccount + } + return nil +} + +type QueryAllMainnetAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllMainnetAccountRequest) Reset() { + *x = QueryAllMainnetAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllMainnetAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllMainnetAccountRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllMainnetAccountRequest.ProtoReflect.Descriptor instead. +func (*QueryAllMainnetAccountRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryAllMainnetAccountRequest) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *QueryAllMainnetAccountRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllMainnetAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MainnetAccount []*MainnetAccount `protobuf:"bytes,1,rep,name=mainnetAccount,proto3" json:"mainnetAccount,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllMainnetAccountResponse) Reset() { + *x = QueryAllMainnetAccountResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllMainnetAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllMainnetAccountResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllMainnetAccountResponse.ProtoReflect.Descriptor instead. +func (*QueryAllMainnetAccountResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryAllMainnetAccountResponse) GetMainnetAccount() []*MainnetAccount { + if x != nil { + return x.MainnetAccount + } + return nil +} + +func (x *QueryAllMainnetAccountResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetProjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` +} + +func (x *QueryGetProjectRequest) Reset() { + *x = QueryGetProjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetProjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetProjectRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetProjectRequest.ProtoReflect.Descriptor instead. +func (*QueryGetProjectRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{6} +} + +func (x *QueryGetProjectRequest) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +type QueryGetProjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Project *Project `protobuf:"bytes,1,opt,name=Project,proto3" json:"Project,omitempty"` +} + +func (x *QueryGetProjectResponse) Reset() { + *x = QueryGetProjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetProjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetProjectResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetProjectResponse.ProtoReflect.Descriptor instead. +func (*QueryGetProjectResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{7} +} + +func (x *QueryGetProjectResponse) GetProject() *Project { + if x != nil { + return x.Project + } + return nil +} + +type QueryAllProjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllProjectRequest) Reset() { + *x = QueryAllProjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllProjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllProjectRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllProjectRequest.ProtoReflect.Descriptor instead. +func (*QueryAllProjectRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{8} +} + +func (x *QueryAllProjectRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllProjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Project []*Project `protobuf:"bytes,1,rep,name=Project,proto3" json:"Project,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllProjectResponse) Reset() { + *x = QueryAllProjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllProjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllProjectResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllProjectResponse.ProtoReflect.Descriptor instead. +func (*QueryAllProjectResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{9} +} + +func (x *QueryAllProjectResponse) GetProject() []*Project { + if x != nil { + return x.Project + } + return nil +} + +func (x *QueryAllProjectResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryGetProjectChainsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` +} + +func (x *QueryGetProjectChainsRequest) Reset() { + *x = QueryGetProjectChainsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetProjectChainsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetProjectChainsRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetProjectChainsRequest.ProtoReflect.Descriptor instead. +func (*QueryGetProjectChainsRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{10} +} + +func (x *QueryGetProjectChainsRequest) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +type QueryGetProjectChainsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectChains *ProjectChains `protobuf:"bytes,1,opt,name=projectChains,proto3" json:"projectChains,omitempty"` +} + +func (x *QueryGetProjectChainsResponse) Reset() { + *x = QueryGetProjectChainsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetProjectChainsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetProjectChainsResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetProjectChainsResponse.ProtoReflect.Descriptor instead. +func (*QueryGetProjectChainsResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{11} +} + +func (x *QueryGetProjectChainsResponse) GetProjectChains() *ProjectChains { + if x != nil { + return x.ProjectChains + } + return nil +} + +type QuerySpecialAllocationsBalanceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` +} + +func (x *QuerySpecialAllocationsBalanceRequest) Reset() { + *x = QuerySpecialAllocationsBalanceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuerySpecialAllocationsBalanceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuerySpecialAllocationsBalanceRequest) ProtoMessage() {} + +// Deprecated: Use QuerySpecialAllocationsBalanceRequest.ProtoReflect.Descriptor instead. +func (*QuerySpecialAllocationsBalanceRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{12} +} + +func (x *QuerySpecialAllocationsBalanceRequest) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +type QuerySpecialAllocationsBalanceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GenesisDistribution []*v1beta11.Coin `protobuf:"bytes,1,rep,name=genesisDistribution,proto3" json:"genesisDistribution,omitempty"` + ClaimableAirdrop []*v1beta11.Coin `protobuf:"bytes,2,rep,name=claimableAirdrop,proto3" json:"claimableAirdrop,omitempty"` +} + +func (x *QuerySpecialAllocationsBalanceResponse) Reset() { + *x = QuerySpecialAllocationsBalanceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuerySpecialAllocationsBalanceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuerySpecialAllocationsBalanceResponse) ProtoMessage() {} + +// Deprecated: Use QuerySpecialAllocationsBalanceResponse.ProtoReflect.Descriptor instead. +func (*QuerySpecialAllocationsBalanceResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{13} +} + +func (x *QuerySpecialAllocationsBalanceResponse) GetGenesisDistribution() []*v1beta11.Coin { + if x != nil { + return x.GenesisDistribution + } + return nil +} + +func (x *QuerySpecialAllocationsBalanceResponse) GetClaimableAirdrop() []*v1beta11.Coin { + if x != nil { + return x.ClaimableAirdrop + } + return nil +} + +type QueryMainnetAccountBalanceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *QueryMainnetAccountBalanceRequest) Reset() { + *x = QueryMainnetAccountBalanceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryMainnetAccountBalanceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryMainnetAccountBalanceRequest) ProtoMessage() {} + +// Deprecated: Use QueryMainnetAccountBalanceRequest.ProtoReflect.Descriptor instead. +func (*QueryMainnetAccountBalanceRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{14} +} + +func (x *QueryMainnetAccountBalanceRequest) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *QueryMainnetAccountBalanceRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type QueryMainnetAccountBalanceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MainnetAccountBalance *MainnetAccountBalance `protobuf:"bytes,1,opt,name=mainnetAccountBalance,proto3" json:"mainnetAccountBalance,omitempty"` +} + +func (x *QueryMainnetAccountBalanceResponse) Reset() { + *x = QueryMainnetAccountBalanceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryMainnetAccountBalanceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryMainnetAccountBalanceResponse) ProtoMessage() {} + +// Deprecated: Use QueryMainnetAccountBalanceResponse.ProtoReflect.Descriptor instead. +func (*QueryMainnetAccountBalanceResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{15} +} + +func (x *QueryMainnetAccountBalanceResponse) GetMainnetAccountBalance() *MainnetAccountBalance { + if x != nil { + return x.MainnetAccountBalance + } + return nil +} + +type QueryListMainnetAccountBalanceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryListMainnetAccountBalanceRequest) Reset() { + *x = QueryListMainnetAccountBalanceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryListMainnetAccountBalanceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryListMainnetAccountBalanceRequest) ProtoMessage() {} + +// Deprecated: Use QueryListMainnetAccountBalanceRequest.ProtoReflect.Descriptor instead. +func (*QueryListMainnetAccountBalanceRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{16} +} + +func (x *QueryListMainnetAccountBalanceRequest) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *QueryListMainnetAccountBalanceRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryListMainnetAccountBalanceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MainnetAccountBalance []*MainnetAccountBalance `protobuf:"bytes,1,rep,name=mainnetAccountBalance,proto3" json:"mainnetAccountBalance,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryListMainnetAccountBalanceResponse) Reset() { + *x = QueryListMainnetAccountBalanceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryListMainnetAccountBalanceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryListMainnetAccountBalanceResponse) ProtoMessage() {} + +// Deprecated: Use QueryListMainnetAccountBalanceResponse.ProtoReflect.Descriptor instead. +func (*QueryListMainnetAccountBalanceResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{17} +} + +func (x *QueryListMainnetAccountBalanceResponse) GetMainnetAccountBalance() []*MainnetAccountBalance { + if x != nil { + return x.MainnetAccountBalance + } + return nil +} + +func (x *QueryListMainnetAccountBalanceResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryTotalSharesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryTotalSharesRequest) Reset() { + *x = QueryTotalSharesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryTotalSharesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryTotalSharesRequest) ProtoMessage() {} + +// Deprecated: Use QueryTotalSharesRequest.ProtoReflect.Descriptor instead. +func (*QueryTotalSharesRequest) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{18} +} + +type QueryTotalSharesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TotalShares uint64 `protobuf:"varint,1,opt,name=totalShares,proto3" json:"totalShares,omitempty"` +} + +func (x *QueryTotalSharesResponse) Reset() { + *x = QueryTotalSharesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_query_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryTotalSharesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryTotalSharesResponse) ProtoMessage() {} + +// Deprecated: Use QueryTotalSharesResponse.ProtoReflect.Descriptor instead. +func (*QueryTotalSharesResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_query_proto_rawDescGZIP(), []int{19} +} + +func (x *QueryTotalSharesResponse) GetTotalShares() uint64 { + if x != nil { + return x.TotalShares + } + return 0 +} + +var File_network_project_v1_query_proto protoreflect.FileDescriptor + +var file_network_project_v1_query_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x62, 0x61, 0x73, 0x65, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, + 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x28, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x5f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x14, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x54, + 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x71, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, + 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x72, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0e, 0x6d, 0x61, 0x69, + 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x6d, 0x61, 0x69, + 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x1d, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x46, 0x0a, 0x0a, 0x70, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xbb, 0x01, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, + 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0e, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x36, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x22, 0x56, 0x0a, 0x17, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x22, 0x60, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x70, + 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3b, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x04, 0xc8, + 0xde, 0x1f, 0x00, 0x52, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x47, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x22, 0x6e, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x73, 0x22, 0x45, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x22, 0xa4, 0x03, 0x0a, 0x26, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x13, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, + 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, + 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, + 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, + 0x01, 0x52, 0x13, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xb8, 0x01, 0x0a, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x61, 0x62, 0x6c, 0x65, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, + 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, + 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, + 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, + 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, + 0x70, 0x22, 0x75, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x22, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x65, 0x0a, 0x15, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, + 0x15, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x46, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd8, 0x01, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x65, 0x0a, 0x15, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, + 0x00, 0x52, 0x15, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x19, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3c, 0x0a, 0x18, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x32, 0xa0, 0x0e, 0x0a, 0x05, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x84, 0x01, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x26, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, + 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0xc1, 0x01, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x31, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x4d, + 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, + 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, + 0x12, 0x3d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, + 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, + 0xb8, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x41, 0x6c, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6d, + 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x12, 0x9a, 0x01, 0x0a, 0x0a, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x69, 0x67, 0x6e, + 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, + 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, + 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0xb3, 0x01, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x30, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x31, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x69, 0x67, + 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x12, + 0xdb, 0x01, 0x0a, 0x19, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x69, + 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x12, 0xd5, 0x01, + 0x0a, 0x15, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x35, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, + 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x5f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x7b, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xdc, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, + 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x12, 0x39, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x69, + 0x6e, 0x6e, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x42, 0x12, 0x40, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6c, 0x69, 0x73, 0x74, + 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2c, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x42, 0xca, 0x01, + 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, + 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_network_project_v1_query_proto_rawDescOnce sync.Once + file_network_project_v1_query_proto_rawDescData = file_network_project_v1_query_proto_rawDesc +) + +func file_network_project_v1_query_proto_rawDescGZIP() []byte { + file_network_project_v1_query_proto_rawDescOnce.Do(func() { + file_network_project_v1_query_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_query_proto_rawDescData) + }) + return file_network_project_v1_query_proto_rawDescData +} + +var file_network_project_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_network_project_v1_query_proto_goTypes = []interface{}{ + (*QueryParamsRequest)(nil), // 0: network.project.v1.QueryParamsRequest + (*QueryParamsResponse)(nil), // 1: network.project.v1.QueryParamsResponse + (*QueryGetMainnetAccountRequest)(nil), // 2: network.project.v1.QueryGetMainnetAccountRequest + (*QueryGetMainnetAccountResponse)(nil), // 3: network.project.v1.QueryGetMainnetAccountResponse + (*QueryAllMainnetAccountRequest)(nil), // 4: network.project.v1.QueryAllMainnetAccountRequest + (*QueryAllMainnetAccountResponse)(nil), // 5: network.project.v1.QueryAllMainnetAccountResponse + (*QueryGetProjectRequest)(nil), // 6: network.project.v1.QueryGetProjectRequest + (*QueryGetProjectResponse)(nil), // 7: network.project.v1.QueryGetProjectResponse + (*QueryAllProjectRequest)(nil), // 8: network.project.v1.QueryAllProjectRequest + (*QueryAllProjectResponse)(nil), // 9: network.project.v1.QueryAllProjectResponse + (*QueryGetProjectChainsRequest)(nil), // 10: network.project.v1.QueryGetProjectChainsRequest + (*QueryGetProjectChainsResponse)(nil), // 11: network.project.v1.QueryGetProjectChainsResponse + (*QuerySpecialAllocationsBalanceRequest)(nil), // 12: network.project.v1.QuerySpecialAllocationsBalanceRequest + (*QuerySpecialAllocationsBalanceResponse)(nil), // 13: network.project.v1.QuerySpecialAllocationsBalanceResponse + (*QueryMainnetAccountBalanceRequest)(nil), // 14: network.project.v1.QueryMainnetAccountBalanceRequest + (*QueryMainnetAccountBalanceResponse)(nil), // 15: network.project.v1.QueryMainnetAccountBalanceResponse + (*QueryListMainnetAccountBalanceRequest)(nil), // 16: network.project.v1.QueryListMainnetAccountBalanceRequest + (*QueryListMainnetAccountBalanceResponse)(nil), // 17: network.project.v1.QueryListMainnetAccountBalanceResponse + (*QueryTotalSharesRequest)(nil), // 18: network.project.v1.QueryTotalSharesRequest + (*QueryTotalSharesResponse)(nil), // 19: network.project.v1.QueryTotalSharesResponse + (*Params)(nil), // 20: network.project.v1.Params + (*MainnetAccount)(nil), // 21: network.project.v1.MainnetAccount + (*v1beta1.PageRequest)(nil), // 22: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 23: cosmos.base.query.v1beta1.PageResponse + (*Project)(nil), // 24: network.project.v1.Project + (*ProjectChains)(nil), // 25: network.project.v1.ProjectChains + (*v1beta11.Coin)(nil), // 26: cosmos.base.v1beta1.Coin + (*MainnetAccountBalance)(nil), // 27: network.project.v1.MainnetAccountBalance +} +var file_network_project_v1_query_proto_depIdxs = []int32{ + 20, // 0: network.project.v1.QueryParamsResponse.params:type_name -> network.project.v1.Params + 21, // 1: network.project.v1.QueryGetMainnetAccountResponse.mainnetAccount:type_name -> network.project.v1.MainnetAccount + 22, // 2: network.project.v1.QueryAllMainnetAccountRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 21, // 3: network.project.v1.QueryAllMainnetAccountResponse.mainnetAccount:type_name -> network.project.v1.MainnetAccount + 23, // 4: network.project.v1.QueryAllMainnetAccountResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 24, // 5: network.project.v1.QueryGetProjectResponse.Project:type_name -> network.project.v1.Project + 22, // 6: network.project.v1.QueryAllProjectRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 24, // 7: network.project.v1.QueryAllProjectResponse.Project:type_name -> network.project.v1.Project + 23, // 8: network.project.v1.QueryAllProjectResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 25, // 9: network.project.v1.QueryGetProjectChainsResponse.projectChains:type_name -> network.project.v1.ProjectChains + 26, // 10: network.project.v1.QuerySpecialAllocationsBalanceResponse.genesisDistribution:type_name -> cosmos.base.v1beta1.Coin + 26, // 11: network.project.v1.QuerySpecialAllocationsBalanceResponse.claimableAirdrop:type_name -> cosmos.base.v1beta1.Coin + 27, // 12: network.project.v1.QueryMainnetAccountBalanceResponse.mainnetAccountBalance:type_name -> network.project.v1.MainnetAccountBalance + 22, // 13: network.project.v1.QueryListMainnetAccountBalanceRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 27, // 14: network.project.v1.QueryListMainnetAccountBalanceResponse.mainnetAccountBalance:type_name -> network.project.v1.MainnetAccountBalance + 23, // 15: network.project.v1.QueryListMainnetAccountBalanceResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 0, // 16: network.project.v1.Query.Params:input_type -> network.project.v1.QueryParamsRequest + 2, // 17: network.project.v1.Query.GetMainnetAccount:input_type -> network.project.v1.QueryGetMainnetAccountRequest + 4, // 18: network.project.v1.Query.ListMainnetAccount:input_type -> network.project.v1.QueryAllMainnetAccountRequest + 6, // 19: network.project.v1.Query.GetProject:input_type -> network.project.v1.QueryGetProjectRequest + 8, // 20: network.project.v1.Query.ListProject:input_type -> network.project.v1.QueryAllProjectRequest + 10, // 21: network.project.v1.Query.GetProjectChains:input_type -> network.project.v1.QueryGetProjectChainsRequest + 12, // 22: network.project.v1.Query.SpecialAllocationsBalance:input_type -> network.project.v1.QuerySpecialAllocationsBalanceRequest + 14, // 23: network.project.v1.Query.MainnetAccountBalance:input_type -> network.project.v1.QueryMainnetAccountBalanceRequest + 16, // 24: network.project.v1.Query.ListMainnetAccountBalance:input_type -> network.project.v1.QueryListMainnetAccountBalanceRequest + 18, // 25: network.project.v1.Query.TotalShares:input_type -> network.project.v1.QueryTotalSharesRequest + 1, // 26: network.project.v1.Query.Params:output_type -> network.project.v1.QueryParamsResponse + 3, // 27: network.project.v1.Query.GetMainnetAccount:output_type -> network.project.v1.QueryGetMainnetAccountResponse + 5, // 28: network.project.v1.Query.ListMainnetAccount:output_type -> network.project.v1.QueryAllMainnetAccountResponse + 7, // 29: network.project.v1.Query.GetProject:output_type -> network.project.v1.QueryGetProjectResponse + 9, // 30: network.project.v1.Query.ListProject:output_type -> network.project.v1.QueryAllProjectResponse + 11, // 31: network.project.v1.Query.GetProjectChains:output_type -> network.project.v1.QueryGetProjectChainsResponse + 13, // 32: network.project.v1.Query.SpecialAllocationsBalance:output_type -> network.project.v1.QuerySpecialAllocationsBalanceResponse + 15, // 33: network.project.v1.Query.MainnetAccountBalance:output_type -> network.project.v1.QueryMainnetAccountBalanceResponse + 17, // 34: network.project.v1.Query.ListMainnetAccountBalance:output_type -> network.project.v1.QueryListMainnetAccountBalanceResponse + 19, // 35: network.project.v1.Query.TotalShares:output_type -> network.project.v1.QueryTotalSharesResponse + 26, // [26:36] is the sub-list for method output_type + 16, // [16:26] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name +} + +func init() { file_network_project_v1_query_proto_init() } +func file_network_project_v1_query_proto_init() { + if File_network_project_v1_query_proto != nil { + return + } + file_network_project_v1_mainnet_account_proto_init() + file_network_project_v1_params_proto_init() + file_network_project_v1_project_proto_init() + file_network_project_v1_project_chains_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_project_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetMainnetAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetMainnetAccountResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllMainnetAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllMainnetAccountResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetProjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetProjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllProjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllProjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetProjectChainsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetProjectChainsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuerySpecialAllocationsBalanceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuerySpecialAllocationsBalanceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryMainnetAccountBalanceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryMainnetAccountBalanceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryListMainnetAccountBalanceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryListMainnetAccountBalanceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTotalSharesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_query_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryTotalSharesResponse); 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_network_project_v1_query_proto_rawDesc, + NumEnums: 0, + NumMessages: 20, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_project_v1_query_proto_goTypes, + DependencyIndexes: file_network_project_v1_query_proto_depIdxs, + MessageInfos: file_network_project_v1_query_proto_msgTypes, + }.Build() + File_network_project_v1_query_proto = out.File + file_network_project_v1_query_proto_rawDesc = nil + file_network_project_v1_query_proto_goTypes = nil + file_network_project_v1_query_proto_depIdxs = nil +} diff --git a/api/network/project/v1/query_grpc.pb.go b/api/network/project/v1/query_grpc.pb.go new file mode 100644 index 00000000..99afc5f3 --- /dev/null +++ b/api/network/project/v1/query_grpc.pb.go @@ -0,0 +1,458 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/project/v1/query.proto + +package projectv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Query_Params_FullMethodName = "/network.project.v1.Query/Params" + Query_GetMainnetAccount_FullMethodName = "/network.project.v1.Query/GetMainnetAccount" + Query_ListMainnetAccount_FullMethodName = "/network.project.v1.Query/ListMainnetAccount" + Query_GetProject_FullMethodName = "/network.project.v1.Query/GetProject" + Query_ListProject_FullMethodName = "/network.project.v1.Query/ListProject" + Query_GetProjectChains_FullMethodName = "/network.project.v1.Query/GetProjectChains" + Query_SpecialAllocationsBalance_FullMethodName = "/network.project.v1.Query/SpecialAllocationsBalance" + Query_MainnetAccountBalance_FullMethodName = "/network.project.v1.Query/MainnetAccountBalance" + Query_ListMainnetAccountBalance_FullMethodName = "/network.project.v1.Query/ListMainnetAccountBalance" + Query_TotalShares_FullMethodName = "/network.project.v1.Query/TotalShares" +) + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of MainnetAccount items. + GetMainnetAccount(ctx context.Context, in *QueryGetMainnetAccountRequest, opts ...grpc.CallOption) (*QueryGetMainnetAccountResponse, error) + ListMainnetAccount(ctx context.Context, in *QueryAllMainnetAccountRequest, opts ...grpc.CallOption) (*QueryAllMainnetAccountResponse, error) + // Queries a list of Project items. + GetProject(ctx context.Context, in *QueryGetProjectRequest, opts ...grpc.CallOption) (*QueryGetProjectResponse, error) + ListProject(ctx context.Context, in *QueryAllProjectRequest, opts ...grpc.CallOption) (*QueryAllProjectResponse, error) + // Queries a list of ProjectChains items. + GetProjectChains(ctx context.Context, in *QueryGetProjectChainsRequest, opts ...grpc.CallOption) (*QueryGetProjectChainsResponse, error) + // Queries a list of SpecialAllocationsBalance items. + SpecialAllocationsBalance(ctx context.Context, in *QuerySpecialAllocationsBalanceRequest, opts ...grpc.CallOption) (*QuerySpecialAllocationsBalanceResponse, error) + // Queries a list of MainnetAccountBalance items. + MainnetAccountBalance(ctx context.Context, in *QueryMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryMainnetAccountBalanceResponse, error) + // Queries a list of ListMainnetAccountBalance items. + ListMainnetAccountBalance(ctx context.Context, in *QueryListMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryListMainnetAccountBalanceResponse, error) + // Queries a list of TotalShares items. + TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) +} + +type queryClient struct { + cc grpc.ClientConnInterface +} + +func NewQueryClient(cc grpc.ClientConnInterface) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, Query_Params_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetMainnetAccount(ctx context.Context, in *QueryGetMainnetAccountRequest, opts ...grpc.CallOption) (*QueryGetMainnetAccountResponse, error) { + out := new(QueryGetMainnetAccountResponse) + err := c.cc.Invoke(ctx, Query_GetMainnetAccount_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListMainnetAccount(ctx context.Context, in *QueryAllMainnetAccountRequest, opts ...grpc.CallOption) (*QueryAllMainnetAccountResponse, error) { + out := new(QueryAllMainnetAccountResponse) + err := c.cc.Invoke(ctx, Query_ListMainnetAccount_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetProject(ctx context.Context, in *QueryGetProjectRequest, opts ...grpc.CallOption) (*QueryGetProjectResponse, error) { + out := new(QueryGetProjectResponse) + err := c.cc.Invoke(ctx, Query_GetProject_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListProject(ctx context.Context, in *QueryAllProjectRequest, opts ...grpc.CallOption) (*QueryAllProjectResponse, error) { + out := new(QueryAllProjectResponse) + err := c.cc.Invoke(ctx, Query_ListProject_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetProjectChains(ctx context.Context, in *QueryGetProjectChainsRequest, opts ...grpc.CallOption) (*QueryGetProjectChainsResponse, error) { + out := new(QueryGetProjectChainsResponse) + err := c.cc.Invoke(ctx, Query_GetProjectChains_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) SpecialAllocationsBalance(ctx context.Context, in *QuerySpecialAllocationsBalanceRequest, opts ...grpc.CallOption) (*QuerySpecialAllocationsBalanceResponse, error) { + out := new(QuerySpecialAllocationsBalanceResponse) + err := c.cc.Invoke(ctx, Query_SpecialAllocationsBalance_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) MainnetAccountBalance(ctx context.Context, in *QueryMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryMainnetAccountBalanceResponse, error) { + out := new(QueryMainnetAccountBalanceResponse) + err := c.cc.Invoke(ctx, Query_MainnetAccountBalance_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListMainnetAccountBalance(ctx context.Context, in *QueryListMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryListMainnetAccountBalanceResponse, error) { + out := new(QueryListMainnetAccountBalanceResponse) + err := c.cc.Invoke(ctx, Query_ListMainnetAccountBalance_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) { + out := new(QueryTotalSharesResponse) + err := c.cc.Invoke(ctx, Query_TotalShares_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +// All implementations must embed UnimplementedQueryServer +// for forward compatibility +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of MainnetAccount items. + GetMainnetAccount(context.Context, *QueryGetMainnetAccountRequest) (*QueryGetMainnetAccountResponse, error) + ListMainnetAccount(context.Context, *QueryAllMainnetAccountRequest) (*QueryAllMainnetAccountResponse, error) + // Queries a list of Project items. + GetProject(context.Context, *QueryGetProjectRequest) (*QueryGetProjectResponse, error) + ListProject(context.Context, *QueryAllProjectRequest) (*QueryAllProjectResponse, error) + // Queries a list of ProjectChains items. + GetProjectChains(context.Context, *QueryGetProjectChainsRequest) (*QueryGetProjectChainsResponse, error) + // Queries a list of SpecialAllocationsBalance items. + SpecialAllocationsBalance(context.Context, *QuerySpecialAllocationsBalanceRequest) (*QuerySpecialAllocationsBalanceResponse, error) + // Queries a list of MainnetAccountBalance items. + MainnetAccountBalance(context.Context, *QueryMainnetAccountBalanceRequest) (*QueryMainnetAccountBalanceResponse, error) + // Queries a list of ListMainnetAccountBalance items. + ListMainnetAccountBalance(context.Context, *QueryListMainnetAccountBalanceRequest) (*QueryListMainnetAccountBalanceResponse, error) + // Queries a list of TotalShares items. + TotalShares(context.Context, *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) + mustEmbedUnimplementedQueryServer() +} + +// UnimplementedQueryServer must be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (UnimplementedQueryServer) GetMainnetAccount(context.Context, *QueryGetMainnetAccountRequest) (*QueryGetMainnetAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMainnetAccount not implemented") +} +func (UnimplementedQueryServer) ListMainnetAccount(context.Context, *QueryAllMainnetAccountRequest) (*QueryAllMainnetAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListMainnetAccount not implemented") +} +func (UnimplementedQueryServer) GetProject(context.Context, *QueryGetProjectRequest) (*QueryGetProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProject not implemented") +} +func (UnimplementedQueryServer) ListProject(context.Context, *QueryAllProjectRequest) (*QueryAllProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListProject not implemented") +} +func (UnimplementedQueryServer) GetProjectChains(context.Context, *QueryGetProjectChainsRequest) (*QueryGetProjectChainsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProjectChains not implemented") +} +func (UnimplementedQueryServer) SpecialAllocationsBalance(context.Context, *QuerySpecialAllocationsBalanceRequest) (*QuerySpecialAllocationsBalanceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SpecialAllocationsBalance not implemented") +} +func (UnimplementedQueryServer) MainnetAccountBalance(context.Context, *QueryMainnetAccountBalanceRequest) (*QueryMainnetAccountBalanceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MainnetAccountBalance not implemented") +} +func (UnimplementedQueryServer) ListMainnetAccountBalance(context.Context, *QueryListMainnetAccountBalanceRequest) (*QueryListMainnetAccountBalanceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListMainnetAccountBalance not implemented") +} +func (UnimplementedQueryServer) TotalShares(context.Context, *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalShares not implemented") +} +func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} + +// UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to QueryServer will +// result in compilation errors. +type UnsafeQueryServer interface { + mustEmbedUnimplementedQueryServer() +} + +func RegisterQueryServer(s grpc.ServiceRegistrar, srv QueryServer) { + s.RegisterService(&Query_ServiceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_Params_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetMainnetAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetMainnetAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetMainnetAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetMainnetAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetMainnetAccount(ctx, req.(*QueryGetMainnetAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListMainnetAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllMainnetAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListMainnetAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListMainnetAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListMainnetAccount(ctx, req.(*QueryAllMainnetAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetProjectRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetProject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetProject_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetProject(ctx, req.(*QueryGetProjectRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllProjectRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListProject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListProject_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListProject(ctx, req.(*QueryAllProjectRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetProjectChains_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetProjectChainsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetProjectChains(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetProjectChains_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetProjectChains(ctx, req.(*QueryGetProjectChainsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_SpecialAllocationsBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySpecialAllocationsBalanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SpecialAllocationsBalance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_SpecialAllocationsBalance_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SpecialAllocationsBalance(ctx, req.(*QuerySpecialAllocationsBalanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_MainnetAccountBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryMainnetAccountBalanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).MainnetAccountBalance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_MainnetAccountBalance_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).MainnetAccountBalance(ctx, req.(*QueryMainnetAccountBalanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListMainnetAccountBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryListMainnetAccountBalanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListMainnetAccountBalance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListMainnetAccountBalance_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListMainnetAccountBalance(ctx, req.(*QueryListMainnetAccountBalanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalSharesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_TotalShares_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalShares(ctx, req.(*QueryTotalSharesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Query_ServiceDesc is the grpc.ServiceDesc for Query service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Query_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.project.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetMainnetAccount", + Handler: _Query_GetMainnetAccount_Handler, + }, + { + MethodName: "ListMainnetAccount", + Handler: _Query_ListMainnetAccount_Handler, + }, + { + MethodName: "GetProject", + Handler: _Query_GetProject_Handler, + }, + { + MethodName: "ListProject", + Handler: _Query_ListProject_Handler, + }, + { + MethodName: "GetProjectChains", + Handler: _Query_GetProjectChains_Handler, + }, + { + MethodName: "SpecialAllocationsBalance", + Handler: _Query_SpecialAllocationsBalance_Handler, + }, + { + MethodName: "MainnetAccountBalance", + Handler: _Query_MainnetAccountBalance_Handler, + }, + { + MethodName: "ListMainnetAccountBalance", + Handler: _Query_ListMainnetAccountBalance_Handler, + }, + { + MethodName: "TotalShares", + Handler: _Query_TotalShares_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/project/v1/query.proto", +} diff --git a/api/network/project/v1/special_allocations.pulsar.go b/api/network/project/v1/special_allocations.pulsar.go new file mode 100644 index 00000000..bf2ebae0 --- /dev/null +++ b/api/network/project/v1/special_allocations.pulsar.go @@ -0,0 +1,822 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_SpecialAllocations_1_list)(nil) + +type _SpecialAllocations_1_list struct { + list *[]*v1beta1.Coin +} + +func (x *_SpecialAllocations_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_SpecialAllocations_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_SpecialAllocations_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_SpecialAllocations_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_SpecialAllocations_1_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_SpecialAllocations_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_SpecialAllocations_1_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_SpecialAllocations_1_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_SpecialAllocations_2_list)(nil) + +type _SpecialAllocations_2_list struct { + list *[]*v1beta1.Coin +} + +func (x *_SpecialAllocations_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_SpecialAllocations_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_SpecialAllocations_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_SpecialAllocations_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_SpecialAllocations_2_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_SpecialAllocations_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_SpecialAllocations_2_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_SpecialAllocations_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_SpecialAllocations protoreflect.MessageDescriptor + fd_SpecialAllocations_genesisDistribution protoreflect.FieldDescriptor + fd_SpecialAllocations_claimableAirdrop protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_special_allocations_proto_init() + md_SpecialAllocations = File_network_project_v1_special_allocations_proto.Messages().ByName("SpecialAllocations") + fd_SpecialAllocations_genesisDistribution = md_SpecialAllocations.Fields().ByName("genesisDistribution") + fd_SpecialAllocations_claimableAirdrop = md_SpecialAllocations.Fields().ByName("claimableAirdrop") +} + +var _ protoreflect.Message = (*fastReflection_SpecialAllocations)(nil) + +type fastReflection_SpecialAllocations SpecialAllocations + +func (x *SpecialAllocations) ProtoReflect() protoreflect.Message { + return (*fastReflection_SpecialAllocations)(x) +} + +func (x *SpecialAllocations) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_special_allocations_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) +} + +var _fastReflection_SpecialAllocations_messageType fastReflection_SpecialAllocations_messageType +var _ protoreflect.MessageType = fastReflection_SpecialAllocations_messageType{} + +type fastReflection_SpecialAllocations_messageType struct{} + +func (x fastReflection_SpecialAllocations_messageType) Zero() protoreflect.Message { + return (*fastReflection_SpecialAllocations)(nil) +} +func (x fastReflection_SpecialAllocations_messageType) New() protoreflect.Message { + return new(fastReflection_SpecialAllocations) +} +func (x fastReflection_SpecialAllocations_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_SpecialAllocations +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_SpecialAllocations) Descriptor() protoreflect.MessageDescriptor { + return md_SpecialAllocations +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_SpecialAllocations) Type() protoreflect.MessageType { + return _fastReflection_SpecialAllocations_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_SpecialAllocations) New() protoreflect.Message { + return new(fastReflection_SpecialAllocations) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_SpecialAllocations) Interface() protoreflect.ProtoMessage { + return (*SpecialAllocations)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_SpecialAllocations) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.GenesisDistribution) != 0 { + value := protoreflect.ValueOfList(&_SpecialAllocations_1_list{list: &x.GenesisDistribution}) + if !f(fd_SpecialAllocations_genesisDistribution, value) { + return + } + } + if len(x.ClaimableAirdrop) != 0 { + value := protoreflect.ValueOfList(&_SpecialAllocations_2_list{list: &x.ClaimableAirdrop}) + if !f(fd_SpecialAllocations_claimableAirdrop, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_SpecialAllocations) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.SpecialAllocations.genesisDistribution": + return len(x.GenesisDistribution) != 0 + case "network.project.v1.SpecialAllocations.claimableAirdrop": + return len(x.ClaimableAirdrop) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.SpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.SpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SpecialAllocations) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.SpecialAllocations.genesisDistribution": + x.GenesisDistribution = nil + case "network.project.v1.SpecialAllocations.claimableAirdrop": + x.ClaimableAirdrop = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.SpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.SpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_SpecialAllocations) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.SpecialAllocations.genesisDistribution": + if len(x.GenesisDistribution) == 0 { + return protoreflect.ValueOfList(&_SpecialAllocations_1_list{}) + } + listValue := &_SpecialAllocations_1_list{list: &x.GenesisDistribution} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.SpecialAllocations.claimableAirdrop": + if len(x.ClaimableAirdrop) == 0 { + return protoreflect.ValueOfList(&_SpecialAllocations_2_list{}) + } + listValue := &_SpecialAllocations_2_list{list: &x.ClaimableAirdrop} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.SpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.SpecialAllocations does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SpecialAllocations) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.SpecialAllocations.genesisDistribution": + lv := value.List() + clv := lv.(*_SpecialAllocations_1_list) + x.GenesisDistribution = *clv.list + case "network.project.v1.SpecialAllocations.claimableAirdrop": + lv := value.List() + clv := lv.(*_SpecialAllocations_2_list) + x.ClaimableAirdrop = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.SpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.SpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SpecialAllocations) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.SpecialAllocations.genesisDistribution": + if x.GenesisDistribution == nil { + x.GenesisDistribution = []*v1beta1.Coin{} + } + value := &_SpecialAllocations_1_list{list: &x.GenesisDistribution} + return protoreflect.ValueOfList(value) + case "network.project.v1.SpecialAllocations.claimableAirdrop": + if x.ClaimableAirdrop == nil { + x.ClaimableAirdrop = []*v1beta1.Coin{} + } + value := &_SpecialAllocations_2_list{list: &x.ClaimableAirdrop} + return protoreflect.ValueOfList(value) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.SpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.SpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_SpecialAllocations) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.SpecialAllocations.genesisDistribution": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_SpecialAllocations_1_list{list: &list}) + case "network.project.v1.SpecialAllocations.claimableAirdrop": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_SpecialAllocations_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.SpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.SpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_SpecialAllocations) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.SpecialAllocations", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_SpecialAllocations) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SpecialAllocations) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_SpecialAllocations) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_SpecialAllocations) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*SpecialAllocations) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.GenesisDistribution) > 0 { + for _, e := range x.GenesisDistribution { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.ClaimableAirdrop) > 0 { + for _, e := range x.ClaimableAirdrop { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*SpecialAllocations) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.ClaimableAirdrop) > 0 { + for iNdEx := len(x.ClaimableAirdrop) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.ClaimableAirdrop[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.GenesisDistribution) > 0 { + for iNdEx := len(x.GenesisDistribution) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.GenesisDistribution[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*SpecialAllocations) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: SpecialAllocations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: SpecialAllocations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field GenesisDistribution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.GenesisDistribution = append(x.GenesisDistribution, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.GenesisDistribution[len(x.GenesisDistribution)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ClaimableAirdrop", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ClaimableAirdrop = append(x.ClaimableAirdrop, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ClaimableAirdrop[len(x.ClaimableAirdrop)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/special_allocations.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type SpecialAllocations struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GenesisDistribution []*v1beta1.Coin `protobuf:"bytes,1,rep,name=genesisDistribution,proto3" json:"genesisDistribution,omitempty"` + ClaimableAirdrop []*v1beta1.Coin `protobuf:"bytes,2,rep,name=claimableAirdrop,proto3" json:"claimableAirdrop,omitempty"` +} + +func (x *SpecialAllocations) Reset() { + *x = SpecialAllocations{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_special_allocations_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SpecialAllocations) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SpecialAllocations) ProtoMessage() {} + +// Deprecated: Use SpecialAllocations.ProtoReflect.Descriptor instead. +func (*SpecialAllocations) Descriptor() ([]byte, []int) { + return file_network_project_v1_special_allocations_proto_rawDescGZIP(), []int{0} +} + +func (x *SpecialAllocations) GetGenesisDistribution() []*v1beta1.Coin { + if x != nil { + return x.GenesisDistribution + } + return nil +} + +func (x *SpecialAllocations) GetClaimableAirdrop() []*v1beta1.Coin { + if x != nil { + return x.ClaimableAirdrop + } + return nil +} + +var File_network_project_v1_special_allocations_proto protoreflect.FileDescriptor + +var file_network_project_v1_special_allocations_proto_rawDesc = []byte{ + 0x0a, 0x2c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, + 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcc, 0x02, 0x0a, 0x12, 0x53, 0x70, 0x65, 0x63, 0x69, + 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x9c, 0x01, + 0x0a, 0x13, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, + 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x13, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x96, 0x01, 0x0a, + 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, + 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x9a, 0xe7, 0xb0, + 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x69, + 0x72, 0x64, 0x72, 0x6f, 0x70, 0x42, 0xd7, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x42, 0x17, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_v1_special_allocations_proto_rawDescOnce sync.Once + file_network_project_v1_special_allocations_proto_rawDescData = file_network_project_v1_special_allocations_proto_rawDesc +) + +func file_network_project_v1_special_allocations_proto_rawDescGZIP() []byte { + file_network_project_v1_special_allocations_proto_rawDescOnce.Do(func() { + file_network_project_v1_special_allocations_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_special_allocations_proto_rawDescData) + }) + return file_network_project_v1_special_allocations_proto_rawDescData +} + +var file_network_project_v1_special_allocations_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_project_v1_special_allocations_proto_goTypes = []interface{}{ + (*SpecialAllocations)(nil), // 0: network.project.v1.SpecialAllocations + (*v1beta1.Coin)(nil), // 1: cosmos.base.v1beta1.Coin +} +var file_network_project_v1_special_allocations_proto_depIdxs = []int32{ + 1, // 0: network.project.v1.SpecialAllocations.genesisDistribution:type_name -> cosmos.base.v1beta1.Coin + 1, // 1: network.project.v1.SpecialAllocations.claimableAirdrop:type_name -> cosmos.base.v1beta1.Coin + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_network_project_v1_special_allocations_proto_init() } +func file_network_project_v1_special_allocations_proto_init() { + if File_network_project_v1_special_allocations_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_project_v1_special_allocations_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SpecialAllocations); 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_network_project_v1_special_allocations_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_special_allocations_proto_goTypes, + DependencyIndexes: file_network_project_v1_special_allocations_proto_depIdxs, + MessageInfos: file_network_project_v1_special_allocations_proto_msgTypes, + }.Build() + File_network_project_v1_special_allocations_proto = out.File + file_network_project_v1_special_allocations_proto_rawDesc = nil + file_network_project_v1_special_allocations_proto_goTypes = nil + file_network_project_v1_special_allocations_proto_depIdxs = nil +} diff --git a/api/network/project/v1/tx.pulsar.go b/api/network/project/v1/tx.pulsar.go new file mode 100644 index 00000000..e7e4dc6e --- /dev/null +++ b/api/network/project/v1/tx.pulsar.go @@ -0,0 +1,11230 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + _ "cosmossdk.io/api/cosmos/msg/v1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MsgUpdateParams protoreflect.MessageDescriptor + fd_MsgUpdateParams_authority protoreflect.FieldDescriptor + fd_MsgUpdateParams_params protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgUpdateParams = File_network_project_v1_tx_proto.Messages().ByName("MsgUpdateParams") + fd_MsgUpdateParams_authority = md_MsgUpdateParams.Fields().ByName("authority") + fd_MsgUpdateParams_params = md_MsgUpdateParams.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParams)(nil) + +type fastReflection_MsgUpdateParams MsgUpdateParams + +func (x *MsgUpdateParams) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(x) +} + +func (x *MsgUpdateParams) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgUpdateParams_messageType fastReflection_MsgUpdateParams_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParams_messageType{} + +type fastReflection_MsgUpdateParams_messageType struct{} + +func (x fastReflection_MsgUpdateParams_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(nil) +} +func (x fastReflection_MsgUpdateParams_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} +func (x fastReflection_MsgUpdateParams_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParams) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParams) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParams_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParams) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParams) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParams)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParams) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_MsgUpdateParams_authority, value) { + return + } + } + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_MsgUpdateParams_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParams) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgUpdateParams.authority": + return x.Authority != "" + case "network.project.v1.MsgUpdateParams.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgUpdateParams.authority": + x.Authority = "" + case "network.project.v1.MsgUpdateParams.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParams) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgUpdateParams.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgUpdateParams.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParams does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgUpdateParams.authority": + x.Authority = value.Interface().(string) + case "network.project.v1.MsgUpdateParams.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgUpdateParams.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.project.v1.MsgUpdateParams.authority": + panic(fmt.Errorf("field authority of message network.project.v1.MsgUpdateParams is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParams) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgUpdateParams.authority": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgUpdateParams.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParams) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgUpdateParams", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParams) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParams) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParams) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateParamsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgUpdateParamsResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgUpdateParamsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParamsResponse)(nil) + +type fastReflection_MsgUpdateParamsResponse MsgUpdateParamsResponse + +func (x *MsgUpdateParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(x) +} + +func (x *MsgUpdateParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgUpdateParamsResponse_messageType fastReflection_MsgUpdateParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParamsResponse_messageType{} + +type fastReflection_MsgUpdateParamsResponse_messageType struct{} + +func (x fastReflection_MsgUpdateParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(nil) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParamsResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParamsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgUpdateParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgCreateProject_3_list)(nil) + +type _MsgCreateProject_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgCreateProject_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgCreateProject_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgCreateProject_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgCreateProject_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgCreateProject_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgCreateProject_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgCreateProject_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgCreateProject_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgCreateProject protoreflect.MessageDescriptor + fd_MsgCreateProject_coordinator protoreflect.FieldDescriptor + fd_MsgCreateProject_projectName protoreflect.FieldDescriptor + fd_MsgCreateProject_totalSupply protoreflect.FieldDescriptor + fd_MsgCreateProject_metadata protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgCreateProject = File_network_project_v1_tx_proto.Messages().ByName("MsgCreateProject") + fd_MsgCreateProject_coordinator = md_MsgCreateProject.Fields().ByName("coordinator") + fd_MsgCreateProject_projectName = md_MsgCreateProject.Fields().ByName("projectName") + fd_MsgCreateProject_totalSupply = md_MsgCreateProject.Fields().ByName("totalSupply") + fd_MsgCreateProject_metadata = md_MsgCreateProject.Fields().ByName("metadata") +} + +var _ protoreflect.Message = (*fastReflection_MsgCreateProject)(nil) + +type fastReflection_MsgCreateProject MsgCreateProject + +func (x *MsgCreateProject) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgCreateProject)(x) +} + +func (x *MsgCreateProject) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[2] + 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) +} + +var _fastReflection_MsgCreateProject_messageType fastReflection_MsgCreateProject_messageType +var _ protoreflect.MessageType = fastReflection_MsgCreateProject_messageType{} + +type fastReflection_MsgCreateProject_messageType struct{} + +func (x fastReflection_MsgCreateProject_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgCreateProject)(nil) +} +func (x fastReflection_MsgCreateProject_messageType) New() protoreflect.Message { + return new(fastReflection_MsgCreateProject) +} +func (x fastReflection_MsgCreateProject_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateProject +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgCreateProject) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateProject +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgCreateProject) Type() protoreflect.MessageType { + return _fastReflection_MsgCreateProject_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgCreateProject) New() protoreflect.Message { + return new(fastReflection_MsgCreateProject) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgCreateProject) Interface() protoreflect.ProtoMessage { + return (*MsgCreateProject)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgCreateProject) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgCreateProject_coordinator, value) { + return + } + } + if x.ProjectName != "" { + value := protoreflect.ValueOfString(x.ProjectName) + if !f(fd_MsgCreateProject_projectName, value) { + return + } + } + if len(x.TotalSupply) != 0 { + value := protoreflect.ValueOfList(&_MsgCreateProject_3_list{list: &x.TotalSupply}) + if !f(fd_MsgCreateProject_totalSupply, value) { + return + } + } + if len(x.Metadata) != 0 { + value := protoreflect.ValueOfBytes(x.Metadata) + if !f(fd_MsgCreateProject_metadata, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgCreateProject) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgCreateProject.coordinator": + return x.Coordinator != "" + case "network.project.v1.MsgCreateProject.projectName": + return x.ProjectName != "" + case "network.project.v1.MsgCreateProject.totalSupply": + return len(x.TotalSupply) != 0 + case "network.project.v1.MsgCreateProject.metadata": + return len(x.Metadata) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProject does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateProject) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgCreateProject.coordinator": + x.Coordinator = "" + case "network.project.v1.MsgCreateProject.projectName": + x.ProjectName = "" + case "network.project.v1.MsgCreateProject.totalSupply": + x.TotalSupply = nil + case "network.project.v1.MsgCreateProject.metadata": + x.Metadata = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProject does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgCreateProject) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgCreateProject.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgCreateProject.projectName": + value := x.ProjectName + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgCreateProject.totalSupply": + if len(x.TotalSupply) == 0 { + return protoreflect.ValueOfList(&_MsgCreateProject_3_list{}) + } + listValue := &_MsgCreateProject_3_list{list: &x.TotalSupply} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.MsgCreateProject.metadata": + value := x.Metadata + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProject does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateProject) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgCreateProject.coordinator": + x.Coordinator = value.Interface().(string) + case "network.project.v1.MsgCreateProject.projectName": + x.ProjectName = value.Interface().(string) + case "network.project.v1.MsgCreateProject.totalSupply": + lv := value.List() + clv := lv.(*_MsgCreateProject_3_list) + x.TotalSupply = *clv.list + case "network.project.v1.MsgCreateProject.metadata": + x.Metadata = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProject does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateProject) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgCreateProject.totalSupply": + if x.TotalSupply == nil { + x.TotalSupply = []*v1beta1.Coin{} + } + value := &_MsgCreateProject_3_list{list: &x.TotalSupply} + return protoreflect.ValueOfList(value) + case "network.project.v1.MsgCreateProject.coordinator": + panic(fmt.Errorf("field coordinator of message network.project.v1.MsgCreateProject is not mutable")) + case "network.project.v1.MsgCreateProject.projectName": + panic(fmt.Errorf("field projectName of message network.project.v1.MsgCreateProject is not mutable")) + case "network.project.v1.MsgCreateProject.metadata": + panic(fmt.Errorf("field metadata of message network.project.v1.MsgCreateProject is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProject does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgCreateProject) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgCreateProject.coordinator": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgCreateProject.projectName": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgCreateProject.totalSupply": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgCreateProject_3_list{list: &list}) + case "network.project.v1.MsgCreateProject.metadata": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProject does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgCreateProject) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgCreateProject", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgCreateProject) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateProject) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgCreateProject) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgCreateProject) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgCreateProject) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ProjectName) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.TotalSupply) > 0 { + for _, e := range x.TotalSupply { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + l = len(x.Metadata) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateProject) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Metadata) > 0 { + i -= len(x.Metadata) + copy(dAtA[i:], x.Metadata) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Metadata))) + i-- + dAtA[i] = 0x22 + } + if len(x.TotalSupply) > 0 { + for iNdEx := len(x.TotalSupply) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.TotalSupply[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.ProjectName) > 0 { + i -= len(x.ProjectName) + copy(dAtA[i:], x.ProjectName) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ProjectName))) + i-- + dAtA[i] = 0x12 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateProject) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateProject: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateProject: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalSupply", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TotalSupply = append(x.TotalSupply, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TotalSupply[len(x.TotalSupply)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Metadata = append(x.Metadata[:0], dAtA[iNdEx:postIndex]...) + if x.Metadata == nil { + x.Metadata = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgCreateProjectResponse protoreflect.MessageDescriptor + fd_MsgCreateProjectResponse_projectID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgCreateProjectResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgCreateProjectResponse") + fd_MsgCreateProjectResponse_projectID = md_MsgCreateProjectResponse.Fields().ByName("projectID") +} + +var _ protoreflect.Message = (*fastReflection_MsgCreateProjectResponse)(nil) + +type fastReflection_MsgCreateProjectResponse MsgCreateProjectResponse + +func (x *MsgCreateProjectResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgCreateProjectResponse)(x) +} + +func (x *MsgCreateProjectResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[3] + 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) +} + +var _fastReflection_MsgCreateProjectResponse_messageType fastReflection_MsgCreateProjectResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgCreateProjectResponse_messageType{} + +type fastReflection_MsgCreateProjectResponse_messageType struct{} + +func (x fastReflection_MsgCreateProjectResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgCreateProjectResponse)(nil) +} +func (x fastReflection_MsgCreateProjectResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgCreateProjectResponse) +} +func (x fastReflection_MsgCreateProjectResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateProjectResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgCreateProjectResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgCreateProjectResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgCreateProjectResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgCreateProjectResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgCreateProjectResponse) New() protoreflect.Message { + return new(fastReflection_MsgCreateProjectResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgCreateProjectResponse) Interface() protoreflect.ProtoMessage { + return (*MsgCreateProjectResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgCreateProjectResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgCreateProjectResponse_projectID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgCreateProjectResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgCreateProjectResponse.projectID": + return x.ProjectID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateProjectResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgCreateProjectResponse.projectID": + x.ProjectID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgCreateProjectResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgCreateProjectResponse.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProjectResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateProjectResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgCreateProjectResponse.projectID": + x.ProjectID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateProjectResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgCreateProjectResponse.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgCreateProjectResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProjectResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgCreateProjectResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgCreateProjectResponse.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgCreateProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgCreateProjectResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgCreateProjectResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgCreateProjectResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgCreateProjectResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgCreateProjectResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgCreateProjectResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgCreateProjectResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgCreateProjectResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateProjectResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgCreateProjectResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateProjectResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgCreateProjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgEditProject protoreflect.MessageDescriptor + fd_MsgEditProject_coordinator protoreflect.FieldDescriptor + fd_MsgEditProject_projectID protoreflect.FieldDescriptor + fd_MsgEditProject_name protoreflect.FieldDescriptor + fd_MsgEditProject_metadata protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgEditProject = File_network_project_v1_tx_proto.Messages().ByName("MsgEditProject") + fd_MsgEditProject_coordinator = md_MsgEditProject.Fields().ByName("coordinator") + fd_MsgEditProject_projectID = md_MsgEditProject.Fields().ByName("projectID") + fd_MsgEditProject_name = md_MsgEditProject.Fields().ByName("name") + fd_MsgEditProject_metadata = md_MsgEditProject.Fields().ByName("metadata") +} + +var _ protoreflect.Message = (*fastReflection_MsgEditProject)(nil) + +type fastReflection_MsgEditProject MsgEditProject + +func (x *MsgEditProject) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgEditProject)(x) +} + +func (x *MsgEditProject) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[4] + 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) +} + +var _fastReflection_MsgEditProject_messageType fastReflection_MsgEditProject_messageType +var _ protoreflect.MessageType = fastReflection_MsgEditProject_messageType{} + +type fastReflection_MsgEditProject_messageType struct{} + +func (x fastReflection_MsgEditProject_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgEditProject)(nil) +} +func (x fastReflection_MsgEditProject_messageType) New() protoreflect.Message { + return new(fastReflection_MsgEditProject) +} +func (x fastReflection_MsgEditProject_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEditProject +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgEditProject) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEditProject +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgEditProject) Type() protoreflect.MessageType { + return _fastReflection_MsgEditProject_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgEditProject) New() protoreflect.Message { + return new(fastReflection_MsgEditProject) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgEditProject) Interface() protoreflect.ProtoMessage { + return (*MsgEditProject)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgEditProject) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgEditProject_coordinator, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgEditProject_projectID, value) { + return + } + } + if x.Name != "" { + value := protoreflect.ValueOfString(x.Name) + if !f(fd_MsgEditProject_name, value) { + return + } + } + if len(x.Metadata) != 0 { + value := protoreflect.ValueOfBytes(x.Metadata) + if !f(fd_MsgEditProject_metadata, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgEditProject) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgEditProject.coordinator": + return x.Coordinator != "" + case "network.project.v1.MsgEditProject.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MsgEditProject.name": + return x.Name != "" + case "network.project.v1.MsgEditProject.metadata": + return len(x.Metadata) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProject does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditProject) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgEditProject.coordinator": + x.Coordinator = "" + case "network.project.v1.MsgEditProject.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MsgEditProject.name": + x.Name = "" + case "network.project.v1.MsgEditProject.metadata": + x.Metadata = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProject does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgEditProject) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgEditProject.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgEditProject.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MsgEditProject.name": + value := x.Name + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgEditProject.metadata": + value := x.Metadata + return protoreflect.ValueOfBytes(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProject does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditProject) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgEditProject.coordinator": + x.Coordinator = value.Interface().(string) + case "network.project.v1.MsgEditProject.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MsgEditProject.name": + x.Name = value.Interface().(string) + case "network.project.v1.MsgEditProject.metadata": + x.Metadata = value.Bytes() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProject does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditProject) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgEditProject.coordinator": + panic(fmt.Errorf("field coordinator of message network.project.v1.MsgEditProject is not mutable")) + case "network.project.v1.MsgEditProject.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgEditProject is not mutable")) + case "network.project.v1.MsgEditProject.name": + panic(fmt.Errorf("field name of message network.project.v1.MsgEditProject is not mutable")) + case "network.project.v1.MsgEditProject.metadata": + panic(fmt.Errorf("field metadata of message network.project.v1.MsgEditProject is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProject does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgEditProject) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgEditProject.coordinator": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgEditProject.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MsgEditProject.name": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgEditProject.metadata": + return protoreflect.ValueOfBytes(nil) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProject")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProject does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgEditProject) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgEditProject", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgEditProject) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditProject) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgEditProject) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgEditProject) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgEditProject) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Name) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Metadata) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgEditProject) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Metadata) > 0 { + i -= len(x.Metadata) + copy(dAtA[i:], x.Metadata) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Metadata))) + i-- + dAtA[i] = 0x22 + } + if len(x.Name) > 0 { + i -= len(x.Name) + copy(dAtA[i:], x.Name) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Name))) + i-- + dAtA[i] = 0x1a + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgEditProject) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEditProject: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEditProject: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Metadata = append(x.Metadata[:0], dAtA[iNdEx:postIndex]...) + if x.Metadata == nil { + x.Metadata = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgEditProjectResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgEditProjectResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgEditProjectResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgEditProjectResponse)(nil) + +type fastReflection_MsgEditProjectResponse MsgEditProjectResponse + +func (x *MsgEditProjectResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgEditProjectResponse)(x) +} + +func (x *MsgEditProjectResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[5] + 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) +} + +var _fastReflection_MsgEditProjectResponse_messageType fastReflection_MsgEditProjectResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgEditProjectResponse_messageType{} + +type fastReflection_MsgEditProjectResponse_messageType struct{} + +func (x fastReflection_MsgEditProjectResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgEditProjectResponse)(nil) +} +func (x fastReflection_MsgEditProjectResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgEditProjectResponse) +} +func (x fastReflection_MsgEditProjectResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEditProjectResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgEditProjectResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgEditProjectResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgEditProjectResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgEditProjectResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgEditProjectResponse) New() protoreflect.Message { + return new(fastReflection_MsgEditProjectResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgEditProjectResponse) Interface() protoreflect.ProtoMessage { + return (*MsgEditProjectResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgEditProjectResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgEditProjectResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditProjectResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgEditProjectResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProjectResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditProjectResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProjectResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditProjectResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProjectResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgEditProjectResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgEditProjectResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgEditProjectResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgEditProjectResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgEditProjectResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgEditProjectResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgEditProjectResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgEditProjectResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgEditProjectResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgEditProjectResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgEditProjectResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgEditProjectResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEditProjectResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgEditProjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgUpdateTotalSupply_3_list)(nil) + +type _MsgUpdateTotalSupply_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgUpdateTotalSupply_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgUpdateTotalSupply_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgUpdateTotalSupply_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgUpdateTotalSupply_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgUpdateTotalSupply_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgUpdateTotalSupply_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgUpdateTotalSupply_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgUpdateTotalSupply_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgUpdateTotalSupply protoreflect.MessageDescriptor + fd_MsgUpdateTotalSupply_coordinator protoreflect.FieldDescriptor + fd_MsgUpdateTotalSupply_projectID protoreflect.FieldDescriptor + fd_MsgUpdateTotalSupply_totalSupplyUpdate protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgUpdateTotalSupply = File_network_project_v1_tx_proto.Messages().ByName("MsgUpdateTotalSupply") + fd_MsgUpdateTotalSupply_coordinator = md_MsgUpdateTotalSupply.Fields().ByName("coordinator") + fd_MsgUpdateTotalSupply_projectID = md_MsgUpdateTotalSupply.Fields().ByName("projectID") + fd_MsgUpdateTotalSupply_totalSupplyUpdate = md_MsgUpdateTotalSupply.Fields().ByName("totalSupplyUpdate") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateTotalSupply)(nil) + +type fastReflection_MsgUpdateTotalSupply MsgUpdateTotalSupply + +func (x *MsgUpdateTotalSupply) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateTotalSupply)(x) +} + +func (x *MsgUpdateTotalSupply) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgUpdateTotalSupply_messageType fastReflection_MsgUpdateTotalSupply_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateTotalSupply_messageType{} + +type fastReflection_MsgUpdateTotalSupply_messageType struct{} + +func (x fastReflection_MsgUpdateTotalSupply_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateTotalSupply)(nil) +} +func (x fastReflection_MsgUpdateTotalSupply_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateTotalSupply) +} +func (x fastReflection_MsgUpdateTotalSupply_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateTotalSupply +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateTotalSupply) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateTotalSupply +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateTotalSupply) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateTotalSupply_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateTotalSupply) New() protoreflect.Message { + return new(fastReflection_MsgUpdateTotalSupply) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateTotalSupply) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateTotalSupply)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateTotalSupply) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgUpdateTotalSupply_coordinator, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgUpdateTotalSupply_projectID, value) { + return + } + } + if len(x.TotalSupplyUpdate) != 0 { + value := protoreflect.ValueOfList(&_MsgUpdateTotalSupply_3_list{list: &x.TotalSupplyUpdate}) + if !f(fd_MsgUpdateTotalSupply_totalSupplyUpdate, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateTotalSupply) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgUpdateTotalSupply.coordinator": + return x.Coordinator != "" + case "network.project.v1.MsgUpdateTotalSupply.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MsgUpdateTotalSupply.totalSupplyUpdate": + return len(x.TotalSupplyUpdate) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupply")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupply does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateTotalSupply) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgUpdateTotalSupply.coordinator": + x.Coordinator = "" + case "network.project.v1.MsgUpdateTotalSupply.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MsgUpdateTotalSupply.totalSupplyUpdate": + x.TotalSupplyUpdate = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupply")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupply does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateTotalSupply) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgUpdateTotalSupply.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgUpdateTotalSupply.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MsgUpdateTotalSupply.totalSupplyUpdate": + if len(x.TotalSupplyUpdate) == 0 { + return protoreflect.ValueOfList(&_MsgUpdateTotalSupply_3_list{}) + } + listValue := &_MsgUpdateTotalSupply_3_list{list: &x.TotalSupplyUpdate} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupply")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupply does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateTotalSupply) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgUpdateTotalSupply.coordinator": + x.Coordinator = value.Interface().(string) + case "network.project.v1.MsgUpdateTotalSupply.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MsgUpdateTotalSupply.totalSupplyUpdate": + lv := value.List() + clv := lv.(*_MsgUpdateTotalSupply_3_list) + x.TotalSupplyUpdate = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupply")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupply does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateTotalSupply) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgUpdateTotalSupply.totalSupplyUpdate": + if x.TotalSupplyUpdate == nil { + x.TotalSupplyUpdate = []*v1beta1.Coin{} + } + value := &_MsgUpdateTotalSupply_3_list{list: &x.TotalSupplyUpdate} + return protoreflect.ValueOfList(value) + case "network.project.v1.MsgUpdateTotalSupply.coordinator": + panic(fmt.Errorf("field coordinator of message network.project.v1.MsgUpdateTotalSupply is not mutable")) + case "network.project.v1.MsgUpdateTotalSupply.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgUpdateTotalSupply is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupply")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupply does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateTotalSupply) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgUpdateTotalSupply.coordinator": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgUpdateTotalSupply.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MsgUpdateTotalSupply.totalSupplyUpdate": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgUpdateTotalSupply_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupply")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupply does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateTotalSupply) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgUpdateTotalSupply", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateTotalSupply) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateTotalSupply) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateTotalSupply) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateTotalSupply) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateTotalSupply) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if len(x.TotalSupplyUpdate) > 0 { + for _, e := range x.TotalSupplyUpdate { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateTotalSupply) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.TotalSupplyUpdate) > 0 { + for iNdEx := len(x.TotalSupplyUpdate) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.TotalSupplyUpdate[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateTotalSupply) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateTotalSupply: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateTotalSupply: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalSupplyUpdate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TotalSupplyUpdate = append(x.TotalSupplyUpdate, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TotalSupplyUpdate[len(x.TotalSupplyUpdate)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateTotalSupplyResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgUpdateTotalSupplyResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgUpdateTotalSupplyResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateTotalSupplyResponse)(nil) + +type fastReflection_MsgUpdateTotalSupplyResponse MsgUpdateTotalSupplyResponse + +func (x *MsgUpdateTotalSupplyResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateTotalSupplyResponse)(x) +} + +func (x *MsgUpdateTotalSupplyResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgUpdateTotalSupplyResponse_messageType fastReflection_MsgUpdateTotalSupplyResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateTotalSupplyResponse_messageType{} + +type fastReflection_MsgUpdateTotalSupplyResponse_messageType struct{} + +func (x fastReflection_MsgUpdateTotalSupplyResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateTotalSupplyResponse)(nil) +} +func (x fastReflection_MsgUpdateTotalSupplyResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateTotalSupplyResponse) +} +func (x fastReflection_MsgUpdateTotalSupplyResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateTotalSupplyResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateTotalSupplyResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateTotalSupplyResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateTotalSupplyResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateTotalSupplyResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupplyResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupplyResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupplyResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupplyResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupplyResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupplyResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupplyResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupplyResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupplyResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupplyResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateTotalSupplyResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateTotalSupplyResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgUpdateTotalSupplyResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateTotalSupplyResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateTotalSupplyResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateTotalSupplyResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateTotalSupplyResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateTotalSupplyResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateTotalSupplyResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateSpecialAllocations protoreflect.MessageDescriptor + fd_MsgUpdateSpecialAllocations_coordinator protoreflect.FieldDescriptor + fd_MsgUpdateSpecialAllocations_projectID protoreflect.FieldDescriptor + fd_MsgUpdateSpecialAllocations_specialAllocations protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgUpdateSpecialAllocations = File_network_project_v1_tx_proto.Messages().ByName("MsgUpdateSpecialAllocations") + fd_MsgUpdateSpecialAllocations_coordinator = md_MsgUpdateSpecialAllocations.Fields().ByName("coordinator") + fd_MsgUpdateSpecialAllocations_projectID = md_MsgUpdateSpecialAllocations.Fields().ByName("projectID") + fd_MsgUpdateSpecialAllocations_specialAllocations = md_MsgUpdateSpecialAllocations.Fields().ByName("specialAllocations") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateSpecialAllocations)(nil) + +type fastReflection_MsgUpdateSpecialAllocations MsgUpdateSpecialAllocations + +func (x *MsgUpdateSpecialAllocations) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateSpecialAllocations)(x) +} + +func (x *MsgUpdateSpecialAllocations) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgUpdateSpecialAllocations_messageType fastReflection_MsgUpdateSpecialAllocations_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateSpecialAllocations_messageType{} + +type fastReflection_MsgUpdateSpecialAllocations_messageType struct{} + +func (x fastReflection_MsgUpdateSpecialAllocations_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateSpecialAllocations)(nil) +} +func (x fastReflection_MsgUpdateSpecialAllocations_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateSpecialAllocations) +} +func (x fastReflection_MsgUpdateSpecialAllocations_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateSpecialAllocations +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateSpecialAllocations) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateSpecialAllocations +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateSpecialAllocations) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateSpecialAllocations_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateSpecialAllocations) New() protoreflect.Message { + return new(fastReflection_MsgUpdateSpecialAllocations) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateSpecialAllocations) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateSpecialAllocations)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateSpecialAllocations) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgUpdateSpecialAllocations_coordinator, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgUpdateSpecialAllocations_projectID, value) { + return + } + } + if x.SpecialAllocations != nil { + value := protoreflect.ValueOfMessage(x.SpecialAllocations.ProtoReflect()) + if !f(fd_MsgUpdateSpecialAllocations_specialAllocations, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateSpecialAllocations) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgUpdateSpecialAllocations.coordinator": + return x.Coordinator != "" + case "network.project.v1.MsgUpdateSpecialAllocations.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MsgUpdateSpecialAllocations.specialAllocations": + return x.SpecialAllocations != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateSpecialAllocations) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgUpdateSpecialAllocations.coordinator": + x.Coordinator = "" + case "network.project.v1.MsgUpdateSpecialAllocations.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MsgUpdateSpecialAllocations.specialAllocations": + x.SpecialAllocations = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateSpecialAllocations) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgUpdateSpecialAllocations.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgUpdateSpecialAllocations.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MsgUpdateSpecialAllocations.specialAllocations": + value := x.SpecialAllocations + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocations does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateSpecialAllocations) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgUpdateSpecialAllocations.coordinator": + x.Coordinator = value.Interface().(string) + case "network.project.v1.MsgUpdateSpecialAllocations.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MsgUpdateSpecialAllocations.specialAllocations": + x.SpecialAllocations = value.Message().Interface().(*SpecialAllocations) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateSpecialAllocations) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgUpdateSpecialAllocations.specialAllocations": + if x.SpecialAllocations == nil { + x.SpecialAllocations = new(SpecialAllocations) + } + return protoreflect.ValueOfMessage(x.SpecialAllocations.ProtoReflect()) + case "network.project.v1.MsgUpdateSpecialAllocations.coordinator": + panic(fmt.Errorf("field coordinator of message network.project.v1.MsgUpdateSpecialAllocations is not mutable")) + case "network.project.v1.MsgUpdateSpecialAllocations.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgUpdateSpecialAllocations is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateSpecialAllocations) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgUpdateSpecialAllocations.coordinator": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgUpdateSpecialAllocations.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MsgUpdateSpecialAllocations.specialAllocations": + m := new(SpecialAllocations) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocations")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocations does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateSpecialAllocations) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgUpdateSpecialAllocations", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateSpecialAllocations) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateSpecialAllocations) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateSpecialAllocations) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateSpecialAllocations) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateSpecialAllocations) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if x.SpecialAllocations != nil { + l = options.Size(x.SpecialAllocations) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateSpecialAllocations) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.SpecialAllocations != nil { + encoded, err := options.Marshal(x.SpecialAllocations) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateSpecialAllocations) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateSpecialAllocations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateSpecialAllocations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SpecialAllocations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.SpecialAllocations == nil { + x.SpecialAllocations = &SpecialAllocations{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.SpecialAllocations); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateSpecialAllocationsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgUpdateSpecialAllocationsResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgUpdateSpecialAllocationsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateSpecialAllocationsResponse)(nil) + +type fastReflection_MsgUpdateSpecialAllocationsResponse MsgUpdateSpecialAllocationsResponse + +func (x *MsgUpdateSpecialAllocationsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateSpecialAllocationsResponse)(x) +} + +func (x *MsgUpdateSpecialAllocationsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgUpdateSpecialAllocationsResponse_messageType fastReflection_MsgUpdateSpecialAllocationsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateSpecialAllocationsResponse_messageType{} + +type fastReflection_MsgUpdateSpecialAllocationsResponse_messageType struct{} + +func (x fastReflection_MsgUpdateSpecialAllocationsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateSpecialAllocationsResponse)(nil) +} +func (x fastReflection_MsgUpdateSpecialAllocationsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateSpecialAllocationsResponse) +} +func (x fastReflection_MsgUpdateSpecialAllocationsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateSpecialAllocationsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateSpecialAllocationsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateSpecialAllocationsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateSpecialAllocationsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateSpecialAllocationsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocationsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocationsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocationsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocationsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocationsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocationsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUpdateSpecialAllocationsResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUpdateSpecialAllocationsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgUpdateSpecialAllocationsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateSpecialAllocationsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateSpecialAllocationsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateSpecialAllocationsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateSpecialAllocationsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateSpecialAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateSpecialAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgInitializeMainnet protoreflect.MessageDescriptor + fd_MsgInitializeMainnet_coordinator protoreflect.FieldDescriptor + fd_MsgInitializeMainnet_projectID protoreflect.FieldDescriptor + fd_MsgInitializeMainnet_sourceURL protoreflect.FieldDescriptor + fd_MsgInitializeMainnet_sourceHash protoreflect.FieldDescriptor + fd_MsgInitializeMainnet_mainnetChainID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgInitializeMainnet = File_network_project_v1_tx_proto.Messages().ByName("MsgInitializeMainnet") + fd_MsgInitializeMainnet_coordinator = md_MsgInitializeMainnet.Fields().ByName("coordinator") + fd_MsgInitializeMainnet_projectID = md_MsgInitializeMainnet.Fields().ByName("projectID") + fd_MsgInitializeMainnet_sourceURL = md_MsgInitializeMainnet.Fields().ByName("sourceURL") + fd_MsgInitializeMainnet_sourceHash = md_MsgInitializeMainnet.Fields().ByName("sourceHash") + fd_MsgInitializeMainnet_mainnetChainID = md_MsgInitializeMainnet.Fields().ByName("mainnetChainID") +} + +var _ protoreflect.Message = (*fastReflection_MsgInitializeMainnet)(nil) + +type fastReflection_MsgInitializeMainnet MsgInitializeMainnet + +func (x *MsgInitializeMainnet) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgInitializeMainnet)(x) +} + +func (x *MsgInitializeMainnet) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgInitializeMainnet_messageType fastReflection_MsgInitializeMainnet_messageType +var _ protoreflect.MessageType = fastReflection_MsgInitializeMainnet_messageType{} + +type fastReflection_MsgInitializeMainnet_messageType struct{} + +func (x fastReflection_MsgInitializeMainnet_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgInitializeMainnet)(nil) +} +func (x fastReflection_MsgInitializeMainnet_messageType) New() protoreflect.Message { + return new(fastReflection_MsgInitializeMainnet) +} +func (x fastReflection_MsgInitializeMainnet_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgInitializeMainnet +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgInitializeMainnet) Descriptor() protoreflect.MessageDescriptor { + return md_MsgInitializeMainnet +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgInitializeMainnet) Type() protoreflect.MessageType { + return _fastReflection_MsgInitializeMainnet_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgInitializeMainnet) New() protoreflect.Message { + return new(fastReflection_MsgInitializeMainnet) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgInitializeMainnet) Interface() protoreflect.ProtoMessage { + return (*MsgInitializeMainnet)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgInitializeMainnet) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgInitializeMainnet_coordinator, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgInitializeMainnet_projectID, value) { + return + } + } + if x.SourceURL != "" { + value := protoreflect.ValueOfString(x.SourceURL) + if !f(fd_MsgInitializeMainnet_sourceURL, value) { + return + } + } + if x.SourceHash != "" { + value := protoreflect.ValueOfString(x.SourceHash) + if !f(fd_MsgInitializeMainnet_sourceHash, value) { + return + } + } + if x.MainnetChainID != "" { + value := protoreflect.ValueOfString(x.MainnetChainID) + if !f(fd_MsgInitializeMainnet_mainnetChainID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgInitializeMainnet) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnet.coordinator": + return x.Coordinator != "" + case "network.project.v1.MsgInitializeMainnet.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MsgInitializeMainnet.sourceURL": + return x.SourceURL != "" + case "network.project.v1.MsgInitializeMainnet.sourceHash": + return x.SourceHash != "" + case "network.project.v1.MsgInitializeMainnet.mainnetChainID": + return x.MainnetChainID != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnet")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnet does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitializeMainnet) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnet.coordinator": + x.Coordinator = "" + case "network.project.v1.MsgInitializeMainnet.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MsgInitializeMainnet.sourceURL": + x.SourceURL = "" + case "network.project.v1.MsgInitializeMainnet.sourceHash": + x.SourceHash = "" + case "network.project.v1.MsgInitializeMainnet.mainnetChainID": + x.MainnetChainID = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnet")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnet does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgInitializeMainnet) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgInitializeMainnet.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgInitializeMainnet.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MsgInitializeMainnet.sourceURL": + value := x.SourceURL + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgInitializeMainnet.sourceHash": + value := x.SourceHash + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgInitializeMainnet.mainnetChainID": + value := x.MainnetChainID + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnet")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnet does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitializeMainnet) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnet.coordinator": + x.Coordinator = value.Interface().(string) + case "network.project.v1.MsgInitializeMainnet.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MsgInitializeMainnet.sourceURL": + x.SourceURL = value.Interface().(string) + case "network.project.v1.MsgInitializeMainnet.sourceHash": + x.SourceHash = value.Interface().(string) + case "network.project.v1.MsgInitializeMainnet.mainnetChainID": + x.MainnetChainID = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnet")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnet does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitializeMainnet) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnet.coordinator": + panic(fmt.Errorf("field coordinator of message network.project.v1.MsgInitializeMainnet is not mutable")) + case "network.project.v1.MsgInitializeMainnet.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgInitializeMainnet is not mutable")) + case "network.project.v1.MsgInitializeMainnet.sourceURL": + panic(fmt.Errorf("field sourceURL of message network.project.v1.MsgInitializeMainnet is not mutable")) + case "network.project.v1.MsgInitializeMainnet.sourceHash": + panic(fmt.Errorf("field sourceHash of message network.project.v1.MsgInitializeMainnet is not mutable")) + case "network.project.v1.MsgInitializeMainnet.mainnetChainID": + panic(fmt.Errorf("field mainnetChainID of message network.project.v1.MsgInitializeMainnet is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnet")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnet does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgInitializeMainnet) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnet.coordinator": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgInitializeMainnet.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MsgInitializeMainnet.sourceURL": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgInitializeMainnet.sourceHash": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgInitializeMainnet.mainnetChainID": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnet")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnet does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgInitializeMainnet) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgInitializeMainnet", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgInitializeMainnet) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitializeMainnet) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgInitializeMainnet) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgInitializeMainnet) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgInitializeMainnet) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.SourceURL) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.SourceHash) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.MainnetChainID) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgInitializeMainnet) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.MainnetChainID) > 0 { + i -= len(x.MainnetChainID) + copy(dAtA[i:], x.MainnetChainID) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MainnetChainID))) + i-- + dAtA[i] = 0x2a + } + if len(x.SourceHash) > 0 { + i -= len(x.SourceHash) + copy(dAtA[i:], x.SourceHash) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SourceHash))) + i-- + dAtA[i] = 0x22 + } + if len(x.SourceURL) > 0 { + i -= len(x.SourceURL) + copy(dAtA[i:], x.SourceURL) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.SourceURL))) + i-- + dAtA[i] = 0x1a + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgInitializeMainnet) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgInitializeMainnet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgInitializeMainnet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SourceURL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SourceURL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SourceHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.SourceHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetChainID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MainnetChainID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgInitializeMainnetResponse protoreflect.MessageDescriptor + fd_MsgInitializeMainnetResponse_mainnetID protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgInitializeMainnetResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgInitializeMainnetResponse") + fd_MsgInitializeMainnetResponse_mainnetID = md_MsgInitializeMainnetResponse.Fields().ByName("mainnetID") +} + +var _ protoreflect.Message = (*fastReflection_MsgInitializeMainnetResponse)(nil) + +type fastReflection_MsgInitializeMainnetResponse MsgInitializeMainnetResponse + +func (x *MsgInitializeMainnetResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgInitializeMainnetResponse)(x) +} + +func (x *MsgInitializeMainnetResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[11] + 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) +} + +var _fastReflection_MsgInitializeMainnetResponse_messageType fastReflection_MsgInitializeMainnetResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgInitializeMainnetResponse_messageType{} + +type fastReflection_MsgInitializeMainnetResponse_messageType struct{} + +func (x fastReflection_MsgInitializeMainnetResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgInitializeMainnetResponse)(nil) +} +func (x fastReflection_MsgInitializeMainnetResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgInitializeMainnetResponse) +} +func (x fastReflection_MsgInitializeMainnetResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgInitializeMainnetResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgInitializeMainnetResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgInitializeMainnetResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgInitializeMainnetResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgInitializeMainnetResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgInitializeMainnetResponse) New() protoreflect.Message { + return new(fastReflection_MsgInitializeMainnetResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgInitializeMainnetResponse) Interface() protoreflect.ProtoMessage { + return (*MsgInitializeMainnetResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgInitializeMainnetResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.MainnetID != uint64(0) { + value := protoreflect.ValueOfUint64(x.MainnetID) + if !f(fd_MsgInitializeMainnetResponse_mainnetID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgInitializeMainnetResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnetResponse.mainnetID": + return x.MainnetID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnetResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnetResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitializeMainnetResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnetResponse.mainnetID": + x.MainnetID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnetResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnetResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgInitializeMainnetResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgInitializeMainnetResponse.mainnetID": + value := x.MainnetID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnetResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnetResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitializeMainnetResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnetResponse.mainnetID": + x.MainnetID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnetResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnetResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitializeMainnetResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnetResponse.mainnetID": + panic(fmt.Errorf("field mainnetID of message network.project.v1.MsgInitializeMainnetResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnetResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnetResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgInitializeMainnetResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgInitializeMainnetResponse.mainnetID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgInitializeMainnetResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgInitializeMainnetResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgInitializeMainnetResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgInitializeMainnetResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgInitializeMainnetResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgInitializeMainnetResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgInitializeMainnetResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgInitializeMainnetResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgInitializeMainnetResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.MainnetID != 0 { + n += 1 + runtime.Sov(uint64(x.MainnetID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgInitializeMainnetResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.MainnetID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.MainnetID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgInitializeMainnetResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgInitializeMainnetResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgInitializeMainnetResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MainnetID", wireType) + } + x.MainnetID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.MainnetID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgMintVouchers_3_list)(nil) + +type _MsgMintVouchers_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgMintVouchers_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgMintVouchers_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgMintVouchers_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgMintVouchers_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgMintVouchers_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgMintVouchers_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgMintVouchers_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgMintVouchers_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgMintVouchers protoreflect.MessageDescriptor + fd_MsgMintVouchers_coordinator protoreflect.FieldDescriptor + fd_MsgMintVouchers_projectID protoreflect.FieldDescriptor + fd_MsgMintVouchers_shares protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgMintVouchers = File_network_project_v1_tx_proto.Messages().ByName("MsgMintVouchers") + fd_MsgMintVouchers_coordinator = md_MsgMintVouchers.Fields().ByName("coordinator") + fd_MsgMintVouchers_projectID = md_MsgMintVouchers.Fields().ByName("projectID") + fd_MsgMintVouchers_shares = md_MsgMintVouchers.Fields().ByName("shares") +} + +var _ protoreflect.Message = (*fastReflection_MsgMintVouchers)(nil) + +type fastReflection_MsgMintVouchers MsgMintVouchers + +func (x *MsgMintVouchers) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgMintVouchers)(x) +} + +func (x *MsgMintVouchers) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgMintVouchers_messageType fastReflection_MsgMintVouchers_messageType +var _ protoreflect.MessageType = fastReflection_MsgMintVouchers_messageType{} + +type fastReflection_MsgMintVouchers_messageType struct{} + +func (x fastReflection_MsgMintVouchers_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgMintVouchers)(nil) +} +func (x fastReflection_MsgMintVouchers_messageType) New() protoreflect.Message { + return new(fastReflection_MsgMintVouchers) +} +func (x fastReflection_MsgMintVouchers_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgMintVouchers +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgMintVouchers) Descriptor() protoreflect.MessageDescriptor { + return md_MsgMintVouchers +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgMintVouchers) Type() protoreflect.MessageType { + return _fastReflection_MsgMintVouchers_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgMintVouchers) New() protoreflect.Message { + return new(fastReflection_MsgMintVouchers) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgMintVouchers) Interface() protoreflect.ProtoMessage { + return (*MsgMintVouchers)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgMintVouchers) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Coordinator != "" { + value := protoreflect.ValueOfString(x.Coordinator) + if !f(fd_MsgMintVouchers_coordinator, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgMintVouchers_projectID, value) { + return + } + } + if len(x.Shares) != 0 { + value := protoreflect.ValueOfList(&_MsgMintVouchers_3_list{list: &x.Shares}) + if !f(fd_MsgMintVouchers_shares, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgMintVouchers) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgMintVouchers.coordinator": + return x.Coordinator != "" + case "network.project.v1.MsgMintVouchers.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MsgMintVouchers.shares": + return len(x.Shares) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchers does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgMintVouchers) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgMintVouchers.coordinator": + x.Coordinator = "" + case "network.project.v1.MsgMintVouchers.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MsgMintVouchers.shares": + x.Shares = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchers does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgMintVouchers) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgMintVouchers.coordinator": + value := x.Coordinator + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgMintVouchers.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MsgMintVouchers.shares": + if len(x.Shares) == 0 { + return protoreflect.ValueOfList(&_MsgMintVouchers_3_list{}) + } + listValue := &_MsgMintVouchers_3_list{list: &x.Shares} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchers does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgMintVouchers) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgMintVouchers.coordinator": + x.Coordinator = value.Interface().(string) + case "network.project.v1.MsgMintVouchers.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MsgMintVouchers.shares": + lv := value.List() + clv := lv.(*_MsgMintVouchers_3_list) + x.Shares = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchers does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgMintVouchers) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgMintVouchers.shares": + if x.Shares == nil { + x.Shares = []*v1beta1.Coin{} + } + value := &_MsgMintVouchers_3_list{list: &x.Shares} + return protoreflect.ValueOfList(value) + case "network.project.v1.MsgMintVouchers.coordinator": + panic(fmt.Errorf("field coordinator of message network.project.v1.MsgMintVouchers is not mutable")) + case "network.project.v1.MsgMintVouchers.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgMintVouchers is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchers does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgMintVouchers) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgMintVouchers.coordinator": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgMintVouchers.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MsgMintVouchers.shares": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgMintVouchers_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchers does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgMintVouchers) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgMintVouchers", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgMintVouchers) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgMintVouchers) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgMintVouchers) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgMintVouchers) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgMintVouchers) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Coordinator) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if len(x.Shares) > 0 { + for _, e := range x.Shares { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgMintVouchers) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Shares) > 0 { + for iNdEx := len(x.Shares) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Shares[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Coordinator) > 0 { + i -= len(x.Coordinator) + copy(dAtA[i:], x.Coordinator) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Coordinator))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgMintVouchers) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgMintVouchers: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgMintVouchers: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coordinator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Shares = append(x.Shares, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Shares[len(x.Shares)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgMintVouchersResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgMintVouchersResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgMintVouchersResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgMintVouchersResponse)(nil) + +type fastReflection_MsgMintVouchersResponse MsgMintVouchersResponse + +func (x *MsgMintVouchersResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgMintVouchersResponse)(x) +} + +func (x *MsgMintVouchersResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[13] + 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) +} + +var _fastReflection_MsgMintVouchersResponse_messageType fastReflection_MsgMintVouchersResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgMintVouchersResponse_messageType{} + +type fastReflection_MsgMintVouchersResponse_messageType struct{} + +func (x fastReflection_MsgMintVouchersResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgMintVouchersResponse)(nil) +} +func (x fastReflection_MsgMintVouchersResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgMintVouchersResponse) +} +func (x fastReflection_MsgMintVouchersResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgMintVouchersResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgMintVouchersResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgMintVouchersResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgMintVouchersResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgMintVouchersResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgMintVouchersResponse) New() protoreflect.Message { + return new(fastReflection_MsgMintVouchersResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgMintVouchersResponse) Interface() protoreflect.ProtoMessage { + return (*MsgMintVouchersResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgMintVouchersResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgMintVouchersResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgMintVouchersResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgMintVouchersResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchersResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgMintVouchersResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgMintVouchersResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgMintVouchersResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgMintVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgMintVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgMintVouchersResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgMintVouchersResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgMintVouchersResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgMintVouchersResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgMintVouchersResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgMintVouchersResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgMintVouchersResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgMintVouchersResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgMintVouchersResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgMintVouchersResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgMintVouchersResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgBurnVouchers_3_list)(nil) + +type _MsgBurnVouchers_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgBurnVouchers_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgBurnVouchers_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgBurnVouchers_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgBurnVouchers_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgBurnVouchers_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgBurnVouchers_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgBurnVouchers_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgBurnVouchers_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgBurnVouchers protoreflect.MessageDescriptor + fd_MsgBurnVouchers_sender protoreflect.FieldDescriptor + fd_MsgBurnVouchers_projectID protoreflect.FieldDescriptor + fd_MsgBurnVouchers_vouchers protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgBurnVouchers = File_network_project_v1_tx_proto.Messages().ByName("MsgBurnVouchers") + fd_MsgBurnVouchers_sender = md_MsgBurnVouchers.Fields().ByName("sender") + fd_MsgBurnVouchers_projectID = md_MsgBurnVouchers.Fields().ByName("projectID") + fd_MsgBurnVouchers_vouchers = md_MsgBurnVouchers.Fields().ByName("vouchers") +} + +var _ protoreflect.Message = (*fastReflection_MsgBurnVouchers)(nil) + +type fastReflection_MsgBurnVouchers MsgBurnVouchers + +func (x *MsgBurnVouchers) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgBurnVouchers)(x) +} + +func (x *MsgBurnVouchers) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[14] + 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) +} + +var _fastReflection_MsgBurnVouchers_messageType fastReflection_MsgBurnVouchers_messageType +var _ protoreflect.MessageType = fastReflection_MsgBurnVouchers_messageType{} + +type fastReflection_MsgBurnVouchers_messageType struct{} + +func (x fastReflection_MsgBurnVouchers_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgBurnVouchers)(nil) +} +func (x fastReflection_MsgBurnVouchers_messageType) New() protoreflect.Message { + return new(fastReflection_MsgBurnVouchers) +} +func (x fastReflection_MsgBurnVouchers_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgBurnVouchers +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgBurnVouchers) Descriptor() protoreflect.MessageDescriptor { + return md_MsgBurnVouchers +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgBurnVouchers) Type() protoreflect.MessageType { + return _fastReflection_MsgBurnVouchers_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgBurnVouchers) New() protoreflect.Message { + return new(fastReflection_MsgBurnVouchers) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgBurnVouchers) Interface() protoreflect.ProtoMessage { + return (*MsgBurnVouchers)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgBurnVouchers) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Sender != "" { + value := protoreflect.ValueOfString(x.Sender) + if !f(fd_MsgBurnVouchers_sender, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgBurnVouchers_projectID, value) { + return + } + } + if len(x.Vouchers) != 0 { + value := protoreflect.ValueOfList(&_MsgBurnVouchers_3_list{list: &x.Vouchers}) + if !f(fd_MsgBurnVouchers_vouchers, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgBurnVouchers) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgBurnVouchers.sender": + return x.Sender != "" + case "network.project.v1.MsgBurnVouchers.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MsgBurnVouchers.vouchers": + return len(x.Vouchers) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchers does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBurnVouchers) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgBurnVouchers.sender": + x.Sender = "" + case "network.project.v1.MsgBurnVouchers.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MsgBurnVouchers.vouchers": + x.Vouchers = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchers does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgBurnVouchers) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgBurnVouchers.sender": + value := x.Sender + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgBurnVouchers.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MsgBurnVouchers.vouchers": + if len(x.Vouchers) == 0 { + return protoreflect.ValueOfList(&_MsgBurnVouchers_3_list{}) + } + listValue := &_MsgBurnVouchers_3_list{list: &x.Vouchers} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchers does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBurnVouchers) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgBurnVouchers.sender": + x.Sender = value.Interface().(string) + case "network.project.v1.MsgBurnVouchers.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MsgBurnVouchers.vouchers": + lv := value.List() + clv := lv.(*_MsgBurnVouchers_3_list) + x.Vouchers = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchers does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBurnVouchers) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgBurnVouchers.vouchers": + if x.Vouchers == nil { + x.Vouchers = []*v1beta1.Coin{} + } + value := &_MsgBurnVouchers_3_list{list: &x.Vouchers} + return protoreflect.ValueOfList(value) + case "network.project.v1.MsgBurnVouchers.sender": + panic(fmt.Errorf("field sender of message network.project.v1.MsgBurnVouchers is not mutable")) + case "network.project.v1.MsgBurnVouchers.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgBurnVouchers is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchers does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgBurnVouchers) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgBurnVouchers.sender": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgBurnVouchers.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MsgBurnVouchers.vouchers": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgBurnVouchers_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchers does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgBurnVouchers) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgBurnVouchers", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgBurnVouchers) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBurnVouchers) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgBurnVouchers) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgBurnVouchers) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgBurnVouchers) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Sender) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if len(x.Vouchers) > 0 { + for _, e := range x.Vouchers { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgBurnVouchers) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Vouchers) > 0 { + for iNdEx := len(x.Vouchers) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Vouchers[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Sender) > 0 { + i -= len(x.Sender) + copy(dAtA[i:], x.Sender) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Sender))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgBurnVouchers) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgBurnVouchers: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgBurnVouchers: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Vouchers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Vouchers = append(x.Vouchers, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Vouchers[len(x.Vouchers)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgBurnVouchersResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgBurnVouchersResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgBurnVouchersResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgBurnVouchersResponse)(nil) + +type fastReflection_MsgBurnVouchersResponse MsgBurnVouchersResponse + +func (x *MsgBurnVouchersResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgBurnVouchersResponse)(x) +} + +func (x *MsgBurnVouchersResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[15] + 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) +} + +var _fastReflection_MsgBurnVouchersResponse_messageType fastReflection_MsgBurnVouchersResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgBurnVouchersResponse_messageType{} + +type fastReflection_MsgBurnVouchersResponse_messageType struct{} + +func (x fastReflection_MsgBurnVouchersResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgBurnVouchersResponse)(nil) +} +func (x fastReflection_MsgBurnVouchersResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgBurnVouchersResponse) +} +func (x fastReflection_MsgBurnVouchersResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgBurnVouchersResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgBurnVouchersResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgBurnVouchersResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgBurnVouchersResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgBurnVouchersResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgBurnVouchersResponse) New() protoreflect.Message { + return new(fastReflection_MsgBurnVouchersResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgBurnVouchersResponse) Interface() protoreflect.ProtoMessage { + return (*MsgBurnVouchersResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgBurnVouchersResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgBurnVouchersResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBurnVouchersResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgBurnVouchersResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchersResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBurnVouchersResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBurnVouchersResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgBurnVouchersResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgBurnVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgBurnVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgBurnVouchersResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgBurnVouchersResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgBurnVouchersResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBurnVouchersResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgBurnVouchersResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgBurnVouchersResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgBurnVouchersResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgBurnVouchersResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgBurnVouchersResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgBurnVouchersResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgBurnVouchersResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgRedeemVouchers_4_list)(nil) + +type _MsgRedeemVouchers_4_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgRedeemVouchers_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgRedeemVouchers_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgRedeemVouchers_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgRedeemVouchers_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgRedeemVouchers_4_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgRedeemVouchers_4_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgRedeemVouchers_4_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgRedeemVouchers_4_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgRedeemVouchers protoreflect.MessageDescriptor + fd_MsgRedeemVouchers_sender protoreflect.FieldDescriptor + fd_MsgRedeemVouchers_projectID protoreflect.FieldDescriptor + fd_MsgRedeemVouchers_account protoreflect.FieldDescriptor + fd_MsgRedeemVouchers_vouchers protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgRedeemVouchers = File_network_project_v1_tx_proto.Messages().ByName("MsgRedeemVouchers") + fd_MsgRedeemVouchers_sender = md_MsgRedeemVouchers.Fields().ByName("sender") + fd_MsgRedeemVouchers_projectID = md_MsgRedeemVouchers.Fields().ByName("projectID") + fd_MsgRedeemVouchers_account = md_MsgRedeemVouchers.Fields().ByName("account") + fd_MsgRedeemVouchers_vouchers = md_MsgRedeemVouchers.Fields().ByName("vouchers") +} + +var _ protoreflect.Message = (*fastReflection_MsgRedeemVouchers)(nil) + +type fastReflection_MsgRedeemVouchers MsgRedeemVouchers + +func (x *MsgRedeemVouchers) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgRedeemVouchers)(x) +} + +func (x *MsgRedeemVouchers) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[16] + 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) +} + +var _fastReflection_MsgRedeemVouchers_messageType fastReflection_MsgRedeemVouchers_messageType +var _ protoreflect.MessageType = fastReflection_MsgRedeemVouchers_messageType{} + +type fastReflection_MsgRedeemVouchers_messageType struct{} + +func (x fastReflection_MsgRedeemVouchers_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgRedeemVouchers)(nil) +} +func (x fastReflection_MsgRedeemVouchers_messageType) New() protoreflect.Message { + return new(fastReflection_MsgRedeemVouchers) +} +func (x fastReflection_MsgRedeemVouchers_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRedeemVouchers +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgRedeemVouchers) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRedeemVouchers +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgRedeemVouchers) Type() protoreflect.MessageType { + return _fastReflection_MsgRedeemVouchers_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgRedeemVouchers) New() protoreflect.Message { + return new(fastReflection_MsgRedeemVouchers) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgRedeemVouchers) Interface() protoreflect.ProtoMessage { + return (*MsgRedeemVouchers)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgRedeemVouchers) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Sender != "" { + value := protoreflect.ValueOfString(x.Sender) + if !f(fd_MsgRedeemVouchers_sender, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgRedeemVouchers_projectID, value) { + return + } + } + if x.Account != "" { + value := protoreflect.ValueOfString(x.Account) + if !f(fd_MsgRedeemVouchers_account, value) { + return + } + } + if len(x.Vouchers) != 0 { + value := protoreflect.ValueOfList(&_MsgRedeemVouchers_4_list{list: &x.Vouchers}) + if !f(fd_MsgRedeemVouchers_vouchers, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgRedeemVouchers) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgRedeemVouchers.sender": + return x.Sender != "" + case "network.project.v1.MsgRedeemVouchers.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MsgRedeemVouchers.account": + return x.Account != "" + case "network.project.v1.MsgRedeemVouchers.vouchers": + return len(x.Vouchers) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchers does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRedeemVouchers) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgRedeemVouchers.sender": + x.Sender = "" + case "network.project.v1.MsgRedeemVouchers.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MsgRedeemVouchers.account": + x.Account = "" + case "network.project.v1.MsgRedeemVouchers.vouchers": + x.Vouchers = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchers does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgRedeemVouchers) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgRedeemVouchers.sender": + value := x.Sender + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgRedeemVouchers.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MsgRedeemVouchers.account": + value := x.Account + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgRedeemVouchers.vouchers": + if len(x.Vouchers) == 0 { + return protoreflect.ValueOfList(&_MsgRedeemVouchers_4_list{}) + } + listValue := &_MsgRedeemVouchers_4_list{list: &x.Vouchers} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchers does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRedeemVouchers) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgRedeemVouchers.sender": + x.Sender = value.Interface().(string) + case "network.project.v1.MsgRedeemVouchers.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MsgRedeemVouchers.account": + x.Account = value.Interface().(string) + case "network.project.v1.MsgRedeemVouchers.vouchers": + lv := value.List() + clv := lv.(*_MsgRedeemVouchers_4_list) + x.Vouchers = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchers does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRedeemVouchers) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgRedeemVouchers.vouchers": + if x.Vouchers == nil { + x.Vouchers = []*v1beta1.Coin{} + } + value := &_MsgRedeemVouchers_4_list{list: &x.Vouchers} + return protoreflect.ValueOfList(value) + case "network.project.v1.MsgRedeemVouchers.sender": + panic(fmt.Errorf("field sender of message network.project.v1.MsgRedeemVouchers is not mutable")) + case "network.project.v1.MsgRedeemVouchers.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgRedeemVouchers is not mutable")) + case "network.project.v1.MsgRedeemVouchers.account": + panic(fmt.Errorf("field account of message network.project.v1.MsgRedeemVouchers is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchers does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgRedeemVouchers) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgRedeemVouchers.sender": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgRedeemVouchers.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MsgRedeemVouchers.account": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgRedeemVouchers.vouchers": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgRedeemVouchers_4_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchers does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgRedeemVouchers) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgRedeemVouchers", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgRedeemVouchers) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRedeemVouchers) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgRedeemVouchers) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgRedeemVouchers) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgRedeemVouchers) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Sender) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + l = len(x.Account) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Vouchers) > 0 { + for _, e := range x.Vouchers { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgRedeemVouchers) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Vouchers) > 0 { + for iNdEx := len(x.Vouchers) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Vouchers[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + } + if len(x.Account) > 0 { + i -= len(x.Account) + copy(dAtA[i:], x.Account) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Account))) + i-- + dAtA[i] = 0x1a + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Sender) > 0 { + i -= len(x.Sender) + copy(dAtA[i:], x.Sender) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Sender))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgRedeemVouchers) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRedeemVouchers: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRedeemVouchers: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Account", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Account = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Vouchers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Vouchers = append(x.Vouchers, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Vouchers[len(x.Vouchers)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgRedeemVouchersResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgRedeemVouchersResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgRedeemVouchersResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgRedeemVouchersResponse)(nil) + +type fastReflection_MsgRedeemVouchersResponse MsgRedeemVouchersResponse + +func (x *MsgRedeemVouchersResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgRedeemVouchersResponse)(x) +} + +func (x *MsgRedeemVouchersResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_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) +} + +var _fastReflection_MsgRedeemVouchersResponse_messageType fastReflection_MsgRedeemVouchersResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgRedeemVouchersResponse_messageType{} + +type fastReflection_MsgRedeemVouchersResponse_messageType struct{} + +func (x fastReflection_MsgRedeemVouchersResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgRedeemVouchersResponse)(nil) +} +func (x fastReflection_MsgRedeemVouchersResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgRedeemVouchersResponse) +} +func (x fastReflection_MsgRedeemVouchersResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRedeemVouchersResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgRedeemVouchersResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRedeemVouchersResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgRedeemVouchersResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgRedeemVouchersResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgRedeemVouchersResponse) New() protoreflect.Message { + return new(fastReflection_MsgRedeemVouchersResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgRedeemVouchersResponse) Interface() protoreflect.ProtoMessage { + return (*MsgRedeemVouchersResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgRedeemVouchersResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgRedeemVouchersResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRedeemVouchersResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgRedeemVouchersResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchersResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRedeemVouchersResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRedeemVouchersResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgRedeemVouchersResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgRedeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgRedeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgRedeemVouchersResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgRedeemVouchersResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgRedeemVouchersResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRedeemVouchersResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgRedeemVouchersResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgRedeemVouchersResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgRedeemVouchersResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgRedeemVouchersResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgRedeemVouchersResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRedeemVouchersResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRedeemVouchersResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgUnredeemVouchers_3_list)(nil) + +type _MsgUnredeemVouchers_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgUnredeemVouchers_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgUnredeemVouchers_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgUnredeemVouchers_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgUnredeemVouchers_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgUnredeemVouchers_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgUnredeemVouchers_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgUnredeemVouchers_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgUnredeemVouchers_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgUnredeemVouchers protoreflect.MessageDescriptor + fd_MsgUnredeemVouchers_sender protoreflect.FieldDescriptor + fd_MsgUnredeemVouchers_projectID protoreflect.FieldDescriptor + fd_MsgUnredeemVouchers_shares protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgUnredeemVouchers = File_network_project_v1_tx_proto.Messages().ByName("MsgUnredeemVouchers") + fd_MsgUnredeemVouchers_sender = md_MsgUnredeemVouchers.Fields().ByName("sender") + fd_MsgUnredeemVouchers_projectID = md_MsgUnredeemVouchers.Fields().ByName("projectID") + fd_MsgUnredeemVouchers_shares = md_MsgUnredeemVouchers.Fields().ByName("shares") +} + +var _ protoreflect.Message = (*fastReflection_MsgUnredeemVouchers)(nil) + +type fastReflection_MsgUnredeemVouchers MsgUnredeemVouchers + +func (x *MsgUnredeemVouchers) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUnredeemVouchers)(x) +} + +func (x *MsgUnredeemVouchers) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[18] + 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) +} + +var _fastReflection_MsgUnredeemVouchers_messageType fastReflection_MsgUnredeemVouchers_messageType +var _ protoreflect.MessageType = fastReflection_MsgUnredeemVouchers_messageType{} + +type fastReflection_MsgUnredeemVouchers_messageType struct{} + +func (x fastReflection_MsgUnredeemVouchers_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUnredeemVouchers)(nil) +} +func (x fastReflection_MsgUnredeemVouchers_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUnredeemVouchers) +} +func (x fastReflection_MsgUnredeemVouchers_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUnredeemVouchers +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUnredeemVouchers) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUnredeemVouchers +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUnredeemVouchers) Type() protoreflect.MessageType { + return _fastReflection_MsgUnredeemVouchers_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUnredeemVouchers) New() protoreflect.Message { + return new(fastReflection_MsgUnredeemVouchers) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUnredeemVouchers) Interface() protoreflect.ProtoMessage { + return (*MsgUnredeemVouchers)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUnredeemVouchers) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Sender != "" { + value := protoreflect.ValueOfString(x.Sender) + if !f(fd_MsgUnredeemVouchers_sender, value) { + return + } + } + if x.ProjectID != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProjectID) + if !f(fd_MsgUnredeemVouchers_projectID, value) { + return + } + } + if len(x.Shares) != 0 { + value := protoreflect.ValueOfList(&_MsgUnredeemVouchers_3_list{list: &x.Shares}) + if !f(fd_MsgUnredeemVouchers_shares, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUnredeemVouchers) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.MsgUnredeemVouchers.sender": + return x.Sender != "" + case "network.project.v1.MsgUnredeemVouchers.projectID": + return x.ProjectID != uint64(0) + case "network.project.v1.MsgUnredeemVouchers.shares": + return len(x.Shares) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchers does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUnredeemVouchers) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.MsgUnredeemVouchers.sender": + x.Sender = "" + case "network.project.v1.MsgUnredeemVouchers.projectID": + x.ProjectID = uint64(0) + case "network.project.v1.MsgUnredeemVouchers.shares": + x.Shares = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchers does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUnredeemVouchers) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.MsgUnredeemVouchers.sender": + value := x.Sender + return protoreflect.ValueOfString(value) + case "network.project.v1.MsgUnredeemVouchers.projectID": + value := x.ProjectID + return protoreflect.ValueOfUint64(value) + case "network.project.v1.MsgUnredeemVouchers.shares": + if len(x.Shares) == 0 { + return protoreflect.ValueOfList(&_MsgUnredeemVouchers_3_list{}) + } + listValue := &_MsgUnredeemVouchers_3_list{list: &x.Shares} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchers does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUnredeemVouchers) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.MsgUnredeemVouchers.sender": + x.Sender = value.Interface().(string) + case "network.project.v1.MsgUnredeemVouchers.projectID": + x.ProjectID = value.Uint() + case "network.project.v1.MsgUnredeemVouchers.shares": + lv := value.List() + clv := lv.(*_MsgUnredeemVouchers_3_list) + x.Shares = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchers does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUnredeemVouchers) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgUnredeemVouchers.shares": + if x.Shares == nil { + x.Shares = []*v1beta1.Coin{} + } + value := &_MsgUnredeemVouchers_3_list{list: &x.Shares} + return protoreflect.ValueOfList(value) + case "network.project.v1.MsgUnredeemVouchers.sender": + panic(fmt.Errorf("field sender of message network.project.v1.MsgUnredeemVouchers is not mutable")) + case "network.project.v1.MsgUnredeemVouchers.projectID": + panic(fmt.Errorf("field projectID of message network.project.v1.MsgUnredeemVouchers is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchers does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUnredeemVouchers) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.MsgUnredeemVouchers.sender": + return protoreflect.ValueOfString("") + case "network.project.v1.MsgUnredeemVouchers.projectID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.project.v1.MsgUnredeemVouchers.shares": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgUnredeemVouchers_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchers")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchers does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUnredeemVouchers) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgUnredeemVouchers", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUnredeemVouchers) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUnredeemVouchers) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUnredeemVouchers) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUnredeemVouchers) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUnredeemVouchers) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Sender) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.ProjectID != 0 { + n += 1 + runtime.Sov(uint64(x.ProjectID)) + } + if len(x.Shares) > 0 { + for _, e := range x.Shares { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUnredeemVouchers) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Shares) > 0 { + for iNdEx := len(x.Shares) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Shares[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if x.ProjectID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProjectID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Sender) > 0 { + i -= len(x.Sender) + copy(dAtA[i:], x.Sender) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Sender))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUnredeemVouchers) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUnredeemVouchers: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUnredeemVouchers: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + x.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Shares = append(x.Shares, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Shares[len(x.Shares)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUnredeemVouchersResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_project_v1_tx_proto_init() + md_MsgUnredeemVouchersResponse = File_network_project_v1_tx_proto.Messages().ByName("MsgUnredeemVouchersResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUnredeemVouchersResponse)(nil) + +type fastReflection_MsgUnredeemVouchersResponse MsgUnredeemVouchersResponse + +func (x *MsgUnredeemVouchersResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUnredeemVouchersResponse)(x) +} + +func (x *MsgUnredeemVouchersResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_tx_proto_msgTypes[19] + 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) +} + +var _fastReflection_MsgUnredeemVouchersResponse_messageType fastReflection_MsgUnredeemVouchersResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUnredeemVouchersResponse_messageType{} + +type fastReflection_MsgUnredeemVouchersResponse_messageType struct{} + +func (x fastReflection_MsgUnredeemVouchersResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUnredeemVouchersResponse)(nil) +} +func (x fastReflection_MsgUnredeemVouchersResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUnredeemVouchersResponse) +} +func (x fastReflection_MsgUnredeemVouchersResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUnredeemVouchersResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUnredeemVouchersResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUnredeemVouchersResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUnredeemVouchersResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUnredeemVouchersResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUnredeemVouchersResponse) New() protoreflect.Message { + return new(fastReflection_MsgUnredeemVouchersResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUnredeemVouchersResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUnredeemVouchersResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUnredeemVouchersResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUnredeemVouchersResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUnredeemVouchersResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUnredeemVouchersResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchersResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUnredeemVouchersResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUnredeemVouchersResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUnredeemVouchersResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.MsgUnredeemVouchersResponse")) + } + panic(fmt.Errorf("message network.project.v1.MsgUnredeemVouchersResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUnredeemVouchersResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.MsgUnredeemVouchersResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUnredeemVouchersResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUnredeemVouchersResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUnredeemVouchersResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUnredeemVouchersResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUnredeemVouchersResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUnredeemVouchersResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUnredeemVouchersResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUnredeemVouchersResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUnredeemVouchersResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/tx.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *MsgUpdateParams) Reset() { + *x = MsgUpdateParams{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParams) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgUpdateParams) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +func (x *MsgUpdateParams) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateParamsResponse) Reset() { + *x = MsgUpdateParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParamsResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{1} +} + +type MsgCreateProject struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + ProjectName string `protobuf:"bytes,2,opt,name=projectName,proto3" json:"projectName,omitempty"` + TotalSupply []*v1beta1.Coin `protobuf:"bytes,3,rep,name=totalSupply,proto3" json:"totalSupply,omitempty"` + Metadata []byte `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *MsgCreateProject) Reset() { + *x = MsgCreateProject{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateProject) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateProject) ProtoMessage() {} + +// Deprecated: Use MsgCreateProject.ProtoReflect.Descriptor instead. +func (*MsgCreateProject) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{2} +} + +func (x *MsgCreateProject) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgCreateProject) GetProjectName() string { + if x != nil { + return x.ProjectName + } + return "" +} + +func (x *MsgCreateProject) GetTotalSupply() []*v1beta1.Coin { + if x != nil { + return x.TotalSupply + } + return nil +} + +func (x *MsgCreateProject) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +type MsgCreateProjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` +} + +func (x *MsgCreateProjectResponse) Reset() { + *x = MsgCreateProjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgCreateProjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgCreateProjectResponse) ProtoMessage() {} + +// Deprecated: Use MsgCreateProjectResponse.ProtoReflect.Descriptor instead. +func (*MsgCreateProjectResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{3} +} + +func (x *MsgCreateProjectResponse) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +type MsgEditProject struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Metadata []byte `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *MsgEditProject) Reset() { + *x = MsgEditProject{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgEditProject) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgEditProject) ProtoMessage() {} + +// Deprecated: Use MsgEditProject.ProtoReflect.Descriptor instead. +func (*MsgEditProject) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{4} +} + +func (x *MsgEditProject) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgEditProject) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgEditProject) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MsgEditProject) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +type MsgEditProjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgEditProjectResponse) Reset() { + *x = MsgEditProjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgEditProjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgEditProjectResponse) ProtoMessage() {} + +// Deprecated: Use MsgEditProjectResponse.ProtoReflect.Descriptor instead. +func (*MsgEditProjectResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{5} +} + +type MsgUpdateTotalSupply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` + TotalSupplyUpdate []*v1beta1.Coin `protobuf:"bytes,3,rep,name=totalSupplyUpdate,proto3" json:"totalSupplyUpdate,omitempty"` +} + +func (x *MsgUpdateTotalSupply) Reset() { + *x = MsgUpdateTotalSupply{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateTotalSupply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateTotalSupply) ProtoMessage() {} + +// Deprecated: Use MsgUpdateTotalSupply.ProtoReflect.Descriptor instead. +func (*MsgUpdateTotalSupply) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{6} +} + +func (x *MsgUpdateTotalSupply) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgUpdateTotalSupply) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgUpdateTotalSupply) GetTotalSupplyUpdate() []*v1beta1.Coin { + if x != nil { + return x.TotalSupplyUpdate + } + return nil +} + +type MsgUpdateTotalSupplyResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateTotalSupplyResponse) Reset() { + *x = MsgUpdateTotalSupplyResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateTotalSupplyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateTotalSupplyResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateTotalSupplyResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateTotalSupplyResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{7} +} + +type MsgUpdateSpecialAllocations struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` + SpecialAllocations *SpecialAllocations `protobuf:"bytes,3,opt,name=specialAllocations,proto3" json:"specialAllocations,omitempty"` +} + +func (x *MsgUpdateSpecialAllocations) Reset() { + *x = MsgUpdateSpecialAllocations{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateSpecialAllocations) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateSpecialAllocations) ProtoMessage() {} + +// Deprecated: Use MsgUpdateSpecialAllocations.ProtoReflect.Descriptor instead. +func (*MsgUpdateSpecialAllocations) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{8} +} + +func (x *MsgUpdateSpecialAllocations) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgUpdateSpecialAllocations) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgUpdateSpecialAllocations) GetSpecialAllocations() *SpecialAllocations { + if x != nil { + return x.SpecialAllocations + } + return nil +} + +type MsgUpdateSpecialAllocationsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateSpecialAllocationsResponse) Reset() { + *x = MsgUpdateSpecialAllocationsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateSpecialAllocationsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateSpecialAllocationsResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateSpecialAllocationsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateSpecialAllocationsResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{9} +} + +type MsgInitializeMainnet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` + SourceURL string `protobuf:"bytes,3,opt,name=sourceURL,proto3" json:"sourceURL,omitempty"` + SourceHash string `protobuf:"bytes,4,opt,name=sourceHash,proto3" json:"sourceHash,omitempty"` + MainnetChainID string `protobuf:"bytes,5,opt,name=mainnetChainID,proto3" json:"mainnetChainID,omitempty"` +} + +func (x *MsgInitializeMainnet) Reset() { + *x = MsgInitializeMainnet{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgInitializeMainnet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgInitializeMainnet) ProtoMessage() {} + +// Deprecated: Use MsgInitializeMainnet.ProtoReflect.Descriptor instead. +func (*MsgInitializeMainnet) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{10} +} + +func (x *MsgInitializeMainnet) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgInitializeMainnet) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgInitializeMainnet) GetSourceURL() string { + if x != nil { + return x.SourceURL + } + return "" +} + +func (x *MsgInitializeMainnet) GetSourceHash() string { + if x != nil { + return x.SourceHash + } + return "" +} + +func (x *MsgInitializeMainnet) GetMainnetChainID() string { + if x != nil { + return x.MainnetChainID + } + return "" +} + +type MsgInitializeMainnetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MainnetID uint64 `protobuf:"varint,1,opt,name=mainnetID,proto3" json:"mainnetID,omitempty"` +} + +func (x *MsgInitializeMainnetResponse) Reset() { + *x = MsgInitializeMainnetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgInitializeMainnetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgInitializeMainnetResponse) ProtoMessage() {} + +// Deprecated: Use MsgInitializeMainnetResponse.ProtoReflect.Descriptor instead. +func (*MsgInitializeMainnetResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{11} +} + +func (x *MsgInitializeMainnetResponse) GetMainnetID() uint64 { + if x != nil { + return x.MainnetID + } + return 0 +} + +type MsgMintVouchers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` + ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` + Shares []*v1beta1.Coin `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"` +} + +func (x *MsgMintVouchers) Reset() { + *x = MsgMintVouchers{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgMintVouchers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgMintVouchers) ProtoMessage() {} + +// Deprecated: Use MsgMintVouchers.ProtoReflect.Descriptor instead. +func (*MsgMintVouchers) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{12} +} + +func (x *MsgMintVouchers) GetCoordinator() string { + if x != nil { + return x.Coordinator + } + return "" +} + +func (x *MsgMintVouchers) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgMintVouchers) GetShares() []*v1beta1.Coin { + if x != nil { + return x.Shares + } + return nil +} + +type MsgMintVouchersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgMintVouchersResponse) Reset() { + *x = MsgMintVouchersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgMintVouchersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgMintVouchersResponse) ProtoMessage() {} + +// Deprecated: Use MsgMintVouchersResponse.ProtoReflect.Descriptor instead. +func (*MsgMintVouchersResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{13} +} + +type MsgBurnVouchers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` + Vouchers []*v1beta1.Coin `protobuf:"bytes,3,rep,name=vouchers,proto3" json:"vouchers,omitempty"` +} + +func (x *MsgBurnVouchers) Reset() { + *x = MsgBurnVouchers{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgBurnVouchers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgBurnVouchers) ProtoMessage() {} + +// Deprecated: Use MsgBurnVouchers.ProtoReflect.Descriptor instead. +func (*MsgBurnVouchers) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{14} +} + +func (x *MsgBurnVouchers) GetSender() string { + if x != nil { + return x.Sender + } + return "" +} + +func (x *MsgBurnVouchers) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgBurnVouchers) GetVouchers() []*v1beta1.Coin { + if x != nil { + return x.Vouchers + } + return nil +} + +type MsgBurnVouchersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgBurnVouchersResponse) Reset() { + *x = MsgBurnVouchersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgBurnVouchersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgBurnVouchersResponse) ProtoMessage() {} + +// Deprecated: Use MsgBurnVouchersResponse.ProtoReflect.Descriptor instead. +func (*MsgBurnVouchersResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{15} +} + +type MsgRedeemVouchers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` + Account string `protobuf:"bytes,3,opt,name=account,proto3" json:"account,omitempty"` + Vouchers []*v1beta1.Coin `protobuf:"bytes,4,rep,name=vouchers,proto3" json:"vouchers,omitempty"` +} + +func (x *MsgRedeemVouchers) Reset() { + *x = MsgRedeemVouchers{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgRedeemVouchers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgRedeemVouchers) ProtoMessage() {} + +// Deprecated: Use MsgRedeemVouchers.ProtoReflect.Descriptor instead. +func (*MsgRedeemVouchers) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{16} +} + +func (x *MsgRedeemVouchers) GetSender() string { + if x != nil { + return x.Sender + } + return "" +} + +func (x *MsgRedeemVouchers) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgRedeemVouchers) GetAccount() string { + if x != nil { + return x.Account + } + return "" +} + +func (x *MsgRedeemVouchers) GetVouchers() []*v1beta1.Coin { + if x != nil { + return x.Vouchers + } + return nil +} + +type MsgRedeemVouchersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgRedeemVouchersResponse) Reset() { + *x = MsgRedeemVouchersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgRedeemVouchersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgRedeemVouchersResponse) ProtoMessage() {} + +// Deprecated: Use MsgRedeemVouchersResponse.ProtoReflect.Descriptor instead. +func (*MsgRedeemVouchersResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{17} +} + +type MsgUnredeemVouchers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` + Shares []*v1beta1.Coin `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"` +} + +func (x *MsgUnredeemVouchers) Reset() { + *x = MsgUnredeemVouchers{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUnredeemVouchers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUnredeemVouchers) ProtoMessage() {} + +// Deprecated: Use MsgUnredeemVouchers.ProtoReflect.Descriptor instead. +func (*MsgUnredeemVouchers) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{18} +} + +func (x *MsgUnredeemVouchers) GetSender() string { + if x != nil { + return x.Sender + } + return "" +} + +func (x *MsgUnredeemVouchers) GetProjectID() uint64 { + if x != nil { + return x.ProjectID + } + return 0 +} + +func (x *MsgUnredeemVouchers) GetShares() []*v1beta1.Coin { + if x != nil { + return x.Shares + } + return nil +} + +type MsgUnredeemVouchersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUnredeemVouchersResponse) Reset() { + *x = MsgUnredeemVouchersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_tx_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUnredeemVouchersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUnredeemVouchersResponse) ProtoMessage() {} + +// Deprecated: Use MsgUnredeemVouchersResponse.ProtoReflect.Descriptor instead. +func (*MsgUnredeemVouchersResponse) Descriptor() ([]byte, []int) { + return file_network_project_v1_tx_proto_rawDescGZIP(), []int{19} +} + +var File_network_project_v1_tx_proto protoreflect.FileDescriptor + +var file_network_project_v1_tx_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, + 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x2c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbe, 0x01, + 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x06, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x34, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x21, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x4d, + 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, + 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xcf, 0x02, 0x0a, 0x10, 0x4d, 0x73, + 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3a, + 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0xae, 0x01, 0x0a, + 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, + 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, + 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, + 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, + 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x10, 0x82, 0xe7, 0xb0, 0x2a, 0x0b, + 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x38, 0x0a, 0x18, 0x4d, + 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x44, 0x22, 0xac, 0x01, 0x0a, 0x0e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x3a, 0x10, 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbf, + 0x02, 0x0a, 0x14, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, + 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, + 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, + 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, + 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x11, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x10, + 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, + 0x22, 0x1e, 0x0a, 0x1c, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0xe7, 0x01, 0x0a, 0x1b, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x5c, 0x0a, 0x12, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x12, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x10, 0x82, 0xe7, 0xb0, 0x2a, 0x0b, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4d, 0x73, + 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x14, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x52, + 0x4c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, + 0x52, 0x4c, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x61, 0x73, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x61, + 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x69, 0x6e, + 0x6e, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x3a, 0x10, 0x82, 0xe7, 0xb0, 0x2a, + 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x3c, 0x0a, 0x1c, + 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x4d, 0x61, 0x69, + 0x6e, 0x6e, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x49, 0x44, 0x22, 0x82, 0x02, 0x0a, 0x0f, 0x4d, + 0x73, 0x67, 0x4d, 0x69, 0x6e, 0x74, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x12, 0x3a, + 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x9a, + 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x3a, 0x10, 0x82, + 0xe7, 0xb0, 0x2a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, + 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x6e, 0x74, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x02, 0x0a, 0x0f, 0x4d, + 0x73, 0x67, 0x42, 0x75, 0x72, 0x6e, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x12, 0x30, + 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, + 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0xa8, + 0x01, 0x0a, 0x08, 0x76, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, + 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, + 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, + 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, + 0x08, 0x76, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x3a, 0x0b, 0x82, 0xe7, 0xb0, 0x2a, 0x06, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x42, 0x75, 0x72, + 0x6e, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xcf, 0x02, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x56, + 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xa8, 0x01, 0x0a, 0x08, + 0x76, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, + 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, + 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x08, 0x76, 0x6f, + 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x3a, 0x0b, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x22, 0x1b, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, + 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x72, 0x65, 0x64, 0x65, 0x65, 0x6d, + 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x82, 0x01, 0x0a, 0x06, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x9a, + 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x3a, 0x0b, 0x82, + 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x1d, 0x0a, 0x1b, 0x4d, 0x73, + 0x67, 0x55, 0x6e, 0x72, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb5, 0x08, 0x0a, 0x03, 0x4d, 0x73, + 0x67, 0x12, 0x60, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x2c, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0b, 0x45, 0x64, 0x69, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x22, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x45, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x2a, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x28, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x1a, 0x30, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x37, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x41, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6f, 0x0a, 0x11, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x4d, 0x61, 0x69, + 0x6e, 0x6e, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x1a, 0x30, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x4d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x60, 0x0a, 0x0c, 0x4d, 0x69, 0x6e, 0x74, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, + 0x12, 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x6e, 0x74, 0x56, 0x6f, 0x75, + 0x63, 0x68, 0x65, 0x72, 0x73, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, 0x69, + 0x6e, 0x74, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0c, 0x42, 0x75, 0x72, 0x6e, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, + 0x72, 0x73, 0x12, 0x23, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x75, 0x72, 0x6e, 0x56, + 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x1a, 0x2b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x42, 0x75, 0x72, 0x6e, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x56, 0x6f, + 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x12, 0x25, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, + 0x65, 0x64, 0x65, 0x65, 0x6d, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x1a, 0x2d, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x56, 0x6f, 0x75, 0x63, + 0x68, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x10, + 0x55, 0x6e, 0x72, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, + 0x12, 0x27, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x72, 0x65, 0x64, 0x65, 0x65, + 0x6d, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x73, 0x1a, 0x2f, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x55, 0x6e, 0x72, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, + 0x01, 0x42, 0xc7, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x54, 0x78, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_v1_tx_proto_rawDescOnce sync.Once + file_network_project_v1_tx_proto_rawDescData = file_network_project_v1_tx_proto_rawDesc +) + +func file_network_project_v1_tx_proto_rawDescGZIP() []byte { + file_network_project_v1_tx_proto_rawDescOnce.Do(func() { + file_network_project_v1_tx_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_tx_proto_rawDescData) + }) + return file_network_project_v1_tx_proto_rawDescData +} + +var file_network_project_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_network_project_v1_tx_proto_goTypes = []interface{}{ + (*MsgUpdateParams)(nil), // 0: network.project.v1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 1: network.project.v1.MsgUpdateParamsResponse + (*MsgCreateProject)(nil), // 2: network.project.v1.MsgCreateProject + (*MsgCreateProjectResponse)(nil), // 3: network.project.v1.MsgCreateProjectResponse + (*MsgEditProject)(nil), // 4: network.project.v1.MsgEditProject + (*MsgEditProjectResponse)(nil), // 5: network.project.v1.MsgEditProjectResponse + (*MsgUpdateTotalSupply)(nil), // 6: network.project.v1.MsgUpdateTotalSupply + (*MsgUpdateTotalSupplyResponse)(nil), // 7: network.project.v1.MsgUpdateTotalSupplyResponse + (*MsgUpdateSpecialAllocations)(nil), // 8: network.project.v1.MsgUpdateSpecialAllocations + (*MsgUpdateSpecialAllocationsResponse)(nil), // 9: network.project.v1.MsgUpdateSpecialAllocationsResponse + (*MsgInitializeMainnet)(nil), // 10: network.project.v1.MsgInitializeMainnet + (*MsgInitializeMainnetResponse)(nil), // 11: network.project.v1.MsgInitializeMainnetResponse + (*MsgMintVouchers)(nil), // 12: network.project.v1.MsgMintVouchers + (*MsgMintVouchersResponse)(nil), // 13: network.project.v1.MsgMintVouchersResponse + (*MsgBurnVouchers)(nil), // 14: network.project.v1.MsgBurnVouchers + (*MsgBurnVouchersResponse)(nil), // 15: network.project.v1.MsgBurnVouchersResponse + (*MsgRedeemVouchers)(nil), // 16: network.project.v1.MsgRedeemVouchers + (*MsgRedeemVouchersResponse)(nil), // 17: network.project.v1.MsgRedeemVouchersResponse + (*MsgUnredeemVouchers)(nil), // 18: network.project.v1.MsgUnredeemVouchers + (*MsgUnredeemVouchersResponse)(nil), // 19: network.project.v1.MsgUnredeemVouchersResponse + (*Params)(nil), // 20: network.project.v1.Params + (*v1beta1.Coin)(nil), // 21: cosmos.base.v1beta1.Coin + (*SpecialAllocations)(nil), // 22: network.project.v1.SpecialAllocations +} +var file_network_project_v1_tx_proto_depIdxs = []int32{ + 20, // 0: network.project.v1.MsgUpdateParams.params:type_name -> network.project.v1.Params + 21, // 1: network.project.v1.MsgCreateProject.totalSupply:type_name -> cosmos.base.v1beta1.Coin + 21, // 2: network.project.v1.MsgUpdateTotalSupply.totalSupplyUpdate:type_name -> cosmos.base.v1beta1.Coin + 22, // 3: network.project.v1.MsgUpdateSpecialAllocations.specialAllocations:type_name -> network.project.v1.SpecialAllocations + 21, // 4: network.project.v1.MsgMintVouchers.shares:type_name -> cosmos.base.v1beta1.Coin + 21, // 5: network.project.v1.MsgBurnVouchers.vouchers:type_name -> cosmos.base.v1beta1.Coin + 21, // 6: network.project.v1.MsgRedeemVouchers.vouchers:type_name -> cosmos.base.v1beta1.Coin + 21, // 7: network.project.v1.MsgUnredeemVouchers.shares:type_name -> cosmos.base.v1beta1.Coin + 0, // 8: network.project.v1.Msg.UpdateParams:input_type -> network.project.v1.MsgUpdateParams + 2, // 9: network.project.v1.Msg.CreateProject:input_type -> network.project.v1.MsgCreateProject + 4, // 10: network.project.v1.Msg.EditProject:input_type -> network.project.v1.MsgEditProject + 6, // 11: network.project.v1.Msg.UpdateTotalSupply:input_type -> network.project.v1.MsgUpdateTotalSupply + 8, // 12: network.project.v1.Msg.UpdateSpecialAllocations:input_type -> network.project.v1.MsgUpdateSpecialAllocations + 10, // 13: network.project.v1.Msg.InitializeMainnet:input_type -> network.project.v1.MsgInitializeMainnet + 12, // 14: network.project.v1.Msg.MintVouchers:input_type -> network.project.v1.MsgMintVouchers + 14, // 15: network.project.v1.Msg.BurnVouchers:input_type -> network.project.v1.MsgBurnVouchers + 16, // 16: network.project.v1.Msg.RedeemVouchers:input_type -> network.project.v1.MsgRedeemVouchers + 18, // 17: network.project.v1.Msg.UnredeemVouchers:input_type -> network.project.v1.MsgUnredeemVouchers + 1, // 18: network.project.v1.Msg.UpdateParams:output_type -> network.project.v1.MsgUpdateParamsResponse + 3, // 19: network.project.v1.Msg.CreateProject:output_type -> network.project.v1.MsgCreateProjectResponse + 5, // 20: network.project.v1.Msg.EditProject:output_type -> network.project.v1.MsgEditProjectResponse + 7, // 21: network.project.v1.Msg.UpdateTotalSupply:output_type -> network.project.v1.MsgUpdateTotalSupplyResponse + 9, // 22: network.project.v1.Msg.UpdateSpecialAllocations:output_type -> network.project.v1.MsgUpdateSpecialAllocationsResponse + 11, // 23: network.project.v1.Msg.InitializeMainnet:output_type -> network.project.v1.MsgInitializeMainnetResponse + 13, // 24: network.project.v1.Msg.MintVouchers:output_type -> network.project.v1.MsgMintVouchersResponse + 15, // 25: network.project.v1.Msg.BurnVouchers:output_type -> network.project.v1.MsgBurnVouchersResponse + 17, // 26: network.project.v1.Msg.RedeemVouchers:output_type -> network.project.v1.MsgRedeemVouchersResponse + 19, // 27: network.project.v1.Msg.UnredeemVouchers:output_type -> network.project.v1.MsgUnredeemVouchersResponse + 18, // [18:28] is the sub-list for method output_type + 8, // [8:18] 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 +} + +func init() { file_network_project_v1_tx_proto_init() } +func file_network_project_v1_tx_proto_init() { + if File_network_project_v1_tx_proto != nil { + return + } + file_network_project_v1_params_proto_init() + file_network_project_v1_special_allocations_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_project_v1_tx_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgCreateProject); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgCreateProjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgEditProject); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgEditProjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateTotalSupply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateTotalSupplyResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateSpecialAllocations); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateSpecialAllocationsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgInitializeMainnet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgInitializeMainnetResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgMintVouchers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgMintVouchersResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgBurnVouchers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgBurnVouchersResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgRedeemVouchers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgRedeemVouchersResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUnredeemVouchers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_tx_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUnredeemVouchersResponse); 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_network_project_v1_tx_proto_rawDesc, + NumEnums: 0, + NumMessages: 20, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_project_v1_tx_proto_goTypes, + DependencyIndexes: file_network_project_v1_tx_proto_depIdxs, + MessageInfos: file_network_project_v1_tx_proto_msgTypes, + }.Build() + File_network_project_v1_tx_proto = out.File + file_network_project_v1_tx_proto_rawDesc = nil + file_network_project_v1_tx_proto_goTypes = nil + file_network_project_v1_tx_proto_depIdxs = nil +} diff --git a/api/network/project/v1/tx_grpc.pb.go b/api/network/project/v1/tx_grpc.pb.go new file mode 100644 index 00000000..33fabb0a --- /dev/null +++ b/api/network/project/v1/tx_grpc.pb.go @@ -0,0 +1,446 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/project/v1/tx.proto + +package projectv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Msg_UpdateParams_FullMethodName = "/network.project.v1.Msg/UpdateParams" + Msg_CreateProject_FullMethodName = "/network.project.v1.Msg/CreateProject" + Msg_EditProject_FullMethodName = "/network.project.v1.Msg/EditProject" + Msg_UpdateTotalSupply_FullMethodName = "/network.project.v1.Msg/UpdateTotalSupply" + Msg_UpdateSpecialAllocations_FullMethodName = "/network.project.v1.Msg/UpdateSpecialAllocations" + Msg_InitializeMainnet_FullMethodName = "/network.project.v1.Msg/InitializeMainnet" + Msg_MintVouchers_FullMethodName = "/network.project.v1.Msg/MintVouchers" + Msg_BurnVouchers_FullMethodName = "/network.project.v1.Msg/BurnVouchers" + Msg_RedeemVouchers_FullMethodName = "/network.project.v1.Msg/RedeemVouchers" + Msg_UnredeemVouchers_FullMethodName = "/network.project.v1.Msg/UnredeemVouchers" +) + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + CreateProject(ctx context.Context, in *MsgCreateProject, opts ...grpc.CallOption) (*MsgCreateProjectResponse, error) + EditProject(ctx context.Context, in *MsgEditProject, opts ...grpc.CallOption) (*MsgEditProjectResponse, error) + UpdateTotalSupply(ctx context.Context, in *MsgUpdateTotalSupply, opts ...grpc.CallOption) (*MsgUpdateTotalSupplyResponse, error) + UpdateSpecialAllocations(ctx context.Context, in *MsgUpdateSpecialAllocations, opts ...grpc.CallOption) (*MsgUpdateSpecialAllocationsResponse, error) + InitializeMainnet(ctx context.Context, in *MsgInitializeMainnet, opts ...grpc.CallOption) (*MsgInitializeMainnetResponse, error) + MintVouchers(ctx context.Context, in *MsgMintVouchers, opts ...grpc.CallOption) (*MsgMintVouchersResponse, error) + BurnVouchers(ctx context.Context, in *MsgBurnVouchers, opts ...grpc.CallOption) (*MsgBurnVouchersResponse, error) + RedeemVouchers(ctx context.Context, in *MsgRedeemVouchers, opts ...grpc.CallOption) (*MsgRedeemVouchersResponse, error) + UnredeemVouchers(ctx context.Context, in *MsgUnredeemVouchers, opts ...grpc.CallOption) (*MsgUnredeemVouchersResponse, error) +} + +type msgClient struct { + cc grpc.ClientConnInterface +} + +func NewMsgClient(cc grpc.ClientConnInterface) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, Msg_UpdateParams_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CreateProject(ctx context.Context, in *MsgCreateProject, opts ...grpc.CallOption) (*MsgCreateProjectResponse, error) { + out := new(MsgCreateProjectResponse) + err := c.cc.Invoke(ctx, Msg_CreateProject_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) EditProject(ctx context.Context, in *MsgEditProject, opts ...grpc.CallOption) (*MsgEditProjectResponse, error) { + out := new(MsgEditProjectResponse) + err := c.cc.Invoke(ctx, Msg_EditProject_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateTotalSupply(ctx context.Context, in *MsgUpdateTotalSupply, opts ...grpc.CallOption) (*MsgUpdateTotalSupplyResponse, error) { + out := new(MsgUpdateTotalSupplyResponse) + err := c.cc.Invoke(ctx, Msg_UpdateTotalSupply_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateSpecialAllocations(ctx context.Context, in *MsgUpdateSpecialAllocations, opts ...grpc.CallOption) (*MsgUpdateSpecialAllocationsResponse, error) { + out := new(MsgUpdateSpecialAllocationsResponse) + err := c.cc.Invoke(ctx, Msg_UpdateSpecialAllocations_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) InitializeMainnet(ctx context.Context, in *MsgInitializeMainnet, opts ...grpc.CallOption) (*MsgInitializeMainnetResponse, error) { + out := new(MsgInitializeMainnetResponse) + err := c.cc.Invoke(ctx, Msg_InitializeMainnet_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) MintVouchers(ctx context.Context, in *MsgMintVouchers, opts ...grpc.CallOption) (*MsgMintVouchersResponse, error) { + out := new(MsgMintVouchersResponse) + err := c.cc.Invoke(ctx, Msg_MintVouchers_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) BurnVouchers(ctx context.Context, in *MsgBurnVouchers, opts ...grpc.CallOption) (*MsgBurnVouchersResponse, error) { + out := new(MsgBurnVouchersResponse) + err := c.cc.Invoke(ctx, Msg_BurnVouchers_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RedeemVouchers(ctx context.Context, in *MsgRedeemVouchers, opts ...grpc.CallOption) (*MsgRedeemVouchersResponse, error) { + out := new(MsgRedeemVouchersResponse) + err := c.cc.Invoke(ctx, Msg_RedeemVouchers_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UnredeemVouchers(ctx context.Context, in *MsgUnredeemVouchers, opts ...grpc.CallOption) (*MsgUnredeemVouchersResponse, error) { + out := new(MsgUnredeemVouchersResponse) + err := c.cc.Invoke(ctx, Msg_UnredeemVouchers_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +// All implementations must embed UnimplementedMsgServer +// for forward compatibility +type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + CreateProject(context.Context, *MsgCreateProject) (*MsgCreateProjectResponse, error) + EditProject(context.Context, *MsgEditProject) (*MsgEditProjectResponse, error) + UpdateTotalSupply(context.Context, *MsgUpdateTotalSupply) (*MsgUpdateTotalSupplyResponse, error) + UpdateSpecialAllocations(context.Context, *MsgUpdateSpecialAllocations) (*MsgUpdateSpecialAllocationsResponse, error) + InitializeMainnet(context.Context, *MsgInitializeMainnet) (*MsgInitializeMainnetResponse, error) + MintVouchers(context.Context, *MsgMintVouchers) (*MsgMintVouchersResponse, error) + BurnVouchers(context.Context, *MsgBurnVouchers) (*MsgBurnVouchersResponse, error) + RedeemVouchers(context.Context, *MsgRedeemVouchers) (*MsgRedeemVouchersResponse, error) + UnredeemVouchers(context.Context, *MsgUnredeemVouchers) (*MsgUnredeemVouchersResponse, error) + mustEmbedUnimplementedMsgServer() +} + +// UnimplementedMsgServer must be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} +func (UnimplementedMsgServer) CreateProject(context.Context, *MsgCreateProject) (*MsgCreateProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateProject not implemented") +} +func (UnimplementedMsgServer) EditProject(context.Context, *MsgEditProject) (*MsgEditProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EditProject not implemented") +} +func (UnimplementedMsgServer) UpdateTotalSupply(context.Context, *MsgUpdateTotalSupply) (*MsgUpdateTotalSupplyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTotalSupply not implemented") +} +func (UnimplementedMsgServer) UpdateSpecialAllocations(context.Context, *MsgUpdateSpecialAllocations) (*MsgUpdateSpecialAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateSpecialAllocations not implemented") +} +func (UnimplementedMsgServer) InitializeMainnet(context.Context, *MsgInitializeMainnet) (*MsgInitializeMainnetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InitializeMainnet not implemented") +} +func (UnimplementedMsgServer) MintVouchers(context.Context, *MsgMintVouchers) (*MsgMintVouchersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MintVouchers not implemented") +} +func (UnimplementedMsgServer) BurnVouchers(context.Context, *MsgBurnVouchers) (*MsgBurnVouchersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BurnVouchers not implemented") +} +func (UnimplementedMsgServer) RedeemVouchers(context.Context, *MsgRedeemVouchers) (*MsgRedeemVouchersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RedeemVouchers not implemented") +} +func (UnimplementedMsgServer) UnredeemVouchers(context.Context, *MsgUnredeemVouchers) (*MsgUnredeemVouchersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UnredeemVouchers not implemented") +} +func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} + +// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MsgServer will +// result in compilation errors. +type UnsafeMsgServer interface { + mustEmbedUnimplementedMsgServer() +} + +func RegisterMsgServer(s grpc.ServiceRegistrar, srv MsgServer) { + s.RegisterService(&Msg_ServiceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateParams_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CreateProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateProject) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateProject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_CreateProject_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateProject(ctx, req.(*MsgCreateProject)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_EditProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgEditProject) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).EditProject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_EditProject_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).EditProject(ctx, req.(*MsgEditProject)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateTotalSupply_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateTotalSupply) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateTotalSupply(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateTotalSupply_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateTotalSupply(ctx, req.(*MsgUpdateTotalSupply)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateSpecialAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateSpecialAllocations) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateSpecialAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateSpecialAllocations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateSpecialAllocations(ctx, req.(*MsgUpdateSpecialAllocations)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_InitializeMainnet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgInitializeMainnet) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).InitializeMainnet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_InitializeMainnet_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).InitializeMainnet(ctx, req.(*MsgInitializeMainnet)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_MintVouchers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgMintVouchers) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).MintVouchers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_MintVouchers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).MintVouchers(ctx, req.(*MsgMintVouchers)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_BurnVouchers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgBurnVouchers) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).BurnVouchers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_BurnVouchers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).BurnVouchers(ctx, req.(*MsgBurnVouchers)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RedeemVouchers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRedeemVouchers) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RedeemVouchers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_RedeemVouchers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RedeemVouchers(ctx, req.(*MsgRedeemVouchers)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UnredeemVouchers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUnredeemVouchers) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UnredeemVouchers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UnredeemVouchers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UnredeemVouchers(ctx, req.(*MsgUnredeemVouchers)) + } + return interceptor(ctx, in, info, handler) +} + +// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Msg_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.project.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + { + MethodName: "CreateProject", + Handler: _Msg_CreateProject_Handler, + }, + { + MethodName: "EditProject", + Handler: _Msg_EditProject_Handler, + }, + { + MethodName: "UpdateTotalSupply", + Handler: _Msg_UpdateTotalSupply_Handler, + }, + { + MethodName: "UpdateSpecialAllocations", + Handler: _Msg_UpdateSpecialAllocations_Handler, + }, + { + MethodName: "InitializeMainnet", + Handler: _Msg_InitializeMainnet_Handler, + }, + { + MethodName: "MintVouchers", + Handler: _Msg_MintVouchers_Handler, + }, + { + MethodName: "BurnVouchers", + Handler: _Msg_BurnVouchers_Handler, + }, + { + MethodName: "RedeemVouchers", + Handler: _Msg_RedeemVouchers_Handler, + }, + { + MethodName: "UnredeemVouchers", + Handler: _Msg_UnredeemVouchers_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/project/v1/tx.proto", +} diff --git a/api/network/project/v1/vesting.pulsar.go b/api/network/project/v1/vesting.pulsar.go new file mode 100644 index 00000000..f4f3684d --- /dev/null +++ b/api/network/project/v1/vesting.pulsar.go @@ -0,0 +1,1471 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package projectv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_ShareVestingOptions protoreflect.MessageDescriptor + fd_ShareVestingOptions_delayedVesting protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_vesting_proto_init() + md_ShareVestingOptions = File_network_project_v1_vesting_proto.Messages().ByName("ShareVestingOptions") + fd_ShareVestingOptions_delayedVesting = md_ShareVestingOptions.Fields().ByName("delayedVesting") +} + +var _ protoreflect.Message = (*fastReflection_ShareVestingOptions)(nil) + +type fastReflection_ShareVestingOptions ShareVestingOptions + +func (x *ShareVestingOptions) ProtoReflect() protoreflect.Message { + return (*fastReflection_ShareVestingOptions)(x) +} + +func (x *ShareVestingOptions) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_vesting_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) +} + +var _fastReflection_ShareVestingOptions_messageType fastReflection_ShareVestingOptions_messageType +var _ protoreflect.MessageType = fastReflection_ShareVestingOptions_messageType{} + +type fastReflection_ShareVestingOptions_messageType struct{} + +func (x fastReflection_ShareVestingOptions_messageType) Zero() protoreflect.Message { + return (*fastReflection_ShareVestingOptions)(nil) +} +func (x fastReflection_ShareVestingOptions_messageType) New() protoreflect.Message { + return new(fastReflection_ShareVestingOptions) +} +func (x fastReflection_ShareVestingOptions_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ShareVestingOptions +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ShareVestingOptions) Descriptor() protoreflect.MessageDescriptor { + return md_ShareVestingOptions +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ShareVestingOptions) Type() protoreflect.MessageType { + return _fastReflection_ShareVestingOptions_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ShareVestingOptions) New() protoreflect.Message { + return new(fastReflection_ShareVestingOptions) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ShareVestingOptions) Interface() protoreflect.ProtoMessage { + return (*ShareVestingOptions)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ShareVestingOptions) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Options != nil { + switch o := x.Options.(type) { + case *ShareVestingOptions_DelayedVesting: + v := o.DelayedVesting + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_ShareVestingOptions_delayedVesting, value) { + return + } + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ShareVestingOptions) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.ShareVestingOptions.delayedVesting": + if x.Options == nil { + return false + } else if _, ok := x.Options.(*ShareVestingOptions_DelayedVesting); ok { + return true + } else { + return false + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareVestingOptions")) + } + panic(fmt.Errorf("message network.project.v1.ShareVestingOptions does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ShareVestingOptions) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.ShareVestingOptions.delayedVesting": + x.Options = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareVestingOptions")) + } + panic(fmt.Errorf("message network.project.v1.ShareVestingOptions does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ShareVestingOptions) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.ShareVestingOptions.delayedVesting": + if x.Options == nil { + return protoreflect.ValueOfMessage((*ShareDelayedVesting)(nil).ProtoReflect()) + } else if v, ok := x.Options.(*ShareVestingOptions_DelayedVesting); ok { + return protoreflect.ValueOfMessage(v.DelayedVesting.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*ShareDelayedVesting)(nil).ProtoReflect()) + } + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareVestingOptions")) + } + panic(fmt.Errorf("message network.project.v1.ShareVestingOptions does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ShareVestingOptions) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.ShareVestingOptions.delayedVesting": + cv := value.Message().Interface().(*ShareDelayedVesting) + x.Options = &ShareVestingOptions_DelayedVesting{DelayedVesting: cv} + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareVestingOptions")) + } + panic(fmt.Errorf("message network.project.v1.ShareVestingOptions does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ShareVestingOptions) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.ShareVestingOptions.delayedVesting": + if x.Options == nil { + value := &ShareDelayedVesting{} + oneofValue := &ShareVestingOptions_DelayedVesting{DelayedVesting: value} + x.Options = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Options.(type) { + case *ShareVestingOptions_DelayedVesting: + return protoreflect.ValueOfMessage(m.DelayedVesting.ProtoReflect()) + default: + value := &ShareDelayedVesting{} + oneofValue := &ShareVestingOptions_DelayedVesting{DelayedVesting: value} + x.Options = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareVestingOptions")) + } + panic(fmt.Errorf("message network.project.v1.ShareVestingOptions does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ShareVestingOptions) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.ShareVestingOptions.delayedVesting": + value := &ShareDelayedVesting{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareVestingOptions")) + } + panic(fmt.Errorf("message network.project.v1.ShareVestingOptions does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ShareVestingOptions) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + case "network.project.v1.ShareVestingOptions.options": + if x.Options == nil { + return nil + } + switch x.Options.(type) { + case *ShareVestingOptions_DelayedVesting: + return x.Descriptor().Fields().ByName("delayedVesting") + } + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.ShareVestingOptions", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ShareVestingOptions) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ShareVestingOptions) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ShareVestingOptions) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ShareVestingOptions) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ShareVestingOptions) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + switch x := x.Options.(type) { + case *ShareVestingOptions_DelayedVesting: + if x == nil { + break + } + l = options.Size(x.DelayedVesting) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ShareVestingOptions) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + switch x := x.Options.(type) { + case *ShareVestingOptions_DelayedVesting: + encoded, err := options.Marshal(x.DelayedVesting) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ShareVestingOptions) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ShareVestingOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ShareVestingOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field DelayedVesting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &ShareDelayedVesting{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Options = &ShareVestingOptions_DelayedVesting{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_ShareDelayedVesting_1_list)(nil) + +type _ShareDelayedVesting_1_list struct { + list *[]*v1beta1.Coin +} + +func (x *_ShareDelayedVesting_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ShareDelayedVesting_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_ShareDelayedVesting_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_ShareDelayedVesting_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_ShareDelayedVesting_1_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_ShareDelayedVesting_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_ShareDelayedVesting_1_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_ShareDelayedVesting_1_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_ShareDelayedVesting_2_list)(nil) + +type _ShareDelayedVesting_2_list struct { + list *[]*v1beta1.Coin +} + +func (x *_ShareDelayedVesting_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ShareDelayedVesting_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_ShareDelayedVesting_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_ShareDelayedVesting_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_ShareDelayedVesting_2_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_ShareDelayedVesting_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_ShareDelayedVesting_2_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_ShareDelayedVesting_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_ShareDelayedVesting protoreflect.MessageDescriptor + fd_ShareDelayedVesting_totalShares protoreflect.FieldDescriptor + fd_ShareDelayedVesting_vesting protoreflect.FieldDescriptor + fd_ShareDelayedVesting_endTime protoreflect.FieldDescriptor +) + +func init() { + file_network_project_v1_vesting_proto_init() + md_ShareDelayedVesting = File_network_project_v1_vesting_proto.Messages().ByName("ShareDelayedVesting") + fd_ShareDelayedVesting_totalShares = md_ShareDelayedVesting.Fields().ByName("totalShares") + fd_ShareDelayedVesting_vesting = md_ShareDelayedVesting.Fields().ByName("vesting") + fd_ShareDelayedVesting_endTime = md_ShareDelayedVesting.Fields().ByName("endTime") +} + +var _ protoreflect.Message = (*fastReflection_ShareDelayedVesting)(nil) + +type fastReflection_ShareDelayedVesting ShareDelayedVesting + +func (x *ShareDelayedVesting) ProtoReflect() protoreflect.Message { + return (*fastReflection_ShareDelayedVesting)(x) +} + +func (x *ShareDelayedVesting) slowProtoReflect() protoreflect.Message { + mi := &file_network_project_v1_vesting_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) +} + +var _fastReflection_ShareDelayedVesting_messageType fastReflection_ShareDelayedVesting_messageType +var _ protoreflect.MessageType = fastReflection_ShareDelayedVesting_messageType{} + +type fastReflection_ShareDelayedVesting_messageType struct{} + +func (x fastReflection_ShareDelayedVesting_messageType) Zero() protoreflect.Message { + return (*fastReflection_ShareDelayedVesting)(nil) +} +func (x fastReflection_ShareDelayedVesting_messageType) New() protoreflect.Message { + return new(fastReflection_ShareDelayedVesting) +} +func (x fastReflection_ShareDelayedVesting_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ShareDelayedVesting +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ShareDelayedVesting) Descriptor() protoreflect.MessageDescriptor { + return md_ShareDelayedVesting +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ShareDelayedVesting) Type() protoreflect.MessageType { + return _fastReflection_ShareDelayedVesting_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ShareDelayedVesting) New() protoreflect.Message { + return new(fastReflection_ShareDelayedVesting) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ShareDelayedVesting) Interface() protoreflect.ProtoMessage { + return (*ShareDelayedVesting)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ShareDelayedVesting) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.TotalShares) != 0 { + value := protoreflect.ValueOfList(&_ShareDelayedVesting_1_list{list: &x.TotalShares}) + if !f(fd_ShareDelayedVesting_totalShares, value) { + return + } + } + if len(x.Vesting) != 0 { + value := protoreflect.ValueOfList(&_ShareDelayedVesting_2_list{list: &x.Vesting}) + if !f(fd_ShareDelayedVesting_vesting, value) { + return + } + } + if x.EndTime != nil { + value := protoreflect.ValueOfMessage(x.EndTime.ProtoReflect()) + if !f(fd_ShareDelayedVesting_endTime, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ShareDelayedVesting) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.project.v1.ShareDelayedVesting.totalShares": + return len(x.TotalShares) != 0 + case "network.project.v1.ShareDelayedVesting.vesting": + return len(x.Vesting) != 0 + case "network.project.v1.ShareDelayedVesting.endTime": + return x.EndTime != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareDelayedVesting")) + } + panic(fmt.Errorf("message network.project.v1.ShareDelayedVesting does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ShareDelayedVesting) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.project.v1.ShareDelayedVesting.totalShares": + x.TotalShares = nil + case "network.project.v1.ShareDelayedVesting.vesting": + x.Vesting = nil + case "network.project.v1.ShareDelayedVesting.endTime": + x.EndTime = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareDelayedVesting")) + } + panic(fmt.Errorf("message network.project.v1.ShareDelayedVesting does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ShareDelayedVesting) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.project.v1.ShareDelayedVesting.totalShares": + if len(x.TotalShares) == 0 { + return protoreflect.ValueOfList(&_ShareDelayedVesting_1_list{}) + } + listValue := &_ShareDelayedVesting_1_list{list: &x.TotalShares} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.ShareDelayedVesting.vesting": + if len(x.Vesting) == 0 { + return protoreflect.ValueOfList(&_ShareDelayedVesting_2_list{}) + } + listValue := &_ShareDelayedVesting_2_list{list: &x.Vesting} + return protoreflect.ValueOfList(listValue) + case "network.project.v1.ShareDelayedVesting.endTime": + value := x.EndTime + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareDelayedVesting")) + } + panic(fmt.Errorf("message network.project.v1.ShareDelayedVesting does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ShareDelayedVesting) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.project.v1.ShareDelayedVesting.totalShares": + lv := value.List() + clv := lv.(*_ShareDelayedVesting_1_list) + x.TotalShares = *clv.list + case "network.project.v1.ShareDelayedVesting.vesting": + lv := value.List() + clv := lv.(*_ShareDelayedVesting_2_list) + x.Vesting = *clv.list + case "network.project.v1.ShareDelayedVesting.endTime": + x.EndTime = value.Message().Interface().(*timestamppb.Timestamp) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareDelayedVesting")) + } + panic(fmt.Errorf("message network.project.v1.ShareDelayedVesting does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ShareDelayedVesting) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.ShareDelayedVesting.totalShares": + if x.TotalShares == nil { + x.TotalShares = []*v1beta1.Coin{} + } + value := &_ShareDelayedVesting_1_list{list: &x.TotalShares} + return protoreflect.ValueOfList(value) + case "network.project.v1.ShareDelayedVesting.vesting": + if x.Vesting == nil { + x.Vesting = []*v1beta1.Coin{} + } + value := &_ShareDelayedVesting_2_list{list: &x.Vesting} + return protoreflect.ValueOfList(value) + case "network.project.v1.ShareDelayedVesting.endTime": + if x.EndTime == nil { + x.EndTime = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.EndTime.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareDelayedVesting")) + } + panic(fmt.Errorf("message network.project.v1.ShareDelayedVesting does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ShareDelayedVesting) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.project.v1.ShareDelayedVesting.totalShares": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_ShareDelayedVesting_1_list{list: &list}) + case "network.project.v1.ShareDelayedVesting.vesting": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_ShareDelayedVesting_2_list{list: &list}) + case "network.project.v1.ShareDelayedVesting.endTime": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.project.v1.ShareDelayedVesting")) + } + panic(fmt.Errorf("message network.project.v1.ShareDelayedVesting does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ShareDelayedVesting) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.project.v1.ShareDelayedVesting", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ShareDelayedVesting) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ShareDelayedVesting) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ShareDelayedVesting) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ShareDelayedVesting) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ShareDelayedVesting) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.TotalShares) > 0 { + for _, e := range x.TotalShares { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.Vesting) > 0 { + for _, e := range x.Vesting { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.EndTime != nil { + l = options.Size(x.EndTime) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ShareDelayedVesting) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.EndTime != nil { + encoded, err := options.Marshal(x.EndTime) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Vesting) > 0 { + for iNdEx := len(x.Vesting) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Vesting[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.TotalShares) > 0 { + for iNdEx := len(x.TotalShares) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.TotalShares[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ShareDelayedVesting) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ShareDelayedVesting: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ShareDelayedVesting: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TotalShares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TotalShares = append(x.TotalShares, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.TotalShares[len(x.TotalShares)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Vesting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Vesting = append(x.Vesting, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Vesting[len(x.Vesting)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.EndTime == nil { + x.EndTime = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.EndTime); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/project/v1/vesting.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ShareVestingOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Options: + // + // *ShareVestingOptions_DelayedVesting + Options isShareVestingOptions_Options `protobuf_oneof:"options"` +} + +func (x *ShareVestingOptions) Reset() { + *x = ShareVestingOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_vesting_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShareVestingOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShareVestingOptions) ProtoMessage() {} + +// Deprecated: Use ShareVestingOptions.ProtoReflect.Descriptor instead. +func (*ShareVestingOptions) Descriptor() ([]byte, []int) { + return file_network_project_v1_vesting_proto_rawDescGZIP(), []int{0} +} + +func (x *ShareVestingOptions) GetOptions() isShareVestingOptions_Options { + if x != nil { + return x.Options + } + return nil +} + +func (x *ShareVestingOptions) GetDelayedVesting() *ShareDelayedVesting { + if x, ok := x.GetOptions().(*ShareVestingOptions_DelayedVesting); ok { + return x.DelayedVesting + } + return nil +} + +type isShareVestingOptions_Options interface { + isShareVestingOptions_Options() +} + +type ShareVestingOptions_DelayedVesting struct { + DelayedVesting *ShareDelayedVesting `protobuf:"bytes,1,opt,name=delayedVesting,proto3,oneof"` +} + +func (*ShareVestingOptions_DelayedVesting) isShareVestingOptions_Options() {} + +// ShareDelayedVesting represents options for share delayed vesting +// Delayed vesting is the type of vesting where all vesting coins are vested +// once end time is reached +type ShareDelayedVesting struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TotalShares []*v1beta1.Coin `protobuf:"bytes,1,rep,name=totalShares,proto3" json:"totalShares,omitempty"` + Vesting []*v1beta1.Coin `protobuf:"bytes,2,rep,name=vesting,proto3" json:"vesting,omitempty"` + EndTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=endTime,proto3" json:"endTime,omitempty"` +} + +func (x *ShareDelayedVesting) Reset() { + *x = ShareDelayedVesting{} + if protoimpl.UnsafeEnabled { + mi := &file_network_project_v1_vesting_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShareDelayedVesting) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShareDelayedVesting) ProtoMessage() {} + +// Deprecated: Use ShareDelayedVesting.ProtoReflect.Descriptor instead. +func (*ShareDelayedVesting) Descriptor() ([]byte, []int) { + return file_network_project_v1_vesting_proto_rawDescGZIP(), []int{1} +} + +func (x *ShareDelayedVesting) GetTotalShares() []*v1beta1.Coin { + if x != nil { + return x.TotalShares + } + return nil +} + +func (x *ShareDelayedVesting) GetVesting() []*v1beta1.Coin { + if x != nil { + return x.Vesting + } + return nil +} + +func (x *ShareDelayedVesting) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + +var File_network_project_v1_vesting_proto protoreflect.FileDescriptor + +var file_network_project_v1_vesting_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, + 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x61, + 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x73, 0x0a, 0x13, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x56, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x56, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x56, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0xeb, 0x02, 0x0a, 0x13, 0x53, 0x68, 0x61, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, + 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, + 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x07, 0x76, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x4f, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x06, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x9a, + 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x3e, + 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, + 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x42, 0xcc, + 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x56, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x50, 0x58, 0xaa, 0x02, 0x12, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x31, + 0xca, 0x02, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_project_v1_vesting_proto_rawDescOnce sync.Once + file_network_project_v1_vesting_proto_rawDescData = file_network_project_v1_vesting_proto_rawDesc +) + +func file_network_project_v1_vesting_proto_rawDescGZIP() []byte { + file_network_project_v1_vesting_proto_rawDescOnce.Do(func() { + file_network_project_v1_vesting_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_project_v1_vesting_proto_rawDescData) + }) + return file_network_project_v1_vesting_proto_rawDescData +} + +var file_network_project_v1_vesting_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_network_project_v1_vesting_proto_goTypes = []interface{}{ + (*ShareVestingOptions)(nil), // 0: network.project.v1.ShareVestingOptions + (*ShareDelayedVesting)(nil), // 1: network.project.v1.ShareDelayedVesting + (*v1beta1.Coin)(nil), // 2: cosmos.base.v1beta1.Coin + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp +} +var file_network_project_v1_vesting_proto_depIdxs = []int32{ + 1, // 0: network.project.v1.ShareVestingOptions.delayedVesting:type_name -> network.project.v1.ShareDelayedVesting + 2, // 1: network.project.v1.ShareDelayedVesting.totalShares:type_name -> cosmos.base.v1beta1.Coin + 2, // 2: network.project.v1.ShareDelayedVesting.vesting:type_name -> cosmos.base.v1beta1.Coin + 3, // 3: network.project.v1.ShareDelayedVesting.endTime:type_name -> google.protobuf.Timestamp + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] 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_network_project_v1_vesting_proto_init() } +func file_network_project_v1_vesting_proto_init() { + if File_network_project_v1_vesting_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_project_v1_vesting_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShareVestingOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_project_v1_vesting_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShareDelayedVesting); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_network_project_v1_vesting_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*ShareVestingOptions_DelayedVesting)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_project_v1_vesting_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_project_v1_vesting_proto_goTypes, + DependencyIndexes: file_network_project_v1_vesting_proto_depIdxs, + MessageInfos: file_network_project_v1_vesting_proto_msgTypes, + }.Build() + File_network_project_v1_vesting_proto = out.File + file_network_project_v1_vesting_proto_rawDesc = nil + file_network_project_v1_vesting_proto_goTypes = nil + file_network_project_v1_vesting_proto_depIdxs = nil +} diff --git a/api/network/reward/module/v1/module.pulsar.go b/api/network/reward/module/v1/module.pulsar.go new file mode 100644 index 00000000..29789b54 --- /dev/null +++ b/api/network/reward/module/v1/module.pulsar.go @@ -0,0 +1,580 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package modulev1 + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Module protoreflect.MessageDescriptor + fd_Module_authority protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_module_v1_module_proto_init() + md_Module = File_network_reward_module_v1_module_proto.Messages().ByName("Module") + fd_Module_authority = md_Module.Fields().ByName("authority") +} + +var _ protoreflect.Message = (*fastReflection_Module)(nil) + +type fastReflection_Module Module + +func (x *Module) ProtoReflect() protoreflect.Message { + return (*fastReflection_Module)(x) +} + +func (x *Module) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_module_v1_module_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) +} + +var _fastReflection_Module_messageType fastReflection_Module_messageType +var _ protoreflect.MessageType = fastReflection_Module_messageType{} + +type fastReflection_Module_messageType struct{} + +func (x fastReflection_Module_messageType) Zero() protoreflect.Message { + return (*fastReflection_Module)(nil) +} +func (x fastReflection_Module_messageType) New() protoreflect.Message { + return new(fastReflection_Module) +} +func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Module) Type() protoreflect.MessageType { + return _fastReflection_Module_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Module) New() protoreflect.Message { + return new(fastReflection_Module) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage { + return (*Module)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_Module_authority, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.module.v1.Module.authority": + return x.Authority != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.module.v1.Module")) + } + panic(fmt.Errorf("message network.reward.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.module.v1.Module.authority": + x.Authority = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.module.v1.Module")) + } + panic(fmt.Errorf("message network.reward.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.module.v1.Module.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.module.v1.Module")) + } + panic(fmt.Errorf("message network.reward.module.v1.Module does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.module.v1.Module.authority": + x.Authority = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.module.v1.Module")) + } + panic(fmt.Errorf("message network.reward.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.module.v1.Module.authority": + panic(fmt.Errorf("field authority of message network.reward.module.v1.Module is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.module.v1.Module")) + } + panic(fmt.Errorf("message network.reward.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.module.v1.Module.authority": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.module.v1.Module")) + } + panic(fmt.Errorf("message network.reward.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.module.v1.Module", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Module) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/reward/module/v1/module.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Module is the config object for the module. +type Module struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (x *Module) Reset() { + *x = Module{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_module_v1_module_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Module) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Module) ProtoMessage() {} + +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { + return file_network_reward_module_v1_module_proto_rawDescGZIP(), []int{0} +} + +func (x *Module) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +var File_network_reward_module_v1_module_proto protoreflect.FileDescriptor + +var file_network_reward_module_v1_module_proto_rawDesc = []byte{ + 0x0a, 0x25, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x52, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x2a, 0xba, 0xc0, 0x96, + 0xda, 0x01, 0x24, 0x0a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, + 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x42, 0xef, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x52, 0x4d, 0xaa, 0x02, + 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x18, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x24, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1b, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_reward_module_v1_module_proto_rawDescOnce sync.Once + file_network_reward_module_v1_module_proto_rawDescData = file_network_reward_module_v1_module_proto_rawDesc +) + +func file_network_reward_module_v1_module_proto_rawDescGZIP() []byte { + file_network_reward_module_v1_module_proto_rawDescOnce.Do(func() { + file_network_reward_module_v1_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_reward_module_v1_module_proto_rawDescData) + }) + return file_network_reward_module_v1_module_proto_rawDescData +} + +var file_network_reward_module_v1_module_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_reward_module_v1_module_proto_goTypes = []interface{}{ + (*Module)(nil), // 0: network.reward.module.v1.Module +} +var file_network_reward_module_v1_module_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 +} + +func init() { file_network_reward_module_v1_module_proto_init() } +func file_network_reward_module_v1_module_proto_init() { + if File_network_reward_module_v1_module_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_reward_module_v1_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Module); 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_network_reward_module_v1_module_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_reward_module_v1_module_proto_goTypes, + DependencyIndexes: file_network_reward_module_v1_module_proto_depIdxs, + MessageInfos: file_network_reward_module_v1_module_proto_msgTypes, + }.Build() + File_network_reward_module_v1_module_proto = out.File + file_network_reward_module_v1_module_proto_rawDesc = nil + file_network_reward_module_v1_module_proto_goTypes = nil + file_network_reward_module_v1_module_proto_depIdxs = nil +} diff --git a/api/network/reward/v1/events.pulsar.go b/api/network/reward/v1/events.pulsar.go new file mode 100644 index 00000000..be0de33f --- /dev/null +++ b/api/network/reward/v1/events.pulsar.go @@ -0,0 +1,1787 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package rewardv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_EventRewardPoolCreated protoreflect.MessageDescriptor + fd_EventRewardPoolCreated_launchID protoreflect.FieldDescriptor + fd_EventRewardPoolCreated_provider protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_events_proto_init() + md_EventRewardPoolCreated = File_network_reward_v1_events_proto.Messages().ByName("EventRewardPoolCreated") + fd_EventRewardPoolCreated_launchID = md_EventRewardPoolCreated.Fields().ByName("launchID") + fd_EventRewardPoolCreated_provider = md_EventRewardPoolCreated.Fields().ByName("provider") +} + +var _ protoreflect.Message = (*fastReflection_EventRewardPoolCreated)(nil) + +type fastReflection_EventRewardPoolCreated EventRewardPoolCreated + +func (x *EventRewardPoolCreated) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventRewardPoolCreated)(x) +} + +func (x *EventRewardPoolCreated) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_events_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) +} + +var _fastReflection_EventRewardPoolCreated_messageType fastReflection_EventRewardPoolCreated_messageType +var _ protoreflect.MessageType = fastReflection_EventRewardPoolCreated_messageType{} + +type fastReflection_EventRewardPoolCreated_messageType struct{} + +func (x fastReflection_EventRewardPoolCreated_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventRewardPoolCreated)(nil) +} +func (x fastReflection_EventRewardPoolCreated_messageType) New() protoreflect.Message { + return new(fastReflection_EventRewardPoolCreated) +} +func (x fastReflection_EventRewardPoolCreated_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventRewardPoolCreated +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventRewardPoolCreated) Descriptor() protoreflect.MessageDescriptor { + return md_EventRewardPoolCreated +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventRewardPoolCreated) Type() protoreflect.MessageType { + return _fastReflection_EventRewardPoolCreated_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventRewardPoolCreated) New() protoreflect.Message { + return new(fastReflection_EventRewardPoolCreated) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventRewardPoolCreated) Interface() protoreflect.ProtoMessage { + return (*EventRewardPoolCreated)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventRewardPoolCreated) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventRewardPoolCreated_launchID, value) { + return + } + } + if x.Provider != "" { + value := protoreflect.ValueOfString(x.Provider) + if !f(fd_EventRewardPoolCreated_provider, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventRewardPoolCreated) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolCreated.launchID": + return x.LaunchID != uint64(0) + case "network.reward.v1.EventRewardPoolCreated.provider": + return x.Provider != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolCreated")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolCreated does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardPoolCreated) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolCreated.launchID": + x.LaunchID = uint64(0) + case "network.reward.v1.EventRewardPoolCreated.provider": + x.Provider = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolCreated")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolCreated does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventRewardPoolCreated) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.EventRewardPoolCreated.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.reward.v1.EventRewardPoolCreated.provider": + value := x.Provider + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolCreated")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolCreated does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardPoolCreated) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolCreated.launchID": + x.LaunchID = value.Uint() + case "network.reward.v1.EventRewardPoolCreated.provider": + x.Provider = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolCreated")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolCreated does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardPoolCreated) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolCreated.launchID": + panic(fmt.Errorf("field launchID of message network.reward.v1.EventRewardPoolCreated is not mutable")) + case "network.reward.v1.EventRewardPoolCreated.provider": + panic(fmt.Errorf("field provider of message network.reward.v1.EventRewardPoolCreated is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolCreated")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolCreated does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventRewardPoolCreated) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolCreated.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.reward.v1.EventRewardPoolCreated.provider": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolCreated")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolCreated does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventRewardPoolCreated) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.EventRewardPoolCreated", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventRewardPoolCreated) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardPoolCreated) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventRewardPoolCreated) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventRewardPoolCreated) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventRewardPoolCreated) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Provider) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventRewardPoolCreated) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Provider) > 0 { + i -= len(x.Provider) + copy(dAtA[i:], x.Provider) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Provider))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventRewardPoolCreated) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRewardPoolCreated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRewardPoolCreated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Provider = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_EventRewardPoolRemoved protoreflect.MessageDescriptor + fd_EventRewardPoolRemoved_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_events_proto_init() + md_EventRewardPoolRemoved = File_network_reward_v1_events_proto.Messages().ByName("EventRewardPoolRemoved") + fd_EventRewardPoolRemoved_launchID = md_EventRewardPoolRemoved.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_EventRewardPoolRemoved)(nil) + +type fastReflection_EventRewardPoolRemoved EventRewardPoolRemoved + +func (x *EventRewardPoolRemoved) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventRewardPoolRemoved)(x) +} + +func (x *EventRewardPoolRemoved) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_events_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) +} + +var _fastReflection_EventRewardPoolRemoved_messageType fastReflection_EventRewardPoolRemoved_messageType +var _ protoreflect.MessageType = fastReflection_EventRewardPoolRemoved_messageType{} + +type fastReflection_EventRewardPoolRemoved_messageType struct{} + +func (x fastReflection_EventRewardPoolRemoved_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventRewardPoolRemoved)(nil) +} +func (x fastReflection_EventRewardPoolRemoved_messageType) New() protoreflect.Message { + return new(fastReflection_EventRewardPoolRemoved) +} +func (x fastReflection_EventRewardPoolRemoved_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventRewardPoolRemoved +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventRewardPoolRemoved) Descriptor() protoreflect.MessageDescriptor { + return md_EventRewardPoolRemoved +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventRewardPoolRemoved) Type() protoreflect.MessageType { + return _fastReflection_EventRewardPoolRemoved_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventRewardPoolRemoved) New() protoreflect.Message { + return new(fastReflection_EventRewardPoolRemoved) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventRewardPoolRemoved) Interface() protoreflect.ProtoMessage { + return (*EventRewardPoolRemoved)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventRewardPoolRemoved) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventRewardPoolRemoved_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventRewardPoolRemoved) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolRemoved.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolRemoved")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolRemoved does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardPoolRemoved) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolRemoved.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolRemoved")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolRemoved does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventRewardPoolRemoved) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.EventRewardPoolRemoved.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolRemoved")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolRemoved does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardPoolRemoved) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolRemoved.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolRemoved")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolRemoved does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardPoolRemoved) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolRemoved.launchID": + panic(fmt.Errorf("field launchID of message network.reward.v1.EventRewardPoolRemoved is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolRemoved")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolRemoved does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventRewardPoolRemoved) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.EventRewardPoolRemoved.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardPoolRemoved")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardPoolRemoved does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventRewardPoolRemoved) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.EventRewardPoolRemoved", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventRewardPoolRemoved) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardPoolRemoved) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventRewardPoolRemoved) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventRewardPoolRemoved) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventRewardPoolRemoved) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventRewardPoolRemoved) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventRewardPoolRemoved) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRewardPoolRemoved: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRewardPoolRemoved: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_EventRewardsDistributed_3_list)(nil) + +type _EventRewardsDistributed_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_EventRewardsDistributed_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_EventRewardsDistributed_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_EventRewardsDistributed_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_EventRewardsDistributed_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_EventRewardsDistributed_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventRewardsDistributed_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_EventRewardsDistributed_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_EventRewardsDistributed_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_EventRewardsDistributed protoreflect.MessageDescriptor + fd_EventRewardsDistributed_launchID protoreflect.FieldDescriptor + fd_EventRewardsDistributed_receiver protoreflect.FieldDescriptor + fd_EventRewardsDistributed_rewards protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_events_proto_init() + md_EventRewardsDistributed = File_network_reward_v1_events_proto.Messages().ByName("EventRewardsDistributed") + fd_EventRewardsDistributed_launchID = md_EventRewardsDistributed.Fields().ByName("launchID") + fd_EventRewardsDistributed_receiver = md_EventRewardsDistributed.Fields().ByName("receiver") + fd_EventRewardsDistributed_rewards = md_EventRewardsDistributed.Fields().ByName("rewards") +} + +var _ protoreflect.Message = (*fastReflection_EventRewardsDistributed)(nil) + +type fastReflection_EventRewardsDistributed EventRewardsDistributed + +func (x *EventRewardsDistributed) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventRewardsDistributed)(x) +} + +func (x *EventRewardsDistributed) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_events_proto_msgTypes[2] + 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) +} + +var _fastReflection_EventRewardsDistributed_messageType fastReflection_EventRewardsDistributed_messageType +var _ protoreflect.MessageType = fastReflection_EventRewardsDistributed_messageType{} + +type fastReflection_EventRewardsDistributed_messageType struct{} + +func (x fastReflection_EventRewardsDistributed_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventRewardsDistributed)(nil) +} +func (x fastReflection_EventRewardsDistributed_messageType) New() protoreflect.Message { + return new(fastReflection_EventRewardsDistributed) +} +func (x fastReflection_EventRewardsDistributed_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventRewardsDistributed +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventRewardsDistributed) Descriptor() protoreflect.MessageDescriptor { + return md_EventRewardsDistributed +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventRewardsDistributed) Type() protoreflect.MessageType { + return _fastReflection_EventRewardsDistributed_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventRewardsDistributed) New() protoreflect.Message { + return new(fastReflection_EventRewardsDistributed) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventRewardsDistributed) Interface() protoreflect.ProtoMessage { + return (*EventRewardsDistributed)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventRewardsDistributed) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_EventRewardsDistributed_launchID, value) { + return + } + } + if x.Receiver != "" { + value := protoreflect.ValueOfString(x.Receiver) + if !f(fd_EventRewardsDistributed_receiver, value) { + return + } + } + if len(x.Rewards) != 0 { + value := protoreflect.ValueOfList(&_EventRewardsDistributed_3_list{list: &x.Rewards}) + if !f(fd_EventRewardsDistributed_rewards, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventRewardsDistributed) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.EventRewardsDistributed.launchID": + return x.LaunchID != uint64(0) + case "network.reward.v1.EventRewardsDistributed.receiver": + return x.Receiver != "" + case "network.reward.v1.EventRewardsDistributed.rewards": + return len(x.Rewards) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardsDistributed")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardsDistributed does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardsDistributed) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.EventRewardsDistributed.launchID": + x.LaunchID = uint64(0) + case "network.reward.v1.EventRewardsDistributed.receiver": + x.Receiver = "" + case "network.reward.v1.EventRewardsDistributed.rewards": + x.Rewards = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardsDistributed")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardsDistributed does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventRewardsDistributed) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.EventRewardsDistributed.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.reward.v1.EventRewardsDistributed.receiver": + value := x.Receiver + return protoreflect.ValueOfString(value) + case "network.reward.v1.EventRewardsDistributed.rewards": + if len(x.Rewards) == 0 { + return protoreflect.ValueOfList(&_EventRewardsDistributed_3_list{}) + } + listValue := &_EventRewardsDistributed_3_list{list: &x.Rewards} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardsDistributed")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardsDistributed does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardsDistributed) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.EventRewardsDistributed.launchID": + x.LaunchID = value.Uint() + case "network.reward.v1.EventRewardsDistributed.receiver": + x.Receiver = value.Interface().(string) + case "network.reward.v1.EventRewardsDistributed.rewards": + lv := value.List() + clv := lv.(*_EventRewardsDistributed_3_list) + x.Rewards = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardsDistributed")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardsDistributed does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardsDistributed) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.EventRewardsDistributed.rewards": + if x.Rewards == nil { + x.Rewards = []*v1beta1.Coin{} + } + value := &_EventRewardsDistributed_3_list{list: &x.Rewards} + return protoreflect.ValueOfList(value) + case "network.reward.v1.EventRewardsDistributed.launchID": + panic(fmt.Errorf("field launchID of message network.reward.v1.EventRewardsDistributed is not mutable")) + case "network.reward.v1.EventRewardsDistributed.receiver": + panic(fmt.Errorf("field receiver of message network.reward.v1.EventRewardsDistributed is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardsDistributed")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardsDistributed does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventRewardsDistributed) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.EventRewardsDistributed.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.reward.v1.EventRewardsDistributed.receiver": + return protoreflect.ValueOfString("") + case "network.reward.v1.EventRewardsDistributed.rewards": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_EventRewardsDistributed_3_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.EventRewardsDistributed")) + } + panic(fmt.Errorf("message network.reward.v1.EventRewardsDistributed does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventRewardsDistributed) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.EventRewardsDistributed", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventRewardsDistributed) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventRewardsDistributed) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventRewardsDistributed) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventRewardsDistributed) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventRewardsDistributed) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Receiver) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Rewards) > 0 { + for _, e := range x.Rewards { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventRewardsDistributed) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Rewards) > 0 { + for iNdEx := len(x.Rewards) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Rewards[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.Receiver) > 0 { + i -= len(x.Receiver) + copy(dAtA[i:], x.Receiver) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Receiver))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventRewardsDistributed) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRewardsDistributed: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventRewardsDistributed: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Rewards", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Rewards = append(x.Rewards, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Rewards[len(x.Rewards)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/reward/v1/events.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EventRewardPoolCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` +} + +func (x *EventRewardPoolCreated) Reset() { + *x = EventRewardPoolCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_events_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventRewardPoolCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventRewardPoolCreated) ProtoMessage() {} + +// Deprecated: Use EventRewardPoolCreated.ProtoReflect.Descriptor instead. +func (*EventRewardPoolCreated) Descriptor() ([]byte, []int) { + return file_network_reward_v1_events_proto_rawDescGZIP(), []int{0} +} + +func (x *EventRewardPoolCreated) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventRewardPoolCreated) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +type EventRewardPoolRemoved struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *EventRewardPoolRemoved) Reset() { + *x = EventRewardPoolRemoved{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_events_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventRewardPoolRemoved) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventRewardPoolRemoved) ProtoMessage() {} + +// Deprecated: Use EventRewardPoolRemoved.ProtoReflect.Descriptor instead. +func (*EventRewardPoolRemoved) Descriptor() ([]byte, []int) { + return file_network_reward_v1_events_proto_rawDescGZIP(), []int{1} +} + +func (x *EventRewardPoolRemoved) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type EventRewardsDistributed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` + Rewards []*v1beta1.Coin `protobuf:"bytes,3,rep,name=rewards,proto3" json:"rewards,omitempty"` +} + +func (x *EventRewardsDistributed) Reset() { + *x = EventRewardsDistributed{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_events_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventRewardsDistributed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventRewardsDistributed) ProtoMessage() {} + +// Deprecated: Use EventRewardsDistributed.ProtoReflect.Descriptor instead. +func (*EventRewardsDistributed) Descriptor() ([]byte, []int) { + return file_network_reward_v1_events_proto_rawDescGZIP(), []int{2} +} + +func (x *EventRewardsDistributed) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *EventRewardsDistributed) GetReceiver() string { + if x != nil { + return x.Receiver + } + return "" +} + +func (x *EventRewardsDistributed) GetRewards() []*v1beta1.Coin { + if x != nil { + return x.Rewards + } + return nil +} + +var File_network_reward_v1_events_proto protoreflect.FileDescriptor + +var file_network_reward_v1_events_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, + 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, 0x0a, 0x16, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x49, 0x44, 0x12, 0x34, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x34, 0x0a, 0x16, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x22, 0x94, + 0x02, 0x0a, 0x17, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x44, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0xa6, 0x01, 0x0a, + 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, + 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, + 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x42, 0xc4, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x42, + 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, + 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x3b, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x52, 0x58, 0xaa, 0x02, + 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x3a, 0x3a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_reward_v1_events_proto_rawDescOnce sync.Once + file_network_reward_v1_events_proto_rawDescData = file_network_reward_v1_events_proto_rawDesc +) + +func file_network_reward_v1_events_proto_rawDescGZIP() []byte { + file_network_reward_v1_events_proto_rawDescOnce.Do(func() { + file_network_reward_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_reward_v1_events_proto_rawDescData) + }) + return file_network_reward_v1_events_proto_rawDescData +} + +var file_network_reward_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_network_reward_v1_events_proto_goTypes = []interface{}{ + (*EventRewardPoolCreated)(nil), // 0: network.reward.v1.EventRewardPoolCreated + (*EventRewardPoolRemoved)(nil), // 1: network.reward.v1.EventRewardPoolRemoved + (*EventRewardsDistributed)(nil), // 2: network.reward.v1.EventRewardsDistributed + (*v1beta1.Coin)(nil), // 3: cosmos.base.v1beta1.Coin +} +var file_network_reward_v1_events_proto_depIdxs = []int32{ + 3, // 0: network.reward.v1.EventRewardsDistributed.rewards:type_name -> cosmos.base.v1beta1.Coin + 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_network_reward_v1_events_proto_init() } +func file_network_reward_v1_events_proto_init() { + if File_network_reward_v1_events_proto != nil { + return + } + file_network_reward_v1_reward_pool_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_reward_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventRewardPoolCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_events_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventRewardPoolRemoved); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_events_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventRewardsDistributed); 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_network_reward_v1_events_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_reward_v1_events_proto_goTypes, + DependencyIndexes: file_network_reward_v1_events_proto_depIdxs, + MessageInfos: file_network_reward_v1_events_proto_msgTypes, + }.Build() + File_network_reward_v1_events_proto = out.File + file_network_reward_v1_events_proto_rawDesc = nil + file_network_reward_v1_events_proto_goTypes = nil + file_network_reward_v1_events_proto_depIdxs = nil +} diff --git a/api/network/reward/v1/genesis.pulsar.go b/api/network/reward/v1/genesis.pulsar.go new file mode 100644 index 00000000..825139c4 --- /dev/null +++ b/api/network/reward/v1/genesis.pulsar.go @@ -0,0 +1,753 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package rewardv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_GenesisState_2_list)(nil) + +type _GenesisState_2_list struct { + list *[]*RewardPool +} + +func (x *_GenesisState_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_GenesisState_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_GenesisState_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*RewardPool) + (*x.list)[i] = concreteValue +} + +func (x *_GenesisState_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*RewardPool) + *x.list = append(*x.list, concreteValue) +} + +func (x *_GenesisState_2_list) AppendMutable() protoreflect.Value { + v := new(RewardPool) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_GenesisState_2_list) NewElement() protoreflect.Value { + v := new(RewardPool) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_GenesisState_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_GenesisState protoreflect.MessageDescriptor + fd_GenesisState_params protoreflect.FieldDescriptor + fd_GenesisState_rewardPoolList protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_genesis_proto_init() + md_GenesisState = File_network_reward_v1_genesis_proto.Messages().ByName("GenesisState") + fd_GenesisState_params = md_GenesisState.Fields().ByName("params") + fd_GenesisState_rewardPoolList = md_GenesisState.Fields().ByName("rewardPoolList") +} + +var _ protoreflect.Message = (*fastReflection_GenesisState)(nil) + +type fastReflection_GenesisState GenesisState + +func (x *GenesisState) ProtoReflect() protoreflect.Message { + return (*fastReflection_GenesisState)(x) +} + +func (x *GenesisState) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_genesis_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) +} + +var _fastReflection_GenesisState_messageType fastReflection_GenesisState_messageType +var _ protoreflect.MessageType = fastReflection_GenesisState_messageType{} + +type fastReflection_GenesisState_messageType struct{} + +func (x fastReflection_GenesisState_messageType) Zero() protoreflect.Message { + return (*fastReflection_GenesisState)(nil) +} +func (x fastReflection_GenesisState_messageType) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} +func (x fastReflection_GenesisState_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_GenesisState) Descriptor() protoreflect.MessageDescriptor { + return md_GenesisState +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_GenesisState) Type() protoreflect.MessageType { + return _fastReflection_GenesisState_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_GenesisState) New() protoreflect.Message { + return new(fastReflection_GenesisState) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_GenesisState) Interface() protoreflect.ProtoMessage { + return (*GenesisState)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_GenesisState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_GenesisState_params, value) { + return + } + } + if len(x.RewardPoolList) != 0 { + value := protoreflect.ValueOfList(&_GenesisState_2_list{list: &x.RewardPoolList}) + if !f(fd_GenesisState_rewardPoolList, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_GenesisState) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.GenesisState.params": + return x.Params != nil + case "network.reward.v1.GenesisState.rewardPoolList": + return len(x.RewardPoolList) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.GenesisState")) + } + panic(fmt.Errorf("message network.reward.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.GenesisState.params": + x.Params = nil + case "network.reward.v1.GenesisState.rewardPoolList": + x.RewardPoolList = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.GenesisState")) + } + panic(fmt.Errorf("message network.reward.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_GenesisState) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.GenesisState.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "network.reward.v1.GenesisState.rewardPoolList": + if len(x.RewardPoolList) == 0 { + return protoreflect.ValueOfList(&_GenesisState_2_list{}) + } + listValue := &_GenesisState_2_list{list: &x.RewardPoolList} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.GenesisState")) + } + panic(fmt.Errorf("message network.reward.v1.GenesisState does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.GenesisState.params": + x.Params = value.Message().Interface().(*Params) + case "network.reward.v1.GenesisState.rewardPoolList": + lv := value.List() + clv := lv.(*_GenesisState_2_list) + x.RewardPoolList = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.GenesisState")) + } + panic(fmt.Errorf("message network.reward.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.GenesisState.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.reward.v1.GenesisState.rewardPoolList": + if x.RewardPoolList == nil { + x.RewardPoolList = []*RewardPool{} + } + value := &_GenesisState_2_list{list: &x.RewardPoolList} + return protoreflect.ValueOfList(value) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.GenesisState")) + } + panic(fmt.Errorf("message network.reward.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_GenesisState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.GenesisState.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "network.reward.v1.GenesisState.rewardPoolList": + list := []*RewardPool{} + return protoreflect.ValueOfList(&_GenesisState_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.GenesisState")) + } + panic(fmt.Errorf("message network.reward.v1.GenesisState does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_GenesisState) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.GenesisState", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_GenesisState) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_GenesisState) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_GenesisState) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_GenesisState) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.RewardPoolList) > 0 { + for _, e := range x.RewardPoolList { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.RewardPoolList) > 0 { + for iNdEx := len(x.RewardPoolList) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.RewardPoolList[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*GenesisState) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RewardPoolList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.RewardPoolList = append(x.RewardPoolList, &RewardPool{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RewardPoolList[len(x.RewardPoolList)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/reward/v1/genesis.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// GenesisState defines the reward module's genesis state. +type GenesisState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params defines all the parameters of the module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + RewardPoolList []*RewardPool `protobuf:"bytes,2,rep,name=rewardPoolList,proto3" json:"rewardPoolList,omitempty"` +} + +func (x *GenesisState) Reset() { + *x = GenesisState{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_genesis_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisState) ProtoMessage() {} + +// Deprecated: Use GenesisState.ProtoReflect.Descriptor instead. +func (*GenesisState) Descriptor() ([]byte, []int) { + return file_network_reward_v1_genesis_proto_rawDescGZIP(), []int{0} +} + +func (x *GenesisState) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +func (x *GenesisState) GetRewardPoolList() []*RewardPool { + if x != nil { + return x.RewardPoolList + } + return nil +} + +var File_network_reward_v1_genesis_proto protoreflect.FileDescriptor + +var file_network_reward_v1_genesis_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x99, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, + 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0e, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x42, 0xc5, + 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_reward_v1_genesis_proto_rawDescOnce sync.Once + file_network_reward_v1_genesis_proto_rawDescData = file_network_reward_v1_genesis_proto_rawDesc +) + +func file_network_reward_v1_genesis_proto_rawDescGZIP() []byte { + file_network_reward_v1_genesis_proto_rawDescOnce.Do(func() { + file_network_reward_v1_genesis_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_reward_v1_genesis_proto_rawDescData) + }) + return file_network_reward_v1_genesis_proto_rawDescData +} + +var file_network_reward_v1_genesis_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_reward_v1_genesis_proto_goTypes = []interface{}{ + (*GenesisState)(nil), // 0: network.reward.v1.GenesisState + (*Params)(nil), // 1: network.reward.v1.Params + (*RewardPool)(nil), // 2: network.reward.v1.RewardPool +} +var file_network_reward_v1_genesis_proto_depIdxs = []int32{ + 1, // 0: network.reward.v1.GenesisState.params:type_name -> network.reward.v1.Params + 2, // 1: network.reward.v1.GenesisState.rewardPoolList:type_name -> network.reward.v1.RewardPool + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_network_reward_v1_genesis_proto_init() } +func file_network_reward_v1_genesis_proto_init() { + if File_network_reward_v1_genesis_proto != nil { + return + } + file_network_reward_v1_params_proto_init() + file_network_reward_v1_reward_pool_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_reward_v1_genesis_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisState); 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_network_reward_v1_genesis_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_reward_v1_genesis_proto_goTypes, + DependencyIndexes: file_network_reward_v1_genesis_proto_depIdxs, + MessageInfos: file_network_reward_v1_genesis_proto_msgTypes, + }.Build() + File_network_reward_v1_genesis_proto = out.File + file_network_reward_v1_genesis_proto_rawDesc = nil + file_network_reward_v1_genesis_proto_goTypes = nil + file_network_reward_v1_genesis_proto_depIdxs = nil +} diff --git a/api/network/reward/v1/params.pulsar.go b/api/network/reward/v1/params.pulsar.go new file mode 100644 index 00000000..896ac63e --- /dev/null +++ b/api/network/reward/v1/params.pulsar.go @@ -0,0 +1,501 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package rewardv1 + +import ( + _ "cosmossdk.io/api/amino" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Params protoreflect.MessageDescriptor +) + +func init() { + file_network_reward_v1_params_proto_init() + md_Params = File_network_reward_v1_params_proto.Messages().ByName("Params") +} + +var _ protoreflect.Message = (*fastReflection_Params)(nil) + +type fastReflection_Params Params + +func (x *Params) ProtoReflect() protoreflect.Message { + return (*fastReflection_Params)(x) +} + +func (x *Params) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_params_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) +} + +var _fastReflection_Params_messageType fastReflection_Params_messageType +var _ protoreflect.MessageType = fastReflection_Params_messageType{} + +type fastReflection_Params_messageType struct{} + +func (x fastReflection_Params_messageType) Zero() protoreflect.Message { + return (*fastReflection_Params)(nil) +} +func (x fastReflection_Params_messageType) New() protoreflect.Message { + return new(fastReflection_Params) +} +func (x fastReflection_Params_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Params) Descriptor() protoreflect.MessageDescriptor { + return md_Params +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Params) Type() protoreflect.MessageType { + return _fastReflection_Params_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Params) New() protoreflect.Message { + return new(fastReflection_Params) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Params) Interface() protoreflect.ProtoMessage { + return (*Params)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.Params")) + } + panic(fmt.Errorf("message network.reward.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.Params")) + } + panic(fmt.Errorf("message network.reward.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.Params")) + } + panic(fmt.Errorf("message network.reward.v1.Params does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.Params")) + } + panic(fmt.Errorf("message network.reward.v1.Params does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.Params")) + } + panic(fmt.Errorf("message network.reward.v1.Params does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.Params")) + } + panic(fmt.Errorf("message network.reward.v1.Params does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Params) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.Params", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Params) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Params) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Params) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Params) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/reward/v1/params.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Params defines the parameters for the module. +type Params struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Params) Reset() { + *x = Params{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_params_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Params) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Params) ProtoMessage() {} + +// Deprecated: Use Params.ProtoReflect.Descriptor instead. +func (*Params) Descriptor() ([]byte, []int) { + return file_network_reward_v1_params_proto_rawDescGZIP(), []int{0} +} + +var File_network_reward_v1_params_proto protoreflect.FileDescriptor + +var file_network_reward_v1_params_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2a, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x20, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, + 0x17, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xc4, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x76, 0x31, 0x42, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, + 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, + 0x76, 0x31, 0x3b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x52, + 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_reward_v1_params_proto_rawDescOnce sync.Once + file_network_reward_v1_params_proto_rawDescData = file_network_reward_v1_params_proto_rawDesc +) + +func file_network_reward_v1_params_proto_rawDescGZIP() []byte { + file_network_reward_v1_params_proto_rawDescOnce.Do(func() { + file_network_reward_v1_params_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_reward_v1_params_proto_rawDescData) + }) + return file_network_reward_v1_params_proto_rawDescData +} + +var file_network_reward_v1_params_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_reward_v1_params_proto_goTypes = []interface{}{ + (*Params)(nil), // 0: network.reward.v1.Params +} +var file_network_reward_v1_params_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 +} + +func init() { file_network_reward_v1_params_proto_init() } +func file_network_reward_v1_params_proto_init() { + if File_network_reward_v1_params_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_reward_v1_params_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Params); 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_network_reward_v1_params_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_reward_v1_params_proto_goTypes, + DependencyIndexes: file_network_reward_v1_params_proto_depIdxs, + MessageInfos: file_network_reward_v1_params_proto_msgTypes, + }.Build() + File_network_reward_v1_params_proto = out.File + file_network_reward_v1_params_proto_rawDesc = nil + file_network_reward_v1_params_proto_goTypes = nil + file_network_reward_v1_params_proto_depIdxs = nil +} diff --git a/api/network/reward/v1/query.pulsar.go b/api/network/reward/v1/query.pulsar.go new file mode 100644 index 00000000..92f00c23 --- /dev/null +++ b/api/network/reward/v1/query.pulsar.go @@ -0,0 +1,3124 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package rewardv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1" + _ "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_QueryParamsRequest protoreflect.MessageDescriptor +) + +func init() { + file_network_reward_v1_query_proto_init() + md_QueryParamsRequest = File_network_reward_v1_query_proto.Messages().ByName("QueryParamsRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsRequest)(nil) + +type fastReflection_QueryParamsRequest QueryParamsRequest + +func (x *QueryParamsRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(x) +} + +func (x *QueryParamsRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_query_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) +} + +var _fastReflection_QueryParamsRequest_messageType fastReflection_QueryParamsRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsRequest_messageType{} + +type fastReflection_QueryParamsRequest_messageType struct{} + +func (x fastReflection_QueryParamsRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsRequest)(nil) +} +func (x fastReflection_QueryParamsRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} +func (x fastReflection_QueryParamsRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsRequest) New() protoreflect.Message { + return new(fastReflection_QueryParamsRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsRequest) Interface() protoreflect.ProtoMessage { + return (*QueryParamsRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.QueryParamsRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryParamsResponse protoreflect.MessageDescriptor + fd_QueryParamsResponse_params protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_query_proto_init() + md_QueryParamsResponse = File_network_reward_v1_query_proto.Messages().ByName("QueryParamsResponse") + fd_QueryParamsResponse_params = md_QueryParamsResponse.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_QueryParamsResponse)(nil) + +type fastReflection_QueryParamsResponse QueryParamsResponse + +func (x *QueryParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(x) +} + +func (x *QueryParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_query_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) +} + +var _fastReflection_QueryParamsResponse_messageType fastReflection_QueryParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryParamsResponse_messageType{} + +type fastReflection_QueryParamsResponse_messageType struct{} + +func (x fastReflection_QueryParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryParamsResponse)(nil) +} +func (x fastReflection_QueryParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} +func (x fastReflection_QueryParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryParamsResponse) New() protoreflect.Message { + return new(fastReflection_QueryParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryParamsResponse) Interface() protoreflect.ProtoMessage { + return (*QueryParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_QueryParamsResponse_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.QueryParamsResponse.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.QueryParamsResponse.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.QueryParamsResponse.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.QueryParamsResponse.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryParamsResponse.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryParamsResponse.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.QueryParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetRewardPoolRequest protoreflect.MessageDescriptor + fd_QueryGetRewardPoolRequest_launchID protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_query_proto_init() + md_QueryGetRewardPoolRequest = File_network_reward_v1_query_proto.Messages().ByName("QueryGetRewardPoolRequest") + fd_QueryGetRewardPoolRequest_launchID = md_QueryGetRewardPoolRequest.Fields().ByName("launchID") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetRewardPoolRequest)(nil) + +type fastReflection_QueryGetRewardPoolRequest QueryGetRewardPoolRequest + +func (x *QueryGetRewardPoolRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetRewardPoolRequest)(x) +} + +func (x *QueryGetRewardPoolRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_query_proto_msgTypes[2] + 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) +} + +var _fastReflection_QueryGetRewardPoolRequest_messageType fastReflection_QueryGetRewardPoolRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetRewardPoolRequest_messageType{} + +type fastReflection_QueryGetRewardPoolRequest_messageType struct{} + +func (x fastReflection_QueryGetRewardPoolRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetRewardPoolRequest)(nil) +} +func (x fastReflection_QueryGetRewardPoolRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetRewardPoolRequest) +} +func (x fastReflection_QueryGetRewardPoolRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetRewardPoolRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetRewardPoolRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetRewardPoolRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetRewardPoolRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryGetRewardPoolRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetRewardPoolRequest) New() protoreflect.Message { + return new(fastReflection_QueryGetRewardPoolRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetRewardPoolRequest) Interface() protoreflect.ProtoMessage { + return (*QueryGetRewardPoolRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetRewardPoolRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_QueryGetRewardPoolRequest_launchID, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetRewardPoolRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolRequest.launchID": + return x.LaunchID != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRewardPoolRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolRequest.launchID": + x.LaunchID = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetRewardPoolRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.QueryGetRewardPoolRequest.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRewardPoolRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolRequest.launchID": + x.LaunchID = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRewardPoolRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolRequest.launchID": + panic(fmt.Errorf("field launchID of message network.reward.v1.QueryGetRewardPoolRequest is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetRewardPoolRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolRequest.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetRewardPoolRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.QueryGetRewardPoolRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetRewardPoolRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRewardPoolRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetRewardPoolRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetRewardPoolRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetRewardPoolRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetRewardPoolRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetRewardPoolRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetRewardPoolRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetRewardPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryGetRewardPoolResponse protoreflect.MessageDescriptor + fd_QueryGetRewardPoolResponse_rewardPool protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_query_proto_init() + md_QueryGetRewardPoolResponse = File_network_reward_v1_query_proto.Messages().ByName("QueryGetRewardPoolResponse") + fd_QueryGetRewardPoolResponse_rewardPool = md_QueryGetRewardPoolResponse.Fields().ByName("rewardPool") +} + +var _ protoreflect.Message = (*fastReflection_QueryGetRewardPoolResponse)(nil) + +type fastReflection_QueryGetRewardPoolResponse QueryGetRewardPoolResponse + +func (x *QueryGetRewardPoolResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryGetRewardPoolResponse)(x) +} + +func (x *QueryGetRewardPoolResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_query_proto_msgTypes[3] + 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) +} + +var _fastReflection_QueryGetRewardPoolResponse_messageType fastReflection_QueryGetRewardPoolResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryGetRewardPoolResponse_messageType{} + +type fastReflection_QueryGetRewardPoolResponse_messageType struct{} + +func (x fastReflection_QueryGetRewardPoolResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryGetRewardPoolResponse)(nil) +} +func (x fastReflection_QueryGetRewardPoolResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryGetRewardPoolResponse) +} +func (x fastReflection_QueryGetRewardPoolResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetRewardPoolResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryGetRewardPoolResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryGetRewardPoolResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryGetRewardPoolResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryGetRewardPoolResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryGetRewardPoolResponse) New() protoreflect.Message { + return new(fastReflection_QueryGetRewardPoolResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryGetRewardPoolResponse) Interface() protoreflect.ProtoMessage { + return (*QueryGetRewardPoolResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryGetRewardPoolResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.RewardPool != nil { + value := protoreflect.ValueOfMessage(x.RewardPool.ProtoReflect()) + if !f(fd_QueryGetRewardPoolResponse_rewardPool, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryGetRewardPoolResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolResponse.rewardPool": + return x.RewardPool != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRewardPoolResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolResponse.rewardPool": + x.RewardPool = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryGetRewardPoolResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.QueryGetRewardPoolResponse.rewardPool": + value := x.RewardPool + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRewardPoolResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolResponse.rewardPool": + x.RewardPool = value.Message().Interface().(*RewardPool) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRewardPoolResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolResponse.rewardPool": + if x.RewardPool == nil { + x.RewardPool = new(RewardPool) + } + return protoreflect.ValueOfMessage(x.RewardPool.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryGetRewardPoolResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryGetRewardPoolResponse.rewardPool": + m := new(RewardPool) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryGetRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryGetRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryGetRewardPoolResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.QueryGetRewardPoolResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryGetRewardPoolResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryGetRewardPoolResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryGetRewardPoolResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryGetRewardPoolResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryGetRewardPoolResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.RewardPool != nil { + l = options.Size(x.RewardPool) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryGetRewardPoolResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.RewardPool != nil { + encoded, err := options.Marshal(x.RewardPool) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryGetRewardPoolResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetRewardPoolResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryGetRewardPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RewardPool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.RewardPool == nil { + x.RewardPool = &RewardPool{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RewardPool); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryAllRewardPoolRequest protoreflect.MessageDescriptor + fd_QueryAllRewardPoolRequest_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_query_proto_init() + md_QueryAllRewardPoolRequest = File_network_reward_v1_query_proto.Messages().ByName("QueryAllRewardPoolRequest") + fd_QueryAllRewardPoolRequest_pagination = md_QueryAllRewardPoolRequest.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllRewardPoolRequest)(nil) + +type fastReflection_QueryAllRewardPoolRequest QueryAllRewardPoolRequest + +func (x *QueryAllRewardPoolRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllRewardPoolRequest)(x) +} + +func (x *QueryAllRewardPoolRequest) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_query_proto_msgTypes[4] + 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) +} + +var _fastReflection_QueryAllRewardPoolRequest_messageType fastReflection_QueryAllRewardPoolRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllRewardPoolRequest_messageType{} + +type fastReflection_QueryAllRewardPoolRequest_messageType struct{} + +func (x fastReflection_QueryAllRewardPoolRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllRewardPoolRequest)(nil) +} +func (x fastReflection_QueryAllRewardPoolRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllRewardPoolRequest) +} +func (x fastReflection_QueryAllRewardPoolRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllRewardPoolRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllRewardPoolRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllRewardPoolRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllRewardPoolRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryAllRewardPoolRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllRewardPoolRequest) New() protoreflect.Message { + return new(fastReflection_QueryAllRewardPoolRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllRewardPoolRequest) Interface() protoreflect.ProtoMessage { + return (*QueryAllRewardPoolRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllRewardPoolRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllRewardPoolRequest_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllRewardPoolRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolRequest.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRewardPoolRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolRequest.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllRewardPoolRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.QueryAllRewardPoolRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRewardPoolRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRewardPoolRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllRewardPoolRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolRequest")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllRewardPoolRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.QueryAllRewardPoolRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllRewardPoolRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRewardPoolRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllRewardPoolRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllRewardPoolRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllRewardPoolRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllRewardPoolRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllRewardPoolRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllRewardPoolRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllRewardPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_QueryAllRewardPoolResponse_1_list)(nil) + +type _QueryAllRewardPoolResponse_1_list struct { + list *[]*RewardPool +} + +func (x *_QueryAllRewardPoolResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_QueryAllRewardPoolResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_QueryAllRewardPoolResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*RewardPool) + (*x.list)[i] = concreteValue +} + +func (x *_QueryAllRewardPoolResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*RewardPool) + *x.list = append(*x.list, concreteValue) +} + +func (x *_QueryAllRewardPoolResponse_1_list) AppendMutable() protoreflect.Value { + v := new(RewardPool) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllRewardPoolResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_QueryAllRewardPoolResponse_1_list) NewElement() protoreflect.Value { + v := new(RewardPool) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_QueryAllRewardPoolResponse_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_QueryAllRewardPoolResponse protoreflect.MessageDescriptor + fd_QueryAllRewardPoolResponse_rewardPool protoreflect.FieldDescriptor + fd_QueryAllRewardPoolResponse_pagination protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_query_proto_init() + md_QueryAllRewardPoolResponse = File_network_reward_v1_query_proto.Messages().ByName("QueryAllRewardPoolResponse") + fd_QueryAllRewardPoolResponse_rewardPool = md_QueryAllRewardPoolResponse.Fields().ByName("rewardPool") + fd_QueryAllRewardPoolResponse_pagination = md_QueryAllRewardPoolResponse.Fields().ByName("pagination") +} + +var _ protoreflect.Message = (*fastReflection_QueryAllRewardPoolResponse)(nil) + +type fastReflection_QueryAllRewardPoolResponse QueryAllRewardPoolResponse + +func (x *QueryAllRewardPoolResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryAllRewardPoolResponse)(x) +} + +func (x *QueryAllRewardPoolResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_query_proto_msgTypes[5] + 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) +} + +var _fastReflection_QueryAllRewardPoolResponse_messageType fastReflection_QueryAllRewardPoolResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryAllRewardPoolResponse_messageType{} + +type fastReflection_QueryAllRewardPoolResponse_messageType struct{} + +func (x fastReflection_QueryAllRewardPoolResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryAllRewardPoolResponse)(nil) +} +func (x fastReflection_QueryAllRewardPoolResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryAllRewardPoolResponse) +} +func (x fastReflection_QueryAllRewardPoolResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllRewardPoolResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryAllRewardPoolResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryAllRewardPoolResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryAllRewardPoolResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryAllRewardPoolResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryAllRewardPoolResponse) New() protoreflect.Message { + return new(fastReflection_QueryAllRewardPoolResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryAllRewardPoolResponse) Interface() protoreflect.ProtoMessage { + return (*QueryAllRewardPoolResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryAllRewardPoolResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.RewardPool) != 0 { + value := protoreflect.ValueOfList(&_QueryAllRewardPoolResponse_1_list{list: &x.RewardPool}) + if !f(fd_QueryAllRewardPoolResponse_rewardPool, value) { + return + } + } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryAllRewardPoolResponse_pagination, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryAllRewardPoolResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolResponse.rewardPool": + return len(x.RewardPool) != 0 + case "network.reward.v1.QueryAllRewardPoolResponse.pagination": + return x.Pagination != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRewardPoolResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolResponse.rewardPool": + x.RewardPool = nil + case "network.reward.v1.QueryAllRewardPoolResponse.pagination": + x.Pagination = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryAllRewardPoolResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.QueryAllRewardPoolResponse.rewardPool": + if len(x.RewardPool) == 0 { + return protoreflect.ValueOfList(&_QueryAllRewardPoolResponse_1_list{}) + } + listValue := &_QueryAllRewardPoolResponse_1_list{list: &x.RewardPool} + return protoreflect.ValueOfList(listValue) + case "network.reward.v1.QueryAllRewardPoolResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRewardPoolResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolResponse.rewardPool": + lv := value.List() + clv := lv.(*_QueryAllRewardPoolResponse_1_list) + x.RewardPool = *clv.list + case "network.reward.v1.QueryAllRewardPoolResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRewardPoolResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolResponse.rewardPool": + if x.RewardPool == nil { + x.RewardPool = []*RewardPool{} + } + value := &_QueryAllRewardPoolResponse_1_list{list: &x.RewardPool} + return protoreflect.ValueOfList(value) + case "network.reward.v1.QueryAllRewardPoolResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryAllRewardPoolResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.QueryAllRewardPoolResponse.rewardPool": + list := []*RewardPool{} + return protoreflect.ValueOfList(&_QueryAllRewardPoolResponse_1_list{list: &list}) + case "network.reward.v1.QueryAllRewardPoolResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.QueryAllRewardPoolResponse")) + } + panic(fmt.Errorf("message network.reward.v1.QueryAllRewardPoolResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryAllRewardPoolResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.QueryAllRewardPoolResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryAllRewardPoolResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryAllRewardPoolResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryAllRewardPoolResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryAllRewardPoolResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryAllRewardPoolResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.RewardPool) > 0 { + for _, e := range x.RewardPool { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryAllRewardPoolResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.RewardPool) > 0 { + for iNdEx := len(x.RewardPool) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.RewardPool[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryAllRewardPoolResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllRewardPoolResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryAllRewardPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RewardPool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.RewardPool = append(x.RewardPool, &RewardPool{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RewardPool[len(x.RewardPool)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/reward/v1/query.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryParamsRequest) Reset() { + *x = QueryParamsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_query_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsRequest) ProtoMessage() {} + +// Deprecated: Use QueryParamsRequest.ProtoReflect.Descriptor instead. +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return file_network_reward_v1_query_proto_rawDescGZIP(), []int{0} +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // params holds all the parameters of this module. + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryParamsResponse) Reset() { + *x = QueryParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_query_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParamsResponse) ProtoMessage() {} + +// Deprecated: Use QueryParamsResponse.ProtoReflect.Descriptor instead. +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return file_network_reward_v1_query_proto_rawDescGZIP(), []int{1} +} + +func (x *QueryParamsResponse) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +type QueryGetRewardPoolRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +} + +func (x *QueryGetRewardPoolRequest) Reset() { + *x = QueryGetRewardPoolRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_query_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetRewardPoolRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetRewardPoolRequest) ProtoMessage() {} + +// Deprecated: Use QueryGetRewardPoolRequest.ProtoReflect.Descriptor instead. +func (*QueryGetRewardPoolRequest) Descriptor() ([]byte, []int) { + return file_network_reward_v1_query_proto_rawDescGZIP(), []int{2} +} + +func (x *QueryGetRewardPoolRequest) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +type QueryGetRewardPoolResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RewardPool *RewardPool `protobuf:"bytes,1,opt,name=rewardPool,proto3" json:"rewardPool,omitempty"` +} + +func (x *QueryGetRewardPoolResponse) Reset() { + *x = QueryGetRewardPoolResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_query_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryGetRewardPoolResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryGetRewardPoolResponse) ProtoMessage() {} + +// Deprecated: Use QueryGetRewardPoolResponse.ProtoReflect.Descriptor instead. +func (*QueryGetRewardPoolResponse) Descriptor() ([]byte, []int) { + return file_network_reward_v1_query_proto_rawDescGZIP(), []int{3} +} + +func (x *QueryGetRewardPoolResponse) GetRewardPool() *RewardPool { + if x != nil { + return x.RewardPool + } + return nil +} + +type QueryAllRewardPoolRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pagination *v1beta1.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllRewardPoolRequest) Reset() { + *x = QueryAllRewardPoolRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllRewardPoolRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllRewardPoolRequest) ProtoMessage() {} + +// Deprecated: Use QueryAllRewardPoolRequest.ProtoReflect.Descriptor instead. +func (*QueryAllRewardPoolRequest) Descriptor() ([]byte, []int) { + return file_network_reward_v1_query_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryAllRewardPoolRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +type QueryAllRewardPoolResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RewardPool []*RewardPool `protobuf:"bytes,1,rep,name=rewardPool,proto3" json:"rewardPool,omitempty"` + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *QueryAllRewardPoolResponse) Reset() { + *x = QueryAllRewardPoolResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAllRewardPoolResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAllRewardPoolResponse) ProtoMessage() {} + +// Deprecated: Use QueryAllRewardPoolResponse.ProtoReflect.Descriptor instead. +func (*QueryAllRewardPoolResponse) Descriptor() ([]byte, []int) { + return file_network_reward_v1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryAllRewardPoolResponse) GetRewardPool() []*RewardPool { + if x != nil { + return x.RewardPool + } + return nil +} + +func (x *QueryAllRewardPoolResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +var File_network_reward_v1_query_proto protoreflect.FileDescriptor + +var file_network_reward_v1_query_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, + 0x73, 0x65, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x14, 0x0a, 0x12, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x53, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x37, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x22, 0x61, + 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x42, + 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, + 0x6c, 0x22, 0x63, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, + 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x32, 0xcd, 0x03, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x81, 0x01, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x25, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, + 0x20, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, + 0x6f, 0x6f, 0x6c, 0x12, 0x2c, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, + 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x7b, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x2c, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, + 0x22, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x42, 0xc3, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x56, 0x31, 0xca, + 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_network_reward_v1_query_proto_rawDescOnce sync.Once + file_network_reward_v1_query_proto_rawDescData = file_network_reward_v1_query_proto_rawDesc +) + +func file_network_reward_v1_query_proto_rawDescGZIP() []byte { + file_network_reward_v1_query_proto_rawDescOnce.Do(func() { + file_network_reward_v1_query_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_reward_v1_query_proto_rawDescData) + }) + return file_network_reward_v1_query_proto_rawDescData +} + +var file_network_reward_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_network_reward_v1_query_proto_goTypes = []interface{}{ + (*QueryParamsRequest)(nil), // 0: network.reward.v1.QueryParamsRequest + (*QueryParamsResponse)(nil), // 1: network.reward.v1.QueryParamsResponse + (*QueryGetRewardPoolRequest)(nil), // 2: network.reward.v1.QueryGetRewardPoolRequest + (*QueryGetRewardPoolResponse)(nil), // 3: network.reward.v1.QueryGetRewardPoolResponse + (*QueryAllRewardPoolRequest)(nil), // 4: network.reward.v1.QueryAllRewardPoolRequest + (*QueryAllRewardPoolResponse)(nil), // 5: network.reward.v1.QueryAllRewardPoolResponse + (*Params)(nil), // 6: network.reward.v1.Params + (*RewardPool)(nil), // 7: network.reward.v1.RewardPool + (*v1beta1.PageRequest)(nil), // 8: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 9: cosmos.base.query.v1beta1.PageResponse +} +var file_network_reward_v1_query_proto_depIdxs = []int32{ + 6, // 0: network.reward.v1.QueryParamsResponse.params:type_name -> network.reward.v1.Params + 7, // 1: network.reward.v1.QueryGetRewardPoolResponse.rewardPool:type_name -> network.reward.v1.RewardPool + 8, // 2: network.reward.v1.QueryAllRewardPoolRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 7, // 3: network.reward.v1.QueryAllRewardPoolResponse.rewardPool:type_name -> network.reward.v1.RewardPool + 9, // 4: network.reward.v1.QueryAllRewardPoolResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 0, // 5: network.reward.v1.Query.Params:input_type -> network.reward.v1.QueryParamsRequest + 2, // 6: network.reward.v1.Query.GetRewardPool:input_type -> network.reward.v1.QueryGetRewardPoolRequest + 4, // 7: network.reward.v1.Query.ListRewardPool:input_type -> network.reward.v1.QueryAllRewardPoolRequest + 1, // 8: network.reward.v1.Query.Params:output_type -> network.reward.v1.QueryParamsResponse + 3, // 9: network.reward.v1.Query.GetRewardPool:output_type -> network.reward.v1.QueryGetRewardPoolResponse + 5, // 10: network.reward.v1.Query.ListRewardPool:output_type -> network.reward.v1.QueryAllRewardPoolResponse + 8, // [8:11] is the sub-list for method output_type + 5, // [5:8] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_network_reward_v1_query_proto_init() } +func file_network_reward_v1_query_proto_init() { + if File_network_reward_v1_query_proto != nil { + return + } + file_network_reward_v1_params_proto_init() + file_network_reward_v1_reward_pool_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_reward_v1_query_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_query_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_query_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetRewardPoolRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_query_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryGetRewardPoolResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllRewardPoolRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAllRewardPoolResponse); 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_network_reward_v1_query_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_reward_v1_query_proto_goTypes, + DependencyIndexes: file_network_reward_v1_query_proto_depIdxs, + MessageInfos: file_network_reward_v1_query_proto_msgTypes, + }.Build() + File_network_reward_v1_query_proto = out.File + file_network_reward_v1_query_proto_rawDesc = nil + file_network_reward_v1_query_proto_goTypes = nil + file_network_reward_v1_query_proto_depIdxs = nil +} diff --git a/api/network/reward/v1/query_grpc.pb.go b/api/network/reward/v1/query_grpc.pb.go new file mode 100644 index 00000000..0ad725f7 --- /dev/null +++ b/api/network/reward/v1/query_grpc.pb.go @@ -0,0 +1,187 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/reward/v1/query.proto + +package rewardv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Query_Params_FullMethodName = "/network.reward.v1.Query/Params" + Query_GetRewardPool_FullMethodName = "/network.reward.v1.Query/GetRewardPool" + Query_ListRewardPool_FullMethodName = "/network.reward.v1.Query/ListRewardPool" +) + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of RewardPool items. + GetRewardPool(ctx context.Context, in *QueryGetRewardPoolRequest, opts ...grpc.CallOption) (*QueryGetRewardPoolResponse, error) + ListRewardPool(ctx context.Context, in *QueryAllRewardPoolRequest, opts ...grpc.CallOption) (*QueryAllRewardPoolResponse, error) +} + +type queryClient struct { + cc grpc.ClientConnInterface +} + +func NewQueryClient(cc grpc.ClientConnInterface) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, Query_Params_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetRewardPool(ctx context.Context, in *QueryGetRewardPoolRequest, opts ...grpc.CallOption) (*QueryGetRewardPoolResponse, error) { + out := new(QueryGetRewardPoolResponse) + err := c.cc.Invoke(ctx, Query_GetRewardPool_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ListRewardPool(ctx context.Context, in *QueryAllRewardPoolRequest, opts ...grpc.CallOption) (*QueryAllRewardPoolResponse, error) { + out := new(QueryAllRewardPoolResponse) + err := c.cc.Invoke(ctx, Query_ListRewardPool_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +// All implementations must embed UnimplementedQueryServer +// for forward compatibility +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of RewardPool items. + GetRewardPool(context.Context, *QueryGetRewardPoolRequest) (*QueryGetRewardPoolResponse, error) + ListRewardPool(context.Context, *QueryAllRewardPoolRequest) (*QueryAllRewardPoolResponse, error) + mustEmbedUnimplementedQueryServer() +} + +// UnimplementedQueryServer must be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (UnimplementedQueryServer) GetRewardPool(context.Context, *QueryGetRewardPoolRequest) (*QueryGetRewardPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRewardPool not implemented") +} +func (UnimplementedQueryServer) ListRewardPool(context.Context, *QueryAllRewardPoolRequest) (*QueryAllRewardPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListRewardPool not implemented") +} +func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} + +// UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to QueryServer will +// result in compilation errors. +type UnsafeQueryServer interface { + mustEmbedUnimplementedQueryServer() +} + +func RegisterQueryServer(s grpc.ServiceRegistrar, srv QueryServer) { + s.RegisterService(&Query_ServiceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_Params_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetRewardPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetRewardPoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetRewardPool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_GetRewardPool_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetRewardPool(ctx, req.(*QueryGetRewardPoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ListRewardPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllRewardPoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ListRewardPool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_ListRewardPool_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ListRewardPool(ctx, req.(*QueryAllRewardPoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Query_ServiceDesc is the grpc.ServiceDesc for Query service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Query_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.reward.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetRewardPool", + Handler: _Query_GetRewardPool_Handler, + }, + { + MethodName: "ListRewardPool", + Handler: _Query_ListRewardPool_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/reward/v1/query.proto", +} diff --git a/api/network/reward/v1/reward_pool.pulsar.go b/api/network/reward/v1/reward_pool.pulsar.go new file mode 100644 index 00000000..7f535af5 --- /dev/null +++ b/api/network/reward/v1/reward_pool.pulsar.go @@ -0,0 +1,1137 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package rewardv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var _ protoreflect.List = (*_RewardPool_3_list)(nil) + +type _RewardPool_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_RewardPool_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_RewardPool_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_RewardPool_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_RewardPool_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_RewardPool_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_RewardPool_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_RewardPool_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_RewardPool_3_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_RewardPool_4_list)(nil) + +type _RewardPool_4_list struct { + list *[]*v1beta1.Coin +} + +func (x *_RewardPool_4_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_RewardPool_4_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_RewardPool_4_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_RewardPool_4_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_RewardPool_4_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_RewardPool_4_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_RewardPool_4_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_RewardPool_4_list) IsValid() bool { + return x.list != nil +} + +var ( + md_RewardPool protoreflect.MessageDescriptor + fd_RewardPool_launchID protoreflect.FieldDescriptor + fd_RewardPool_provider protoreflect.FieldDescriptor + fd_RewardPool_initialCoins protoreflect.FieldDescriptor + fd_RewardPool_remainingCoins protoreflect.FieldDescriptor + fd_RewardPool_lastRewardHeight protoreflect.FieldDescriptor + fd_RewardPool_currentRewardHeight protoreflect.FieldDescriptor + fd_RewardPool_closed protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_reward_pool_proto_init() + md_RewardPool = File_network_reward_v1_reward_pool_proto.Messages().ByName("RewardPool") + fd_RewardPool_launchID = md_RewardPool.Fields().ByName("launchID") + fd_RewardPool_provider = md_RewardPool.Fields().ByName("provider") + fd_RewardPool_initialCoins = md_RewardPool.Fields().ByName("initialCoins") + fd_RewardPool_remainingCoins = md_RewardPool.Fields().ByName("remainingCoins") + fd_RewardPool_lastRewardHeight = md_RewardPool.Fields().ByName("lastRewardHeight") + fd_RewardPool_currentRewardHeight = md_RewardPool.Fields().ByName("currentRewardHeight") + fd_RewardPool_closed = md_RewardPool.Fields().ByName("closed") +} + +var _ protoreflect.Message = (*fastReflection_RewardPool)(nil) + +type fastReflection_RewardPool RewardPool + +func (x *RewardPool) ProtoReflect() protoreflect.Message { + return (*fastReflection_RewardPool)(x) +} + +func (x *RewardPool) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_reward_pool_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) +} + +var _fastReflection_RewardPool_messageType fastReflection_RewardPool_messageType +var _ protoreflect.MessageType = fastReflection_RewardPool_messageType{} + +type fastReflection_RewardPool_messageType struct{} + +func (x fastReflection_RewardPool_messageType) Zero() protoreflect.Message { + return (*fastReflection_RewardPool)(nil) +} +func (x fastReflection_RewardPool_messageType) New() protoreflect.Message { + return new(fastReflection_RewardPool) +} +func (x fastReflection_RewardPool_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_RewardPool +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_RewardPool) Descriptor() protoreflect.MessageDescriptor { + return md_RewardPool +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_RewardPool) Type() protoreflect.MessageType { + return _fastReflection_RewardPool_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_RewardPool) New() protoreflect.Message { + return new(fastReflection_RewardPool) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_RewardPool) Interface() protoreflect.ProtoMessage { + return (*RewardPool)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_RewardPool) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_RewardPool_launchID, value) { + return + } + } + if x.Provider != "" { + value := protoreflect.ValueOfString(x.Provider) + if !f(fd_RewardPool_provider, value) { + return + } + } + if len(x.InitialCoins) != 0 { + value := protoreflect.ValueOfList(&_RewardPool_3_list{list: &x.InitialCoins}) + if !f(fd_RewardPool_initialCoins, value) { + return + } + } + if len(x.RemainingCoins) != 0 { + value := protoreflect.ValueOfList(&_RewardPool_4_list{list: &x.RemainingCoins}) + if !f(fd_RewardPool_remainingCoins, value) { + return + } + } + if x.LastRewardHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.LastRewardHeight) + if !f(fd_RewardPool_lastRewardHeight, value) { + return + } + } + if x.CurrentRewardHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.CurrentRewardHeight) + if !f(fd_RewardPool_currentRewardHeight, value) { + return + } + } + if x.Closed != false { + value := protoreflect.ValueOfBool(x.Closed) + if !f(fd_RewardPool_closed, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_RewardPool) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.RewardPool.launchID": + return x.LaunchID != uint64(0) + case "network.reward.v1.RewardPool.provider": + return x.Provider != "" + case "network.reward.v1.RewardPool.initialCoins": + return len(x.InitialCoins) != 0 + case "network.reward.v1.RewardPool.remainingCoins": + return len(x.RemainingCoins) != 0 + case "network.reward.v1.RewardPool.lastRewardHeight": + return x.LastRewardHeight != int64(0) + case "network.reward.v1.RewardPool.currentRewardHeight": + return x.CurrentRewardHeight != int64(0) + case "network.reward.v1.RewardPool.closed": + return x.Closed != false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.RewardPool")) + } + panic(fmt.Errorf("message network.reward.v1.RewardPool does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RewardPool) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.RewardPool.launchID": + x.LaunchID = uint64(0) + case "network.reward.v1.RewardPool.provider": + x.Provider = "" + case "network.reward.v1.RewardPool.initialCoins": + x.InitialCoins = nil + case "network.reward.v1.RewardPool.remainingCoins": + x.RemainingCoins = nil + case "network.reward.v1.RewardPool.lastRewardHeight": + x.LastRewardHeight = int64(0) + case "network.reward.v1.RewardPool.currentRewardHeight": + x.CurrentRewardHeight = int64(0) + case "network.reward.v1.RewardPool.closed": + x.Closed = false + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.RewardPool")) + } + panic(fmt.Errorf("message network.reward.v1.RewardPool does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_RewardPool) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.RewardPool.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.reward.v1.RewardPool.provider": + value := x.Provider + return protoreflect.ValueOfString(value) + case "network.reward.v1.RewardPool.initialCoins": + if len(x.InitialCoins) == 0 { + return protoreflect.ValueOfList(&_RewardPool_3_list{}) + } + listValue := &_RewardPool_3_list{list: &x.InitialCoins} + return protoreflect.ValueOfList(listValue) + case "network.reward.v1.RewardPool.remainingCoins": + if len(x.RemainingCoins) == 0 { + return protoreflect.ValueOfList(&_RewardPool_4_list{}) + } + listValue := &_RewardPool_4_list{list: &x.RemainingCoins} + return protoreflect.ValueOfList(listValue) + case "network.reward.v1.RewardPool.lastRewardHeight": + value := x.LastRewardHeight + return protoreflect.ValueOfInt64(value) + case "network.reward.v1.RewardPool.currentRewardHeight": + value := x.CurrentRewardHeight + return protoreflect.ValueOfInt64(value) + case "network.reward.v1.RewardPool.closed": + value := x.Closed + return protoreflect.ValueOfBool(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.RewardPool")) + } + panic(fmt.Errorf("message network.reward.v1.RewardPool does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RewardPool) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.RewardPool.launchID": + x.LaunchID = value.Uint() + case "network.reward.v1.RewardPool.provider": + x.Provider = value.Interface().(string) + case "network.reward.v1.RewardPool.initialCoins": + lv := value.List() + clv := lv.(*_RewardPool_3_list) + x.InitialCoins = *clv.list + case "network.reward.v1.RewardPool.remainingCoins": + lv := value.List() + clv := lv.(*_RewardPool_4_list) + x.RemainingCoins = *clv.list + case "network.reward.v1.RewardPool.lastRewardHeight": + x.LastRewardHeight = value.Int() + case "network.reward.v1.RewardPool.currentRewardHeight": + x.CurrentRewardHeight = value.Int() + case "network.reward.v1.RewardPool.closed": + x.Closed = value.Bool() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.RewardPool")) + } + panic(fmt.Errorf("message network.reward.v1.RewardPool does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RewardPool) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.RewardPool.initialCoins": + if x.InitialCoins == nil { + x.InitialCoins = []*v1beta1.Coin{} + } + value := &_RewardPool_3_list{list: &x.InitialCoins} + return protoreflect.ValueOfList(value) + case "network.reward.v1.RewardPool.remainingCoins": + if x.RemainingCoins == nil { + x.RemainingCoins = []*v1beta1.Coin{} + } + value := &_RewardPool_4_list{list: &x.RemainingCoins} + return protoreflect.ValueOfList(value) + case "network.reward.v1.RewardPool.launchID": + panic(fmt.Errorf("field launchID of message network.reward.v1.RewardPool is not mutable")) + case "network.reward.v1.RewardPool.provider": + panic(fmt.Errorf("field provider of message network.reward.v1.RewardPool is not mutable")) + case "network.reward.v1.RewardPool.lastRewardHeight": + panic(fmt.Errorf("field lastRewardHeight of message network.reward.v1.RewardPool is not mutable")) + case "network.reward.v1.RewardPool.currentRewardHeight": + panic(fmt.Errorf("field currentRewardHeight of message network.reward.v1.RewardPool is not mutable")) + case "network.reward.v1.RewardPool.closed": + panic(fmt.Errorf("field closed of message network.reward.v1.RewardPool is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.RewardPool")) + } + panic(fmt.Errorf("message network.reward.v1.RewardPool does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_RewardPool) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.RewardPool.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.reward.v1.RewardPool.provider": + return protoreflect.ValueOfString("") + case "network.reward.v1.RewardPool.initialCoins": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_RewardPool_3_list{list: &list}) + case "network.reward.v1.RewardPool.remainingCoins": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_RewardPool_4_list{list: &list}) + case "network.reward.v1.RewardPool.lastRewardHeight": + return protoreflect.ValueOfInt64(int64(0)) + case "network.reward.v1.RewardPool.currentRewardHeight": + return protoreflect.ValueOfInt64(int64(0)) + case "network.reward.v1.RewardPool.closed": + return protoreflect.ValueOfBool(false) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.RewardPool")) + } + panic(fmt.Errorf("message network.reward.v1.RewardPool does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_RewardPool) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.RewardPool", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_RewardPool) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_RewardPool) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_RewardPool) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_RewardPool) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*RewardPool) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + l = len(x.Provider) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.InitialCoins) > 0 { + for _, e := range x.InitialCoins { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if len(x.RemainingCoins) > 0 { + for _, e := range x.RemainingCoins { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.LastRewardHeight != 0 { + n += 1 + runtime.Sov(uint64(x.LastRewardHeight)) + } + if x.CurrentRewardHeight != 0 { + n += 1 + runtime.Sov(uint64(x.CurrentRewardHeight)) + } + if x.Closed { + n += 2 + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*RewardPool) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Closed { + i-- + if x.Closed { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } + if x.CurrentRewardHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.CurrentRewardHeight)) + i-- + dAtA[i] = 0x30 + } + if x.LastRewardHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LastRewardHeight)) + i-- + dAtA[i] = 0x28 + } + if len(x.RemainingCoins) > 0 { + for iNdEx := len(x.RemainingCoins) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.RemainingCoins[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x22 + } + } + if len(x.InitialCoins) > 0 { + for iNdEx := len(x.InitialCoins) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.InitialCoins[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if len(x.Provider) > 0 { + i -= len(x.Provider) + copy(dAtA[i:], x.Provider) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Provider))) + i-- + dAtA[i] = 0x12 + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*RewardPool) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: RewardPool: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: RewardPool: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Provider = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field InitialCoins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.InitialCoins = append(x.InitialCoins, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.InitialCoins[len(x.InitialCoins)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RemainingCoins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.RemainingCoins = append(x.RemainingCoins, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.RemainingCoins[len(x.RemainingCoins)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LastRewardHeight", wireType) + } + x.LastRewardHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LastRewardHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CurrentRewardHeight", wireType) + } + x.CurrentRewardHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.CurrentRewardHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Closed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + x.Closed = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/reward/v1/reward_pool.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RewardPool struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + InitialCoins []*v1beta1.Coin `protobuf:"bytes,3,rep,name=initialCoins,proto3" json:"initialCoins,omitempty"` + RemainingCoins []*v1beta1.Coin `protobuf:"bytes,4,rep,name=remainingCoins,proto3" json:"remainingCoins,omitempty"` + LastRewardHeight int64 `protobuf:"varint,5,opt,name=lastRewardHeight,proto3" json:"lastRewardHeight,omitempty"` + CurrentRewardHeight int64 `protobuf:"varint,6,opt,name=currentRewardHeight,proto3" json:"currentRewardHeight,omitempty"` + Closed bool `protobuf:"varint,7,opt,name=closed,proto3" json:"closed,omitempty"` +} + +func (x *RewardPool) Reset() { + *x = RewardPool{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_reward_pool_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardPool) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardPool) ProtoMessage() {} + +// Deprecated: Use RewardPool.ProtoReflect.Descriptor instead. +func (*RewardPool) Descriptor() ([]byte, []int) { + return file_network_reward_v1_reward_pool_proto_rawDescGZIP(), []int{0} +} + +func (x *RewardPool) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *RewardPool) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +func (x *RewardPool) GetInitialCoins() []*v1beta1.Coin { + if x != nil { + return x.InitialCoins + } + return nil +} + +func (x *RewardPool) GetRemainingCoins() []*v1beta1.Coin { + if x != nil { + return x.RemainingCoins + } + return nil +} + +func (x *RewardPool) GetLastRewardHeight() int64 { + if x != nil { + return x.LastRewardHeight + } + return 0 +} + +func (x *RewardPool) GetCurrentRewardHeight() int64 { + if x != nil { + return x.CurrentRewardHeight + } + return 0 +} + +func (x *RewardPool) GetClosed() bool { + if x != nil { + return x.Closed + } + return false +} + +var File_network_reward_v1_reward_pool_proto protoreflect.FileDescriptor + +var file_network_reward_v1_reward_pool_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, + 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbe, 0x04, 0x0a, + 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0x34, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0xb0, 0x01, + 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, + 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, + 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, + 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, + 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x73, + 0x12, 0xb4, 0x01, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x69, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, + 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x42, 0xc8, 0x01, + 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, + 0x6f, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, + 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_reward_v1_reward_pool_proto_rawDescOnce sync.Once + file_network_reward_v1_reward_pool_proto_rawDescData = file_network_reward_v1_reward_pool_proto_rawDesc +) + +func file_network_reward_v1_reward_pool_proto_rawDescGZIP() []byte { + file_network_reward_v1_reward_pool_proto_rawDescOnce.Do(func() { + file_network_reward_v1_reward_pool_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_reward_v1_reward_pool_proto_rawDescData) + }) + return file_network_reward_v1_reward_pool_proto_rawDescData +} + +var file_network_reward_v1_reward_pool_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_network_reward_v1_reward_pool_proto_goTypes = []interface{}{ + (*RewardPool)(nil), // 0: network.reward.v1.RewardPool + (*v1beta1.Coin)(nil), // 1: cosmos.base.v1beta1.Coin +} +var file_network_reward_v1_reward_pool_proto_depIdxs = []int32{ + 1, // 0: network.reward.v1.RewardPool.initialCoins:type_name -> cosmos.base.v1beta1.Coin + 1, // 1: network.reward.v1.RewardPool.remainingCoins:type_name -> cosmos.base.v1beta1.Coin + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_network_reward_v1_reward_pool_proto_init() } +func file_network_reward_v1_reward_pool_proto_init() { + if File_network_reward_v1_reward_pool_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_reward_v1_reward_pool_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RewardPool); 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_network_reward_v1_reward_pool_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_reward_v1_reward_pool_proto_goTypes, + DependencyIndexes: file_network_reward_v1_reward_pool_proto_depIdxs, + MessageInfos: file_network_reward_v1_reward_pool_proto_msgTypes, + }.Build() + File_network_reward_v1_reward_pool_proto = out.File + file_network_reward_v1_reward_pool_proto_rawDesc = nil + file_network_reward_v1_reward_pool_proto_goTypes = nil + file_network_reward_v1_reward_pool_proto_depIdxs = nil +} diff --git a/api/network/reward/v1/tx.pulsar.go b/api/network/reward/v1/tx.pulsar.go new file mode 100644 index 00000000..3d3d239a --- /dev/null +++ b/api/network/reward/v1/tx.pulsar.go @@ -0,0 +1,2681 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package rewardv1 + +import ( + _ "cosmossdk.io/api/amino" + v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + _ "cosmossdk.io/api/cosmos/msg/v1" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MsgUpdateParams protoreflect.MessageDescriptor + fd_MsgUpdateParams_authority protoreflect.FieldDescriptor + fd_MsgUpdateParams_params protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_tx_proto_init() + md_MsgUpdateParams = File_network_reward_v1_tx_proto.Messages().ByName("MsgUpdateParams") + fd_MsgUpdateParams_authority = md_MsgUpdateParams.Fields().ByName("authority") + fd_MsgUpdateParams_params = md_MsgUpdateParams.Fields().ByName("params") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParams)(nil) + +type fastReflection_MsgUpdateParams MsgUpdateParams + +func (x *MsgUpdateParams) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(x) +} + +func (x *MsgUpdateParams) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_tx_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) +} + +var _fastReflection_MsgUpdateParams_messageType fastReflection_MsgUpdateParams_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParams_messageType{} + +type fastReflection_MsgUpdateParams_messageType struct{} + +func (x fastReflection_MsgUpdateParams_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParams)(nil) +} +func (x fastReflection_MsgUpdateParams_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} +func (x fastReflection_MsgUpdateParams_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParams) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParams +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParams) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParams_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParams) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParams) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParams) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParams)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParams) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_MsgUpdateParams_authority, value) { + return + } + } + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_MsgUpdateParams_params, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParams) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.MsgUpdateParams.authority": + return x.Authority != "" + case "network.reward.v1.MsgUpdateParams.params": + return x.Params != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.MsgUpdateParams.authority": + x.Authority = "" + case "network.reward.v1.MsgUpdateParams.params": + x.Params = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParams) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.MsgUpdateParams.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + case "network.reward.v1.MsgUpdateParams.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParams does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.MsgUpdateParams.authority": + x.Authority = value.Interface().(string) + case "network.reward.v1.MsgUpdateParams.params": + x.Params = value.Message().Interface().(*Params) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.MsgUpdateParams.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "network.reward.v1.MsgUpdateParams.authority": + panic(fmt.Errorf("field authority of message network.reward.v1.MsgUpdateParams is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParams) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.MsgUpdateParams.authority": + return protoreflect.ValueOfString("") + case "network.reward.v1.MsgUpdateParams.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParams")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParams does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParams) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.MsgUpdateParams", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParams) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParams) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParams) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParams) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParams) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgUpdateParamsResponse protoreflect.MessageDescriptor +) + +func init() { + file_network_reward_v1_tx_proto_init() + md_MsgUpdateParamsResponse = File_network_reward_v1_tx_proto.Messages().ByName("MsgUpdateParamsResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgUpdateParamsResponse)(nil) + +type fastReflection_MsgUpdateParamsResponse MsgUpdateParamsResponse + +func (x *MsgUpdateParamsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(x) +} + +func (x *MsgUpdateParamsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_tx_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) +} + +var _fastReflection_MsgUpdateParamsResponse_messageType fastReflection_MsgUpdateParamsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateParamsResponse_messageType{} + +type fastReflection_MsgUpdateParamsResponse_messageType struct{} + +func (x fastReflection_MsgUpdateParamsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateParamsResponse)(nil) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} +func (x fastReflection_MsgUpdateParamsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgUpdateParamsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateParamsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgUpdateParamsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateParamsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgUpdateParamsResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateParamsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgUpdateParamsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateParamsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgUpdateParamsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateParamsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateParamsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParamsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateParamsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgUpdateParamsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgUpdateParamsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateParamsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.MsgUpdateParamsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateParamsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateParamsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateParamsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateParamsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateParamsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgSetRewards_3_list)(nil) + +type _MsgSetRewards_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgSetRewards_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgSetRewards_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgSetRewards_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgSetRewards_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgSetRewards_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgSetRewards_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgSetRewards_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgSetRewards_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgSetRewards protoreflect.MessageDescriptor + fd_MsgSetRewards_provider protoreflect.FieldDescriptor + fd_MsgSetRewards_launchID protoreflect.FieldDescriptor + fd_MsgSetRewards_coins protoreflect.FieldDescriptor + fd_MsgSetRewards_lastRewardHeight protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_tx_proto_init() + md_MsgSetRewards = File_network_reward_v1_tx_proto.Messages().ByName("MsgSetRewards") + fd_MsgSetRewards_provider = md_MsgSetRewards.Fields().ByName("provider") + fd_MsgSetRewards_launchID = md_MsgSetRewards.Fields().ByName("launchID") + fd_MsgSetRewards_coins = md_MsgSetRewards.Fields().ByName("coins") + fd_MsgSetRewards_lastRewardHeight = md_MsgSetRewards.Fields().ByName("lastRewardHeight") +} + +var _ protoreflect.Message = (*fastReflection_MsgSetRewards)(nil) + +type fastReflection_MsgSetRewards MsgSetRewards + +func (x *MsgSetRewards) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgSetRewards)(x) +} + +func (x *MsgSetRewards) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_tx_proto_msgTypes[2] + 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) +} + +var _fastReflection_MsgSetRewards_messageType fastReflection_MsgSetRewards_messageType +var _ protoreflect.MessageType = fastReflection_MsgSetRewards_messageType{} + +type fastReflection_MsgSetRewards_messageType struct{} + +func (x fastReflection_MsgSetRewards_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgSetRewards)(nil) +} +func (x fastReflection_MsgSetRewards_messageType) New() protoreflect.Message { + return new(fastReflection_MsgSetRewards) +} +func (x fastReflection_MsgSetRewards_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSetRewards +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgSetRewards) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSetRewards +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgSetRewards) Type() protoreflect.MessageType { + return _fastReflection_MsgSetRewards_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgSetRewards) New() protoreflect.Message { + return new(fastReflection_MsgSetRewards) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgSetRewards) Interface() protoreflect.ProtoMessage { + return (*MsgSetRewards)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgSetRewards) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Provider != "" { + value := protoreflect.ValueOfString(x.Provider) + if !f(fd_MsgSetRewards_provider, value) { + return + } + } + if x.LaunchID != uint64(0) { + value := protoreflect.ValueOfUint64(x.LaunchID) + if !f(fd_MsgSetRewards_launchID, value) { + return + } + } + if len(x.Coins) != 0 { + value := protoreflect.ValueOfList(&_MsgSetRewards_3_list{list: &x.Coins}) + if !f(fd_MsgSetRewards_coins, value) { + return + } + } + if x.LastRewardHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.LastRewardHeight) + if !f(fd_MsgSetRewards_lastRewardHeight, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgSetRewards) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewards.provider": + return x.Provider != "" + case "network.reward.v1.MsgSetRewards.launchID": + return x.LaunchID != uint64(0) + case "network.reward.v1.MsgSetRewards.coins": + return len(x.Coins) != 0 + case "network.reward.v1.MsgSetRewards.lastRewardHeight": + return x.LastRewardHeight != int64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewards")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewards does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSetRewards) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewards.provider": + x.Provider = "" + case "network.reward.v1.MsgSetRewards.launchID": + x.LaunchID = uint64(0) + case "network.reward.v1.MsgSetRewards.coins": + x.Coins = nil + case "network.reward.v1.MsgSetRewards.lastRewardHeight": + x.LastRewardHeight = int64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewards")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewards does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgSetRewards) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.MsgSetRewards.provider": + value := x.Provider + return protoreflect.ValueOfString(value) + case "network.reward.v1.MsgSetRewards.launchID": + value := x.LaunchID + return protoreflect.ValueOfUint64(value) + case "network.reward.v1.MsgSetRewards.coins": + if len(x.Coins) == 0 { + return protoreflect.ValueOfList(&_MsgSetRewards_3_list{}) + } + listValue := &_MsgSetRewards_3_list{list: &x.Coins} + return protoreflect.ValueOfList(listValue) + case "network.reward.v1.MsgSetRewards.lastRewardHeight": + value := x.LastRewardHeight + return protoreflect.ValueOfInt64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewards")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewards does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSetRewards) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewards.provider": + x.Provider = value.Interface().(string) + case "network.reward.v1.MsgSetRewards.launchID": + x.LaunchID = value.Uint() + case "network.reward.v1.MsgSetRewards.coins": + lv := value.List() + clv := lv.(*_MsgSetRewards_3_list) + x.Coins = *clv.list + case "network.reward.v1.MsgSetRewards.lastRewardHeight": + x.LastRewardHeight = value.Int() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewards")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewards does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSetRewards) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewards.coins": + if x.Coins == nil { + x.Coins = []*v1beta1.Coin{} + } + value := &_MsgSetRewards_3_list{list: &x.Coins} + return protoreflect.ValueOfList(value) + case "network.reward.v1.MsgSetRewards.provider": + panic(fmt.Errorf("field provider of message network.reward.v1.MsgSetRewards is not mutable")) + case "network.reward.v1.MsgSetRewards.launchID": + panic(fmt.Errorf("field launchID of message network.reward.v1.MsgSetRewards is not mutable")) + case "network.reward.v1.MsgSetRewards.lastRewardHeight": + panic(fmt.Errorf("field lastRewardHeight of message network.reward.v1.MsgSetRewards is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewards")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewards does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgSetRewards) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewards.provider": + return protoreflect.ValueOfString("") + case "network.reward.v1.MsgSetRewards.launchID": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.reward.v1.MsgSetRewards.coins": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgSetRewards_3_list{list: &list}) + case "network.reward.v1.MsgSetRewards.lastRewardHeight": + return protoreflect.ValueOfInt64(int64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewards")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewards does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgSetRewards) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.MsgSetRewards", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgSetRewards) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSetRewards) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgSetRewards) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgSetRewards) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgSetRewards) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Provider) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.LaunchID != 0 { + n += 1 + runtime.Sov(uint64(x.LaunchID)) + } + if len(x.Coins) > 0 { + for _, e := range x.Coins { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.LastRewardHeight != 0 { + n += 1 + runtime.Sov(uint64(x.LastRewardHeight)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgSetRewards) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.LastRewardHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LastRewardHeight)) + i-- + dAtA[i] = 0x20 + } + if len(x.Coins) > 0 { + for iNdEx := len(x.Coins) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Coins[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if x.LaunchID != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.LaunchID)) + i-- + dAtA[i] = 0x10 + } + if len(x.Provider) > 0 { + i -= len(x.Provider) + copy(dAtA[i:], x.Provider) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Provider))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgSetRewards) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSetRewards: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSetRewards: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Provider = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + x.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Coins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Coins = append(x.Coins, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Coins[len(x.Coins)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LastRewardHeight", wireType) + } + x.LastRewardHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.LastRewardHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_MsgSetRewardsResponse_1_list)(nil) + +type _MsgSetRewardsResponse_1_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgSetRewardsResponse_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgSetRewardsResponse_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgSetRewardsResponse_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgSetRewardsResponse_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgSetRewardsResponse_1_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgSetRewardsResponse_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgSetRewardsResponse_1_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgSetRewardsResponse_1_list) IsValid() bool { + return x.list != nil +} + +var _ protoreflect.List = (*_MsgSetRewardsResponse_3_list)(nil) + +type _MsgSetRewardsResponse_3_list struct { + list *[]*v1beta1.Coin +} + +func (x *_MsgSetRewardsResponse_3_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_MsgSetRewardsResponse_3_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_MsgSetRewardsResponse_3_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + (*x.list)[i] = concreteValue +} + +func (x *_MsgSetRewardsResponse_3_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*v1beta1.Coin) + *x.list = append(*x.list, concreteValue) +} + +func (x *_MsgSetRewardsResponse_3_list) AppendMutable() protoreflect.Value { + v := new(v1beta1.Coin) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgSetRewardsResponse_3_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_MsgSetRewardsResponse_3_list) NewElement() protoreflect.Value { + v := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_MsgSetRewardsResponse_3_list) IsValid() bool { + return x.list != nil +} + +var ( + md_MsgSetRewardsResponse protoreflect.MessageDescriptor + fd_MsgSetRewardsResponse_previousCoins protoreflect.FieldDescriptor + fd_MsgSetRewardsResponse_previousLastRewardHeight protoreflect.FieldDescriptor + fd_MsgSetRewardsResponse_newCoins protoreflect.FieldDescriptor + fd_MsgSetRewardsResponse_newLastRewardHeight protoreflect.FieldDescriptor +) + +func init() { + file_network_reward_v1_tx_proto_init() + md_MsgSetRewardsResponse = File_network_reward_v1_tx_proto.Messages().ByName("MsgSetRewardsResponse") + fd_MsgSetRewardsResponse_previousCoins = md_MsgSetRewardsResponse.Fields().ByName("previousCoins") + fd_MsgSetRewardsResponse_previousLastRewardHeight = md_MsgSetRewardsResponse.Fields().ByName("previousLastRewardHeight") + fd_MsgSetRewardsResponse_newCoins = md_MsgSetRewardsResponse.Fields().ByName("newCoins") + fd_MsgSetRewardsResponse_newLastRewardHeight = md_MsgSetRewardsResponse.Fields().ByName("newLastRewardHeight") +} + +var _ protoreflect.Message = (*fastReflection_MsgSetRewardsResponse)(nil) + +type fastReflection_MsgSetRewardsResponse MsgSetRewardsResponse + +func (x *MsgSetRewardsResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgSetRewardsResponse)(x) +} + +func (x *MsgSetRewardsResponse) slowProtoReflect() protoreflect.Message { + mi := &file_network_reward_v1_tx_proto_msgTypes[3] + 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) +} + +var _fastReflection_MsgSetRewardsResponse_messageType fastReflection_MsgSetRewardsResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgSetRewardsResponse_messageType{} + +type fastReflection_MsgSetRewardsResponse_messageType struct{} + +func (x fastReflection_MsgSetRewardsResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgSetRewardsResponse)(nil) +} +func (x fastReflection_MsgSetRewardsResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgSetRewardsResponse) +} +func (x fastReflection_MsgSetRewardsResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSetRewardsResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgSetRewardsResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgSetRewardsResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgSetRewardsResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgSetRewardsResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgSetRewardsResponse) New() protoreflect.Message { + return new(fastReflection_MsgSetRewardsResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgSetRewardsResponse) Interface() protoreflect.ProtoMessage { + return (*MsgSetRewardsResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgSetRewardsResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.PreviousCoins) != 0 { + value := protoreflect.ValueOfList(&_MsgSetRewardsResponse_1_list{list: &x.PreviousCoins}) + if !f(fd_MsgSetRewardsResponse_previousCoins, value) { + return + } + } + if x.PreviousLastRewardHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.PreviousLastRewardHeight) + if !f(fd_MsgSetRewardsResponse_previousLastRewardHeight, value) { + return + } + } + if len(x.NewCoins) != 0 { + value := protoreflect.ValueOfList(&_MsgSetRewardsResponse_3_list{list: &x.NewCoins}) + if !f(fd_MsgSetRewardsResponse_newCoins, value) { + return + } + } + if x.NewLastRewardHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.NewLastRewardHeight) + if !f(fd_MsgSetRewardsResponse_newLastRewardHeight, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgSetRewardsResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewardsResponse.previousCoins": + return len(x.PreviousCoins) != 0 + case "network.reward.v1.MsgSetRewardsResponse.previousLastRewardHeight": + return x.PreviousLastRewardHeight != int64(0) + case "network.reward.v1.MsgSetRewardsResponse.newCoins": + return len(x.NewCoins) != 0 + case "network.reward.v1.MsgSetRewardsResponse.newLastRewardHeight": + return x.NewLastRewardHeight != int64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewardsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewardsResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSetRewardsResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewardsResponse.previousCoins": + x.PreviousCoins = nil + case "network.reward.v1.MsgSetRewardsResponse.previousLastRewardHeight": + x.PreviousLastRewardHeight = int64(0) + case "network.reward.v1.MsgSetRewardsResponse.newCoins": + x.NewCoins = nil + case "network.reward.v1.MsgSetRewardsResponse.newLastRewardHeight": + x.NewLastRewardHeight = int64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewardsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewardsResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgSetRewardsResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.reward.v1.MsgSetRewardsResponse.previousCoins": + if len(x.PreviousCoins) == 0 { + return protoreflect.ValueOfList(&_MsgSetRewardsResponse_1_list{}) + } + listValue := &_MsgSetRewardsResponse_1_list{list: &x.PreviousCoins} + return protoreflect.ValueOfList(listValue) + case "network.reward.v1.MsgSetRewardsResponse.previousLastRewardHeight": + value := x.PreviousLastRewardHeight + return protoreflect.ValueOfInt64(value) + case "network.reward.v1.MsgSetRewardsResponse.newCoins": + if len(x.NewCoins) == 0 { + return protoreflect.ValueOfList(&_MsgSetRewardsResponse_3_list{}) + } + listValue := &_MsgSetRewardsResponse_3_list{list: &x.NewCoins} + return protoreflect.ValueOfList(listValue) + case "network.reward.v1.MsgSetRewardsResponse.newLastRewardHeight": + value := x.NewLastRewardHeight + return protoreflect.ValueOfInt64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewardsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewardsResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSetRewardsResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewardsResponse.previousCoins": + lv := value.List() + clv := lv.(*_MsgSetRewardsResponse_1_list) + x.PreviousCoins = *clv.list + case "network.reward.v1.MsgSetRewardsResponse.previousLastRewardHeight": + x.PreviousLastRewardHeight = value.Int() + case "network.reward.v1.MsgSetRewardsResponse.newCoins": + lv := value.List() + clv := lv.(*_MsgSetRewardsResponse_3_list) + x.NewCoins = *clv.list + case "network.reward.v1.MsgSetRewardsResponse.newLastRewardHeight": + x.NewLastRewardHeight = value.Int() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewardsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewardsResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSetRewardsResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewardsResponse.previousCoins": + if x.PreviousCoins == nil { + x.PreviousCoins = []*v1beta1.Coin{} + } + value := &_MsgSetRewardsResponse_1_list{list: &x.PreviousCoins} + return protoreflect.ValueOfList(value) + case "network.reward.v1.MsgSetRewardsResponse.newCoins": + if x.NewCoins == nil { + x.NewCoins = []*v1beta1.Coin{} + } + value := &_MsgSetRewardsResponse_3_list{list: &x.NewCoins} + return protoreflect.ValueOfList(value) + case "network.reward.v1.MsgSetRewardsResponse.previousLastRewardHeight": + panic(fmt.Errorf("field previousLastRewardHeight of message network.reward.v1.MsgSetRewardsResponse is not mutable")) + case "network.reward.v1.MsgSetRewardsResponse.newLastRewardHeight": + panic(fmt.Errorf("field newLastRewardHeight of message network.reward.v1.MsgSetRewardsResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewardsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewardsResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgSetRewardsResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.reward.v1.MsgSetRewardsResponse.previousCoins": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgSetRewardsResponse_1_list{list: &list}) + case "network.reward.v1.MsgSetRewardsResponse.previousLastRewardHeight": + return protoreflect.ValueOfInt64(int64(0)) + case "network.reward.v1.MsgSetRewardsResponse.newCoins": + list := []*v1beta1.Coin{} + return protoreflect.ValueOfList(&_MsgSetRewardsResponse_3_list{list: &list}) + case "network.reward.v1.MsgSetRewardsResponse.newLastRewardHeight": + return protoreflect.ValueOfInt64(int64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.reward.v1.MsgSetRewardsResponse")) + } + panic(fmt.Errorf("message network.reward.v1.MsgSetRewardsResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgSetRewardsResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.reward.v1.MsgSetRewardsResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgSetRewardsResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgSetRewardsResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgSetRewardsResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgSetRewardsResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgSetRewardsResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.PreviousCoins) > 0 { + for _, e := range x.PreviousCoins { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.PreviousLastRewardHeight != 0 { + n += 1 + runtime.Sov(uint64(x.PreviousLastRewardHeight)) + } + if len(x.NewCoins) > 0 { + for _, e := range x.NewCoins { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.NewLastRewardHeight != 0 { + n += 1 + runtime.Sov(uint64(x.NewLastRewardHeight)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgSetRewardsResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.NewLastRewardHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.NewLastRewardHeight)) + i-- + dAtA[i] = 0x20 + } + if len(x.NewCoins) > 0 { + for iNdEx := len(x.NewCoins) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.NewCoins[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + } + if x.PreviousLastRewardHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.PreviousLastRewardHeight)) + i-- + dAtA[i] = 0x10 + } + if len(x.PreviousCoins) > 0 { + for iNdEx := len(x.PreviousCoins) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.PreviousCoins[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgSetRewardsResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSetRewardsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgSetRewardsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PreviousCoins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.PreviousCoins = append(x.PreviousCoins, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.PreviousCoins[len(x.PreviousCoins)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PreviousLastRewardHeight", wireType) + } + x.PreviousLastRewardHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.PreviousLastRewardHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewCoins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NewCoins = append(x.NewCoins, &v1beta1.Coin{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.NewCoins[len(x.NewCoins)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewLastRewardHeight", wireType) + } + x.NewLastRewardHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.NewLastRewardHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/reward/v1/tx.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params *Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` +} + +func (x *MsgUpdateParams) Reset() { + *x = MsgUpdateParams{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_tx_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParams) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParams.ProtoReflect.Descriptor instead. +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return file_network_reward_v1_tx_proto_rawDescGZIP(), []int{0} +} + +func (x *MsgUpdateParams) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +func (x *MsgUpdateParams) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateParamsResponse) Reset() { + *x = MsgUpdateParamsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_tx_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateParamsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateParamsResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateParamsResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return file_network_reward_v1_tx_proto_rawDescGZIP(), []int{1} +} + +type MsgSetRewards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provider string `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` + LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` + Coins []*v1beta1.Coin `protobuf:"bytes,3,rep,name=coins,proto3" json:"coins,omitempty"` + LastRewardHeight int64 `protobuf:"varint,4,opt,name=lastRewardHeight,proto3" json:"lastRewardHeight,omitempty"` +} + +func (x *MsgSetRewards) Reset() { + *x = MsgSetRewards{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_tx_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgSetRewards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgSetRewards) ProtoMessage() {} + +// Deprecated: Use MsgSetRewards.ProtoReflect.Descriptor instead. +func (*MsgSetRewards) Descriptor() ([]byte, []int) { + return file_network_reward_v1_tx_proto_rawDescGZIP(), []int{2} +} + +func (x *MsgSetRewards) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +func (x *MsgSetRewards) GetLaunchID() uint64 { + if x != nil { + return x.LaunchID + } + return 0 +} + +func (x *MsgSetRewards) GetCoins() []*v1beta1.Coin { + if x != nil { + return x.Coins + } + return nil +} + +func (x *MsgSetRewards) GetLastRewardHeight() int64 { + if x != nil { + return x.LastRewardHeight + } + return 0 +} + +type MsgSetRewardsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PreviousCoins []*v1beta1.Coin `protobuf:"bytes,1,rep,name=previousCoins,proto3" json:"previousCoins,omitempty"` + PreviousLastRewardHeight int64 `protobuf:"varint,2,opt,name=previousLastRewardHeight,proto3" json:"previousLastRewardHeight,omitempty"` + NewCoins []*v1beta1.Coin `protobuf:"bytes,3,rep,name=newCoins,proto3" json:"newCoins,omitempty"` + NewLastRewardHeight int64 `protobuf:"varint,4,opt,name=newLastRewardHeight,proto3" json:"newLastRewardHeight,omitempty"` +} + +func (x *MsgSetRewardsResponse) Reset() { + *x = MsgSetRewardsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_network_reward_v1_tx_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgSetRewardsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgSetRewardsResponse) ProtoMessage() {} + +// Deprecated: Use MsgSetRewardsResponse.ProtoReflect.Descriptor instead. +func (*MsgSetRewardsResponse) Descriptor() ([]byte, []int) { + return file_network_reward_v1_tx_proto_rawDescGZIP(), []int{3} +} + +func (x *MsgSetRewardsResponse) GetPreviousCoins() []*v1beta1.Coin { + if x != nil { + return x.PreviousCoins + } + return nil +} + +func (x *MsgSetRewardsResponse) GetPreviousLastRewardHeight() int64 { + if x != nil { + return x.PreviousLastRewardHeight + } + return 0 +} + +func (x *MsgSetRewardsResponse) GetNewCoins() []*v1beta1.Coin { + if x != nil { + return x.NewCoins + } + return nil +} + +func (x *MsgSetRewardsResponse) GetNewLastRewardHeight() int64 { + if x != nil { + return x.NewLastRewardHeight + } + return 0 +} + +var File_network_reward_v1_tx_proto protoreflect.FileDescriptor + +var file_network_reward_v1_tx_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x1a, + 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, 0x2f, 0x76, + 0x31, 0x2f, 0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbc, 0x01, 0x0a, + 0x0f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x36, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x33, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x8a, 0xe7, 0xb0, 0x2a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x78, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x4d, 0x73, 0x67, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x4d, + 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc1, 0x02, 0x0a, 0x0d, 0x4d, 0x73, 0x67, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x44, 0x12, 0xa2, 0x01, 0x0a, 0x05, 0x63, + 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, + 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, + 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x12, + 0x2a, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x0d, 0x82, 0xe7, 0xb0, + 0x2a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0xe5, 0x03, 0x0a, 0x15, 0x4d, + 0x73, 0x67, 0x53, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb2, 0x01, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, + 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, + 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x73, 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, + 0x63, 0x6f, 0x69, 0x6e, 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0xa8, 0x01, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x43, 0x6f, 0x69, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x69, 0x6e, 0x42, 0x71, 0xc8, 0xde, 0x1f, 0x00, 0xfa, 0xde, 0x1f, 0x27, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x69, 0x6e, 0xaa, 0xdf, 0x1f, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x73, + 0x9a, 0xe7, 0xb0, 0x2a, 0x0c, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x69, 0x6e, + 0x73, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x73, + 0x12, 0x30, 0x0a, 0x13, 0x6e, 0x65, 0x77, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x6e, + 0x65, 0x77, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x32, 0xc6, 0x01, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x5e, 0x0a, 0x0c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2a, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0a, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x53, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x1a, 0x28, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x53, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xc0, 0x01, 0x0a, 0x15, + 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, + 0x69, 0x74, 0x65, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2f, 0x76, + 0x31, 0x3b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x52, 0x58, + 0xaa, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x3a, 0x3a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_reward_v1_tx_proto_rawDescOnce sync.Once + file_network_reward_v1_tx_proto_rawDescData = file_network_reward_v1_tx_proto_rawDesc +) + +func file_network_reward_v1_tx_proto_rawDescGZIP() []byte { + file_network_reward_v1_tx_proto_rawDescOnce.Do(func() { + file_network_reward_v1_tx_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_reward_v1_tx_proto_rawDescData) + }) + return file_network_reward_v1_tx_proto_rawDescData +} + +var file_network_reward_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_network_reward_v1_tx_proto_goTypes = []interface{}{ + (*MsgUpdateParams)(nil), // 0: network.reward.v1.MsgUpdateParams + (*MsgUpdateParamsResponse)(nil), // 1: network.reward.v1.MsgUpdateParamsResponse + (*MsgSetRewards)(nil), // 2: network.reward.v1.MsgSetRewards + (*MsgSetRewardsResponse)(nil), // 3: network.reward.v1.MsgSetRewardsResponse + (*Params)(nil), // 4: network.reward.v1.Params + (*v1beta1.Coin)(nil), // 5: cosmos.base.v1beta1.Coin +} +var file_network_reward_v1_tx_proto_depIdxs = []int32{ + 4, // 0: network.reward.v1.MsgUpdateParams.params:type_name -> network.reward.v1.Params + 5, // 1: network.reward.v1.MsgSetRewards.coins:type_name -> cosmos.base.v1beta1.Coin + 5, // 2: network.reward.v1.MsgSetRewardsResponse.previousCoins:type_name -> cosmos.base.v1beta1.Coin + 5, // 3: network.reward.v1.MsgSetRewardsResponse.newCoins:type_name -> cosmos.base.v1beta1.Coin + 0, // 4: network.reward.v1.Msg.UpdateParams:input_type -> network.reward.v1.MsgUpdateParams + 2, // 5: network.reward.v1.Msg.SetRewards:input_type -> network.reward.v1.MsgSetRewards + 1, // 6: network.reward.v1.Msg.UpdateParams:output_type -> network.reward.v1.MsgUpdateParamsResponse + 3, // 7: network.reward.v1.Msg.SetRewards:output_type -> network.reward.v1.MsgSetRewardsResponse + 6, // [6:8] is the sub-list for method output_type + 4, // [4:6] 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_network_reward_v1_tx_proto_init() } +func file_network_reward_v1_tx_proto_init() { + if File_network_reward_v1_tx_proto != nil { + return + } + file_network_reward_v1_params_proto_init() + if !protoimpl.UnsafeEnabled { + file_network_reward_v1_tx_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_tx_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgUpdateParamsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_tx_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSetRewards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_reward_v1_tx_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSetRewardsResponse); 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_network_reward_v1_tx_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_network_reward_v1_tx_proto_goTypes, + DependencyIndexes: file_network_reward_v1_tx_proto_depIdxs, + MessageInfos: file_network_reward_v1_tx_proto_msgTypes, + }.Build() + File_network_reward_v1_tx_proto = out.File + file_network_reward_v1_tx_proto_rawDesc = nil + file_network_reward_v1_tx_proto_goTypes = nil + file_network_reward_v1_tx_proto_depIdxs = nil +} diff --git a/api/network/reward/v1/tx_grpc.pb.go b/api/network/reward/v1/tx_grpc.pb.go new file mode 100644 index 00000000..02dbfac5 --- /dev/null +++ b/api/network/reward/v1/tx_grpc.pb.go @@ -0,0 +1,150 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: network/reward/v1/tx.proto + +package rewardv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Msg_UpdateParams_FullMethodName = "/network.reward.v1.Msg/UpdateParams" + Msg_SetRewards_FullMethodName = "/network.reward.v1.Msg/SetRewards" +) + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + SetRewards(ctx context.Context, in *MsgSetRewards, opts ...grpc.CallOption) (*MsgSetRewardsResponse, error) +} + +type msgClient struct { + cc grpc.ClientConnInterface +} + +func NewMsgClient(cc grpc.ClientConnInterface) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, Msg_UpdateParams_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SetRewards(ctx context.Context, in *MsgSetRewards, opts ...grpc.CallOption) (*MsgSetRewardsResponse, error) { + out := new(MsgSetRewardsResponse) + err := c.cc.Invoke(ctx, Msg_SetRewards_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +// All implementations must embed UnimplementedMsgServer +// for forward compatibility +type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + SetRewards(context.Context, *MsgSetRewards) (*MsgSetRewardsResponse, error) + mustEmbedUnimplementedMsgServer() +} + +// UnimplementedMsgServer must be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (UnimplementedMsgServer) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} +func (UnimplementedMsgServer) SetRewards(context.Context, *MsgSetRewards) (*MsgSetRewardsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetRewards not implemented") +} +func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} + +// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MsgServer will +// result in compilation errors. +type UnsafeMsgServer interface { + mustEmbedUnimplementedMsgServer() +} + +func RegisterMsgServer(s grpc.ServiceRegistrar, srv MsgServer) { + s.RegisterService(&Msg_ServiceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_UpdateParams_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SetRewards_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSetRewards) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SetRewards(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Msg_SetRewards_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SetRewards(ctx, req.(*MsgSetRewards)) + } + return interceptor(ctx, in, info, handler) +} + +// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Msg_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "network.reward.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + { + MethodName: "SetRewards", + Handler: _Msg_SetRewards_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/reward/v1/tx.proto", +} diff --git a/api/network/types/ibc.pulsar.go b/api/network/types/ibc.pulsar.go new file mode 100644 index 00000000..e1715200 --- /dev/null +++ b/api/network/types/ibc.pulsar.go @@ -0,0 +1,2940 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package types + +import ( + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MerkleRoot protoreflect.MessageDescriptor + fd_MerkleRoot_hash protoreflect.FieldDescriptor +) + +func init() { + file_network_types_ibc_proto_init() + md_MerkleRoot = File_network_types_ibc_proto.Messages().ByName("MerkleRoot") + fd_MerkleRoot_hash = md_MerkleRoot.Fields().ByName("hash") +} + +var _ protoreflect.Message = (*fastReflection_MerkleRoot)(nil) + +type fastReflection_MerkleRoot MerkleRoot + +func (x *MerkleRoot) ProtoReflect() protoreflect.Message { + return (*fastReflection_MerkleRoot)(x) +} + +func (x *MerkleRoot) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_ibc_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) +} + +var _fastReflection_MerkleRoot_messageType fastReflection_MerkleRoot_messageType +var _ protoreflect.MessageType = fastReflection_MerkleRoot_messageType{} + +type fastReflection_MerkleRoot_messageType struct{} + +func (x fastReflection_MerkleRoot_messageType) Zero() protoreflect.Message { + return (*fastReflection_MerkleRoot)(nil) +} +func (x fastReflection_MerkleRoot_messageType) New() protoreflect.Message { + return new(fastReflection_MerkleRoot) +} +func (x fastReflection_MerkleRoot_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MerkleRoot +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MerkleRoot) Descriptor() protoreflect.MessageDescriptor { + return md_MerkleRoot +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MerkleRoot) Type() protoreflect.MessageType { + return _fastReflection_MerkleRoot_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MerkleRoot) New() protoreflect.Message { + return new(fastReflection_MerkleRoot) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MerkleRoot) Interface() protoreflect.ProtoMessage { + return (*MerkleRoot)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MerkleRoot) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Hash != "" { + value := protoreflect.ValueOfString(x.Hash) + if !f(fd_MerkleRoot_hash, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MerkleRoot) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.MerkleRoot.hash": + return x.Hash != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MerkleRoot")) + } + panic(fmt.Errorf("message network.types.MerkleRoot does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MerkleRoot) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.MerkleRoot.hash": + x.Hash = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MerkleRoot")) + } + panic(fmt.Errorf("message network.types.MerkleRoot does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MerkleRoot) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.MerkleRoot.hash": + value := x.Hash + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MerkleRoot")) + } + panic(fmt.Errorf("message network.types.MerkleRoot does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MerkleRoot) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.MerkleRoot.hash": + x.Hash = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MerkleRoot")) + } + panic(fmt.Errorf("message network.types.MerkleRoot does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MerkleRoot) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.MerkleRoot.hash": + panic(fmt.Errorf("field hash of message network.types.MerkleRoot is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MerkleRoot")) + } + panic(fmt.Errorf("message network.types.MerkleRoot does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MerkleRoot) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.MerkleRoot.hash": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MerkleRoot")) + } + panic(fmt.Errorf("message network.types.MerkleRoot does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MerkleRoot) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.MerkleRoot", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MerkleRoot) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MerkleRoot) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MerkleRoot) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MerkleRoot) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MerkleRoot) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Hash) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MerkleRoot) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Hash) > 0 { + i -= len(x.Hash) + copy(dAtA[i:], x.Hash) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Hash))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MerkleRoot) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MerkleRoot: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MerkleRoot: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Hash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_ConsensusState protoreflect.MessageDescriptor + fd_ConsensusState_nextValidatorsHash protoreflect.FieldDescriptor + fd_ConsensusState_timestamp protoreflect.FieldDescriptor + fd_ConsensusState_root protoreflect.FieldDescriptor +) + +func init() { + file_network_types_ibc_proto_init() + md_ConsensusState = File_network_types_ibc_proto.Messages().ByName("ConsensusState") + fd_ConsensusState_nextValidatorsHash = md_ConsensusState.Fields().ByName("nextValidatorsHash") + fd_ConsensusState_timestamp = md_ConsensusState.Fields().ByName("timestamp") + fd_ConsensusState_root = md_ConsensusState.Fields().ByName("root") +} + +var _ protoreflect.Message = (*fastReflection_ConsensusState)(nil) + +type fastReflection_ConsensusState ConsensusState + +func (x *ConsensusState) ProtoReflect() protoreflect.Message { + return (*fastReflection_ConsensusState)(x) +} + +func (x *ConsensusState) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_ibc_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) +} + +var _fastReflection_ConsensusState_messageType fastReflection_ConsensusState_messageType +var _ protoreflect.MessageType = fastReflection_ConsensusState_messageType{} + +type fastReflection_ConsensusState_messageType struct{} + +func (x fastReflection_ConsensusState_messageType) Zero() protoreflect.Message { + return (*fastReflection_ConsensusState)(nil) +} +func (x fastReflection_ConsensusState_messageType) New() protoreflect.Message { + return new(fastReflection_ConsensusState) +} +func (x fastReflection_ConsensusState_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ConsensusState +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ConsensusState) Descriptor() protoreflect.MessageDescriptor { + return md_ConsensusState +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ConsensusState) Type() protoreflect.MessageType { + return _fastReflection_ConsensusState_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ConsensusState) New() protoreflect.Message { + return new(fastReflection_ConsensusState) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ConsensusState) Interface() protoreflect.ProtoMessage { + return (*ConsensusState)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ConsensusState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.NextValidatorsHash != "" { + value := protoreflect.ValueOfString(x.NextValidatorsHash) + if !f(fd_ConsensusState_nextValidatorsHash, value) { + return + } + } + if x.Timestamp != "" { + value := protoreflect.ValueOfString(x.Timestamp) + if !f(fd_ConsensusState_timestamp, value) { + return + } + } + if x.Root != nil { + value := protoreflect.ValueOfMessage(x.Root.ProtoReflect()) + if !f(fd_ConsensusState_root, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ConsensusState) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.ConsensusState.nextValidatorsHash": + return x.NextValidatorsHash != "" + case "network.types.ConsensusState.timestamp": + return x.Timestamp != "" + case "network.types.ConsensusState.root": + return x.Root != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ConsensusState")) + } + panic(fmt.Errorf("message network.types.ConsensusState does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsensusState) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.ConsensusState.nextValidatorsHash": + x.NextValidatorsHash = "" + case "network.types.ConsensusState.timestamp": + x.Timestamp = "" + case "network.types.ConsensusState.root": + x.Root = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ConsensusState")) + } + panic(fmt.Errorf("message network.types.ConsensusState does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ConsensusState) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.ConsensusState.nextValidatorsHash": + value := x.NextValidatorsHash + return protoreflect.ValueOfString(value) + case "network.types.ConsensusState.timestamp": + value := x.Timestamp + return protoreflect.ValueOfString(value) + case "network.types.ConsensusState.root": + value := x.Root + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ConsensusState")) + } + panic(fmt.Errorf("message network.types.ConsensusState does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsensusState) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.ConsensusState.nextValidatorsHash": + x.NextValidatorsHash = value.Interface().(string) + case "network.types.ConsensusState.timestamp": + x.Timestamp = value.Interface().(string) + case "network.types.ConsensusState.root": + x.Root = value.Message().Interface().(*MerkleRoot) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ConsensusState")) + } + panic(fmt.Errorf("message network.types.ConsensusState does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsensusState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.ConsensusState.root": + if x.Root == nil { + x.Root = new(MerkleRoot) + } + return protoreflect.ValueOfMessage(x.Root.ProtoReflect()) + case "network.types.ConsensusState.nextValidatorsHash": + panic(fmt.Errorf("field nextValidatorsHash of message network.types.ConsensusState is not mutable")) + case "network.types.ConsensusState.timestamp": + panic(fmt.Errorf("field timestamp of message network.types.ConsensusState is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ConsensusState")) + } + panic(fmt.Errorf("message network.types.ConsensusState does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ConsensusState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.ConsensusState.nextValidatorsHash": + return protoreflect.ValueOfString("") + case "network.types.ConsensusState.timestamp": + return protoreflect.ValueOfString("") + case "network.types.ConsensusState.root": + m := new(MerkleRoot) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ConsensusState")) + } + panic(fmt.Errorf("message network.types.ConsensusState does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ConsensusState) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.ConsensusState", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ConsensusState) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsensusState) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ConsensusState) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ConsensusState) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ConsensusState) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.NextValidatorsHash) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Timestamp) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Root != nil { + l = options.Size(x.Root) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ConsensusState) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.Root != nil { + encoded, err := options.Marshal(x.Root) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.Timestamp) > 0 { + i -= len(x.Timestamp) + copy(dAtA[i:], x.Timestamp) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Timestamp))) + i-- + dAtA[i] = 0x12 + } + if len(x.NextValidatorsHash) > 0 { + i -= len(x.NextValidatorsHash) + copy(dAtA[i:], x.NextValidatorsHash) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NextValidatorsHash))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ConsensusState) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ConsensusState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ConsensusState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NextValidatorsHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NextValidatorsHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Timestamp = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Root", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Root == nil { + x.Root = &MerkleRoot{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Root); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_PubKey protoreflect.MessageDescriptor + fd_PubKey_type protoreflect.FieldDescriptor + fd_PubKey_value protoreflect.FieldDescriptor +) + +func init() { + file_network_types_ibc_proto_init() + md_PubKey = File_network_types_ibc_proto.Messages().ByName("PubKey") + fd_PubKey_type = md_PubKey.Fields().ByName("type") + fd_PubKey_value = md_PubKey.Fields().ByName("value") +} + +var _ protoreflect.Message = (*fastReflection_PubKey)(nil) + +type fastReflection_PubKey PubKey + +func (x *PubKey) ProtoReflect() protoreflect.Message { + return (*fastReflection_PubKey)(x) +} + +func (x *PubKey) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_ibc_proto_msgTypes[2] + 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) +} + +var _fastReflection_PubKey_messageType fastReflection_PubKey_messageType +var _ protoreflect.MessageType = fastReflection_PubKey_messageType{} + +type fastReflection_PubKey_messageType struct{} + +func (x fastReflection_PubKey_messageType) Zero() protoreflect.Message { + return (*fastReflection_PubKey)(nil) +} +func (x fastReflection_PubKey_messageType) New() protoreflect.Message { + return new(fastReflection_PubKey) +} +func (x fastReflection_PubKey_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_PubKey +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_PubKey) Descriptor() protoreflect.MessageDescriptor { + return md_PubKey +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_PubKey) Type() protoreflect.MessageType { + return _fastReflection_PubKey_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_PubKey) New() protoreflect.Message { + return new(fastReflection_PubKey) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_PubKey) Interface() protoreflect.ProtoMessage { + return (*PubKey)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_PubKey) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Type_ != "" { + value := protoreflect.ValueOfString(x.Type_) + if !f(fd_PubKey_type, value) { + return + } + } + if x.Value != "" { + value := protoreflect.ValueOfString(x.Value) + if !f(fd_PubKey_value, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_PubKey) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.PubKey.type": + return x.Type_ != "" + case "network.types.PubKey.value": + return x.Value != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.PubKey")) + } + panic(fmt.Errorf("message network.types.PubKey does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_PubKey) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.PubKey.type": + x.Type_ = "" + case "network.types.PubKey.value": + x.Value = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.PubKey")) + } + panic(fmt.Errorf("message network.types.PubKey does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_PubKey) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.PubKey.type": + value := x.Type_ + return protoreflect.ValueOfString(value) + case "network.types.PubKey.value": + value := x.Value + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.PubKey")) + } + panic(fmt.Errorf("message network.types.PubKey does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_PubKey) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.PubKey.type": + x.Type_ = value.Interface().(string) + case "network.types.PubKey.value": + x.Value = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.PubKey")) + } + panic(fmt.Errorf("message network.types.PubKey does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_PubKey) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.PubKey.type": + panic(fmt.Errorf("field type of message network.types.PubKey is not mutable")) + case "network.types.PubKey.value": + panic(fmt.Errorf("field value of message network.types.PubKey is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.PubKey")) + } + panic(fmt.Errorf("message network.types.PubKey does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_PubKey) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.PubKey.type": + return protoreflect.ValueOfString("") + case "network.types.PubKey.value": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.PubKey")) + } + panic(fmt.Errorf("message network.types.PubKey does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_PubKey) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.PubKey", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_PubKey) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_PubKey) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_PubKey) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_PubKey) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*PubKey) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Type_) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Value) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*PubKey) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Value) > 0 { + i -= len(x.Value) + copy(dAtA[i:], x.Value) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Value))) + i-- + dAtA[i] = 0x12 + } + if len(x.Type_) > 0 { + i -= len(x.Type_) + copy(dAtA[i:], x.Type_) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Type_))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*PubKey) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: PubKey: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: PubKey: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Type_", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Type_ = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_Validator protoreflect.MessageDescriptor + fd_Validator_proposerPriority protoreflect.FieldDescriptor + fd_Validator_votingPower protoreflect.FieldDescriptor + fd_Validator_pubKey protoreflect.FieldDescriptor +) + +func init() { + file_network_types_ibc_proto_init() + md_Validator = File_network_types_ibc_proto.Messages().ByName("Validator") + fd_Validator_proposerPriority = md_Validator.Fields().ByName("proposerPriority") + fd_Validator_votingPower = md_Validator.Fields().ByName("votingPower") + fd_Validator_pubKey = md_Validator.Fields().ByName("pubKey") +} + +var _ protoreflect.Message = (*fastReflection_Validator)(nil) + +type fastReflection_Validator Validator + +func (x *Validator) ProtoReflect() protoreflect.Message { + return (*fastReflection_Validator)(x) +} + +func (x *Validator) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_ibc_proto_msgTypes[3] + 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) +} + +var _fastReflection_Validator_messageType fastReflection_Validator_messageType +var _ protoreflect.MessageType = fastReflection_Validator_messageType{} + +type fastReflection_Validator_messageType struct{} + +func (x fastReflection_Validator_messageType) Zero() protoreflect.Message { + return (*fastReflection_Validator)(nil) +} +func (x fastReflection_Validator_messageType) New() protoreflect.Message { + return new(fastReflection_Validator) +} +func (x fastReflection_Validator_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Validator +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Validator) Descriptor() protoreflect.MessageDescriptor { + return md_Validator +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Validator) Type() protoreflect.MessageType { + return _fastReflection_Validator_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Validator) New() protoreflect.Message { + return new(fastReflection_Validator) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Validator) Interface() protoreflect.ProtoMessage { + return (*Validator)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Validator) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProposerPriority != "" { + value := protoreflect.ValueOfString(x.ProposerPriority) + if !f(fd_Validator_proposerPriority, value) { + return + } + } + if x.VotingPower != "" { + value := protoreflect.ValueOfString(x.VotingPower) + if !f(fd_Validator_votingPower, value) { + return + } + } + if x.PubKey != nil { + value := protoreflect.ValueOfMessage(x.PubKey.ProtoReflect()) + if !f(fd_Validator_pubKey, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Validator) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.Validator.proposerPriority": + return x.ProposerPriority != "" + case "network.types.Validator.votingPower": + return x.VotingPower != "" + case "network.types.Validator.pubKey": + return x.PubKey != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.Validator")) + } + panic(fmt.Errorf("message network.types.Validator does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Validator) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.Validator.proposerPriority": + x.ProposerPriority = "" + case "network.types.Validator.votingPower": + x.VotingPower = "" + case "network.types.Validator.pubKey": + x.PubKey = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.Validator")) + } + panic(fmt.Errorf("message network.types.Validator does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Validator) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.Validator.proposerPriority": + value := x.ProposerPriority + return protoreflect.ValueOfString(value) + case "network.types.Validator.votingPower": + value := x.VotingPower + return protoreflect.ValueOfString(value) + case "network.types.Validator.pubKey": + value := x.PubKey + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.Validator")) + } + panic(fmt.Errorf("message network.types.Validator does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Validator) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.Validator.proposerPriority": + x.ProposerPriority = value.Interface().(string) + case "network.types.Validator.votingPower": + x.VotingPower = value.Interface().(string) + case "network.types.Validator.pubKey": + x.PubKey = value.Message().Interface().(*PubKey) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.Validator")) + } + panic(fmt.Errorf("message network.types.Validator does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Validator) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.Validator.pubKey": + if x.PubKey == nil { + x.PubKey = new(PubKey) + } + return protoreflect.ValueOfMessage(x.PubKey.ProtoReflect()) + case "network.types.Validator.proposerPriority": + panic(fmt.Errorf("field proposerPriority of message network.types.Validator is not mutable")) + case "network.types.Validator.votingPower": + panic(fmt.Errorf("field votingPower of message network.types.Validator is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.Validator")) + } + panic(fmt.Errorf("message network.types.Validator does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Validator) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.Validator.proposerPriority": + return protoreflect.ValueOfString("") + case "network.types.Validator.votingPower": + return protoreflect.ValueOfString("") + case "network.types.Validator.pubKey": + m := new(PubKey) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.Validator")) + } + panic(fmt.Errorf("message network.types.Validator does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Validator) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.Validator", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Validator) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Validator) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Validator) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Validator) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Validator) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.ProposerPriority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.VotingPower) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.PubKey != nil { + l = options.Size(x.PubKey) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Validator) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.PubKey != nil { + encoded, err := options.Marshal(x.PubKey) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if len(x.VotingPower) > 0 { + i -= len(x.VotingPower) + copy(dAtA[i:], x.VotingPower) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.VotingPower))) + i-- + dAtA[i] = 0x12 + } + if len(x.ProposerPriority) > 0 { + i -= len(x.ProposerPriority) + copy(dAtA[i:], x.ProposerPriority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ProposerPriority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Validator) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Validator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProposerPriority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ProposerPriority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field VotingPower", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.VotingPower = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PubKey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.PubKey == nil { + x.PubKey = &PubKey{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.PubKey); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_ValidatorSet_1_list)(nil) + +type _ValidatorSet_1_list struct { + list *[]*Validator +} + +func (x *_ValidatorSet_1_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ValidatorSet_1_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_ValidatorSet_1_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Validator) + (*x.list)[i] = concreteValue +} + +func (x *_ValidatorSet_1_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*Validator) + *x.list = append(*x.list, concreteValue) +} + +func (x *_ValidatorSet_1_list) AppendMutable() protoreflect.Value { + v := new(Validator) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_ValidatorSet_1_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_ValidatorSet_1_list) NewElement() protoreflect.Value { + v := new(Validator) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_ValidatorSet_1_list) IsValid() bool { + return x.list != nil +} + +var ( + md_ValidatorSet protoreflect.MessageDescriptor + fd_ValidatorSet_validators protoreflect.FieldDescriptor +) + +func init() { + file_network_types_ibc_proto_init() + md_ValidatorSet = File_network_types_ibc_proto.Messages().ByName("ValidatorSet") + fd_ValidatorSet_validators = md_ValidatorSet.Fields().ByName("validators") +} + +var _ protoreflect.Message = (*fastReflection_ValidatorSet)(nil) + +type fastReflection_ValidatorSet ValidatorSet + +func (x *ValidatorSet) ProtoReflect() protoreflect.Message { + return (*fastReflection_ValidatorSet)(x) +} + +func (x *ValidatorSet) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_ibc_proto_msgTypes[4] + 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) +} + +var _fastReflection_ValidatorSet_messageType fastReflection_ValidatorSet_messageType +var _ protoreflect.MessageType = fastReflection_ValidatorSet_messageType{} + +type fastReflection_ValidatorSet_messageType struct{} + +func (x fastReflection_ValidatorSet_messageType) Zero() protoreflect.Message { + return (*fastReflection_ValidatorSet)(nil) +} +func (x fastReflection_ValidatorSet_messageType) New() protoreflect.Message { + return new(fastReflection_ValidatorSet) +} +func (x fastReflection_ValidatorSet_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ValidatorSet +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ValidatorSet) Descriptor() protoreflect.MessageDescriptor { + return md_ValidatorSet +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ValidatorSet) Type() protoreflect.MessageType { + return _fastReflection_ValidatorSet_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ValidatorSet) New() protoreflect.Message { + return new(fastReflection_ValidatorSet) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ValidatorSet) Interface() protoreflect.ProtoMessage { + return (*ValidatorSet)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ValidatorSet) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Validators) != 0 { + value := protoreflect.ValueOfList(&_ValidatorSet_1_list{list: &x.Validators}) + if !f(fd_ValidatorSet_validators, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ValidatorSet) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.ValidatorSet.validators": + return len(x.Validators) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ValidatorSet")) + } + panic(fmt.Errorf("message network.types.ValidatorSet does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorSet) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.ValidatorSet.validators": + x.Validators = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ValidatorSet")) + } + panic(fmt.Errorf("message network.types.ValidatorSet does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ValidatorSet) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.ValidatorSet.validators": + if len(x.Validators) == 0 { + return protoreflect.ValueOfList(&_ValidatorSet_1_list{}) + } + listValue := &_ValidatorSet_1_list{list: &x.Validators} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ValidatorSet")) + } + panic(fmt.Errorf("message network.types.ValidatorSet does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorSet) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.ValidatorSet.validators": + lv := value.List() + clv := lv.(*_ValidatorSet_1_list) + x.Validators = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ValidatorSet")) + } + panic(fmt.Errorf("message network.types.ValidatorSet does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorSet) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.ValidatorSet.validators": + if x.Validators == nil { + x.Validators = []*Validator{} + } + value := &_ValidatorSet_1_list{list: &x.Validators} + return protoreflect.ValueOfList(value) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ValidatorSet")) + } + panic(fmt.Errorf("message network.types.ValidatorSet does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ValidatorSet) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.ValidatorSet.validators": + list := []*Validator{} + return protoreflect.ValueOfList(&_ValidatorSet_1_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.ValidatorSet")) + } + panic(fmt.Errorf("message network.types.ValidatorSet does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ValidatorSet) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.ValidatorSet", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ValidatorSet) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ValidatorSet) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ValidatorSet) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ValidatorSet) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ValidatorSet) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if len(x.Validators) > 0 { + for _, e := range x.Validators { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ValidatorSet) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Validators) > 0 { + for iNdEx := len(x.Validators) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Validators[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ValidatorSet) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ValidatorSet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ValidatorSet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Validators = append(x.Validators, &Validator{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Validators[len(x.Validators)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/types/ibc.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MerkleRoot represents a Merkle Root in ConsensusState +type MerkleRoot struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` +} + +func (x *MerkleRoot) Reset() { + *x = MerkleRoot{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_ibc_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MerkleRoot) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MerkleRoot) ProtoMessage() {} + +// Deprecated: Use MerkleRoot.ProtoReflect.Descriptor instead. +func (*MerkleRoot) Descriptor() ([]byte, []int) { + return file_network_types_ibc_proto_rawDescGZIP(), []int{0} +} + +func (x *MerkleRoot) GetHash() string { + if x != nil { + return x.Hash + } + return "" +} + +// ConsensusState represents a Consensus State +// it is compatible with the dumped state from `appd q ibc client self-consensus-state` command +type ConsensusState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NextValidatorsHash string `protobuf:"bytes,1,opt,name=nextValidatorsHash,proto3" json:"nextValidatorsHash,omitempty"` + Timestamp string `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Root *MerkleRoot `protobuf:"bytes,3,opt,name=root,proto3" json:"root,omitempty"` +} + +func (x *ConsensusState) Reset() { + *x = ConsensusState{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_ibc_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConsensusState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConsensusState) ProtoMessage() {} + +// Deprecated: Use ConsensusState.ProtoReflect.Descriptor instead. +func (*ConsensusState) Descriptor() ([]byte, []int) { + return file_network_types_ibc_proto_rawDescGZIP(), []int{1} +} + +func (x *ConsensusState) GetNextValidatorsHash() string { + if x != nil { + return x.NextValidatorsHash + } + return "" +} + +func (x *ConsensusState) GetTimestamp() string { + if x != nil { + return x.Timestamp + } + return "" +} + +func (x *ConsensusState) GetRoot() *MerkleRoot { + if x != nil { + return x.Root + } + return nil +} + +// PubKey represents a public key in Validator +type PubKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type_ string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *PubKey) Reset() { + *x = PubKey{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_ibc_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PubKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PubKey) ProtoMessage() {} + +// Deprecated: Use PubKey.ProtoReflect.Descriptor instead. +func (*PubKey) Descriptor() ([]byte, []int) { + return file_network_types_ibc_proto_rawDescGZIP(), []int{2} +} + +func (x *PubKey) GetType_() string { + if x != nil { + return x.Type_ + } + return "" +} + +func (x *PubKey) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +// Validator represents a validator in ValSet +type Validator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProposerPriority string `protobuf:"bytes,1,opt,name=proposerPriority,proto3" json:"proposerPriority,omitempty"` + VotingPower string `protobuf:"bytes,2,opt,name=votingPower,proto3" json:"votingPower,omitempty"` + PubKey *PubKey `protobuf:"bytes,3,opt,name=pubKey,proto3" json:"pubKey,omitempty"` +} + +func (x *Validator) Reset() { + *x = Validator{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_ibc_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Validator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Validator) ProtoMessage() {} + +// Deprecated: Use Validator.ProtoReflect.Descriptor instead. +func (*Validator) Descriptor() ([]byte, []int) { + return file_network_types_ibc_proto_rawDescGZIP(), []int{3} +} + +func (x *Validator) GetProposerPriority() string { + if x != nil { + return x.ProposerPriority + } + return "" +} + +func (x *Validator) GetVotingPower() string { + if x != nil { + return x.VotingPower + } + return "" +} + +func (x *Validator) GetPubKey() *PubKey { + if x != nil { + return x.PubKey + } + return nil +} + +// ValidatorSet represents a Validator Set +// it is compatible with the dumped set from `appd q tendermint-validator-set n` command +type ValidatorSet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Validators []*Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators,omitempty"` +} + +func (x *ValidatorSet) Reset() { + *x = ValidatorSet{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_ibc_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatorSet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatorSet) ProtoMessage() {} + +// Deprecated: Use ValidatorSet.ProtoReflect.Descriptor instead. +func (*ValidatorSet) Descriptor() ([]byte, []int) { + return file_network_types_ibc_proto_rawDescGZIP(), []int{4} +} + +func (x *ValidatorSet) GetValidators() []*Validator { + if x != nil { + return x.Validators + } + return nil +} + +var File_network_types_ibc_proto protoreflect.FileDescriptor + +var file_network_types_ibc_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, + 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x20, + 0x0a, 0x0a, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, + 0x22, 0x93, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x73, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x6e, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x33, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x32, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x09, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, + 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x4b, 0x65, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x42, 0x04, 0xc8, + 0xde, 0x1f, 0x00, 0x52, 0x06, 0x70, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x22, 0x4e, 0x0a, 0x0c, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, + 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x42, 0x9f, 0x01, 0x0a, 0x11, + 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x42, 0x08, 0x49, 0x62, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0xa2, 0x02, 0x03, 0x4e, 0x54, 0x58, + 0xaa, 0x02, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, + 0xca, 0x02, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x54, 0x79, 0x70, 0x65, 0x73, + 0xe2, 0x02, 0x19, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_types_ibc_proto_rawDescOnce sync.Once + file_network_types_ibc_proto_rawDescData = file_network_types_ibc_proto_rawDesc +) + +func file_network_types_ibc_proto_rawDescGZIP() []byte { + file_network_types_ibc_proto_rawDescOnce.Do(func() { + file_network_types_ibc_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_types_ibc_proto_rawDescData) + }) + return file_network_types_ibc_proto_rawDescData +} + +var file_network_types_ibc_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_network_types_ibc_proto_goTypes = []interface{}{ + (*MerkleRoot)(nil), // 0: network.types.MerkleRoot + (*ConsensusState)(nil), // 1: network.types.ConsensusState + (*PubKey)(nil), // 2: network.types.PubKey + (*Validator)(nil), // 3: network.types.Validator + (*ValidatorSet)(nil), // 4: network.types.ValidatorSet +} +var file_network_types_ibc_proto_depIdxs = []int32{ + 0, // 0: network.types.ConsensusState.root:type_name -> network.types.MerkleRoot + 2, // 1: network.types.Validator.pubKey:type_name -> network.types.PubKey + 3, // 2: network.types.ValidatorSet.validators:type_name -> network.types.Validator + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] 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 +} + +func init() { file_network_types_ibc_proto_init() } +func file_network_types_ibc_proto_init() { + if File_network_types_ibc_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_types_ibc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MerkleRoot); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_types_ibc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConsensusState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_types_ibc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PubKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_types_ibc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Validator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_types_ibc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatorSet); 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_network_types_ibc_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_types_ibc_proto_goTypes, + DependencyIndexes: file_network_types_ibc_proto_depIdxs, + MessageInfos: file_network_types_ibc_proto_msgTypes, + }.Build() + File_network_types_ibc_proto = out.File + file_network_types_ibc_proto_rawDesc = nil + file_network_types_ibc_proto_goTypes = nil + file_network_types_ibc_proto_depIdxs = nil +} diff --git a/api/network/types/monitoring.pulsar.go b/api/network/types/monitoring.pulsar.go new file mode 100644 index 00000000..dce62343 --- /dev/null +++ b/api/network/types/monitoring.pulsar.go @@ -0,0 +1,2761 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_MonitoringPacketData protoreflect.MessageDescriptor + fd_MonitoringPacketData_monitoringPacket protoreflect.FieldDescriptor +) + +func init() { + file_network_types_monitoring_proto_init() + md_MonitoringPacketData = File_network_types_monitoring_proto.Messages().ByName("MonitoringPacketData") + fd_MonitoringPacketData_monitoringPacket = md_MonitoringPacketData.Fields().ByName("monitoringPacket") +} + +var _ protoreflect.Message = (*fastReflection_MonitoringPacketData)(nil) + +type fastReflection_MonitoringPacketData MonitoringPacketData + +func (x *MonitoringPacketData) ProtoReflect() protoreflect.Message { + return (*fastReflection_MonitoringPacketData)(x) +} + +func (x *MonitoringPacketData) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_monitoring_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) +} + +var _fastReflection_MonitoringPacketData_messageType fastReflection_MonitoringPacketData_messageType +var _ protoreflect.MessageType = fastReflection_MonitoringPacketData_messageType{} + +type fastReflection_MonitoringPacketData_messageType struct{} + +func (x fastReflection_MonitoringPacketData_messageType) Zero() protoreflect.Message { + return (*fastReflection_MonitoringPacketData)(nil) +} +func (x fastReflection_MonitoringPacketData_messageType) New() protoreflect.Message { + return new(fastReflection_MonitoringPacketData) +} +func (x fastReflection_MonitoringPacketData_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringPacketData +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MonitoringPacketData) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringPacketData +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MonitoringPacketData) Type() protoreflect.MessageType { + return _fastReflection_MonitoringPacketData_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MonitoringPacketData) New() protoreflect.Message { + return new(fastReflection_MonitoringPacketData) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MonitoringPacketData) Interface() protoreflect.ProtoMessage { + return (*MonitoringPacketData)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MonitoringPacketData) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Packet != nil { + switch o := x.Packet.(type) { + case *MonitoringPacketData_MonitoringPacket: + v := o.MonitoringPacket + value := protoreflect.ValueOfMessage(v.ProtoReflect()) + if !f(fd_MonitoringPacketData_monitoringPacket, value) { + return + } + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MonitoringPacketData) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.MonitoringPacketData.monitoringPacket": + if x.Packet == nil { + return false + } else if _, ok := x.Packet.(*MonitoringPacketData_MonitoringPacket); ok { + return true + } else { + return false + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketData")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketData does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacketData) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.MonitoringPacketData.monitoringPacket": + x.Packet = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketData")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketData does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MonitoringPacketData) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.MonitoringPacketData.monitoringPacket": + if x.Packet == nil { + return protoreflect.ValueOfMessage((*MonitoringPacket)(nil).ProtoReflect()) + } else if v, ok := x.Packet.(*MonitoringPacketData_MonitoringPacket); ok { + return protoreflect.ValueOfMessage(v.MonitoringPacket.ProtoReflect()) + } else { + return protoreflect.ValueOfMessage((*MonitoringPacket)(nil).ProtoReflect()) + } + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketData")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketData does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacketData) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.MonitoringPacketData.monitoringPacket": + cv := value.Message().Interface().(*MonitoringPacket) + x.Packet = &MonitoringPacketData_MonitoringPacket{MonitoringPacket: cv} + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketData")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketData does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacketData) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.MonitoringPacketData.monitoringPacket": + if x.Packet == nil { + value := &MonitoringPacket{} + oneofValue := &MonitoringPacketData_MonitoringPacket{MonitoringPacket: value} + x.Packet = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + switch m := x.Packet.(type) { + case *MonitoringPacketData_MonitoringPacket: + return protoreflect.ValueOfMessage(m.MonitoringPacket.ProtoReflect()) + default: + value := &MonitoringPacket{} + oneofValue := &MonitoringPacketData_MonitoringPacket{MonitoringPacket: value} + x.Packet = oneofValue + return protoreflect.ValueOfMessage(value.ProtoReflect()) + } + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketData")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketData does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MonitoringPacketData) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.MonitoringPacketData.monitoringPacket": + value := &MonitoringPacket{} + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketData")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketData does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MonitoringPacketData) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + case "network.types.MonitoringPacketData.packet": + if x.Packet == nil { + return nil + } + switch x.Packet.(type) { + case *MonitoringPacketData_MonitoringPacket: + return x.Descriptor().Fields().ByName("monitoringPacket") + } + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.MonitoringPacketData", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MonitoringPacketData) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacketData) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MonitoringPacketData) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MonitoringPacketData) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MonitoringPacketData) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + switch x := x.Packet.(type) { + case *MonitoringPacketData_MonitoringPacket: + if x == nil { + break + } + l = options.Size(x.MonitoringPacket) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MonitoringPacketData) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + switch x := x.Packet.(type) { + case *MonitoringPacketData_MonitoringPacket: + encoded, err := options.Marshal(x.MonitoringPacket) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MonitoringPacketData) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringPacketData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringPacketData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MonitoringPacket", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + v := &MonitoringPacket{} + if err := options.Unmarshal(dAtA[iNdEx:postIndex], v); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + x.Packet = &MonitoringPacketData_MonitoringPacket{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MonitoringPacketAck protoreflect.MessageDescriptor +) + +func init() { + file_network_types_monitoring_proto_init() + md_MonitoringPacketAck = File_network_types_monitoring_proto.Messages().ByName("MonitoringPacketAck") +} + +var _ protoreflect.Message = (*fastReflection_MonitoringPacketAck)(nil) + +type fastReflection_MonitoringPacketAck MonitoringPacketAck + +func (x *MonitoringPacketAck) ProtoReflect() protoreflect.Message { + return (*fastReflection_MonitoringPacketAck)(x) +} + +func (x *MonitoringPacketAck) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_monitoring_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) +} + +var _fastReflection_MonitoringPacketAck_messageType fastReflection_MonitoringPacketAck_messageType +var _ protoreflect.MessageType = fastReflection_MonitoringPacketAck_messageType{} + +type fastReflection_MonitoringPacketAck_messageType struct{} + +func (x fastReflection_MonitoringPacketAck_messageType) Zero() protoreflect.Message { + return (*fastReflection_MonitoringPacketAck)(nil) +} +func (x fastReflection_MonitoringPacketAck_messageType) New() protoreflect.Message { + return new(fastReflection_MonitoringPacketAck) +} +func (x fastReflection_MonitoringPacketAck_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringPacketAck +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MonitoringPacketAck) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringPacketAck +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MonitoringPacketAck) Type() protoreflect.MessageType { + return _fastReflection_MonitoringPacketAck_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MonitoringPacketAck) New() protoreflect.Message { + return new(fastReflection_MonitoringPacketAck) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MonitoringPacketAck) Interface() protoreflect.ProtoMessage { + return (*MonitoringPacketAck)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MonitoringPacketAck) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MonitoringPacketAck) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketAck")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketAck does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacketAck) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketAck")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketAck does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MonitoringPacketAck) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketAck")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketAck does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacketAck) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketAck")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketAck does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacketAck) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketAck")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketAck does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MonitoringPacketAck) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacketAck")) + } + panic(fmt.Errorf("message network.types.MonitoringPacketAck does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MonitoringPacketAck) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.MonitoringPacketAck", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MonitoringPacketAck) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacketAck) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MonitoringPacketAck) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MonitoringPacketAck) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MonitoringPacketAck) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MonitoringPacketAck) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MonitoringPacketAck) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringPacketAck: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringPacketAck: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MonitoringPacket protoreflect.MessageDescriptor + fd_MonitoringPacket_blockHeight protoreflect.FieldDescriptor + fd_MonitoringPacket_signatureCounts protoreflect.FieldDescriptor +) + +func init() { + file_network_types_monitoring_proto_init() + md_MonitoringPacket = File_network_types_monitoring_proto.Messages().ByName("MonitoringPacket") + fd_MonitoringPacket_blockHeight = md_MonitoringPacket.Fields().ByName("blockHeight") + fd_MonitoringPacket_signatureCounts = md_MonitoringPacket.Fields().ByName("signatureCounts") +} + +var _ protoreflect.Message = (*fastReflection_MonitoringPacket)(nil) + +type fastReflection_MonitoringPacket MonitoringPacket + +func (x *MonitoringPacket) ProtoReflect() protoreflect.Message { + return (*fastReflection_MonitoringPacket)(x) +} + +func (x *MonitoringPacket) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_monitoring_proto_msgTypes[2] + 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) +} + +var _fastReflection_MonitoringPacket_messageType fastReflection_MonitoringPacket_messageType +var _ protoreflect.MessageType = fastReflection_MonitoringPacket_messageType{} + +type fastReflection_MonitoringPacket_messageType struct{} + +func (x fastReflection_MonitoringPacket_messageType) Zero() protoreflect.Message { + return (*fastReflection_MonitoringPacket)(nil) +} +func (x fastReflection_MonitoringPacket_messageType) New() protoreflect.Message { + return new(fastReflection_MonitoringPacket) +} +func (x fastReflection_MonitoringPacket_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringPacket +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MonitoringPacket) Descriptor() protoreflect.MessageDescriptor { + return md_MonitoringPacket +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MonitoringPacket) Type() protoreflect.MessageType { + return _fastReflection_MonitoringPacket_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MonitoringPacket) New() protoreflect.Message { + return new(fastReflection_MonitoringPacket) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MonitoringPacket) Interface() protoreflect.ProtoMessage { + return (*MonitoringPacket)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MonitoringPacket) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.BlockHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.BlockHeight) + if !f(fd_MonitoringPacket_blockHeight, value) { + return + } + } + if x.SignatureCounts != nil { + value := protoreflect.ValueOfMessage(x.SignatureCounts.ProtoReflect()) + if !f(fd_MonitoringPacket_signatureCounts, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MonitoringPacket) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.MonitoringPacket.blockHeight": + return x.BlockHeight != int64(0) + case "network.types.MonitoringPacket.signatureCounts": + return x.SignatureCounts != nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacket")) + } + panic(fmt.Errorf("message network.types.MonitoringPacket does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacket) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.MonitoringPacket.blockHeight": + x.BlockHeight = int64(0) + case "network.types.MonitoringPacket.signatureCounts": + x.SignatureCounts = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacket")) + } + panic(fmt.Errorf("message network.types.MonitoringPacket does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MonitoringPacket) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.MonitoringPacket.blockHeight": + value := x.BlockHeight + return protoreflect.ValueOfInt64(value) + case "network.types.MonitoringPacket.signatureCounts": + value := x.SignatureCounts + return protoreflect.ValueOfMessage(value.ProtoReflect()) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacket")) + } + panic(fmt.Errorf("message network.types.MonitoringPacket does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacket) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.MonitoringPacket.blockHeight": + x.BlockHeight = value.Int() + case "network.types.MonitoringPacket.signatureCounts": + x.SignatureCounts = value.Message().Interface().(*SignatureCounts) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacket")) + } + panic(fmt.Errorf("message network.types.MonitoringPacket does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacket) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.MonitoringPacket.signatureCounts": + if x.SignatureCounts == nil { + x.SignatureCounts = new(SignatureCounts) + } + return protoreflect.ValueOfMessage(x.SignatureCounts.ProtoReflect()) + case "network.types.MonitoringPacket.blockHeight": + panic(fmt.Errorf("field blockHeight of message network.types.MonitoringPacket is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacket")) + } + panic(fmt.Errorf("message network.types.MonitoringPacket does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MonitoringPacket) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.MonitoringPacket.blockHeight": + return protoreflect.ValueOfInt64(int64(0)) + case "network.types.MonitoringPacket.signatureCounts": + m := new(SignatureCounts) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.MonitoringPacket")) + } + panic(fmt.Errorf("message network.types.MonitoringPacket does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MonitoringPacket) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.MonitoringPacket", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MonitoringPacket) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MonitoringPacket) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MonitoringPacket) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MonitoringPacket) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MonitoringPacket) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.BlockHeight != 0 { + n += 1 + runtime.Sov(uint64(x.BlockHeight)) + } + if x.SignatureCounts != nil { + l = options.Size(x.SignatureCounts) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MonitoringPacket) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.SignatureCounts != nil { + encoded, err := options.Marshal(x.SignatureCounts) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if x.BlockHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.BlockHeight)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MonitoringPacket) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringPacket: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MonitoringPacket: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BlockHeight", wireType) + } + x.BlockHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.BlockHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field SignatureCounts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.SignatureCounts == nil { + x.SignatureCounts = &SignatureCounts{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.SignatureCounts); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_SignatureCounts_2_list)(nil) + +type _SignatureCounts_2_list struct { + list *[]*SignatureCount +} + +func (x *_SignatureCounts_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_SignatureCounts_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_SignatureCounts_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*SignatureCount) + (*x.list)[i] = concreteValue +} + +func (x *_SignatureCounts_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*SignatureCount) + *x.list = append(*x.list, concreteValue) +} + +func (x *_SignatureCounts_2_list) AppendMutable() protoreflect.Value { + v := new(SignatureCount) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_SignatureCounts_2_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_SignatureCounts_2_list) NewElement() protoreflect.Value { + v := new(SignatureCount) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_SignatureCounts_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_SignatureCounts protoreflect.MessageDescriptor + fd_SignatureCounts_blockCount protoreflect.FieldDescriptor + fd_SignatureCounts_counts protoreflect.FieldDescriptor +) + +func init() { + file_network_types_monitoring_proto_init() + md_SignatureCounts = File_network_types_monitoring_proto.Messages().ByName("SignatureCounts") + fd_SignatureCounts_blockCount = md_SignatureCounts.Fields().ByName("blockCount") + fd_SignatureCounts_counts = md_SignatureCounts.Fields().ByName("counts") +} + +var _ protoreflect.Message = (*fastReflection_SignatureCounts)(nil) + +type fastReflection_SignatureCounts SignatureCounts + +func (x *SignatureCounts) ProtoReflect() protoreflect.Message { + return (*fastReflection_SignatureCounts)(x) +} + +func (x *SignatureCounts) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_monitoring_proto_msgTypes[3] + 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) +} + +var _fastReflection_SignatureCounts_messageType fastReflection_SignatureCounts_messageType +var _ protoreflect.MessageType = fastReflection_SignatureCounts_messageType{} + +type fastReflection_SignatureCounts_messageType struct{} + +func (x fastReflection_SignatureCounts_messageType) Zero() protoreflect.Message { + return (*fastReflection_SignatureCounts)(nil) +} +func (x fastReflection_SignatureCounts_messageType) New() protoreflect.Message { + return new(fastReflection_SignatureCounts) +} +func (x fastReflection_SignatureCounts_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_SignatureCounts +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_SignatureCounts) Descriptor() protoreflect.MessageDescriptor { + return md_SignatureCounts +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_SignatureCounts) Type() protoreflect.MessageType { + return _fastReflection_SignatureCounts_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_SignatureCounts) New() protoreflect.Message { + return new(fastReflection_SignatureCounts) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_SignatureCounts) Interface() protoreflect.ProtoMessage { + return (*SignatureCounts)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_SignatureCounts) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.BlockCount != uint64(0) { + value := protoreflect.ValueOfUint64(x.BlockCount) + if !f(fd_SignatureCounts_blockCount, value) { + return + } + } + if len(x.Counts) != 0 { + value := protoreflect.ValueOfList(&_SignatureCounts_2_list{list: &x.Counts}) + if !f(fd_SignatureCounts_counts, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_SignatureCounts) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.SignatureCounts.blockCount": + return x.BlockCount != uint64(0) + case "network.types.SignatureCounts.counts": + return len(x.Counts) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCounts")) + } + panic(fmt.Errorf("message network.types.SignatureCounts does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SignatureCounts) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.SignatureCounts.blockCount": + x.BlockCount = uint64(0) + case "network.types.SignatureCounts.counts": + x.Counts = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCounts")) + } + panic(fmt.Errorf("message network.types.SignatureCounts does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_SignatureCounts) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.SignatureCounts.blockCount": + value := x.BlockCount + return protoreflect.ValueOfUint64(value) + case "network.types.SignatureCounts.counts": + if len(x.Counts) == 0 { + return protoreflect.ValueOfList(&_SignatureCounts_2_list{}) + } + listValue := &_SignatureCounts_2_list{list: &x.Counts} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCounts")) + } + panic(fmt.Errorf("message network.types.SignatureCounts does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SignatureCounts) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.SignatureCounts.blockCount": + x.BlockCount = value.Uint() + case "network.types.SignatureCounts.counts": + lv := value.List() + clv := lv.(*_SignatureCounts_2_list) + x.Counts = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCounts")) + } + panic(fmt.Errorf("message network.types.SignatureCounts does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SignatureCounts) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.SignatureCounts.counts": + if x.Counts == nil { + x.Counts = []*SignatureCount{} + } + value := &_SignatureCounts_2_list{list: &x.Counts} + return protoreflect.ValueOfList(value) + case "network.types.SignatureCounts.blockCount": + panic(fmt.Errorf("field blockCount of message network.types.SignatureCounts is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCounts")) + } + panic(fmt.Errorf("message network.types.SignatureCounts does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_SignatureCounts) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.SignatureCounts.blockCount": + return protoreflect.ValueOfUint64(uint64(0)) + case "network.types.SignatureCounts.counts": + list := []*SignatureCount{} + return protoreflect.ValueOfList(&_SignatureCounts_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCounts")) + } + panic(fmt.Errorf("message network.types.SignatureCounts does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_SignatureCounts) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.SignatureCounts", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_SignatureCounts) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SignatureCounts) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_SignatureCounts) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_SignatureCounts) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*SignatureCounts) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.BlockCount != 0 { + n += 1 + runtime.Sov(uint64(x.BlockCount)) + } + if len(x.Counts) > 0 { + for _, e := range x.Counts { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*SignatureCounts) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Counts) > 0 { + for iNdEx := len(x.Counts) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.Counts[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + } + if x.BlockCount != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.BlockCount)) + i-- + dAtA[i] = 0x8 + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*SignatureCounts) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: SignatureCounts: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: SignatureCounts: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BlockCount", wireType) + } + x.BlockCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.BlockCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Counts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Counts = append(x.Counts, &SignatureCount{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Counts[len(x.Counts)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_SignatureCount protoreflect.MessageDescriptor + fd_SignatureCount_opAddress protoreflect.FieldDescriptor + fd_SignatureCount_RelativeSignatures protoreflect.FieldDescriptor +) + +func init() { + file_network_types_monitoring_proto_init() + md_SignatureCount = File_network_types_monitoring_proto.Messages().ByName("SignatureCount") + fd_SignatureCount_opAddress = md_SignatureCount.Fields().ByName("opAddress") + fd_SignatureCount_RelativeSignatures = md_SignatureCount.Fields().ByName("RelativeSignatures") +} + +var _ protoreflect.Message = (*fastReflection_SignatureCount)(nil) + +type fastReflection_SignatureCount SignatureCount + +func (x *SignatureCount) ProtoReflect() protoreflect.Message { + return (*fastReflection_SignatureCount)(x) +} + +func (x *SignatureCount) slowProtoReflect() protoreflect.Message { + mi := &file_network_types_monitoring_proto_msgTypes[4] + 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) +} + +var _fastReflection_SignatureCount_messageType fastReflection_SignatureCount_messageType +var _ protoreflect.MessageType = fastReflection_SignatureCount_messageType{} + +type fastReflection_SignatureCount_messageType struct{} + +func (x fastReflection_SignatureCount_messageType) Zero() protoreflect.Message { + return (*fastReflection_SignatureCount)(nil) +} +func (x fastReflection_SignatureCount_messageType) New() protoreflect.Message { + return new(fastReflection_SignatureCount) +} +func (x fastReflection_SignatureCount_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_SignatureCount +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_SignatureCount) Descriptor() protoreflect.MessageDescriptor { + return md_SignatureCount +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_SignatureCount) Type() protoreflect.MessageType { + return _fastReflection_SignatureCount_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_SignatureCount) New() protoreflect.Message { + return new(fastReflection_SignatureCount) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_SignatureCount) Interface() protoreflect.ProtoMessage { + return (*SignatureCount)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_SignatureCount) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.OpAddress != "" { + value := protoreflect.ValueOfString(x.OpAddress) + if !f(fd_SignatureCount_opAddress, value) { + return + } + } + if x.RelativeSignatures != "" { + value := protoreflect.ValueOfString(x.RelativeSignatures) + if !f(fd_SignatureCount_RelativeSignatures, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_SignatureCount) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "network.types.SignatureCount.opAddress": + return x.OpAddress != "" + case "network.types.SignatureCount.RelativeSignatures": + return x.RelativeSignatures != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCount")) + } + panic(fmt.Errorf("message network.types.SignatureCount does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SignatureCount) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "network.types.SignatureCount.opAddress": + x.OpAddress = "" + case "network.types.SignatureCount.RelativeSignatures": + x.RelativeSignatures = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCount")) + } + panic(fmt.Errorf("message network.types.SignatureCount does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_SignatureCount) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "network.types.SignatureCount.opAddress": + value := x.OpAddress + return protoreflect.ValueOfString(value) + case "network.types.SignatureCount.RelativeSignatures": + value := x.RelativeSignatures + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCount")) + } + panic(fmt.Errorf("message network.types.SignatureCount does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SignatureCount) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "network.types.SignatureCount.opAddress": + x.OpAddress = value.Interface().(string) + case "network.types.SignatureCount.RelativeSignatures": + x.RelativeSignatures = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCount")) + } + panic(fmt.Errorf("message network.types.SignatureCount does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SignatureCount) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.SignatureCount.opAddress": + panic(fmt.Errorf("field opAddress of message network.types.SignatureCount is not mutable")) + case "network.types.SignatureCount.RelativeSignatures": + panic(fmt.Errorf("field RelativeSignatures of message network.types.SignatureCount is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCount")) + } + panic(fmt.Errorf("message network.types.SignatureCount does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_SignatureCount) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "network.types.SignatureCount.opAddress": + return protoreflect.ValueOfString("") + case "network.types.SignatureCount.RelativeSignatures": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: network.types.SignatureCount")) + } + panic(fmt.Errorf("message network.types.SignatureCount does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_SignatureCount) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in network.types.SignatureCount", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_SignatureCount) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_SignatureCount) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_SignatureCount) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_SignatureCount) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*SignatureCount) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.OpAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.RelativeSignatures) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*SignatureCount) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.RelativeSignatures) > 0 { + i -= len(x.RelativeSignatures) + copy(dAtA[i:], x.RelativeSignatures) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.RelativeSignatures))) + i-- + dAtA[i] = 0x12 + } + if len(x.OpAddress) > 0 { + i -= len(x.OpAddress) + copy(dAtA[i:], x.OpAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OpAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*SignatureCount) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: SignatureCount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: SignatureCount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OpAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.OpAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RelativeSignatures", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.RelativeSignatures = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: network/types/monitoring.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MonitoringPacketData is the IBC packet for monitoring modules +type MonitoringPacketData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Packet: + // + // *MonitoringPacketData_MonitoringPacket + Packet isMonitoringPacketData_Packet `protobuf_oneof:"packet"` +} + +func (x *MonitoringPacketData) Reset() { + *x = MonitoringPacketData{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_monitoring_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitoringPacketData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitoringPacketData) ProtoMessage() {} + +// Deprecated: Use MonitoringPacketData.ProtoReflect.Descriptor instead. +func (*MonitoringPacketData) Descriptor() ([]byte, []int) { + return file_network_types_monitoring_proto_rawDescGZIP(), []int{0} +} + +func (x *MonitoringPacketData) GetPacket() isMonitoringPacketData_Packet { + if x != nil { + return x.Packet + } + return nil +} + +func (x *MonitoringPacketData) GetMonitoringPacket() *MonitoringPacket { + if x, ok := x.GetPacket().(*MonitoringPacketData_MonitoringPacket); ok { + return x.MonitoringPacket + } + return nil +} + +type isMonitoringPacketData_Packet interface { + isMonitoringPacketData_Packet() +} + +type MonitoringPacketData_MonitoringPacket struct { + // this line is used by starport scaffolding # ibc/packet/proto/field + MonitoringPacket *MonitoringPacket `protobuf:"bytes,1,opt,name=monitoringPacket,proto3,oneof"` +} + +func (*MonitoringPacketData_MonitoringPacket) isMonitoringPacketData_Packet() {} + +// MonitoringPacketAck defines a struct for the packet acknowledgment +type MonitoringPacketAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MonitoringPacketAck) Reset() { + *x = MonitoringPacketAck{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_monitoring_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitoringPacketAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitoringPacketAck) ProtoMessage() {} + +// Deprecated: Use MonitoringPacketAck.ProtoReflect.Descriptor instead. +func (*MonitoringPacketAck) Descriptor() ([]byte, []int) { + return file_network_types_monitoring_proto_rawDescGZIP(), []int{1} +} + +// MonitoringPacket is the packet sent over IBC that contains all the signature counts +type MonitoringPacket struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BlockHeight int64 `protobuf:"varint,1,opt,name=blockHeight,proto3" json:"blockHeight,omitempty"` + SignatureCounts *SignatureCounts `protobuf:"bytes,2,opt,name=signatureCounts,proto3" json:"signatureCounts,omitempty"` +} + +func (x *MonitoringPacket) Reset() { + *x = MonitoringPacket{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_monitoring_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitoringPacket) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitoringPacket) ProtoMessage() {} + +// Deprecated: Use MonitoringPacket.ProtoReflect.Descriptor instead. +func (*MonitoringPacket) Descriptor() ([]byte, []int) { + return file_network_types_monitoring_proto_rawDescGZIP(), []int{2} +} + +func (x *MonitoringPacket) GetBlockHeight() int64 { + if x != nil { + return x.BlockHeight + } + return 0 +} + +func (x *MonitoringPacket) GetSignatureCounts() *SignatureCounts { + if x != nil { + return x.SignatureCounts + } + return nil +} + +// SignatureCounts contains information about signature reporting for a number of blocks +type SignatureCounts struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BlockCount uint64 `protobuf:"varint,1,opt,name=blockCount,proto3" json:"blockCount,omitempty"` + Counts []*SignatureCount `protobuf:"bytes,2,rep,name=counts,proto3" json:"counts,omitempty"` +} + +func (x *SignatureCounts) Reset() { + *x = SignatureCounts{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_monitoring_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignatureCounts) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SignatureCounts) ProtoMessage() {} + +// Deprecated: Use SignatureCounts.ProtoReflect.Descriptor instead. +func (*SignatureCounts) Descriptor() ([]byte, []int) { + return file_network_types_monitoring_proto_rawDescGZIP(), []int{3} +} + +func (x *SignatureCounts) GetBlockCount() uint64 { + if x != nil { + return x.BlockCount + } + return 0 +} + +func (x *SignatureCounts) GetCounts() []*SignatureCount { + if x != nil { + return x.Counts + } + return nil +} + +// SignatureCount contains information of signature reporting for one specific validator with consensus address +// RelativeSignatures is the sum of all signatures relative to the validator set size +type SignatureCount struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpAddress string `protobuf:"bytes,1,opt,name=opAddress,proto3" json:"opAddress,omitempty"` + RelativeSignatures string `protobuf:"bytes,2,opt,name=RelativeSignatures,proto3" json:"RelativeSignatures,omitempty"` +} + +func (x *SignatureCount) Reset() { + *x = SignatureCount{} + if protoimpl.UnsafeEnabled { + mi := &file_network_types_monitoring_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignatureCount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SignatureCount) ProtoMessage() {} + +// Deprecated: Use SignatureCount.ProtoReflect.Descriptor instead. +func (*SignatureCount) Descriptor() ([]byte, []int) { + return file_network_types_monitoring_proto_rawDescGZIP(), []int{4} +} + +func (x *SignatureCount) GetOpAddress() string { + if x != nil { + return x.OpAddress + } + return "" +} + +func (x *SignatureCount) GetRelativeSignatures() string { + if x != nil { + return x.RelativeSignatures + } + return "" +} + +var File_network_types_monitoring_proto protoreflect.FileDescriptor + +var file_network_types_monitoring_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, + 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, + 0x19, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x6f, 0x0a, 0x14, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x10, 0x6d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x48, 0x00, 0x52, 0x10, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, + 0x67, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x22, 0x15, 0x0a, 0x13, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x63, 0x6b, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x20, 0x0a, + 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x4e, 0x0a, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0f, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, + 0x6e, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, + 0x91, 0x01, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x61, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x31, 0xc8, 0xde, + 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, + 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, + 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, + 0x12, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x42, 0xa6, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x42, 0x0f, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x67, 0x6e, 0x69, 0x74, 0x65, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0xa2, 0x02, 0x03, 0x4e, 0x54, 0x58, 0xaa, + 0x02, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, 0xca, + 0x02, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x54, 0x79, 0x70, 0x65, 0x73, 0xe2, + 0x02, 0x19, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_network_types_monitoring_proto_rawDescOnce sync.Once + file_network_types_monitoring_proto_rawDescData = file_network_types_monitoring_proto_rawDesc +) + +func file_network_types_monitoring_proto_rawDescGZIP() []byte { + file_network_types_monitoring_proto_rawDescOnce.Do(func() { + file_network_types_monitoring_proto_rawDescData = protoimpl.X.CompressGZIP(file_network_types_monitoring_proto_rawDescData) + }) + return file_network_types_monitoring_proto_rawDescData +} + +var file_network_types_monitoring_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_network_types_monitoring_proto_goTypes = []interface{}{ + (*MonitoringPacketData)(nil), // 0: network.types.MonitoringPacketData + (*MonitoringPacketAck)(nil), // 1: network.types.MonitoringPacketAck + (*MonitoringPacket)(nil), // 2: network.types.MonitoringPacket + (*SignatureCounts)(nil), // 3: network.types.SignatureCounts + (*SignatureCount)(nil), // 4: network.types.SignatureCount +} +var file_network_types_monitoring_proto_depIdxs = []int32{ + 2, // 0: network.types.MonitoringPacketData.monitoringPacket:type_name -> network.types.MonitoringPacket + 3, // 1: network.types.MonitoringPacket.signatureCounts:type_name -> network.types.SignatureCounts + 4, // 2: network.types.SignatureCounts.counts:type_name -> network.types.SignatureCount + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] 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 +} + +func init() { file_network_types_monitoring_proto_init() } +func file_network_types_monitoring_proto_init() { + if File_network_types_monitoring_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_network_types_monitoring_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MonitoringPacketData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_types_monitoring_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MonitoringPacketAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_types_monitoring_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MonitoringPacket); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_types_monitoring_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignatureCounts); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_network_types_monitoring_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignatureCount); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_network_types_monitoring_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*MonitoringPacketData_MonitoringPacket)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_network_types_monitoring_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_network_types_monitoring_proto_goTypes, + DependencyIndexes: file_network_types_monitoring_proto_depIdxs, + MessageInfos: file_network_types_monitoring_proto_msgTypes, + }.Build() + File_network_types_monitoring_proto = out.File + file_network_types_monitoring_proto_rawDesc = nil + file_network_types_monitoring_proto_goTypes = nil + file_network_types_monitoring_proto_depIdxs = nil +} diff --git a/app/app.go b/app/app.go index f511981c..c646a3cc 100644 --- a/app/app.go +++ b/app/app.go @@ -1,1061 +1,322 @@ package app import ( - "encoding/json" "io" - "net/http" - "os" - "path/filepath" - autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" - reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" - - dbm "github.com/cometbft/cometbft-db" - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/libs/log" - tmos "github.com/cometbft/cometbft/libs/os" + _ "cosmossdk.io/api/cosmos/tx/config/v1" // import for side-effects + clienthelpers "cosmossdk.io/client/v2/helpers" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + _ "cosmossdk.io/x/circuit" // import for side-effects + circuitkeeper "cosmossdk.io/x/circuit/keeper" + _ "cosmossdk.io/x/evidence" // import for side-effects + evidencekeeper "cosmossdk.io/x/evidence/keeper" + feegrantkeeper "cosmossdk.io/x/feegrant/keeper" + _ "cosmossdk.io/x/feegrant/module" // import for side-effects + nftkeeper "cosmossdk.io/x/nft/keeper" + _ "cosmossdk.io/x/nft/module" // import for side-effects + _ "cosmossdk.io/x/upgrade" // import for side-effects + upgradekeeper "cosmossdk.io/x/upgrade/keeper" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node" - "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/codec/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" - runtimeservices "github.com/cosmos/cosmos-sdk/runtime/services" + "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/server/api" "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/auth/ante" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" - authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" + _ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" // import for side-effects authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/cosmos/cosmos-sdk/x/auth/vesting" - vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" - "github.com/cosmos/cosmos-sdk/x/authz" + _ "github.com/cosmos/cosmos-sdk/x/auth/vesting" // import for side-effects authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper" - authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module" - "github.com/cosmos/cosmos-sdk/x/bank" + _ "github.com/cosmos/cosmos-sdk/x/authz/module" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/bank" // import for side-effects bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/cosmos/cosmos-sdk/x/capability" - capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - "github.com/cosmos/cosmos-sdk/x/consensus" - consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" - consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" - "github.com/cosmos/cosmos-sdk/x/crisis" + _ "github.com/cosmos/cosmos-sdk/x/consensus" // import for side-effects + consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" + _ "github.com/cosmos/cosmos-sdk/x/crisis" // import for side-effects crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" - crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" - distr "github.com/cosmos/cosmos-sdk/x/distribution" + _ "github.com/cosmos/cosmos-sdk/x/distribution" // import for side-effects distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - "github.com/cosmos/cosmos-sdk/x/evidence" - evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper" - evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" - "github.com/cosmos/cosmos-sdk/x/feegrant" - feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper" - feegrantmodule "github.com/cosmos/cosmos-sdk/x/feegrant/module" "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/cosmos/cosmos-sdk/x/gov" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - "github.com/cosmos/cosmos-sdk/x/params" + groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" + _ "github.com/cosmos/cosmos-sdk/x/group/module" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/mint" // import for side-effects + mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" + _ "github.com/cosmos/cosmos-sdk/x/params" // import for side-effects paramsclient "github.com/cosmos/cosmos-sdk/x/params/client" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - paramproposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal" - "github.com/cosmos/cosmos-sdk/x/slashing" + _ "github.com/cosmos/cosmos-sdk/x/slashing" // import for side-effects slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" - slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" - "github.com/cosmos/cosmos-sdk/x/staking" + _ "github.com/cosmos/cosmos-sdk/x/staking" // import for side-effects stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/cosmos/cosmos-sdk/x/upgrade" - upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" - upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" - icacontroller "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller" - icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" - icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" - ibcfee "github.com/cosmos/ibc-go/v7/modules/apps/29-fee" - ibcfeekeeper "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/keeper" - ibcfeetypes "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" - "github.com/cosmos/ibc-go/v7/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v7/modules/core" - ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" - ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - "github.com/spf13/cast" - "github.com/tendermint/fundraising/x/fundraising" - fundraisingkeeper "github.com/tendermint/fundraising/x/fundraising/keeper" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - "github.com/tendermint/spn/cmd" - "github.com/tendermint/spn/docs" - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/launch" - launchkeeper "github.com/tendermint/spn/x/launch/keeper" - launchtypes "github.com/tendermint/spn/x/launch/types" - "github.com/tendermint/spn/x/monitoringc" - monitoringckeeper "github.com/tendermint/spn/x/monitoringc/keeper" - monitoringctypes "github.com/tendermint/spn/x/monitoringc/types" - "github.com/tendermint/spn/x/monitoringp" - monitoringpkeeper "github.com/tendermint/spn/x/monitoringp/keeper" - monitoringptypes "github.com/tendermint/spn/x/monitoringp/types" - "github.com/tendermint/spn/x/participation" - participationkeeper "github.com/tendermint/spn/x/participation/keeper" - participationtypes "github.com/tendermint/spn/x/participation/types" - "github.com/tendermint/spn/x/profile" - profilekeeper "github.com/tendermint/spn/x/profile/keeper" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project" - projectkeeper "github.com/tendermint/spn/x/project/keeper" - projecttypes "github.com/tendermint/spn/x/project/types" - "github.com/tendermint/spn/x/reward" - rewardkeeper "github.com/tendermint/spn/x/reward/keeper" - rewardtypes "github.com/tendermint/spn/x/reward/types" - - "github.com/ignite/modules/x/claim" - claimkeeper "github.com/ignite/modules/x/claim/keeper" - claimtypes "github.com/ignite/modules/x/claim/types" - "github.com/ignite/modules/x/mint" - mintkeeper "github.com/ignite/modules/x/mint/keeper" - minttypes "github.com/ignite/modules/x/mint/types" - // this line is used by starport scaffolding # stargate/app/moduleImport + _ "github.com/cosmos/ibc-go/modules/capability" // import for side-effects + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + _ "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts" // import for side-effects + icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" + icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper" + _ "github.com/cosmos/ibc-go/v8/modules/apps/29-fee" // import for side-effects + ibcfeekeeper "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/keeper" + ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + + "github.com/ignite/network/docs" + launchmodulekeeper "github.com/ignite/network/x/launch/keeper" + monitoringcmodulekeeper "github.com/ignite/network/x/monitoringc/keeper" + monitoringpmodulekeeper "github.com/ignite/network/x/monitoringp/keeper" + participationmodulekeeper "github.com/ignite/network/x/participation/keeper" + profilemodulekeeper "github.com/ignite/network/x/profile/keeper" + projectmodulekeeper "github.com/ignite/network/x/project/keeper" + rewardmodulekeeper "github.com/ignite/network/x/reward/keeper" ) const ( - DefaultChainID = "spn-1" - - // missionIDStaking is the mission ID for staking mission to claim airdrop - missionIDStaking = 1 - - // missionIDVoting is the mission ID for voting mission to claim airdrop - missionIDVoting = 2 - - // missionIDSendingRequest is the mission ID for sending request mission to claim airdrop - missionIDSendingRequest = 3 + AccountAddressPrefix = "cosmos" + Name = "network" ) -// this line is used by starport scaffolding # stargate/wasm/app/enabledProposals - -func getGovProposalHandlers() []govclient.ProposalHandler { - var govProposalHandlers []govclient.ProposalHandler - // this line is used by starport scaffolding # stargate/app/govProposalHandlers - - govProposalHandlers = append(govProposalHandlers, - paramsclient.ProposalHandler, - upgradeclient.LegacyProposalHandler, - upgradeclient.LegacyCancelProposalHandler, - ibcclientclient.UpdateClientProposalHandler, - ibcclientclient.UpgradeProposalHandler, - // this line is used by starport scaffolding # stargate/app/govProposalHandler - ) - - return govProposalHandlers -} - -var ( - // DefaultNodeHome default home directories for the application daemon - DefaultNodeHome string - - // ModuleBasics defines the module BasicManager is in charge of setting up basic, - // non-dependant module elements, such as codec registration - // and genesis verification. - ModuleBasics = module.NewBasicManager( - auth.AppModuleBasic{}, - genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - bank.AppModuleBasic{}, - capability.AppModuleBasic{}, - staking.AppModuleBasic{}, - mint.AppModuleBasic{}, - distr.AppModuleBasic{}, - gov.NewAppModuleBasic(getGovProposalHandlers()), - params.AppModuleBasic{}, - slashing.AppModuleBasic{}, - ibc.AppModuleBasic{}, - ibctm.AppModuleBasic{}, - feegrantmodule.AppModuleBasic{}, - upgrade.AppModuleBasic{}, - evidence.AppModuleBasic{}, - transfer.AppModuleBasic{}, - ica.AppModuleBasic{}, - authzmodule.AppModuleBasic{}, - vesting.AppModuleBasic{}, - ibcfee.AppModuleBasic{}, - consensus.AppModuleBasic{}, - participation.AppModuleBasic{}, - claim.AppModuleBasic{}, - crisis.AppModuleBasic{}, - // this line is used by starport scaffolding # stargate/app/moduleBasic - profile.AppModuleBasic{}, - launch.AppModuleBasic{}, - project.AppModuleBasic{}, - monitoringc.AppModuleBasic{}, - monitoringp.AppModuleBasic{}, - reward.AppModuleBasic{}, - fundraising.AppModuleBasic{}, - ) - - // module account permissions - maccPerms = map[string][]string{ - authtypes.FeeCollectorName: nil, - distrtypes.ModuleName: nil, - minttypes.ModuleName: {authtypes.Minter}, - stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking}, - stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, - govtypes.ModuleName: {authtypes.Burner}, - ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, - projecttypes.ModuleName: {authtypes.Minter, authtypes.Burner}, - ibcfeetypes.ModuleName: nil, - icatypes.ModuleName: nil, - rewardtypes.ModuleName: nil, - fundraisingtypes.ModuleName: nil, - monitoringctypes.ModuleName: nil, - monitoringptypes.ModuleName: nil, - claimtypes.ModuleName: {authtypes.Minter, authtypes.Burner}, - // this line is used by starport scaffolding # stargate/app/maccPerms - } -) +// DefaultNodeHome default home directories for the application daemon +var DefaultNodeHome string var ( _ runtime.AppI = (*App)(nil) _ servertypes.Application = (*App)(nil) ) -func init() { - userHomeDir, err := os.UserHomeDir() - if err != nil { - panic(err) - } - - DefaultNodeHome = filepath.Join(userHomeDir, "."+spntypes.Name) -} - // App extends an ABCI application, but with most of its parameters exported. // They are exported for convenience in creating helper functions, as object // capabilities aren't needed for testing. type App struct { - *baseapp.BaseApp - - cdc *codec.LegacyAmino + *runtime.App + legacyAmino *codec.LegacyAmino appCodec codec.Codec txConfig client.TxConfig - interfaceRegistry types.InterfaceRegistry - - invCheckPeriod uint - - // keys to access the substores - keys map[string]*storetypes.KVStoreKey - tkeys map[string]*storetypes.TransientStoreKey - memKeys map[string]*storetypes.MemoryStoreKey + interfaceRegistry codectypes.InterfaceRegistry // keepers - AuthKeeper authkeeper.AccountKeeper + AccountKeeper authkeeper.AccountKeeper BankKeeper bankkeeper.Keeper - CapabilityKeeper *capabilitykeeper.Keeper StakingKeeper *stakingkeeper.Keeper - SlashingKeeper slashingkeeper.Keeper - MintKeeper mintkeeper.Keeper DistrKeeper distrkeeper.Keeper - GovKeeper govkeeper.Keeper - CrisisKeeper *crisiskeeper.Keeper - UpgradeKeeper *upgradekeeper.Keeper - ParamsKeeper paramskeeper.Keeper - IBCKeeper *ibckeeper.Keeper - IBCFeeKeeper ibcfeekeeper.Keeper - ICAControllerKeeper icacontrollerkeeper.Keeper - ICAHostKeeper icahostkeeper.Keeper - EvidenceKeeper evidencekeeper.Keeper - TransferKeeper ibctransferkeeper.Keeper - FeeGrantKeeper feegrantkeeper.Keeper - AuthzKeeper authzkeeper.Keeper - FundraisingKeeper fundraisingkeeper.Keeper - ConsensusParamsKeeper consensusparamkeeper.Keeper - - // make scoped keepers public for test purposes + ConsensusParamsKeeper consensuskeeper.Keeper + + SlashingKeeper slashingkeeper.Keeper + MintKeeper mintkeeper.Keeper + GovKeeper *govkeeper.Keeper + CrisisKeeper *crisiskeeper.Keeper + UpgradeKeeper *upgradekeeper.Keeper + ParamsKeeper paramskeeper.Keeper + AuthzKeeper authzkeeper.Keeper + EvidenceKeeper evidencekeeper.Keeper + FeeGrantKeeper feegrantkeeper.Keeper + GroupKeeper groupkeeper.Keeper + NFTKeeper nftkeeper.Keeper + CircuitBreakerKeeper circuitkeeper.Keeper + + // IBC + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + CapabilityKeeper *capabilitykeeper.Keeper + IBCFeeKeeper ibcfeekeeper.Keeper + ICAControllerKeeper icacontrollerkeeper.Keeper + ICAHostKeeper icahostkeeper.Keeper + TransferKeeper ibctransferkeeper.Keeper + + // Scoped IBC ScopedIBCKeeper capabilitykeeper.ScopedKeeper - ScopedTransferKeeper capabilitykeeper.ScopedKeeper + ScopedIBCTransferKeeper capabilitykeeper.ScopedKeeper ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper ScopedICAHostKeeper capabilitykeeper.ScopedKeeper + ScopedKeepers map[string]capabilitykeeper.ScopedKeeper + + ProfileKeeper profilemodulekeeper.Keeper + ProjectKeeper projectmodulekeeper.Keeper + RewardKeeper rewardmodulekeeper.Keeper + ParticipationKeeper participationmodulekeeper.Keeper + LaunchKeeper launchmodulekeeper.Keeper + MonitoringcKeeper monitoringcmodulekeeper.Keeper + MonitoringpKeeper monitoringpmodulekeeper.Keeper + // this line is used by starport scaffolding # stargate/app/keeperDeclaration - ScopedMonitoringcKeeper capabilitykeeper.ScopedKeeper + // simulation manager + sm *module.SimulationManager +} - ProfileKeeper profilekeeper.Keeper - LaunchKeeper launchkeeper.Keeper - ProjectKeeper projectkeeper.Keeper - MonitoringcKeeper monitoringckeeper.Keeper - MonitoringpKeeper monitoringpkeeper.Keeper - RewardKeeper rewardkeeper.Keeper - ParticipationKeeper participationkeeper.Keeper - ClaimKeeper claimkeeper.Keeper - // this line is used by starport scaffolding # stargate/app/keeperDeclaration +func init() { + var err error + clienthelpers.EnvPrefix = Name + DefaultNodeHome, err = clienthelpers.GetNodeHomeDirectory("." + Name) + if err != nil { + panic(err) + } +} - transferModule transfer.AppModule +// getGovProposalHandlers return the chain proposal handlers. +func getGovProposalHandlers() []govclient.ProposalHandler { + var govProposalHandlers []govclient.ProposalHandler + // this line is used by starport scaffolding # stargate/app/govProposalHandlers - // the module manager - mm *module.Manager + govProposalHandlers = append(govProposalHandlers, + paramsclient.ProposalHandler, + // this line is used by starport scaffolding # stargate/app/govProposalHandler + ) - // simulation manager - sm *module.SimulationManager + return govProposalHandlers +} - // module configurator - configurator module.Configurator +// AppConfig returns the default app config. +func AppConfig() depinject.Config { + return depinject.Configs( + appConfig, + // Alternatively, load the app config from a YAML file. + // appconfig.LoadYAML(AppConfigYAML), + depinject.Supply( + // supply custom module basics + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic(getGovProposalHandlers()), + // this line is used by starport scaffolding # stargate/appConfig/moduleBasic + }, + ), + ) } -// New returns a reference to an initialized spn app. +// New returns a reference to an initialized App. func New( logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, - skipUpgradeHeights map[int64]bool, - homePath string, - invCheckPeriod uint, - encodingConfig cmd.EncodingConfig, appOpts servertypes.AppOptions, baseAppOptions ...func(*baseapp.BaseApp), -) cmd.App { - appCodec := encodingConfig.Marshaler - cdc := encodingConfig.Amino - interfaceRegistry := encodingConfig.InterfaceRegistry - txConfig := encodingConfig.TxConfig - - bApp := baseapp.NewBaseApp(spntypes.Name, logger, db, txConfig.TxDecoder(), baseAppOptions...) - bApp.SetCommitMultiStoreTracer(traceStore) - bApp.SetVersion(version.Version) - bApp.SetInterfaceRegistry(interfaceRegistry) - bApp.SetTxEncoder(txConfig.TxEncoder()) - - keys := sdk.NewKVStoreKeys( - authtypes.StoreKey, - banktypes.StoreKey, - stakingtypes.StoreKey, - minttypes.StoreKey, - distrtypes.StoreKey, - slashingtypes.StoreKey, - govtypes.StoreKey, - paramstypes.StoreKey, - upgradetypes.StoreKey, - feegrant.StoreKey, - authzkeeper.StoreKey, - evidencetypes.StoreKey, - ibcexported.StoreKey, - ibctransfertypes.StoreKey, - icacontrollertypes.StoreKey, - icahosttypes.StoreKey, - capabilitytypes.StoreKey, - profiletypes.StoreKey, - launchtypes.StoreKey, - projecttypes.StoreKey, - monitoringctypes.StoreKey, - monitoringptypes.StoreKey, - rewardtypes.StoreKey, - fundraisingtypes.StoreKey, - participationtypes.StoreKey, - ibcfeetypes.StoreKey, - consensusparamtypes.StoreKey, - claimtypes.StoreKey, - crisistypes.StoreKey, - // this line is used by starport scaffolding # stargate/app/storeKey - ) - tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) - memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) - - app := &App{ - BaseApp: bApp, - cdc: cdc, - txConfig: txConfig, - appCodec: appCodec, - interfaceRegistry: interfaceRegistry, - invCheckPeriod: invCheckPeriod, - keys: keys, - tkeys: tkeys, - memKeys: memKeys, - } - - app.ParamsKeeper = initParamsKeeper( - appCodec, - cdc, - keys[paramstypes.StoreKey], - tkeys[paramstypes.TStoreKey], - ) - - // set the BaseApp's parameter store - app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(appCodec, keys[upgradetypes.StoreKey], authtypes.NewModuleAddress(govtypes.ModuleName).String()) - bApp.SetParamStore(&app.ConsensusParamsKeeper) - - // add capability keeper and ScopeToModule for ibc module - app.CapabilityKeeper = capabilitykeeper.NewKeeper( - appCodec, - keys[capabilitytypes.StoreKey], - memKeys[capabilitytypes.MemStoreKey], - ) - - // grant capabilities for the ibc and ibc-transfer modules - scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName) - scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) - scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) - - // this line is used by starport scaffolding # stargate/app/scopedKeeper - - // add keepers - app.AuthKeeper = authkeeper.NewAccountKeeper( - appCodec, - keys[authtypes.StoreKey], - authtypes.ProtoBaseAccount, - maccPerms, - sdk.Bech32PrefixAccAddr, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - app.AuthzKeeper = authzkeeper.NewKeeper( - keys[authzkeeper.StoreKey], - appCodec, - app.BaseApp.MsgServiceRouter(), - app.AuthKeeper, - ) - - app.BankKeeper = bankkeeper.NewBaseKeeper( - appCodec, - keys[banktypes.StoreKey], - app.AuthKeeper, - app.BlockedModuleAccountAddrs(), - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - app.StakingKeeper = stakingkeeper.NewKeeper( - appCodec, - keys[stakingtypes.StoreKey], - app.AuthKeeper, - app.BankKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - app.DistrKeeper = distrkeeper.NewKeeper( - appCodec, - keys[distrtypes.StoreKey], - app.AuthKeeper, - app.BankKeeper, - app.StakingKeeper, - authtypes.FeeCollectorName, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - app.MintKeeper = mintkeeper.NewKeeper( - appCodec, - keys[minttypes.StoreKey], - app.GetSubspace(minttypes.ModuleName), - app.StakingKeeper, - app.AuthKeeper, - app.BankKeeper, - app.DistrKeeper, - authtypes.FeeCollectorName, - ) - - app.SlashingKeeper = slashingkeeper.NewKeeper( - appCodec, - cdc, - keys[slashingtypes.StoreKey], - app.StakingKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - app.CrisisKeeper = crisiskeeper.NewKeeper( - appCodec, - keys[crisistypes.StoreKey], - invCheckPeriod, - app.BankKeeper, - authtypes.FeeCollectorName, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - app.FeeGrantKeeper = feegrantkeeper.NewKeeper( - appCodec, - keys[feegrant.StoreKey], - app.AuthKeeper, - ) - - app.UpgradeKeeper = upgradekeeper.NewKeeper( - skipUpgradeHeights, - keys[upgradetypes.StoreKey], - appCodec, - homePath, - app.BaseApp, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - // ... other modules keepers - - // Create IBC Keeper - app.IBCKeeper = ibckeeper.NewKeeper( - appCodec, - keys[ibcexported.StoreKey], - app.GetSubspace(ibcexported.ModuleName), - app.StakingKeeper, - app.UpgradeKeeper, - scopedIBCKeeper, - ) - - // IBC Fee Module keeper - app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( - appCodec, keys[ibcfeetypes.StoreKey], - app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, app.AuthKeeper, app.BankKeeper, - ) - - // ICA Controller keeper - app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( - appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), - app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack - app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - scopedICAControllerKeeper, app.MsgServiceRouter(), - ) - - // ICA Host keeper - app.ICAHostKeeper = icahostkeeper.NewKeeper( - appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack - app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - app.AuthKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), - ) - - // Create IBC Router - ibcRouter := porttypes.NewRouter() - - // Create Transfer Keepers - app.TransferKeeper = ibctransferkeeper.NewKeeper( - appCodec, - keys[ibctransfertypes.StoreKey], - app.GetSubspace(ibctransfertypes.ModuleName), - app.IBCKeeper.ChannelKeeper, - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - app.AuthKeeper, - app.BankKeeper, - scopedTransferKeeper, - ) - app.transferModule = transfer.NewAppModule(app.TransferKeeper) - - // Create Transfer Stack - // SendPacket, since it is originating from the application to core IBC: - // transferKeeper.SendPacket -> fee.SendPacket -> channel.SendPacket - - // RecvPacket, message that originates from core IBC and goes down to app, the flow is the other way - // channel.RecvPacket -> fee.OnRecvPacket -> transfer.OnRecvPacket - - // transfer stack contains (from top to bottom): - // - IBC Fee Middleware - // - Transfer - - // create IBC module from bottom to top of stack - var transferStack porttypes.IBCModule - transferStack = transfer.NewIBCModule(app.TransferKeeper) - transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper) - - // Add transfer stack to IBC Router - ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack) - - // Create Interchain Accounts Stack - // SendPacket, since it is originating from the application to core IBC: - // icaAuthModuleKeeper.SendTx -> icaController.SendPacket -> fee.SendPacket -> channel.SendPacket - - // initialize ICA module as the authentication module on the controller side - var icaControllerStack porttypes.IBCModule - icaControllerStack = icacontroller.NewIBCMiddleware(icaControllerStack, app.ICAControllerKeeper) - icaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper) - - // RecvPacket, message that originates from core IBC and goes down to app, the flow is: - // channel.RecvPacket -> fee.OnRecvPacket -> icaHost.OnRecvPacket - - var icaHostStack porttypes.IBCModule - icaHostStack = icahost.NewIBCModule(app.ICAHostKeeper) - icaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, app.IBCFeeKeeper) - - // Add host, controller & ica auth modules to IBC router - ibcRouter. - // the ICA Controller middleware needs to be explicitly added to the IBC Router because the - // ICA controller module owns the port capability for ICA. The ICA authentication module - // owns the channel capability. - AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). - AddRoute(icahosttypes.SubModuleName, icaHostStack) - - // Create evidence Keeper for to register the IBC light client misbehaviour evidence route - evidenceKeeper := evidencekeeper.NewKeeper( - appCodec, - keys[evidencetypes.StoreKey], - app.StakingKeeper, - app.SlashingKeeper, - ) - // If evidence needs to be handled for the app, set routes in router here and seal - app.EvidenceKeeper = *evidenceKeeper - - app.FundraisingKeeper = fundraisingkeeper.NewKeeper( - appCodec, - keys[fundraisingtypes.StoreKey], - keys[fundraisingtypes.MemStoreKey], - app.GetSubspace(fundraisingtypes.ModuleName), - app.AuthKeeper, - app.BankKeeper, - app.DistrKeeper, - ) - - app.ProfileKeeper = *profilekeeper.NewKeeper( - appCodec, - keys[profiletypes.StoreKey], - keys[profiletypes.MemStoreKey], - ) - - app.LaunchKeeper = *launchkeeper.NewKeeper( - appCodec, - keys[launchtypes.StoreKey], - keys[launchtypes.MemStoreKey], - app.GetSubspace(launchtypes.ModuleName), - app.DistrKeeper, - app.ProfileKeeper, - ) - - app.RewardKeeper = *rewardkeeper.NewKeeper( - appCodec, - keys[rewardtypes.StoreKey], - keys[rewardtypes.MemStoreKey], - app.GetSubspace(rewardtypes.ModuleName), - app.AuthKeeper, - app.BankKeeper, - app.ProfileKeeper, - app.LaunchKeeper, - ) - - projectKeeper := projectkeeper.NewKeeper( - appCodec, - keys[projecttypes.StoreKey], - keys[projecttypes.MemStoreKey], - app.GetSubspace(projecttypes.ModuleName), +) (*App, error) { + var ( + app = &App{ScopedKeepers: make(map[string]capabilitykeeper.ScopedKeeper)} + appBuilder *runtime.AppBuilder + + // merge the AppConfig and other configuration in one config + appConfig = depinject.Configs( + AppConfig(), + depinject.Supply( + appOpts, // supply app options + logger, // supply logger + // Supply with IBC keeper getter for the IBC modules with App Wiring. + // The IBC Keeper cannot be passed because it has not been initiated yet. + // Passing the getter, the app IBC Keeper will always be accessible. + // This needs to be removed after IBC supports App Wiring. + app.GetIBCKeeper, + app.GetCapabilityScopedKeeper, + + // here alternative options can be supplied to the DI container. + // those options can be used f.e to override the default behavior of some modules. + // for instance supplying a custom address codec for not using bech32 addresses. + // read the depinject documentation and depinject module wiring for more information + // on available options and how to use them. + ), + ) + ) + + if err := depinject.Inject(appConfig, + &appBuilder, + &app.appCodec, + &app.legacyAmino, + &app.txConfig, + &app.interfaceRegistry, + &app.AccountKeeper, + &app.BankKeeper, + &app.StakingKeeper, + &app.DistrKeeper, + &app.ConsensusParamsKeeper, + &app.SlashingKeeper, + &app.MintKeeper, + &app.GovKeeper, + &app.CrisisKeeper, + &app.UpgradeKeeper, + &app.ParamsKeeper, + &app.AuthzKeeper, + &app.EvidenceKeeper, + &app.FeeGrantKeeper, + &app.NFTKeeper, + &app.GroupKeeper, + &app.CircuitBreakerKeeper, + &app.ProfileKeeper, + &app.ProjectKeeper, + &app.RewardKeeper, + &app.ParticipationKeeper, &app.LaunchKeeper, - app.BankKeeper, - app.DistrKeeper, - app.ProfileKeeper, - ) - app.ProjectKeeper = *projectKeeper - app.LaunchKeeper.SetProjectKeeper(projectKeeper) - - scopedMonitoringcKeeper := app.CapabilityKeeper.ScopeToModule(monitoringctypes.ModuleName) - app.ScopedMonitoringcKeeper = scopedMonitoringcKeeper - app.MonitoringcKeeper = *monitoringckeeper.NewKeeper( - appCodec, - keys[monitoringctypes.StoreKey], - keys[monitoringctypes.MemStoreKey], - app.GetSubspace(monitoringctypes.ModuleName), - app.IBCKeeper.ClientKeeper, - app.IBCKeeper.ConnectionKeeper, - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - scopedMonitoringcKeeper, - app.LaunchKeeper, - app.RewardKeeper, - ) - app.LaunchKeeper.SetMonitoringcKeeper(app.MonitoringcKeeper) - monitoringcModule := monitoringc.NewAppModule(appCodec, app.MonitoringcKeeper, app.AuthKeeper, app.BankKeeper) - - scopedMonitoringKeeper := app.CapabilityKeeper.ScopeToModule(monitoringptypes.ModuleName) - app.MonitoringpKeeper = *monitoringpkeeper.NewKeeper( - appCodec, - keys[monitoringptypes.StoreKey], - keys[monitoringptypes.MemStoreKey], - app.GetSubspace(monitoringptypes.ModuleName), - app.StakingKeeper, - app.IBCKeeper.ClientKeeper, - app.IBCKeeper.ConnectionKeeper, - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - scopedMonitoringKeeper, - ) - monitoringpModule := monitoringp.NewAppModule(appCodec, app.MonitoringpKeeper) - - app.ParticipationKeeper = *participationkeeper.NewKeeper( - appCodec, - keys[participationtypes.StoreKey], - keys[participationtypes.MemStoreKey], - app.GetSubspace(participationtypes.ModuleName), - app.FundraisingKeeper, - app.StakingKeeper, - ) - - app.ClaimKeeper = *claimkeeper.NewKeeper( - appCodec, - keys[claimtypes.StoreKey], - keys[claimtypes.MemStoreKey], - app.GetSubspace(claimtypes.ModuleName), - app.AuthKeeper, - app.DistrKeeper, - app.BankKeeper, - ) - - // register the fundraising hooks - app.FundraisingKeeper = *app.FundraisingKeeper.SetHooks( - app.ProjectKeeper.ProjectAuctionEventHooks(), - ) - - // register the proposal types - govConfig := govtypes.DefaultConfig() - govKeeper := govkeeper.NewKeeper( - appCodec, - keys[govtypes.StoreKey], - app.AuthKeeper, - app.BankKeeper, - app.StakingKeeper, - app.MsgServiceRouter(), - govConfig, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - - govRouter := govv1beta1.NewRouter() - govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). - AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). - AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). - AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)) - govKeeper.SetLegacyRouter(govRouter) - - app.GovKeeper = *govKeeper.SetHooks( - govtypes.NewMultiGovHooks( - app.ClaimKeeper.NewMissionVoteHooks(missionIDVoting), - ), - ) - - // this line is used by starport scaffolding # stargate/app/keeperDefinition - - // register the staking hooks - // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks - app.StakingKeeper.SetHooks( - stakingtypes.NewMultiStakingHooks( - app.DistrKeeper.Hooks(), - app.SlashingKeeper.Hooks(), - app.ClaimKeeper.NewMissionDelegationHooks(missionIDStaking), - ), - ) - - // Create static IBC router, add transfer route, then set and seal it - ibcRouter.AddRoute(monitoringctypes.ModuleName, monitoringcModule) - ibcRouter.AddRoute(monitoringptypes.ModuleName, monitoringpModule) - - // this line is used by starport scaffolding # ibc/app/router - app.IBCKeeper.SetRouter(ibcRouter) - - /**** Module Options ****/ - - // NOTE: we may consider parsing `appOpts` inside module constructors. For the moment - // we prefer to be more strict in what arguments the modules expect. - skipGenesisInvariants := cast.ToBool(appOpts.Get(crisis.FlagSkipGenesisInvariants)) - - // NOTE: Any module instantiated in the module manager that is later modified - // must be passed by reference here. - - app.mm = module.NewManager( - genutil.NewAppModule( - app.AuthKeeper, app.StakingKeeper, app.BaseApp.DeliverTx, - encodingConfig.TxConfig, - ), - auth.NewAppModule(appCodec, app.AuthKeeper, authsims.RandomGenesisAccounts, app.GetSubspace(authtypes.ModuleName)), - vesting.NewAppModule(app.AuthKeeper, app.BankKeeper), - bank.NewAppModule(appCodec, app.BankKeeper, app.AuthKeeper, app.GetSubspace(banktypes.ModuleName)), - capability.NewAppModule(appCodec, *app.CapabilityKeeper, false), - feegrantmodule.NewAppModule(appCodec, app.AuthKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), - authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AuthKeeper, app.BankKeeper, app.interfaceRegistry), - gov.NewAppModule(appCodec, &app.GovKeeper, app.AuthKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), - mint.NewAppModule(appCodec, app.MintKeeper, app.AuthKeeper), - slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)), - distr.NewAppModule(appCodec, app.DistrKeeper, app.AuthKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), - staking.NewAppModule(appCodec, app.StakingKeeper, app.AuthKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), - upgrade.NewAppModule(app.UpgradeKeeper), - evidence.NewAppModule(app.EvidenceKeeper), - consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), - ibc.NewAppModule(app.IBCKeeper), - params.NewAppModule(app.ParamsKeeper), - app.transferModule, - profile.NewAppModule(appCodec, app.ProfileKeeper, app.AuthKeeper, app.BankKeeper), - launch.NewAppModule(appCodec, app.LaunchKeeper, app.AuthKeeper, app.BankKeeper), - project.NewAppModule(appCodec, app.ProjectKeeper, app.AuthKeeper, app.BankKeeper, app.ProfileKeeper), - monitoringcModule, - monitoringpModule, - reward.NewAppModule(appCodec, app.RewardKeeper, app.AuthKeeper, app.BankKeeper), - fundraising.NewAppModule(appCodec, app.FundraisingKeeper, app.AuthKeeper, app.BankKeeper, app.DistrKeeper), - participation.NewAppModule(appCodec, app.ParticipationKeeper, app.AuthKeeper, app.BankKeeper, app.FundraisingKeeper), - claim.NewAppModule(appCodec, app.ClaimKeeper, app.AuthKeeper, app.BankKeeper), - ibc.NewAppModule(app.IBCKeeper), - transfer.NewAppModule(app.TransferKeeper), - ibcfee.NewAppModule(app.IBCFeeKeeper), - ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper), - crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), // always be last to make sure that it checks for all invariants and not only part of them - // this line is used by starport scaffolding # stargate/app/appModule - ) - - // During begin block slashing happens after distr.BeginBlocker so that - // there is nothing left over in the validator fee pool, so as to keep the - // CanWithdrawInvariant invariant. - // NOTE: staking module is required if HistoricalEntries param > 0 - app.mm.SetOrderBeginBlockers( - upgradetypes.ModuleName, - capabilitytypes.ModuleName, - minttypes.ModuleName, - distrtypes.ModuleName, - slashingtypes.ModuleName, - evidencetypes.ModuleName, - claimtypes.ModuleName, - stakingtypes.ModuleName, - vestingtypes.ModuleName, - ibcexported.ModuleName, - ibctransfertypes.ModuleName, - ibcfeetypes.ModuleName, - ibctransfertypes.ModuleName, - icatypes.ModuleName, - authtypes.ModuleName, - banktypes.ModuleName, - govtypes.ModuleName, - crisistypes.ModuleName, - genutiltypes.ModuleName, - authz.ModuleName, - feegrant.ModuleName, - paramstypes.ModuleName, - profiletypes.ModuleName, - fundraisingtypes.ModuleName, - rewardtypes.ModuleName, - projecttypes.ModuleName, - monitoringctypes.ModuleName, - monitoringptypes.ModuleName, - participationtypes.ModuleName, - launchtypes.ModuleName, - consensusparamtypes.ModuleName, - ) - - app.mm.SetOrderEndBlockers( - fundraisingtypes.ModuleName, - crisistypes.ModuleName, - govtypes.ModuleName, - claimtypes.ModuleName, - stakingtypes.ModuleName, - capabilitytypes.ModuleName, - authtypes.ModuleName, - banktypes.ModuleName, - distrtypes.ModuleName, - slashingtypes.ModuleName, - vestingtypes.ModuleName, - minttypes.ModuleName, - genutiltypes.ModuleName, - evidencetypes.ModuleName, - authz.ModuleName, - feegrant.ModuleName, - paramstypes.ModuleName, - upgradetypes.ModuleName, - ibcexported.ModuleName, - ibctransfertypes.ModuleName, - ibcfeetypes.ModuleName, - ibctransfertypes.ModuleName, - icatypes.ModuleName, - profiletypes.ModuleName, - rewardtypes.ModuleName, - projecttypes.ModuleName, - monitoringctypes.ModuleName, - monitoringptypes.ModuleName, - participationtypes.ModuleName, - launchtypes.ModuleName, - consensusparamtypes.ModuleName, - ) - - // NOTE: The genutils module must occur after staking so that pools are - // properly initialized with tokens from genesis accounts. - // NOTE: Capability module must occur first so that it can initialize any capabilities - // so that other modules that want to create or claim capabilities afterwards in InitChain - // can do so safely. - app.mm.SetOrderInitGenesis( - capabilitytypes.ModuleName, - authtypes.ModuleName, - banktypes.ModuleName, - distrtypes.ModuleName, - claimtypes.ModuleName, - stakingtypes.ModuleName, - vestingtypes.ModuleName, - slashingtypes.ModuleName, - govtypes.ModuleName, - minttypes.ModuleName, - crisistypes.ModuleName, - ibcexported.ModuleName, - ibctransfertypes.ModuleName, - ibcfeetypes.ModuleName, - icatypes.ModuleName, - genutiltypes.ModuleName, - evidencetypes.ModuleName, - paramstypes.ModuleName, - upgradetypes.ModuleName, - ibctransfertypes.ModuleName, - authz.ModuleName, - feegrant.ModuleName, - profiletypes.ModuleName, - launchtypes.ModuleName, - projecttypes.ModuleName, - monitoringctypes.ModuleName, - monitoringptypes.ModuleName, - rewardtypes.ModuleName, - fundraisingtypes.ModuleName, - participationtypes.ModuleName, - consensusparamtypes.ModuleName, - // this line is used by starport scaffolding # stargate/app/initGenesis - ) - - app.mm.RegisterInvariants(app.CrisisKeeper) - app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter()) - app.mm.RegisterServices(app.configurator) - - autocliv1.RegisterQueryServer(app.GRPCQueryRouter(), runtimeservices.NewAutoCLIQueryService(app.mm.Modules)) - reflectionSvc, err := runtimeservices.NewReflectionService() - if err != nil { + &app.MonitoringcKeeper, + &app.MonitoringpKeeper, + ); err != nil { panic(err) } - reflectionv1.RegisterReflectionServiceServer(app.GRPCQueryRouter(), reflectionSvc) - - // create the simulation manager and define the order of the modules for deterministic simulations - overrideModules := map[string]module.AppModuleSimulation{ - authtypes.ModuleName: auth.NewAppModule( - app.appCodec, - app.AuthKeeper, - authsims.RandomGenesisAccounts, - app.GetSubspace(authtypes.ModuleName), - ), - } - // create the simulation manager and define the order of the modules for deterministic simulations - app.sm = module.NewSimulationManagerFromAppModules(app.mm.Modules, overrideModules) - app.sm.RegisterStoreDecoders() + // add to default baseapp options + // enable optimistic execution + baseAppOptions = append(baseAppOptions, baseapp.SetOptimisticExecution()) - // initialize stores - app.MountKVStores(keys) - app.MountTransientStores(tkeys) - app.MountMemoryStores(memKeys) + // build app + app.App = appBuilder.Build(db, traceStore, baseAppOptions...) - // initialize BaseApp - anteHandler, err := ante.NewAnteHandler( - ante.HandlerOptions{ - AccountKeeper: app.AuthKeeper, - BankKeeper: app.BankKeeper, - SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), - FeegrantKeeper: app.FeeGrantKeeper, - SigGasConsumer: ante.DefaultSigVerificationGasConsumer, - }, - ) - if err != nil { - panic(err) + // register legacy modules + if err := app.registerIBCModules(appOpts); err != nil { + return nil, err } - app.SetInitChainer(app.InitChainer) - app.SetAnteHandler(anteHandler) - app.SetBeginBlocker(app.BeginBlocker) - app.SetEndBlocker(app.EndBlocker) - - if loadLatest { - if err := app.LoadLatestVersion(); err != nil { - tmos.Exit(err.Error()) - } + // register streaming services + if err := app.RegisterStreamingServices(appOpts, app.kvStoreKeys()); err != nil { + return nil, err } - app.ScopedIBCKeeper = scopedIBCKeeper - app.ScopedTransferKeeper = scopedTransferKeeper - app.ScopedICAControllerKeeper = scopedICAControllerKeeper - app.ScopedICAHostKeeper = scopedICAHostKeeper - - // this line is used by starport scaffolding # stargate/app/beforeInitReturn - - return app -} - -// Name returns the name of the App -func (app *App) Name() string { return app.BaseApp.Name() } - -// GetBaseApp returns the base app of the application -func (app App) GetBaseApp() *baseapp.BaseApp { return app.BaseApp } + /**** Module Options ****/ -// BeginBlocker application updates every begin block -func (app *App) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { - return app.mm.BeginBlock(ctx, req) -} + app.ModuleManager.RegisterInvariants(app.CrisisKeeper) -// EndBlocker application updates every end block -func (app *App) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock { - return app.mm.EndBlock(ctx, req) -} - -// InitChainer application update at chain initialization -func (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { - var genesisState GenesisState - if err := json.Unmarshal(req.AppStateBytes, &genesisState); err != nil { - panic(err) + // create the simulation manager and define the order of the modules for deterministic simulations + overrideModules := map[string]module.AppModuleSimulation{ + authtypes.ModuleName: auth.NewAppModule(app.appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts, app.GetSubspace(authtypes.ModuleName)), } - return app.mm.InitGenesis(ctx, app.appCodec, genesisState) -} - -// Configurator get app configurator -func (app *App) Configurator() module.Configurator { - return app.configurator -} - -// LoadHeight loads a particular height -func (app *App) LoadHeight(height int64) error { - return app.LoadVersion(height) -} - -// RegisterNodeService implements the Application.RegisterNodeService method. -func (app *App) RegisterNodeService(clientCtx client.Context) { - nodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter()) -} + app.sm = module.NewSimulationManagerFromAppModules(app.ModuleManager.Modules, overrideModules) + app.sm.RegisterStoreDecoders() -// ModuleAccountAddrs returns all the app's module account addresses. -func (app *App) ModuleAccountAddrs() map[string]bool { - modAccAddrs := make(map[string]bool) - for acc := range maccPerms { - modAccAddrs[authtypes.NewModuleAddress(acc).String()] = true + // A custom InitChainer sets if extra pre-init-genesis logic is required. + // This is necessary for manually registered modules that do not support app wiring. + // Manually set the module version map as shown below. + // The upgrade module will automatically handle de-duplication of the module version map. + // app.SetInitChainer(func(ctx sdk.Context, req *abci.RequestInitChain) (*abci.ResponseInitChain, error) { + // if err := app.UpgradeKeeper.SetModuleVersionMap(ctx, app.ModuleManager.GetVersionMap()); err != nil { + // return nil, err + // } + // return app.App.InitChainer(ctx, req) + // }) + + if err := app.Load(loadLatest); err != nil { + return nil, err } - return modAccAddrs -} - -// BlockedModuleAccountAddrs returns all the app's blocked module account -// addresses. -func (app *App) BlockedModuleAccountAddrs() map[string]bool { - modAccAddrs := app.ModuleAccountAddrs() - delete(modAccAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String()) - - return modAccAddrs + return app, nil } -// LegacyAmino returns SimApp's amino codec. +// LegacyAmino returns App's amino codec. // // NOTE: This is solely to be used for testing purposes as it may be desirable // for modules to register their own custom testing types. func (app *App) LegacyAmino() *codec.LegacyAmino { - return app.cdc + return app.legacyAmino } -// AppCodec returns spn's app codec. +// AppCodec returns App's app codec. // // NOTE: This is solely to be used for testing purposes as it may be desirable // for modules to register their own custom testing types. @@ -1063,124 +324,98 @@ func (app *App) AppCodec() codec.Codec { return app.appCodec } -// InterfaceRegistry returns spn's InterfaceRegistry -func (app *App) InterfaceRegistry() types.InterfaceRegistry { - return app.interfaceRegistry -} - // GetKey returns the KVStoreKey for the provided store key. -// -// NOTE: This is solely to be used for testing purposes. func (app *App) GetKey(storeKey string) *storetypes.KVStoreKey { - return app.keys[storeKey] + kvStoreKey, ok := app.UnsafeFindStoreKey(storeKey).(*storetypes.KVStoreKey) + if !ok { + return nil + } + return kvStoreKey } -// GetTKey returns the TransientStoreKey for the provided store key. -// -// NOTE: This is solely to be used for testing purposes. -func (app *App) GetTKey(storeKey string) *storetypes.TransientStoreKey { - return app.tkeys[storeKey] +// GetMemKey returns the MemoryStoreKey for the provided store key. +func (app *App) GetMemKey(storeKey string) *storetypes.MemoryStoreKey { + key, ok := app.UnsafeFindStoreKey(storeKey).(*storetypes.MemoryStoreKey) + if !ok { + return nil + } + + return key } -// GetMemKey returns the MemStoreKey for the provided mem key. -// -// NOTE: This is solely used for testing purposes. -func (app *App) GetMemKey(storeKey string) *storetypes.MemoryStoreKey { - return app.memKeys[storeKey] +// kvStoreKeys returns all the kv store keys registered inside App. +func (app *App) kvStoreKeys() map[string]*storetypes.KVStoreKey { + keys := make(map[string]*storetypes.KVStoreKey) + for _, k := range app.GetStoreKeys() { + if kv, ok := k.(*storetypes.KVStoreKey); ok { + keys[kv.Name()] = kv + } + } + + return keys } // GetSubspace returns a param subspace for a given module name. -// -// NOTE: This is solely to be used for testing purposes. func (app *App) GetSubspace(moduleName string) paramstypes.Subspace { subspace, _ := app.ParamsKeeper.GetSubspace(moduleName) return subspace } -// TxConfig returns App's TxConfig -func (app *App) TxConfig() client.TxConfig { - return app.txConfig +// GetIBCKeeper returns the IBC keeper. +func (app *App) GetIBCKeeper() *ibckeeper.Keeper { + return app.IBCKeeper +} + +// GetCapabilityScopedKeeper returns the capability scoped keeper. +func (app *App) GetCapabilityScopedKeeper(moduleName string) capabilitykeeper.ScopedKeeper { + sk, ok := app.ScopedKeepers[moduleName] + if !ok { + sk = app.CapabilityKeeper.ScopeToModule(moduleName) + app.ScopedKeepers[moduleName] = sk + } + return sk +} + +// SimulationManager implements the SimulationApp interface. +func (app *App) SimulationManager() *module.SimulationManager { + return app.sm } // RegisterAPIRoutes registers all application module routes with the provided // API server. func (app *App) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) { - clientCtx := apiSvr.ClientCtx - // Register new tx routes from grpc-gateway. - authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) - // Register new tendermint queries routes from grpc-gateway. - tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) - // Register node gRPC service for grpc-gateway. - nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) - - // Register grpc-gateway routes for all modules. - ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + app.App.RegisterAPIRoutes(apiSvr, apiConfig) + // register swagger API in app.go so that other applications can override easily + if err := server.RegisterSwaggerAPI(apiSvr.ClientCtx, apiSvr.Router, apiConfig.Swagger); err != nil { + panic(err) + } // register app's OpenAPI routes. - apiSvr.Router.Handle("/static/openapi.yml", http.FileServer(http.FS(docs.Docs))) - // apiSvr.Router.HandleFunc("/", openapiconsole.Handler(spntypes.Name, "/static/openapi.yml")) -} - -// RegisterTxService implements the Application.RegisterTxService method. -func (app *App) RegisterTxService(clientCtx client.Context) { - authtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry) -} - -// RegisterTendermintService implements the Application.RegisterTendermintService method. -func (app *App) RegisterTendermintService(clientCtx client.Context) { - tmservice.RegisterTendermintService( - clientCtx, - app.BaseApp.GRPCQueryRouter(), - app.interfaceRegistry, - app.Query, - ) + docs.RegisterOpenAPIService(Name, apiSvr.Router) } // GetMaccPerms returns a copy of the module account permissions +// +// NOTE: This is solely to be used for testing purposes. func GetMaccPerms() map[string][]string { - dupMaccPerms := make(map[string][]string) - for k, v := range maccPerms { - dupMaccPerms[k] = v + dup := make(map[string][]string) + for _, perms := range moduleAccPerms { + dup[perms.Account] = perms.Permissions } - return dupMaccPerms -} - -// initParamsKeeper init params keeper and its subspaces -func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper { - paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) - - paramsKeeper.Subspace(authtypes.ModuleName) - paramsKeeper.Subspace(banktypes.ModuleName) - paramsKeeper.Subspace(stakingtypes.ModuleName) - paramsKeeper.Subspace(minttypes.ModuleName) - paramsKeeper.Subspace(distrtypes.ModuleName) - paramsKeeper.Subspace(slashingtypes.ModuleName) - paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable()) - paramsKeeper.Subspace(crisistypes.ModuleName) - paramsKeeper.Subspace(ibctransfertypes.ModuleName) - paramsKeeper.Subspace(ibcexported.ModuleName) - paramsKeeper.Subspace(icacontrollertypes.SubModuleName) - paramsKeeper.Subspace(icahosttypes.SubModuleName) - paramsKeeper.Subspace(profiletypes.ModuleName) - paramsKeeper.Subspace(launchtypes.ModuleName) - paramsKeeper.Subspace(projecttypes.ModuleName) - paramsKeeper.Subspace(monitoringctypes.ModuleName) - paramsKeeper.Subspace(monitoringptypes.ModuleName) - paramsKeeper.Subspace(rewardtypes.ModuleName) - paramsKeeper.Subspace(fundraisingtypes.ModuleName) - paramsKeeper.Subspace(participationtypes.ModuleName) - paramsKeeper.Subspace(consensusparamtypes.ModuleName) - paramsKeeper.Subspace(claimtypes.ModuleName) - // this line is used by starport scaffolding # stargate/app/paramSubspace - - return paramsKeeper + return dup } -// SimulationManager implements the SimulationApp interface -func (app *App) SimulationManager() *module.SimulationManager { - return app.sm -} - -func (app *App) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, genesisData map[string]json.RawMessage) { - app.mm.InitGenesis(ctx, cdc, genesisData) +// BlockedAddresses returns all the app's blocked account addresses. +func BlockedAddresses() map[string]bool { + result := make(map[string]bool) + if len(blockAccAddrs) > 0 { + for _, addr := range blockAccAddrs { + result[addr] = true + } + } else { + for addr := range GetMaccPerms() { + result[addr] = true + } + } + return result } diff --git a/app/app_config.go b/app/app_config.go new file mode 100644 index 00000000..7218a14a --- /dev/null +++ b/app/app_config.go @@ -0,0 +1,364 @@ +package app + +import ( + "time" + + runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1" + appv1alpha1 "cosmossdk.io/api/cosmos/app/v1alpha1" + authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" + authzmodulev1 "cosmossdk.io/api/cosmos/authz/module/v1" + bankmodulev1 "cosmossdk.io/api/cosmos/bank/module/v1" + circuitmodulev1 "cosmossdk.io/api/cosmos/circuit/module/v1" + consensusmodulev1 "cosmossdk.io/api/cosmos/consensus/module/v1" + crisismodulev1 "cosmossdk.io/api/cosmos/crisis/module/v1" + distrmodulev1 "cosmossdk.io/api/cosmos/distribution/module/v1" + evidencemodulev1 "cosmossdk.io/api/cosmos/evidence/module/v1" + feegrantmodulev1 "cosmossdk.io/api/cosmos/feegrant/module/v1" + genutilmodulev1 "cosmossdk.io/api/cosmos/genutil/module/v1" + govmodulev1 "cosmossdk.io/api/cosmos/gov/module/v1" + groupmodulev1 "cosmossdk.io/api/cosmos/group/module/v1" + mintmodulev1 "cosmossdk.io/api/cosmos/mint/module/v1" + nftmodulev1 "cosmossdk.io/api/cosmos/nft/module/v1" + paramsmodulev1 "cosmossdk.io/api/cosmos/params/module/v1" + slashingmodulev1 "cosmossdk.io/api/cosmos/slashing/module/v1" + stakingmodulev1 "cosmossdk.io/api/cosmos/staking/module/v1" + txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1" + upgrademodulev1 "cosmossdk.io/api/cosmos/upgrade/module/v1" + vestingmodulev1 "cosmossdk.io/api/cosmos/vesting/module/v1" + "cosmossdk.io/core/appconfig" + circuittypes "cosmossdk.io/x/circuit/types" + evidencetypes "cosmossdk.io/x/evidence/types" + "cosmossdk.io/x/feegrant" + "cosmossdk.io/x/nft" + upgradetypes "cosmossdk.io/x/upgrade/types" + "github.com/cosmos/cosmos-sdk/runtime" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" + "github.com/cosmos/cosmos-sdk/x/authz" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types" + crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/cosmos/cosmos-sdk/x/group" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + "google.golang.org/protobuf/types/known/durationpb" + + launchmodulev1 "github.com/ignite/network/api/network/launch/module/v1" + monitoringcmodulev1 "github.com/ignite/network/api/network/monitoringc/module/v1" + monitoringpmodulev1 "github.com/ignite/network/api/network/monitoringp/module/v1" + participationmodulev1 "github.com/ignite/network/api/network/participation/module/v1" + profilemodulev1 "github.com/ignite/network/api/network/profile/module/v1" + projectmodulev1 "github.com/ignite/network/api/network/project/module/v1" + rewardmodulev1 "github.com/ignite/network/api/network/reward/module/v1" + _ "github.com/ignite/network/x/launch/module" + launchmoduletypes "github.com/ignite/network/x/launch/types" + _ "github.com/ignite/network/x/monitoringc/module" + monitoringcmoduletypes "github.com/ignite/network/x/monitoringc/types" + _ "github.com/ignite/network/x/monitoringp/module" + monitoringpmoduletypes "github.com/ignite/network/x/monitoringp/types" + _ "github.com/ignite/network/x/participation/module" + participationmoduletypes "github.com/ignite/network/x/participation/types" + _ "github.com/ignite/network/x/profile/module" + profilemoduletypes "github.com/ignite/network/x/profile/types" + _ "github.com/ignite/network/x/project/module" + projectmoduletypes "github.com/ignite/network/x/project/types" + _ "github.com/ignite/network/x/reward/module" + rewardmoduletypes "github.com/ignite/network/x/reward/types" +) + +var ( + // NOTE: The genutils module must occur after staking so that pools are + // properly initialized with tokens from genesis accounts. + // NOTE: The genutils module must also occur after auth so that it can access the params from auth. + // NOTE: Capability module must occur first so that it can initialize any capabilities + // so that other modules that want to create or claim capabilities afterwards in InitChain + // can do so safely. + genesisModuleOrder = []string{ + // cosmos-sdk/ibc modules + capabilitytypes.ModuleName, + authtypes.ModuleName, + banktypes.ModuleName, + distrtypes.ModuleName, + stakingtypes.ModuleName, + slashingtypes.ModuleName, + govtypes.ModuleName, + minttypes.ModuleName, + crisistypes.ModuleName, + ibcexported.ModuleName, + genutiltypes.ModuleName, + evidencetypes.ModuleName, + authz.ModuleName, + ibctransfertypes.ModuleName, + icatypes.ModuleName, + ibcfeetypes.ModuleName, + feegrant.ModuleName, + paramstypes.ModuleName, + upgradetypes.ModuleName, + vestingtypes.ModuleName, + nft.ModuleName, + group.ModuleName, + consensustypes.ModuleName, + circuittypes.ModuleName, + // chain modules + profilemoduletypes.ModuleName, + projectmoduletypes.ModuleName, + rewardmoduletypes.ModuleName, + participationmoduletypes.ModuleName, + launchmoduletypes.ModuleName, + monitoringcmoduletypes.ModuleName, + monitoringpmoduletypes.ModuleName, + // this line is used by starport scaffolding # stargate/app/initGenesis + } + + // During begin block slashing happens after distr.BeginBlocker so that + // there is nothing left over in the validator fee pool, so as to keep the + // CanWithdrawInvariant invariant. + // NOTE: staking module is required if HistoricalEntries param > 0 + // NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC) + beginBlockers = []string{ + // cosmos sdk modules + minttypes.ModuleName, + distrtypes.ModuleName, + slashingtypes.ModuleName, + evidencetypes.ModuleName, + stakingtypes.ModuleName, + authz.ModuleName, + genutiltypes.ModuleName, + // ibc modules + capabilitytypes.ModuleName, + ibcexported.ModuleName, + ibctransfertypes.ModuleName, + icatypes.ModuleName, + ibcfeetypes.ModuleName, + // chain modules + profilemoduletypes.ModuleName, + projectmoduletypes.ModuleName, + rewardmoduletypes.ModuleName, + participationmoduletypes.ModuleName, + launchmoduletypes.ModuleName, + monitoringcmoduletypes.ModuleName, + monitoringpmoduletypes.ModuleName, + // this line is used by starport scaffolding # stargate/app/beginBlockers + } + + endBlockers = []string{ + // cosmos sdk modules + crisistypes.ModuleName, + govtypes.ModuleName, + stakingtypes.ModuleName, + feegrant.ModuleName, + group.ModuleName, + genutiltypes.ModuleName, + // ibc modules + ibcexported.ModuleName, + ibctransfertypes.ModuleName, + capabilitytypes.ModuleName, + icatypes.ModuleName, + ibcfeetypes.ModuleName, + // chain modules + profilemoduletypes.ModuleName, + projectmoduletypes.ModuleName, + rewardmoduletypes.ModuleName, + participationmoduletypes.ModuleName, + launchmoduletypes.ModuleName, + monitoringcmoduletypes.ModuleName, + monitoringpmoduletypes.ModuleName, + // this line is used by starport scaffolding # stargate/app/endBlockers + } + + preBlockers = []string{ + upgradetypes.ModuleName, + // this line is used by starport scaffolding # stargate/app/preBlockers + } + + // module account permissions + moduleAccPerms = []*authmodulev1.ModuleAccountPermission{ + {Account: authtypes.FeeCollectorName}, + {Account: distrtypes.ModuleName}, + {Account: minttypes.ModuleName, Permissions: []string{authtypes.Minter}}, + {Account: stakingtypes.BondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, + {Account: stakingtypes.NotBondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, + {Account: govtypes.ModuleName, Permissions: []string{authtypes.Burner}}, + {Account: nft.ModuleName}, + {Account: ibctransfertypes.ModuleName, Permissions: []string{authtypes.Minter, authtypes.Burner}}, + {Account: ibcfeetypes.ModuleName}, + {Account: icatypes.ModuleName}, + {Account: projectmoduletypes.ModuleName, Permissions: []string{authtypes.Minter, authtypes.Burner, authtypes.Staking}}, + {Account: rewardmoduletypes.ModuleName, Permissions: []string{authtypes.Minter, authtypes.Burner, authtypes.Staking}}, + // this line is used by starport scaffolding # stargate/app/maccPerms + } + + // blocked account addresses + blockAccAddrs = []string{ + authtypes.FeeCollectorName, + distrtypes.ModuleName, + minttypes.ModuleName, + stakingtypes.BondedPoolName, + stakingtypes.NotBondedPoolName, + nft.ModuleName, + // We allow the following module accounts to receive funds: + // govtypes.ModuleName + } + + // appConfig application configuration (used by depinject) + appConfig = appconfig.Compose(&appv1alpha1.Config{ + Modules: []*appv1alpha1.ModuleConfig{ + { + Name: runtime.ModuleName, + Config: appconfig.WrapAny(&runtimev1alpha1.Module{ + AppName: Name, + PreBlockers: preBlockers, + BeginBlockers: beginBlockers, + EndBlockers: endBlockers, + InitGenesis: genesisModuleOrder, + OverrideStoreKeys: []*runtimev1alpha1.StoreKeyConfig{ + { + ModuleName: authtypes.ModuleName, + KvStoreKey: "acc", + }, + }, + // When ExportGenesis is not specified, the export genesis module order + // is equal to the init genesis order + // ExportGenesis: genesisModuleOrder, + // Uncomment if you want to set a custom migration order here. + // OrderMigrations: nil, + }), + }, + { + Name: authtypes.ModuleName, + Config: appconfig.WrapAny(&authmodulev1.Module{ + Bech32Prefix: AccountAddressPrefix, + ModuleAccountPermissions: moduleAccPerms, + // By default modules authority is the governance module. This is configurable with the following: + // Authority: "group", // A custom module authority can be set using a module name + // Authority: "cosmos1cwwv22j5ca08ggdv9c2uky355k908694z577tv", // or a specific address + }), + }, + { + Name: nft.ModuleName, + Config: appconfig.WrapAny(&nftmodulev1.Module{}), + }, + { + Name: vestingtypes.ModuleName, + Config: appconfig.WrapAny(&vestingmodulev1.Module{}), + }, + { + Name: banktypes.ModuleName, + Config: appconfig.WrapAny(&bankmodulev1.Module{ + BlockedModuleAccountsOverride: blockAccAddrs, + }), + }, + { + Name: stakingtypes.ModuleName, + Config: appconfig.WrapAny(&stakingmodulev1.Module{ + // NOTE: specifying a prefix is only necessary when using bech32 addresses + // If not specfied, the auth Bech32Prefix appended with "valoper" and "valcons" is used by default + Bech32PrefixValidator: AccountAddressPrefix + "valoper", + Bech32PrefixConsensus: AccountAddressPrefix + "valcons", + }), + }, + { + Name: slashingtypes.ModuleName, + Config: appconfig.WrapAny(&slashingmodulev1.Module{}), + }, + { + Name: paramstypes.ModuleName, + Config: appconfig.WrapAny(¶msmodulev1.Module{}), + }, + { + Name: "tx", + Config: appconfig.WrapAny(&txconfigv1.Config{}), + }, + { + Name: genutiltypes.ModuleName, + Config: appconfig.WrapAny(&genutilmodulev1.Module{}), + }, + { + Name: authz.ModuleName, + Config: appconfig.WrapAny(&authzmodulev1.Module{}), + }, + { + Name: upgradetypes.ModuleName, + Config: appconfig.WrapAny(&upgrademodulev1.Module{}), + }, + { + Name: distrtypes.ModuleName, + Config: appconfig.WrapAny(&distrmodulev1.Module{}), + }, + { + Name: evidencetypes.ModuleName, + Config: appconfig.WrapAny(&evidencemodulev1.Module{}), + }, + { + Name: minttypes.ModuleName, + Config: appconfig.WrapAny(&mintmodulev1.Module{}), + }, + { + Name: group.ModuleName, + Config: appconfig.WrapAny(&groupmodulev1.Module{ + MaxExecutionPeriod: durationpb.New(time.Second * 1209600), + MaxMetadataLen: 255, + }), + }, + { + Name: feegrant.ModuleName, + Config: appconfig.WrapAny(&feegrantmodulev1.Module{}), + }, + { + Name: govtypes.ModuleName, + Config: appconfig.WrapAny(&govmodulev1.Module{}), + }, + { + Name: crisistypes.ModuleName, + Config: appconfig.WrapAny(&crisismodulev1.Module{}), + }, + { + Name: consensustypes.ModuleName, + Config: appconfig.WrapAny(&consensusmodulev1.Module{}), + }, + { + Name: circuittypes.ModuleName, + Config: appconfig.WrapAny(&circuitmodulev1.Module{}), + }, + { + Name: profilemoduletypes.ModuleName, + Config: appconfig.WrapAny(&profilemodulev1.Module{}), + }, + { + Name: projectmoduletypes.ModuleName, + Config: appconfig.WrapAny(&projectmodulev1.Module{}), + }, + { + Name: rewardmoduletypes.ModuleName, + Config: appconfig.WrapAny(&rewardmodulev1.Module{}), + }, + { + Name: participationmoduletypes.ModuleName, + Config: appconfig.WrapAny(&participationmodulev1.Module{}), + }, + { + Name: launchmoduletypes.ModuleName, + Config: appconfig.WrapAny(&launchmodulev1.Module{}), + }, + { + Name: monitoringcmoduletypes.ModuleName, + Config: appconfig.WrapAny(&monitoringcmodulev1.Module{}), + }, + { + Name: monitoringpmoduletypes.ModuleName, + Config: appconfig.WrapAny(&monitoringpmodulev1.Module{}), + }, + // this line is used by starport scaffolding # stargate/app/moduleConfig + }, + }) +) diff --git a/app/config.go b/app/config.go new file mode 100644 index 00000000..f8860c87 --- /dev/null +++ b/app/config.go @@ -0,0 +1,19 @@ +package app + +import sdk "github.com/cosmos/cosmos-sdk/types" + +func init() { + // Set prefixes + accountPubKeyPrefix := AccountAddressPrefix + "pub" + validatorAddressPrefix := AccountAddressPrefix + "valoper" + validatorPubKeyPrefix := AccountAddressPrefix + "valoperpub" + consNodeAddressPrefix := AccountAddressPrefix + "valcons" + consNodePubKeyPrefix := AccountAddressPrefix + "valconspub" + + // Set and seal config + config := sdk.GetConfig() + config.SetBech32PrefixForAccount(AccountAddressPrefix, accountPubKeyPrefix) + config.SetBech32PrefixForValidator(validatorAddressPrefix, validatorPubKeyPrefix) + config.SetBech32PrefixForConsensusNode(consNodeAddressPrefix, consNodePubKeyPrefix) + config.Seal() +} diff --git a/app/export.go b/app/export.go index db240d2b..2b1771cd 100644 --- a/app/export.go +++ b/app/export.go @@ -5,7 +5,8 @@ import ( "fmt" "log" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" @@ -15,23 +16,23 @@ import ( // ExportAppStateAndValidators exports the state of the application for a genesis // file. -func (app *App) ExportAppStateAndValidators( - forZeroHeight bool, - jailAllowedAddrs []string, - modulesToExport []string, -) (servertypes.ExportedApp, error) { +func (app *App) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs, modulesToExport []string) (servertypes.ExportedApp, error) { // as if they could withdraw from the start of the next block - ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) + ctx := app.NewContextLegacy(true, cmtproto.Header{Height: app.LastBlockHeight()}) // We export at last height + 1, because that's the height at which - // Tendermint will start InitChain. + // CometBFT will start InitChain. height := app.LastBlockHeight() + 1 if forZeroHeight { height = 0 app.prepForZeroHeightGenesis(ctx, jailAllowedAddrs) } - genState := app.mm.ExportGenesisForModules(ctx, app.appCodec, modulesToExport) + genState, err := app.ModuleManager.ExportGenesisForModules(ctx, app.appCodec, modulesToExport) + if err != nil { + return servertypes.ExportedApp{}, err + } + appState, err := json.MarshalIndent(genState, "", " ") if err != nil { return servertypes.ExportedApp{}, err @@ -46,10 +47,10 @@ func (app *App) ExportAppStateAndValidators( }, err } -// prepForZeroHeightGenesis prepares for a fresh genesis -// +// prepare for fresh start at zero height // NOTE zero height genesis is a temporary feature which will be deprecated -// in favour of export at a block height +// +// in favor of export at a block height func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []string) { applyAllowedAddrs := false @@ -74,13 +75,24 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str /* Handle fee distribution state. */ // withdraw all validator commission - app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { - _, _ = app.DistrKeeper.WithdrawValidatorCommission(ctx, val.GetOperator()) + err := app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + valBz, err := app.StakingKeeper.ValidatorAddressCodec().StringToBytes(val.GetOperator()) + if err != nil { + panic(err) + } + _, _ = app.DistrKeeper.WithdrawValidatorCommission(ctx, valBz) return false }) + if err != nil { + panic(err) + } // withdraw all delegator rewards - dels := app.StakingKeeper.GetAllDelegations(ctx) + dels, err := app.StakingKeeper.GetAllDelegations(ctx) + if err != nil { + panic(err) + } + for _, delegation := range dels { valAddr, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress) if err != nil { @@ -103,14 +115,26 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str ctx = ctx.WithBlockHeight(0) // reinitialize all validators - app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + err = app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + valBz, err := app.StakingKeeper.ValidatorAddressCodec().StringToBytes(val.GetOperator()) + if err != nil { + panic(err) + } // donate any unwithdrawn outstanding reward fraction tokens to the community pool - scraps := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, val.GetOperator()) - feePool := app.DistrKeeper.GetFeePool(ctx) + scraps, err := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, valBz) + if err != nil { + panic(err) + } + feePool, err := app.DistrKeeper.FeePool.Get(ctx) + if err != nil { + panic(err) + } feePool.CommunityPool = feePool.CommunityPool.Add(scraps...) - app.DistrKeeper.SetFeePool(ctx, feePool) + if err := app.DistrKeeper.FeePool.Set(ctx, feePool); err != nil { + panic(err) + } - if err := app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()); err != nil { + if err := app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, valBz); err != nil { panic(err) } return false @@ -141,33 +165,45 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str /* Handle staking state. */ // iterate through redelegations, reset creation height - app.StakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) { + err = app.StakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) { for i := range red.Entries { red.Entries[i].CreationHeight = 0 } - app.StakingKeeper.SetRedelegation(ctx, red) + err = app.StakingKeeper.SetRedelegation(ctx, red) + if err != nil { + panic(err) + } return false }) + if err != nil { + panic(err) + } // iterate through unbonding delegations, reset creation height - app.StakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) { + err = app.StakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) { for i := range ubd.Entries { ubd.Entries[i].CreationHeight = 0 } - app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) + err = app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) + if err != nil { + panic(err) + } return false }) + if err != nil { + panic(err) + } // Iterate through validators by power descending, reset bond heights, and // update bond intra-tx counters. store := ctx.KVStore(app.GetKey(stakingtypes.StoreKey)) - iter := sdk.KVStoreReversePrefixIterator(store, stakingtypes.ValidatorsKey) + iter := storetypes.KVStoreReversePrefixIterator(store, stakingtypes.ValidatorsKey) counter := int16(0) for ; iter.Valid(); iter.Next() { addr := sdk.ValAddress(stakingtypes.AddressFromValidatorsKey(iter.Key())) - validator, found := app.StakingKeeper.GetValidator(ctx, addr) - if !found { + validator, err := app.StakingKeeper.GetValidator(ctx, addr) + if err != nil { panic("expected validator, not found") } @@ -176,7 +212,9 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str validator.Jailed = true } - app.StakingKeeper.SetValidator(ctx, validator) + if err := app.StakingKeeper.SetValidator(ctx, validator); err != nil { + panic(err) + } counter++ } @@ -185,7 +223,7 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str return } - _, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) + _, err = app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) if err != nil { log.Fatal(err) } @@ -193,12 +231,14 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str /* Handle slashing state. */ // reset start height on signing infos - app.SlashingKeeper.IterateValidatorSigningInfos( + if err := app.SlashingKeeper.IterateValidatorSigningInfos( ctx, func(addr sdk.ConsAddress, info slashingtypes.ValidatorSigningInfo) (stop bool) { info.StartHeight = 0 - app.SlashingKeeper.SetValidatorSigningInfo(ctx, addr, info) + _ = app.SlashingKeeper.SetValidatorSigningInfo(ctx, addr, info) return false }, - ) + ); err != nil { + log.Fatal(err) + } } diff --git a/app/genesis.go b/app/genesis.go index 5bf0c1da..e4e849fc 100644 --- a/app/genesis.go +++ b/app/genesis.go @@ -2,11 +2,9 @@ package app import ( "encoding/json" - - "github.com/cosmos/cosmos-sdk/codec" ) -// The genesis state of the blockchain is represented here as a map of raw json +// GenesisState of the blockchain is represented here as a map of raw json // messages key'd by a identifier string. // The identifier is used to determine which module genesis information belongs // to so it may be appropriately routed during init chain. @@ -14,8 +12,3 @@ import ( // the ModuleBasicManager which populates json from each BasicModule // object provided to it during init. type GenesisState map[string]json.RawMessage - -// NewDefaultGenesisState generates the default state for the application. -func NewDefaultGenesisState(cdc codec.JSONCodec) GenesisState { - return ModuleBasics.DefaultGenesis(cdc) -} diff --git a/app/genesis_account.go b/app/genesis_account.go new file mode 100644 index 00000000..91ff4dfc --- /dev/null +++ b/app/genesis_account.go @@ -0,0 +1,47 @@ +package app + +import ( + "errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var _ authtypes.GenesisAccount = (*GenesisAccount)(nil) + +// GenesisAccount defines a type that implements the GenesisAccount interface +// to be used for simulation accounts in the genesis state. +type GenesisAccount struct { + *authtypes.BaseAccount + + // vesting account fields + OriginalVesting sdk.Coins `json:"original_vesting" yaml:"original_vesting"` // total vesting coins upon initialization + DelegatedFree sdk.Coins `json:"delegated_free" yaml:"delegated_free"` // delegated vested coins at time of delegation + DelegatedVesting sdk.Coins `json:"delegated_vesting" yaml:"delegated_vesting"` // delegated vesting coins at time of delegation + StartTime int64 `json:"start_time" yaml:"start_time"` // vesting start time (UNIX Epoch time) + EndTime int64 `json:"end_time" yaml:"end_time"` // vesting end time (UNIX Epoch time) + + // module account fields + ModuleName string `json:"module_name" yaml:"module_name"` // name of the module account + ModulePermissions []string `json:"module_permissions" yaml:"module_permissions"` // permissions of module account +} + +// Validate checks for errors on the vesting and module account parameters +func (sga GenesisAccount) Validate() error { + if !sga.OriginalVesting.IsZero() { + if sga.StartTime >= sga.EndTime { + return errors.New("vesting start-time cannot be before end-time") + } + } + + if sga.ModuleName != "" { + ma := authtypes.ModuleAccount{ + BaseAccount: sga.BaseAccount, Name: sga.ModuleName, Permissions: sga.ModulePermissions, + } + if err := ma.Validate(); err != nil { + return err + } + } + + return sga.BaseAccount.Validate() +} diff --git a/app/ibc.go b/app/ibc.go new file mode 100644 index 00000000..02bb244e --- /dev/null +++ b/app/ibc.go @@ -0,0 +1,215 @@ +package app + +import ( + "cosmossdk.io/core/appmodule" + storetypes "cosmossdk.io/store/types" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + servertypes "github.com/cosmos/cosmos-sdk/server/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/cosmos/ibc-go/modules/capability" + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + icamodule "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts" + icacontroller "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller" + icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + ibcfee "github.com/cosmos/ibc-go/v8/modules/apps/29-fee" + ibcfeekeeper "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/keeper" + ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" + ibctransfer "github.com/cosmos/ibc-go/v8/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v8/modules/core" + ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" // nolint:staticcheck // Deprecated: params key table is needed for params migration + ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + solomachine "github.com/cosmos/ibc-go/v8/modules/light-clients/06-solomachine" + ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + + monitoringcmodule "github.com/ignite/network/x/monitoringc/module" + monitoringcmoduletypes "github.com/ignite/network/x/monitoringc/types" + monitoringpmodule "github.com/ignite/network/x/monitoringp/module" + monitoringpmoduletypes "github.com/ignite/network/x/monitoringp/types" +) + +// registerIBCModules register IBC keepers and non dependency inject modules. +func (app *App) registerIBCModules(appOpts servertypes.AppOptions) error { + // set up non depinject support modules store keys + if err := app.RegisterStores( + storetypes.NewKVStoreKey(capabilitytypes.StoreKey), + storetypes.NewKVStoreKey(ibcexported.StoreKey), + storetypes.NewKVStoreKey(ibctransfertypes.StoreKey), + storetypes.NewKVStoreKey(ibcfeetypes.StoreKey), + storetypes.NewKVStoreKey(icahosttypes.StoreKey), + storetypes.NewKVStoreKey(icacontrollertypes.StoreKey), + storetypes.NewMemoryStoreKey(capabilitytypes.MemStoreKey), + storetypes.NewTransientStoreKey(paramstypes.TStoreKey), + ); err != nil { + return err + } + + // register the key tables for legacy param subspaces + keyTable := ibcclienttypes.ParamKeyTable() + keyTable.RegisterParamSet(&ibcconnectiontypes.Params{}) + app.ParamsKeeper.Subspace(ibcexported.ModuleName).WithKeyTable(keyTable) + app.ParamsKeeper.Subspace(ibctransfertypes.ModuleName).WithKeyTable(ibctransfertypes.ParamKeyTable()) + app.ParamsKeeper.Subspace(icacontrollertypes.SubModuleName).WithKeyTable(icacontrollertypes.ParamKeyTable()) + app.ParamsKeeper.Subspace(icahosttypes.SubModuleName).WithKeyTable(icahosttypes.ParamKeyTable()) + + // add capability keeper and ScopeToModule for ibc module + app.CapabilityKeeper = capabilitykeeper.NewKeeper( + app.AppCodec(), + app.GetKey(capabilitytypes.StoreKey), + app.GetMemKey(capabilitytypes.MemStoreKey), + ) + + // add capability keeper and ScopeToModule for ibc module + scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName) + scopedIBCTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) + scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) + scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) + + // Create IBC keeper + app.IBCKeeper = ibckeeper.NewKeeper( + app.appCodec, + app.GetKey(ibcexported.StoreKey), + app.GetSubspace(ibcexported.ModuleName), + app.StakingKeeper, + app.UpgradeKeeper, + scopedIBCKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + + // Register the proposal types + // Deprecated: Avoid adding new handlers, instead use the new proposal flow + // by granting the governance module the right to execute the message. + // See: https://docs.cosmos.network/main/modules/gov#proposal-messages + govRouter := govv1beta1.NewRouter() + govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler) + + app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( + app.appCodec, app.GetKey(ibcfeetypes.StoreKey), + app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, + ) + + // Create IBC transfer keeper + app.TransferKeeper = ibctransferkeeper.NewKeeper( + app.appCodec, + app.GetKey(ibctransfertypes.StoreKey), + app.GetSubspace(ibctransfertypes.ModuleName), + app.IBCFeeKeeper, + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, + app.AccountKeeper, + app.BankKeeper, + scopedIBCTransferKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + + // Create interchain account keepers + app.ICAHostKeeper = icahostkeeper.NewKeeper( + app.appCodec, + app.GetKey(icahosttypes.StoreKey), + app.GetSubspace(icahosttypes.SubModuleName), + app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, + app.AccountKeeper, + scopedICAHostKeeper, + app.MsgServiceRouter(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + app.ICAHostKeeper.WithQueryRouter(app.GRPCQueryRouter()) + + app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( + app.appCodec, + app.GetKey(icacontrollertypes.StoreKey), + app.GetSubspace(icacontrollertypes.SubModuleName), + app.IBCFeeKeeper, // use ics29 fee as ics4Wrapper in middleware stack + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, + scopedICAControllerKeeper, + app.MsgServiceRouter(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + app.GovKeeper.SetLegacyRouter(govRouter) + + // Create IBC modules with ibcfee middleware + transferIBCModule := ibcfee.NewIBCMiddleware(ibctransfer.NewIBCModule(app.TransferKeeper), app.IBCFeeKeeper) + + // integration point for custom authentication modules + var noAuthzModule porttypes.IBCModule + icaControllerIBCModule := ibcfee.NewIBCMiddleware( + icacontroller.NewIBCMiddleware(noAuthzModule, app.ICAControllerKeeper), + app.IBCFeeKeeper, + ) + + icaHostIBCModule := ibcfee.NewIBCMiddleware(icahost.NewIBCModule(app.ICAHostKeeper), app.IBCFeeKeeper) + + // Create static IBC router, add transfer route, then set and seal it + ibcRouter := porttypes.NewRouter(). + AddRoute(ibctransfertypes.ModuleName, transferIBCModule). + AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule). + AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) + + monitoringcIBCModule := ibcfee.NewIBCMiddleware(monitoringcmodule.NewIBCModule(app.MonitoringcKeeper), app.IBCFeeKeeper) + ibcRouter.AddRoute(monitoringcmoduletypes.ModuleName, monitoringcIBCModule) + monitoringpIBCModule := ibcfee.NewIBCMiddleware(monitoringpmodule.NewIBCModule(app.MonitoringpKeeper), app.IBCFeeKeeper) + ibcRouter.AddRoute(monitoringpmoduletypes.ModuleName, monitoringpIBCModule) + // this line is used by starport scaffolding # ibc/app/module + + app.IBCKeeper.SetRouter(ibcRouter) + + app.ScopedIBCKeeper = scopedIBCKeeper + app.ScopedIBCTransferKeeper = scopedIBCTransferKeeper + app.ScopedICAHostKeeper = scopedICAHostKeeper + app.ScopedICAControllerKeeper = scopedICAControllerKeeper + + // register IBC modules + if err := app.RegisterModules( + ibc.NewAppModule(app.IBCKeeper), + ibctransfer.NewAppModule(app.TransferKeeper), + ibcfee.NewAppModule(app.IBCFeeKeeper), + icamodule.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper), + capability.NewAppModule(app.appCodec, *app.CapabilityKeeper, false), + ibctm.NewAppModule(), + solomachine.NewAppModule(), + ); err != nil { + return err + } + + return nil +} + +// RegisterIBC Since the IBC modules don't support dependency injection, +// we need to manually register the modules on the client side. +// This needs to be removed after IBC supports App Wiring. +func RegisterIBC(registry cdctypes.InterfaceRegistry) map[string]appmodule.AppModule { + modules := map[string]appmodule.AppModule{ + ibcexported.ModuleName: ibc.AppModule{}, + ibctransfertypes.ModuleName: ibctransfer.AppModule{}, + ibcfeetypes.ModuleName: ibcfee.AppModule{}, + icatypes.ModuleName: icamodule.AppModule{}, + capabilitytypes.ModuleName: capability.AppModule{}, + ibctm.ModuleName: ibctm.AppModule{}, + solomachine.ModuleName: solomachine.AppModule{}, + } + + for name, m := range modules { + module.CoreAppModuleBasicAdaptor(name, m).RegisterInterfaces(registry) + } + + return modules +} diff --git a/app/sim_bench_test.go b/app/sim_bench_test.go new file mode 100644 index 00000000..08beffd0 --- /dev/null +++ b/app/sim_bench_test.go @@ -0,0 +1,150 @@ +package app_test + +import ( + "fmt" + "os" + "testing" + + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/server" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli" + "github.com/stretchr/testify/require" + + "github.com/ignite/network/app" +) + +// Profile with: +// `go test -benchmem -run=^$ -bench ^BenchmarkFullAppSimulation ./app -Commit=true -cpuprofile cpu.out` +func BenchmarkFullAppSimulation(b *testing.B) { + b.ReportAllocs() + + config := simcli.NewConfigFromFlags() + config.ChainID = SimAppChainID + + db, dir, logger, skip, err := simtestutil.SetupSimulation(config, "goleveldb-app-sim", "Simulation", simcli.FlagVerboseValue, simcli.FlagEnabledValue) + if err != nil { + b.Fatalf("simulation setup failed: %s", err.Error()) + } + + if skip { + b.Skip("skipping benchmark application simulation") + } + + defer func() { + require.NoError(b, db.Close()) + require.NoError(b, os.RemoveAll(dir)) + }() + + appOptions := make(simtestutil.AppOptionsMap, 0) + appOptions[flags.FlagHome] = app.DefaultNodeHome + appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue + + bApp, err := app.New(logger, db, nil, true, appOptions, interBlockCacheOpt()) + require.NoError(b, err) + require.Equal(b, app.Name, bApp.Name()) + + // run randomized simulation + _, simParams, simErr := simulation.SimulateFromSeed( + b, + os.Stdout, + bApp.BaseApp, + simtestutil.AppStateFn(bApp.AppCodec(), bApp.SimulationManager(), bApp.DefaultGenesis()), + simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 + simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), + app.BlockedAddresses(), + config, + bApp.AppCodec(), + ) + + // export state and simParams before the simulation error is checked + if err = simtestutil.CheckExportSimulation(bApp, config, simParams); err != nil { + b.Fatal(err) + } + + if simErr != nil { + b.Fatal(simErr) + } + + if config.Commit { + simtestutil.PrintStats(db) + } +} + +func BenchmarkInvariants(b *testing.B) { + b.ReportAllocs() + + config := simcli.NewConfigFromFlags() + config.ChainID = SimAppChainID + + db, dir, logger, skip, err := simtestutil.SetupSimulation(config, "leveldb-app-invariant-bench", "Simulation", simcli.FlagVerboseValue, simcli.FlagEnabledValue) + if err != nil { + b.Fatalf("simulation setup failed: %s", err.Error()) + } + + if skip { + b.Skip("skipping benchmark application simulation") + } + + config.AllInvariants = false + + defer func() { + require.NoError(b, db.Close()) + require.NoError(b, os.RemoveAll(dir)) + }() + + appOptions := make(simtestutil.AppOptionsMap, 0) + appOptions[flags.FlagHome] = app.DefaultNodeHome + appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue + + bApp, err := app.New(logger, db, nil, true, appOptions, interBlockCacheOpt()) + require.NoError(b, err) + require.Equal(b, app.Name, bApp.Name()) + + // run randomized simulation + _, simParams, simErr := simulation.SimulateFromSeed( + b, + os.Stdout, + bApp.BaseApp, + simtestutil.AppStateFn(bApp.AppCodec(), bApp.SimulationManager(), bApp.DefaultGenesis()), + simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 + simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), + app.BlockedAddresses(), + config, + bApp.AppCodec(), + ) + + // export state and simParams before the simulation error is checked + if err = simtestutil.CheckExportSimulation(bApp, config, simParams); err != nil { + b.Fatal(err) + } + + if simErr != nil { + b.Fatal(simErr) + } + + if config.Commit { + simtestutil.PrintStats(db) + } + + ctx := bApp.NewContextLegacy(true, cmtproto.Header{Height: bApp.LastBlockHeight() + 1}) + + // 3. Benchmark each invariant separately + // + // NOTE: We use the crisis keeper as it has all the invariants registered with + // their respective metadata which makes it useful for testing/benchmarking. + for _, cr := range bApp.CrisisKeeper.Routes() { + cr := cr + b.Run(fmt.Sprintf("%s/%s", cr.ModuleName, cr.Route), func(b *testing.B) { + if res, stop := cr.Invar(ctx); stop { + b.Fatalf( + "broken invariant at block %d of %d\n%s", + ctx.BlockHeight()-1, config.NumBlocks, res, + ) + } + }) + } +} diff --git a/app/sim_test.go b/app/sim_test.go new file mode 100644 index 00000000..1c65c607 --- /dev/null +++ b/app/sim_test.go @@ -0,0 +1,425 @@ +package app_test + +import ( + "encoding/json" + "flag" + "fmt" + "math/rand" + "os" + "runtime/debug" + "strings" + "testing" + "time" + + "cosmossdk.io/log" + "cosmossdk.io/store" + storetypes "cosmossdk.io/store/types" + "cosmossdk.io/x/feegrant" + abci "github.com/cometbft/cometbft/abci/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/server" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + simulationtypes "github.com/cosmos/cosmos-sdk/types/simulation" + authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper" + "github.com/cosmos/cosmos-sdk/x/simulation" + simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/spf13/viper" + "github.com/stretchr/testify/require" + + "github.com/ignite/network/app" +) + +const ( + SimAppChainID = "network-simapp" +) + +var FlagEnableStreamingValue bool + +// Get flags every time the simulator is run +func init() { + simcli.GetSimulatorFlags() + flag.BoolVar(&FlagEnableStreamingValue, "EnableStreaming", false, "Enable streaming service") +} + +// fauxMerkleModeOpt returns a BaseApp option to use a dbStoreAdapter instead of +// an IAVLStore for faster simulation speed. +func fauxMerkleModeOpt(bapp *baseapp.BaseApp) { + bapp.SetFauxMerkleMode() +} + +// interBlockCacheOpt returns a BaseApp option function that sets the persistent +// inter-block write-through cache. +func interBlockCacheOpt() func(*baseapp.BaseApp) { + return baseapp.SetInterBlockCache(store.NewCommitKVStoreCacheManager()) +} + +// BenchmarkSimulation run the chain simulation +// Running using starport command: +// `ignite chain simulate -v --numBlocks 200 --blockSize 50` +// Running as go benchmark test: +// `go test -benchmem -run=^$ -bench ^BenchmarkSimulation ./app -NumBlocks=200 -BlockSize 50 -Commit=true -Verbose=true -Enabled=true` +func BenchmarkSimulation(b *testing.B) { + simcli.FlagSeedValue = time.Now().Unix() + simcli.FlagVerboseValue = true + simcli.FlagCommitValue = true + simcli.FlagEnabledValue = true + + config := simcli.NewConfigFromFlags() + config.ChainID = SimAppChainID + + db, dir, logger, skip, err := simtestutil.SetupSimulation(config, "leveldb-app-sim", "Simulation", simcli.FlagVerboseValue, simcli.FlagEnabledValue) + if skip { + b.Skip("skipping application simulation") + } + require.NoError(b, err, "simulation setup failed") + + defer func() { + require.NoError(b, db.Close()) + require.NoError(b, os.RemoveAll(dir)) + }() + + appOptions := make(simtestutil.AppOptionsMap, 0) + appOptions[flags.FlagHome] = app.DefaultNodeHome + appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue + + bApp, err := app.New(logger, db, nil, true, appOptions, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + require.NoError(b, err) + require.Equal(b, app.Name, bApp.Name()) + + // run randomized simulation + _, simParams, simErr := simulation.SimulateFromSeed( + b, + os.Stdout, + bApp.BaseApp, + simtestutil.AppStateFn(bApp.AppCodec(), bApp.SimulationManager(), bApp.DefaultGenesis()), + simulationtypes.RandomAccounts, + simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), + app.BlockedAddresses(), + config, + bApp.AppCodec(), + ) + + // export state and simParams before the simulation error is checked + err = simtestutil.CheckExportSimulation(bApp, config, simParams) + require.NoError(b, err) + require.NoError(b, simErr) + + if config.Commit { + simtestutil.PrintStats(db) + } +} + +func TestAppImportExport(t *testing.T) { + config := simcli.NewConfigFromFlags() + config.ChainID = SimAppChainID + + db, dir, logger, skip, err := simtestutil.SetupSimulation(config, "leveldb-app-sim", "Simulation", simcli.FlagVerboseValue, simcli.FlagEnabledValue) + if skip { + t.Skip("skipping application import/export simulation") + } + require.NoError(t, err, "simulation setup failed") + + defer func() { + require.NoError(t, db.Close()) + require.NoError(t, os.RemoveAll(dir)) + }() + + appOptions := make(simtestutil.AppOptionsMap, 0) + appOptions[flags.FlagHome] = app.DefaultNodeHome + appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue + + bApp, err := app.New(logger, db, nil, true, appOptions, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + require.NoError(t, err) + require.Equal(t, app.Name, bApp.Name()) + + // Run randomized simulation + _, simParams, simErr := simulation.SimulateFromSeed( + t, + os.Stdout, + bApp.BaseApp, + simtestutil.AppStateFn(bApp.AppCodec(), bApp.SimulationManager(), bApp.DefaultGenesis()), + simulationtypes.RandomAccounts, + simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), + app.BlockedAddresses(), + config, + bApp.AppCodec(), + ) + + // export state and simParams before the simulation error is checked + err = simtestutil.CheckExportSimulation(bApp, config, simParams) + require.NoError(t, err) + require.NoError(t, simErr) + + if config.Commit { + simtestutil.PrintStats(db) + } + + fmt.Printf("exporting genesis...\n") + + exported, err := bApp.ExportAppStateAndValidators(false, []string{}, []string{}) + require.NoError(t, err) + + fmt.Printf("importing genesis...\n") + + newDB, newDir, _, _, err := simtestutil.SetupSimulation(config, "leveldb-app-sim-2", "Simulation-2", simcli.FlagVerboseValue, simcli.FlagEnabledValue) + require.NoError(t, err, "simulation setup failed") + + defer func() { + require.NoError(t, newDB.Close()) + require.NoError(t, os.RemoveAll(newDir)) + }() + + newApp, err := app.New(log.NewNopLogger(), newDB, nil, true, appOptions, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + require.NoError(t, err) + require.Equal(t, app.Name, newApp.Name()) + + var genesisState app.GenesisState + err = json.Unmarshal(exported.AppState, &genesisState) + require.NoError(t, err) + + ctxA := bApp.NewContextLegacy(true, cmtproto.Header{Height: bApp.LastBlockHeight()}) + ctxB := newApp.NewContextLegacy(true, cmtproto.Header{Height: bApp.LastBlockHeight()}) + _, err = newApp.ModuleManager.InitGenesis(ctxB, bApp.AppCodec(), genesisState) + if err != nil { + if strings.Contains(err.Error(), "validator set is empty after InitGenesis") { + logger.Info("Skipping simulation as all validators have been unbonded") + logger.Info("err", err, "stacktrace", string(debug.Stack())) + return + } + } + require.NoError(t, err) + err = newApp.StoreConsensusParams(ctxB, exported.ConsensusParams) + require.NoError(t, err) + fmt.Printf("comparing stores...\n") + + // skip certain prefixes + skipPrefixes := map[string][][]byte{ + stakingtypes.StoreKey: { + stakingtypes.UnbondingQueueKey, stakingtypes.RedelegationQueueKey, stakingtypes.ValidatorQueueKey, + stakingtypes.HistoricalInfoKey, stakingtypes.UnbondingIDKey, stakingtypes.UnbondingIndexKey, + stakingtypes.UnbondingTypeKey, stakingtypes.ValidatorUpdatesKey, + }, + authzkeeper.StoreKey: {authzkeeper.GrantQueuePrefix}, + feegrant.StoreKey: {feegrant.FeeAllowanceQueueKeyPrefix}, + slashingtypes.StoreKey: {slashingtypes.ValidatorMissedBlockBitmapKeyPrefix}, + } + + storeKeys := bApp.GetStoreKeys() + require.NotEmpty(t, storeKeys) + + for _, appKeyA := range storeKeys { + // only compare kvstores + if _, ok := appKeyA.(*storetypes.KVStoreKey); !ok { + continue + } + + keyName := appKeyA.Name() + appKeyB := newApp.GetKey(keyName) + + storeA := ctxA.KVStore(appKeyA) + storeB := ctxB.KVStore(appKeyB) + + failedKVAs, failedKVBs := simtestutil.DiffKVStores(storeA, storeB, skipPrefixes[keyName]) + require.Equal(t, len(failedKVAs), len(failedKVBs), "unequal sets of key-values to compare %s", keyName) + + fmt.Printf("compared %d different key/value pairs between %s and %s\n", len(failedKVAs), appKeyA, appKeyB) + + require.Equal(t, 0, len(failedKVAs), simtestutil.GetSimulationLog(keyName, bApp.SimulationManager().StoreDecoders, failedKVAs, failedKVBs)) + } +} + +func TestAppSimulationAfterImport(t *testing.T) { + config := simcli.NewConfigFromFlags() + config.ChainID = SimAppChainID + + db, dir, logger, skip, err := simtestutil.SetupSimulation(config, "leveldb-app-sim", "Simulation", simcli.FlagVerboseValue, simcli.FlagEnabledValue) + if skip { + t.Skip("skipping application simulation after import") + } + require.NoError(t, err, "simulation setup failed") + + defer func() { + require.NoError(t, db.Close()) + require.NoError(t, os.RemoveAll(dir)) + }() + + appOptions := make(simtestutil.AppOptionsMap, 0) + appOptions[flags.FlagHome] = app.DefaultNodeHome + appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue + + bApp, err := app.New(logger, db, nil, true, appOptions, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + require.NoError(t, err) + require.Equal(t, app.Name, bApp.Name()) + + // Run randomized simulation + stopEarly, simParams, simErr := simulation.SimulateFromSeed( + t, + os.Stdout, + bApp.BaseApp, + simtestutil.AppStateFn(bApp.AppCodec(), bApp.SimulationManager(), bApp.DefaultGenesis()), + simulationtypes.RandomAccounts, + simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), + app.BlockedAddresses(), + config, + bApp.AppCodec(), + ) + + // export state and simParams before the simulation error is checked + err = simtestutil.CheckExportSimulation(bApp, config, simParams) + require.NoError(t, err) + require.NoError(t, simErr) + + if config.Commit { + simtestutil.PrintStats(db) + } + + if stopEarly { + fmt.Println("can't export or import a zero-validator genesis, exiting test...") + return + } + + fmt.Printf("exporting genesis...\n") + + exported, err := bApp.ExportAppStateAndValidators(true, []string{}, []string{}) + require.NoError(t, err) + + fmt.Printf("importing genesis...\n") + + newDB, newDir, _, _, err := simtestutil.SetupSimulation(config, "leveldb-app-sim-2", "Simulation-2", simcli.FlagVerboseValue, simcli.FlagEnabledValue) + require.NoError(t, err, "simulation setup failed") + + defer func() { + require.NoError(t, newDB.Close()) + require.NoError(t, os.RemoveAll(newDir)) + }() + + newApp, err := app.New(log.NewNopLogger(), newDB, nil, true, appOptions, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + require.NoError(t, err) + require.Equal(t, app.Name, newApp.Name()) + + _, err = newApp.InitChain(&abci.RequestInitChain{ + AppStateBytes: exported.AppState, + ChainId: SimAppChainID, + }) + require.NoError(t, err) + + _, _, err = simulation.SimulateFromSeed( + t, + os.Stdout, + newApp.BaseApp, + simtestutil.AppStateFn(bApp.AppCodec(), bApp.SimulationManager(), bApp.DefaultGenesis()), + simulationtypes.RandomAccounts, + simtestutil.SimulationOperations(newApp, newApp.AppCodec(), config), + app.BlockedAddresses(), + config, + bApp.AppCodec(), + ) + require.NoError(t, err) +} + +func TestAppStateDeterminism(t *testing.T) { + if !simcli.FlagEnabledValue { + t.Skip("skipping application simulation") + } + + config := simcli.NewConfigFromFlags() + config.InitialBlockHeight = 1 + config.ExportParamsPath = "" + config.OnOperation = false + config.AllInvariants = false + config.ChainID = SimAppChainID + + numSeeds := 3 + numTimesToRunPerSeed := 3 // This used to be set to 5, but we've temporarily reduced it to 3 for the sake of faster CI. + appHashList := make([]json.RawMessage, numTimesToRunPerSeed) + + // We will be overriding the random seed and just run a single simulation on the provided seed value + if config.Seed != simcli.DefaultSeedValue { + numSeeds = 1 + } + + appOptions := viper.New() + if FlagEnableStreamingValue { + m := make(map[string]interface{}) + m["streaming.abci.keys"] = []string{"*"} + m["streaming.abci.plugin"] = "abci_v1" + m["streaming.abci.stop-node-on-err"] = true + for key, value := range m { + appOptions.SetDefault(key, value) + } + } + appOptions.SetDefault(flags.FlagHome, app.DefaultNodeHome) + appOptions.SetDefault(server.FlagInvCheckPeriod, simcli.FlagPeriodValue) + if simcli.FlagVerboseValue { + appOptions.SetDefault(flags.FlagLogLevel, "debug") + } + + for i := 0; i < numSeeds; i++ { + if config.Seed == simcli.DefaultSeedValue { + config.Seed = rand.Int63() + } + fmt.Println("config.Seed: ", config.Seed) + + for j := 0; j < numTimesToRunPerSeed; j++ { + var logger log.Logger + if simcli.FlagVerboseValue { + logger = log.NewTestLogger(t) + } else { + logger = log.NewNopLogger() + } + + db := dbm.NewMemDB() + bApp, err := app.New( + logger, + db, + nil, + true, + appOptions, + interBlockCacheOpt(), + baseapp.SetChainID(SimAppChainID), + ) + require.NoError(t, err) + + fmt.Printf( + "running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", + config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed, + ) + + _, _, err = simulation.SimulateFromSeed( + t, + os.Stdout, + bApp.BaseApp, + simtestutil.AppStateFn( + bApp.AppCodec(), + bApp.SimulationManager(), + bApp.DefaultGenesis(), + ), + simulationtypes.RandomAccounts, + simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), + app.BlockedAddresses(), + config, + bApp.AppCodec(), + ) + require.NoError(t, err) + + if config.Commit { + simtestutil.PrintStats(db) + } + + appHash := bApp.LastCommitID().Hash + appHashList[j] = appHash + + if j != 0 { + require.Equal( + t, string(appHashList[0]), string(appHashList[j]), + "non-determinism in seed %d: %d/%d, attempt: %d/%d\n", config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed, + ) + } + } + } +} diff --git a/app/simulation_test.go b/app/simulation_test.go deleted file mode 100644 index dae88598..00000000 --- a/app/simulation_test.go +++ /dev/null @@ -1,520 +0,0 @@ -package app_test - -// DONTCOVER - -import ( - "encoding/json" - "fmt" - "math/rand" - "os" - "runtime/debug" - "strings" - "testing" - "time" - - dbm "github.com/cometbft/cometbft-db" - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/libs/log" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/server" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" - paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/cosmos/cosmos-sdk/x/simulation" - simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli" - slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/app" - "github.com/tendermint/spn/cmd" -) - -func init() { - simcli.GetSimulatorFlags() -} - -type StoreKeysPrefixes struct { - A storetypes.StoreKey - B storetypes.StoreKey - Prefixes [][]byte -} - -// fauxMerkleModeOpt returns a BaseApp option to use a dbStoreAdapter instead of -// an IAVLStore for faster simulation speed. -func fauxMerkleModeOpt(bapp *baseapp.BaseApp) { - bapp.SetFauxMerkleMode() -} - -// BenchmarkSimulation run the chain simulation -// Running using starport command: -// `starport chain simulate -v --numBlocks 200 --blockSize 50` -// Running as go benchmark test: -// `go test -benchmem -run=^$ -bench ^BenchmarkSimulation ./app -NumBlocks=200 -BlockSize 50 -Commit=true -Verbose=true -Enabled=true` -func BenchmarkSimulation(b *testing.B) { - simcli.FlagSeedValue = 10 - simcli.FlagVerboseValue = true - simcli.FlagCommitValue = true - simcli.FlagEnabledValue = true - - config := simcli.NewConfigFromFlags() - config.ChainID = app.DefaultChainID - - db, dir, logger, _, err := simtestutil.SetupSimulation( - config, - "leveldb-app-sim", - "Simulation", - simcli.FlagVerboseValue, - simcli.FlagEnabledValue, - ) - require.NoError(b, err, "simulation setup failed") - - b.Cleanup(func() { - require.NoError(b, db.Close()) - require.NoError(b, os.RemoveAll(dir)) - }) - - appOptions := make(simtestutil.AppOptionsMap, 0) - appOptions[flags.FlagHome] = app.DefaultNodeHome - appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue - - cmdApp := app.New( - logger, - db, - nil, - true, - map[int64]bool{}, - app.DefaultNodeHome, - 0, - cmd.MakeEncodingConfig(app.ModuleBasics), - appOptions, - baseapp.SetChainID(app.DefaultChainID), - ) - - bApp, ok := cmdApp.(*app.App) - require.True(b, ok) - - // Run randomized simulations - _, simParams, simErr := simulation.SimulateFromSeed( - b, - os.Stdout, - bApp.GetBaseApp(), - simtestutil.AppStateFn( - bApp.AppCodec(), - bApp.SimulationManager(), - app.NewDefaultGenesisState(bApp.AppCodec()), - ), - simtypes.RandomAccounts, - simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), - bApp.BlockedModuleAccountAddrs(), - config, - bApp.AppCodec(), - ) - - // export state and simParams before the simulation error is checked - err = simtestutil.CheckExportSimulation(bApp, config, simParams) - require.NoError(b, err) - require.NoError(b, simErr) - - if config.Commit { - simtestutil.PrintStats(db) - } -} - -func TestAppImportExport(t *testing.T) { - config := simcli.NewConfigFromFlags() - config.ChainID = app.DefaultChainID - - db, dir, logger, skip, err := simtestutil.SetupSimulation( - config, - "leveldb-app-sim", - "Simulation", - simcli.FlagVerboseValue, - simcli.FlagEnabledValue, - ) - if skip { - t.Skip("skipping application import/export simulation") - } - require.NoError(t, err, "simulation setup failed") - - defer func() { - require.NoError(t, db.Close()) - require.NoError(t, os.RemoveAll(dir)) - }() - - appOptions := make(simtestutil.AppOptionsMap, 0) - appOptions[flags.FlagHome] = app.DefaultNodeHome - appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue - - cmdApp := app.New( - logger, - db, - nil, - true, - map[int64]bool{}, - app.DefaultNodeHome, - 0, - cmd.MakeEncodingConfig(app.ModuleBasics), - appOptions, - fauxMerkleModeOpt, - baseapp.SetChainID(app.DefaultChainID), - ) - bApp, ok := cmdApp.(*app.App) - require.True(t, ok) - - // run randomized simulation - _, simParams, simErr := simulation.SimulateFromSeed( - t, - os.Stdout, - bApp.GetBaseApp(), - simtestutil.AppStateFn( - bApp.AppCodec(), - bApp.SimulationManager(), - app.NewDefaultGenesisState(bApp.AppCodec()), - ), - simtypes.RandomAccounts, - simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), - bApp.BlockedModuleAccountAddrs(), - config, - bApp.AppCodec(), - ) - require.NoError(t, simErr) - - // export state and simParams before the simulation error is checked - err = simtestutil.CheckExportSimulation(bApp, config, simParams) - require.NoError(t, err) - - if config.Commit { - simtestutil.PrintStats(db) - } - - fmt.Printf("exporting genesis...\n") - - exported, err := bApp.ExportAppStateAndValidators(false, []string{}, []string{}) - require.NoError(t, err) - - fmt.Printf("importing genesis...\n") - - newDB, newDir, _, _, err := simtestutil.SetupSimulation( - config, - "leveldb-app-sim-2", - "Simulation-2", - simcli.FlagVerboseValue, - simcli.FlagEnabledValue, - ) - require.NoError(t, err, "simulation setup failed") - - defer func() { - require.NoError(t, newDB.Close()) - require.NoError(t, os.RemoveAll(newDir)) - }() - - cmdNewApp := app.New( - log.NewNopLogger(), - newDB, - nil, - true, - map[int64]bool{}, - app.DefaultNodeHome, - 0, - cmd.MakeEncodingConfig(app.ModuleBasics), - appOptions, - fauxMerkleModeOpt, - baseapp.SetChainID(app.DefaultChainID), - ) - - newApp, ok := cmdNewApp.(*app.App) - require.True(t, ok) - - var genesisState app.GenesisState - err = json.Unmarshal(exported.AppState, &genesisState) - require.NoError(t, err) - - defer func() { - if r := recover(); r != nil { - err := fmt.Sprintf("%v", r) - if !strings.Contains(err, "validator set is empty after InitGenesis") { - panic(r) - } - logger.Info("Skipping simulation as all validators have been unbonded") - logger.Info("err", err, "stacktrace", string(debug.Stack())) - } - }() - - ctxA := bApp.NewContext(true, tmproto.Header{Height: bApp.LastBlockHeight()}) - ctxB := newApp.NewContext(true, tmproto.Header{Height: bApp.LastBlockHeight()}) - newApp.InitGenesis(ctxB, bApp.AppCodec(), genesisState) - newApp.StoreConsensusParams(ctxB, exported.ConsensusParams) - - fmt.Printf("comparing stores...\n") - - storeKeysPrefixes := []StoreKeysPrefixes{ - {bApp.GetKey(authtypes.StoreKey), newApp.GetKey(authtypes.StoreKey), [][]byte{}}, - { - bApp.GetKey(stakingtypes.StoreKey), newApp.GetKey(stakingtypes.StoreKey), - [][]byte{ - stakingtypes.UnbondingQueueKey, stakingtypes.RedelegationQueueKey, stakingtypes.ValidatorQueueKey, - stakingtypes.HistoricalInfoKey, stakingtypes.UnbondingIDKey, stakingtypes.UnbondingIndexKey, stakingtypes.UnbondingTypeKey, stakingtypes.ValidatorUpdatesKey, - }, - }, // ordering may change but it doesn't matter - {bApp.GetKey(slashingtypes.StoreKey), newApp.GetKey(slashingtypes.StoreKey), [][]byte{}}, - {bApp.GetKey(minttypes.StoreKey), newApp.GetKey(minttypes.StoreKey), [][]byte{}}, - {bApp.GetKey(distrtypes.StoreKey), newApp.GetKey(distrtypes.StoreKey), [][]byte{}}, - {bApp.GetKey(banktypes.StoreKey), newApp.GetKey(banktypes.StoreKey), [][]byte{banktypes.BalancesPrefix}}, - {bApp.GetKey(paramstypes.StoreKey), newApp.GetKey(paramstypes.StoreKey), [][]byte{}}, - {bApp.GetKey(govtypes.StoreKey), newApp.GetKey(govtypes.StoreKey), [][]byte{}}, - {bApp.GetKey(evidencetypes.StoreKey), newApp.GetKey(evidencetypes.StoreKey), [][]byte{}}, - {bApp.GetKey(capabilitytypes.StoreKey), newApp.GetKey(capabilitytypes.StoreKey), [][]byte{}}, - {bApp.GetKey(authzkeeper.StoreKey), newApp.GetKey(authzkeeper.StoreKey), [][]byte{authzkeeper.GrantKey, authzkeeper.GrantQueuePrefix}}, - } - - for _, skp := range storeKeysPrefixes { - storeA := ctxA.KVStore(skp.A) - storeB := ctxB.KVStore(skp.B) - - failedKVAs, failedKVBs := sdk.DiffKVStores(storeA, storeB, skp.Prefixes) - require.Equal(t, len(failedKVAs), len(failedKVBs), "unequal sets of key-values to compare") - - fmt.Printf("compared %d different key/value pairs between %s and %s\n", len(failedKVAs), skp.A, skp.B) - require.Equal(t, 0, len(failedKVAs), simtestutil.GetSimulationLog(skp.A.Name(), bApp.SimulationManager().StoreDecoders, failedKVAs, failedKVBs)) - } -} - -func TestAppSimulationAfterImport(t *testing.T) { - config := simcli.NewConfigFromFlags() - config.ChainID = app.DefaultChainID - - db, dir, logger, skip, err := simtestutil.SetupSimulation( - config, - "leveldb-app-sim", - "Simulation", - simcli.FlagVerboseValue, - simcli.FlagEnabledValue, - ) - if skip { - t.Skip("skipping application simulation after import") - } - require.NoError(t, err, "simulation setup failed") - - defer func() { - require.NoError(t, db.Close()) - require.NoError(t, os.RemoveAll(dir)) - }() - - appOptions := make(simtestutil.AppOptionsMap, 0) - appOptions[flags.FlagHome] = app.DefaultNodeHome - appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue - - cmdApp := app.New( - logger, - db, - nil, - true, - map[int64]bool{}, - app.DefaultNodeHome, - 0, - cmd.MakeEncodingConfig(app.ModuleBasics), - appOptions, - fauxMerkleModeOpt, - baseapp.SetChainID(app.DefaultChainID), - ) - bApp, ok := cmdApp.(*app.App) - require.True(t, ok) - - // run randomized simulation - stopEarly, simParams, simErr := simulation.SimulateFromSeed( - t, - os.Stdout, - bApp.BaseApp, - simtestutil.AppStateFn( - bApp.AppCodec(), - bApp.SimulationManager(), - app.NewDefaultGenesisState(bApp.AppCodec()), - ), - simtypes.RandomAccounts, // replace with own random account function if using keys other than secp256k1 - simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), - bApp.BlockedModuleAccountAddrs(), - config, - bApp.AppCodec(), - ) - require.NoError(t, simErr) - - // export state and simParams before the simulation error is checked - err = simtestutil.CheckExportSimulation(bApp, config, simParams) - require.NoError(t, err) - - if config.Commit { - simtestutil.PrintStats(db) - } - - if stopEarly { - fmt.Println("can't export or import a zero-validator genesis, exiting test...") - return - } - - fmt.Printf("exporting genesis...\n") - - exported, err := bApp.ExportAppStateAndValidators(true, []string{}, []string{}) - require.NoError(t, err) - - fmt.Printf("importing genesis...\n") - - newDB, newDir, _, _, err := simtestutil.SetupSimulation( - config, - "leveldb-app-sim-2", - "Simulation-2", - simcli.FlagVerboseValue, - simcli.FlagEnabledValue, - ) - require.NoError(t, err, "simulation setup failed") - - defer func() { - require.NoError(t, newDB.Close()) - require.NoError(t, os.RemoveAll(newDir)) - }() - - cmdNewApp := app.New( - log.NewNopLogger(), - newDB, - nil, - true, - map[int64]bool{}, - app.DefaultNodeHome, - 0, - cmd.MakeEncodingConfig(app.ModuleBasics), - appOptions, - fauxMerkleModeOpt, - baseapp.SetChainID(app.DefaultChainID), - ) - newApp, ok := cmdNewApp.(*app.App) - require.True(t, ok) - - newApp.InitChain(abci.RequestInitChain{ - ChainId: app.DefaultChainID, - AppStateBytes: exported.AppState, - }) - - _, _, err = simulation.SimulateFromSeed( - t, - os.Stdout, - newApp.BaseApp, - simtestutil.AppStateFn( - bApp.AppCodec(), - bApp.SimulationManager(), - app.NewDefaultGenesisState(bApp.AppCodec()), - ), - simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - simtestutil.SimulationOperations(newApp, newApp.AppCodec(), config), - newApp.BlockedModuleAccountAddrs(), - config, - bApp.AppCodec(), - ) - require.NoError(t, err) -} - -func TestAppStateDeterminism(t *testing.T) { - if !simcli.FlagEnabledValue { - t.Skip("skipping application simulation") - } - - config := simcli.NewConfigFromFlags() - config.InitialBlockHeight = 1 - config.ExportParamsPath = "" - config.OnOperation = true - config.AllInvariants = true - config.ChainID = app.DefaultChainID - - var ( - r = rand.New(rand.NewSource(time.Now().Unix())) - numSeeds = 3 - numTimesToRunPerSeed = 5 - appHashList = make([]json.RawMessage, numTimesToRunPerSeed) - ) - - appOptions := make(simtestutil.AppOptionsMap, 0) - appOptions[flags.FlagHome] = app.DefaultNodeHome - appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue - - for i := 0; i < numSeeds; i++ { - config.Seed = r.Int63() - - for j := 0; j < numTimesToRunPerSeed; j++ { - var logger log.Logger - if simcli.FlagVerboseValue { - logger = log.TestingLogger() - } else { - logger = log.NewNopLogger() - } - - var ( - chainID = fmt.Sprintf("chain-id-%d-%d", i, j) - db = dbm.NewMemDB() - cmdApp = app.New( - logger, - db, - nil, - true, - map[int64]bool{}, - app.DefaultNodeHome, - simcli.FlagPeriodValue, - cmd.MakeEncodingConfig(app.ModuleBasics), - appOptions, - fauxMerkleModeOpt, - baseapp.SetChainID(chainID), - ) - ) - config.ChainID = chainID - - bApp, ok := cmdApp.(*app.App) - require.True(t, ok) - - fmt.Printf( - "running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", - config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed, - ) - - _, _, err := simulation.SimulateFromSeed( - t, - os.Stdout, - bApp.BaseApp, - simtestutil.AppStateFn( - bApp.AppCodec(), - bApp.SimulationManager(), - app.NewDefaultGenesisState(bApp.AppCodec()), - ), - simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - simtestutil.SimulationOperations(bApp, bApp.AppCodec(), config), - bApp.BlockedModuleAccountAddrs(), - config, - bApp.AppCodec(), - ) - require.NoError(t, err) - - if config.Commit { - simtestutil.PrintStats(db) - } - - appHash := bApp.LastCommitID().Hash - appHashList[j] = appHash - - if j != 0 { - require.Equal( - t, string(appHashList[0]), string(appHashList[j]), - "non-determinism in seed %d: %d/%d, attempt: %d/%d\n", config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed, - ) - } - } - } -} diff --git a/app/simutil/app_state.go b/app/simutil/app_state.go deleted file mode 100644 index cb6445ac..00000000 --- a/app/simutil/app_state.go +++ /dev/null @@ -1,167 +0,0 @@ -package simutil - -import ( - "encoding/json" - "fmt" - "math" - "math/rand" - "time" - - sdkmath "cosmossdk.io/math" - - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - simappparams "github.com/cosmos/ibc-go/v7/testing/simapp/params" - - "github.com/tendermint/spn/app" -) - -const ( - AuctionCoinDenom = "auction" - MaxNumBonded = 300 -) - -// CustomAppStateFn returns the initial application state using the simulation parameters. -func CustomAppStateFn(cdc codec.JSONCodec, simManager *module.SimulationManager) simtypes.AppStateFn { - return func(r *rand.Rand, accs []simtypes.Account, config simtypes.Config, - ) (appState json.RawMessage, simAccs []simtypes.Account, chainID string, genesisTimestamp time.Time) { - genesisTimestamp = simtypes.RandTimestamp(r) - - numAccs := int64(len(accs)) - genesisState := app.NewDefaultGenesisState(cdc) - chainID = config.ChainID - appParams := make(simtypes.AppParams) - - maxInitialCoin := math.MaxInt64 / (numAccs + MaxNumBonded) - - // generate a random amount of initial stake coins and a random initial - // number of bonded accounts - var initialStake, numInitiallyBonded int64 - appParams.GetOrGenerate( - cdc, simappparams.StakePerAccount, &initialStake, r, - func(r *rand.Rand) { initialStake = r.Int63n(maxInitialCoin) }, - ) - appParams.GetOrGenerate( - cdc, simappparams.InitiallyBondedValidators, &numInitiallyBonded, r, - func(r *rand.Rand) { numInitiallyBonded = r.Int63n(MaxNumBonded) }, - ) - - if numInitiallyBonded > numAccs { - numInitiallyBonded = numAccs - } - - fmt.Printf( - `Selected randomly generated parameters for simulated genesis: -{ - stake_per_account: "%d", - initially_bonded_validators: "%d", - num_accs: "%d" -} -`, initialStake, numInitiallyBonded, numAccs, - ) - - simState := &module.SimulationState{ - AppParams: appParams, - Cdc: cdc, - Rand: r, - GenState: genesisState, - Accounts: accs, - InitialStake: sdkmath.NewInt(initialStake), - NumBonded: numInitiallyBonded, - GenTimestamp: genesisTimestamp, - } - - simManager.GenerateGenesisStates(simState) - appState, err := json.Marshal(genesisState) - if err != nil { - panic(err) - } - - rawState := make(map[string]json.RawMessage) - err = json.Unmarshal(appState, &rawState) - if err != nil { - panic(err) - } - - stakingStateBz, ok := rawState[stakingtypes.ModuleName] - if !ok { - panic("staking genesis state is missing") - } - - stakingState := new(stakingtypes.GenesisState) - err = cdc.UnmarshalJSON(stakingStateBz, stakingState) - if err != nil { - panic(err) - } - // compute not bonded balance - notBondedTokens := sdkmath.ZeroInt() - for _, val := range stakingState.Validators { - if val.Status != stakingtypes.Unbonded { - continue - } - notBondedTokens = notBondedTokens.Add(val.GetTokens()) - } - notBondedCoins := sdk.NewCoin(stakingState.Params.BondDenom, notBondedTokens) - // edit bank state to make it have the not bonded pool tokens - bankStateBz, ok := rawState[banktypes.ModuleName] - if !ok { - panic("bank genesis state is missing") - } - bankState := new(banktypes.GenesisState) - err = cdc.UnmarshalJSON(bankStateBz, bankState) - if err != nil { - panic(err) - } - - // add auction coins randomly to accounts - totalNewCoins := sdk.NewCoins() - for i, balance := range bankState.Balances { - if r.Int63n(100) < 20 { - auctionCoinAmt := r.Int63n(maxInitialCoin) - auctionCoin := sdk.NewCoin(AuctionCoinDenom, sdkmath.NewInt(auctionCoinAmt)) - newBalance := balance.Coins.Add(auctionCoin) - bankState.Balances[i].Coins = newBalance - totalNewCoins = totalNewCoins.Add(auctionCoin) - } - } - - // add new coins to the genesis supply - bankState.Supply = bankState.Supply.Add(totalNewCoins...) - - stakingAddr := authtypes.NewModuleAddress(stakingtypes.NotBondedPoolName).String() - var found bool - for _, balance := range bankState.Balances { - if balance.Address == stakingAddr { - found = true - break - } - } - if !found { - bankState.Balances = append(bankState.Balances, banktypes.Balance{ - Address: stakingAddr, - Coins: sdk.NewCoins(notBondedCoins), - }) - } - - // override bank parameters to always enable transfers - bankState.Params.SendEnabled = []*banktypes.SendEnabled{} - bankState.SendEnabled = []banktypes.SendEnabled{} - bankState.Params.DefaultSendEnabled = true - - // change appState back - rawState[stakingtypes.ModuleName] = cdc.MustMarshalJSON(stakingState) - rawState[banktypes.ModuleName] = cdc.MustMarshalJSON(bankState) - - // replace appstate - appState, err = json.Marshal(rawState) - if err != nil { - panic(err) - } - return appState, accs, chainID, genesisTimestamp - } -} diff --git a/buf.work.yaml b/buf.work.yaml index 1b4a0d95..1878b341 100644 --- a/buf.work.yaml +++ b/buf.work.yaml @@ -1,8 +1,3 @@ -# Generated by "buf config migrate-v1beta1". Edit as necessary, and -# remove this comment when you're finished. -# -# This workspace file points to the roots found in your -# previous "buf.yaml" configuration. version: v1 directories: - proto diff --git a/changelog.md b/changelog.md new file mode 100644 index 00000000..dd8260aa --- /dev/null +++ b/changelog.md @@ -0,0 +1,7 @@ +# Changelog + +## Unreleased + +### Features + +- [#?](https://github.com/ignite/cli/pull/?) Bump cosmos-sdk to `v0.50.8` and ignite to `v28.5.2` diff --git a/cmd/encoding.go b/cmd/encoding.go deleted file mode 100644 index ec6b6dec..00000000 --- a/cmd/encoding.go +++ /dev/null @@ -1,44 +0,0 @@ -package cmd - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/std" - "github.com/cosmos/cosmos-sdk/types/module" - "github.com/cosmos/cosmos-sdk/x/auth/tx" -) - -// EncodingConfig specifies the concrete encoding types to use for a given app. -// This is provided for compatibility between protobuf and amino implementations. -type EncodingConfig struct { - InterfaceRegistry types.InterfaceRegistry - Marshaler codec.Codec - TxConfig client.TxConfig - Amino *codec.LegacyAmino -} - -// makeEncodingConfig creates an EncodingConfig for an amino based test configuration. -func makeEncodingConfig() EncodingConfig { - amino := codec.NewLegacyAmino() - interfaceRegistry := types.NewInterfaceRegistry() - marshaler := codec.NewProtoCodec(interfaceRegistry) - txCfg := tx.NewTxConfig(marshaler, tx.DefaultSignModes) - - return EncodingConfig{ - InterfaceRegistry: interfaceRegistry, - Marshaler: marshaler, - TxConfig: txCfg, - Amino: amino, - } -} - -// MakeEncodingConfig creates an EncodingConfig for testing -func MakeEncodingConfig(moduleBasics module.BasicManager) EncodingConfig { - encodingConfig := makeEncodingConfig() - std.RegisterLegacyAminoCodec(encodingConfig.Amino) - std.RegisterInterfaces(encodingConfig.InterfaceRegistry) - moduleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry) - moduleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) - return encodingConfig -} diff --git a/cmd/genaccounts.go b/cmd/genaccounts.go deleted file mode 100644 index b63237aa..00000000 --- a/cmd/genaccounts.go +++ /dev/null @@ -1,193 +0,0 @@ -package cmd - -import ( - "bufio" - "encoding/json" - "errors" - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - "github.com/cosmos/cosmos-sdk/server" - sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - authvesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/cosmos/cosmos-sdk/x/genutil" - genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" - "github.com/spf13/cobra" -) - -const ( - flagVestingStart = "vesting-start-time" - flagVestingEnd = "vesting-end-time" - flagVestingAmt = "vesting-amount" -) - -// AddGenesisAccountCmd returns add-genesis-account cobra Command. -func AddGenesisAccountCmd(defaultNodeHome string) *cobra.Command { - cmd := &cobra.Command{ - Use: "add-genesis-account [address_or_key_name] [coin][,[coin]]", - Short: "Add a genesis account to genesis.json", - Long: `Add a genesis account to genesis.json. The provided account must specify -the account address or key name and a list of initial coins. If a key name is given, -the address will be looked up in the local Keybase. The list of initial tokens must -contain valid denominations. Accounts may optionally be supplied with vesting parameters. -`, - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - depCdc := clientCtx.Codec - cdc := depCdc - - serverCtx := server.GetServerContextFromCmd(cmd) - config := serverCtx.Config - - config.SetRoot(clientCtx.HomeDir) - - coins, err := sdk.ParseCoinsNormalized(args[1]) - if err != nil { - return fmt.Errorf("failed to parse coins: %w", err) - } - - addr, err := sdk.AccAddressFromBech32(args[0]) - if err != nil { - inBuf := bufio.NewReader(cmd.InOrStdin()) - keyringBackend, err := cmd.Flags().GetString(flags.FlagKeyringBackend) - if err != nil { - return err - } - - // attempt to lookup address from Keybase if no address was provided - kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, clientCtx.HomeDir, inBuf, clientCtx.Codec) - if err != nil { - return fmt.Errorf("failed to lookup keyring: %w", err) - } - - info, err := kb.Key(args[0]) - if err != nil { - return fmt.Errorf("failed to get address from Keybase: %w", err) - } - - addr, err = info.GetAddress() - if err != nil { - return fmt.Errorf("failed to get address from Keybase: %w", err) - } - } - - vestingStart, err := cmd.Flags().GetInt64(flagVestingStart) - if err != nil { - return err - } - vestingEnd, err := cmd.Flags().GetInt64(flagVestingEnd) - if err != nil { - return err - } - vestingAmtStr, err := cmd.Flags().GetString(flagVestingAmt) - if err != nil { - return err - } - - vestingAmt, err := sdk.ParseCoinsNormalized(vestingAmtStr) - if err != nil { - return fmt.Errorf("failed to parse vesting amount: %w", err) - } - - // create concrete account type based on input parameters - var genAccount authtypes.GenesisAccount - - balances := banktypes.Balance{Address: addr.String(), Coins: coins.Sort()} - baseAccount := authtypes.NewBaseAccount(addr, nil, 0, 0) - - if !vestingAmt.IsZero() { - baseVestingAccount := authvesting.NewBaseVestingAccount(baseAccount, vestingAmt.Sort(), vestingEnd) - - if (balances.Coins.IsZero() && !baseVestingAccount.OriginalVesting.IsZero()) || - baseVestingAccount.OriginalVesting.IsAnyGT(balances.Coins) { - return errors.New("vesting amount cannot be greater than total amount") - } - - switch { - case vestingStart != 0 && vestingEnd != 0: - genAccount = authvesting.NewContinuousVestingAccountRaw(baseVestingAccount, vestingStart) - - case vestingEnd != 0: - genAccount = authvesting.NewDelayedVestingAccountRaw(baseVestingAccount) - - default: - return errors.New("invalid vesting parameters; must supply start and end time or end time") - } - } else { - genAccount = baseAccount - } - - if err := genAccount.Validate(); err != nil { - return fmt.Errorf("failed to validate new genesis account: %w", err) - } - - genFile := config.GenesisFile() - appState, genDoc, err := genutiltypes.GenesisStateFromGenFile(genFile) - if err != nil { - return fmt.Errorf("failed to unmarshal genesis state: %w", err) - } - - authGenState := authtypes.GetGenesisStateFromAppState(cdc, appState) - - accs, err := authtypes.UnpackAccounts(authGenState.Accounts) - if err != nil { - return fmt.Errorf("failed to get accounts from any: %w", err) - } - - if accs.Contains(addr) { - return fmt.Errorf("cannot add account at existing address %s", addr) - } - - // Add the new account to the set of genesis accounts and sanitize the - // accounts afterwards. - accs = append(accs, genAccount) - accs = authtypes.SanitizeGenesisAccounts(accs) - - genAccs, err := authtypes.PackAccounts(accs) - if err != nil { - return fmt.Errorf("failed to convert accounts into any's: %w", err) - } - authGenState.Accounts = genAccs - - authGenStateBz, err := cdc.MarshalJSON(&authGenState) - if err != nil { - return fmt.Errorf("failed to marshal auth genesis state: %w", err) - } - - appState[authtypes.ModuleName] = authGenStateBz - - bankGenState := banktypes.GetGenesisStateFromAppState(cdc, appState) - bankGenState.Balances = append(bankGenState.Balances, balances) - bankGenState.Balances = banktypes.SanitizeGenesisBalances(bankGenState.Balances) - - bankGenStateBz, err := cdc.MarshalJSON(bankGenState) - if err != nil { - return fmt.Errorf("failed to marshal bank genesis state: %w", err) - } - - appState[banktypes.ModuleName] = bankGenStateBz - - appStateJSON, err := json.Marshal(appState) - if err != nil { - return fmt.Errorf("failed to marshal application genesis state: %w", err) - } - - genDoc.AppState = appStateJSON - return genutil.ExportGenesisFile(genDoc, genFile) - }, - } - - cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test)") - cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory") - cmd.Flags().String(flagVestingAmt, "", "amount of coins for vesting accounts") - cmd.Flags().Int64(flagVestingStart, 0, "schedule start time (unix epoch) for vesting accounts") - cmd.Flags().Int64(flagVestingEnd, 0, "schedule end time (unix epoch) for vesting accounts") - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/cmd/networkd/cmd/commands.go b/cmd/networkd/cmd/commands.go new file mode 100644 index 00000000..caa0eca6 --- /dev/null +++ b/cmd/networkd/cmd/commands.go @@ -0,0 +1,187 @@ +package cmd + +import ( + "errors" + "io" + + "cosmossdk.io/log" + confixcmd "cosmossdk.io/tools/confix/cmd" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/debug" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/keys" + "github.com/cosmos/cosmos-sdk/client/pruning" + "github.com/cosmos/cosmos-sdk/client/rpc" + "github.com/cosmos/cosmos-sdk/client/snapshot" + "github.com/cosmos/cosmos-sdk/server" + servertypes "github.com/cosmos/cosmos-sdk/server/types" + "github.com/cosmos/cosmos-sdk/types/module" + authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" + "github.com/cosmos/cosmos-sdk/x/crisis" + genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" + "github.com/spf13/cobra" + "github.com/spf13/viper" + + "github.com/ignite/network/app" +) + +func initRootCmd( + rootCmd *cobra.Command, + txConfig client.TxConfig, + basicManager module.BasicManager, +) { + rootCmd.AddCommand( + genutilcli.InitCmd(basicManager, app.DefaultNodeHome), + debug.Cmd(), + confixcmd.ConfigCommand(), + pruning.Cmd(newApp, app.DefaultNodeHome), + snapshot.Cmd(newApp), + ) + + server.AddCommands(rootCmd, app.DefaultNodeHome, newApp, appExport, addModuleInitFlags) + + // add keybase, auxiliary RPC, query, genesis, and tx child commands + rootCmd.AddCommand( + server.StatusCommand(), + genesisCommand(txConfig, basicManager), + queryCommand(), + txCommand(), + keys.Commands(), + ) +} + +func addModuleInitFlags(startCmd *cobra.Command) { + crisis.AddModuleInitFlags(startCmd) +} + +// genesisCommand builds genesis-related `networkd genesis` command. Users may provide application specific commands as a parameter +func genesisCommand(txConfig client.TxConfig, basicManager module.BasicManager, cmds ...*cobra.Command) *cobra.Command { + cmd := genutilcli.Commands(txConfig, basicManager, app.DefaultNodeHome) + + for _, subCmd := range cmds { + cmd.AddCommand(subCmd) + } + return cmd +} + +func queryCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "query", + Aliases: []string{"q"}, + Short: "Querying subcommands", + DisableFlagParsing: false, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + rpc.QueryEventForTxCmd(), + rpc.ValidatorCommand(), + server.QueryBlockCmd(), + authcmd.QueryTxsByEventsCmd(), + server.QueryBlocksCmd(), + authcmd.QueryTxCmd(), + server.QueryBlockResultsCmd(), + ) + cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID") + + return cmd +} + +func txCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "tx", + Short: "Transactions subcommands", + DisableFlagParsing: false, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + authcmd.GetSignCommand(), + authcmd.GetSignBatchCommand(), + authcmd.GetMultiSignCommand(), + authcmd.GetMultiSignBatchCmd(), + authcmd.GetValidateSignaturesCommand(), + flags.LineBreak, + authcmd.GetBroadcastCommand(), + authcmd.GetEncodeCommand(), + authcmd.GetDecodeCommand(), + authcmd.GetSimulateCmd(), + ) + cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID") + + return cmd +} + +// newApp creates the application +func newApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + appOpts servertypes.AppOptions, +) servertypes.Application { + baseappOptions := server.DefaultBaseappOptions(appOpts) + + app, err := app.New( + logger, db, traceStore, true, + appOpts, + baseappOptions..., + ) + if err != nil { + panic(err) + } + return app +} + +// appExport creates a new app (optionally at a given height) and exports state. +func appExport( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + height int64, + forZeroHeight bool, + jailAllowedAddrs []string, + appOpts servertypes.AppOptions, + modulesToExport []string, +) (servertypes.ExportedApp, error) { + var ( + bApp *app.App + err error + ) + + // this check is necessary as we use the flag in x/upgrade. + // we can exit more gracefully by checking the flag here. + homePath, ok := appOpts.Get(flags.FlagHome).(string) + if !ok || homePath == "" { + return servertypes.ExportedApp{}, errors.New("application home not set") + } + + viperAppOpts, ok := appOpts.(*viper.Viper) + if !ok { + return servertypes.ExportedApp{}, errors.New("appOpts is not viper.Viper") + } + + // overwrite the FlagInvCheckPeriod + viperAppOpts.Set(server.FlagInvCheckPeriod, 1) + appOpts = viperAppOpts + + if height != -1 { + bApp, err = app.New(logger, db, traceStore, false, appOpts) + if err != nil { + return servertypes.ExportedApp{}, err + } + + if err := bApp.LoadHeight(height); err != nil { + return servertypes.ExportedApp{}, err + } + } else { + bApp, err = app.New(logger, db, traceStore, true, appOpts) + if err != nil { + return servertypes.ExportedApp{}, err + } + } + + return bApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport) +} diff --git a/cmd/networkd/cmd/config.go b/cmd/networkd/cmd/config.go new file mode 100644 index 00000000..a14ebc57 --- /dev/null +++ b/cmd/networkd/cmd/config.go @@ -0,0 +1,62 @@ +package cmd + +import ( + cmtcfg "github.com/cometbft/cometbft/config" + serverconfig "github.com/cosmos/cosmos-sdk/server/config" +) + +// initCometBFTConfig helps to override default CometBFT Config values. +// return cmtcfg.DefaultConfig if no custom configuration is required for the application. +func initCometBFTConfig() *cmtcfg.Config { + cfg := cmtcfg.DefaultConfig() + + // these values put a higher strain on node memory + // cfg.P2P.MaxNumInboundPeers = 100 + // cfg.P2P.MaxNumOutboundPeers = 40 + + return cfg +} + +// initAppConfig helps to override default appConfig template and configs. +// return "", nil if no custom configuration is required for the application. +func initAppConfig() (string, interface{}) { + // The following code snippet is just for reference. + type CustomAppConfig struct { + serverconfig.Config `mapstructure:",squash"` + } + + // Optionally allow the chain developer to overwrite the SDK's default + // server config. + srvCfg := serverconfig.DefaultConfig() + // The SDK's default minimum gas price is set to "" (empty value) inside + // app.toml. If left empty by validators, the node will halt on startup. + // However, the chain developer can set a default app.toml value for their + // validators here. + // + // In summary: + // - if you leave srvCfg.MinGasPrices = "", all validators MUST tweak their + // own app.toml config, + // - if you set srvCfg.MinGasPrices non-empty, validators CAN tweak their + // own app.toml to override, or use this default value. + // + // In tests, we set the min gas prices to 0. + // srvCfg.MinGasPrices = "0stake" + // srvCfg.BaseConfig.IAVLDisableFastNode = true // disable fastnode by default + + customAppConfig := CustomAppConfig{ + Config: *srvCfg, + } + + customAppTemplate := serverconfig.DefaultConfigTemplate + // Edit the default template file + // + // customAppTemplate := serverconfig.DefaultConfigTemplate + ` + // [wasm] + // # This is the maximum sdk gas (wasm and storage) that we allow for any x/wasm "smart" queries + // query_gas_limit = 300000 + // # This is the number of wasm vm instances we keep cached in memory for speed-up + // # Warning: this is currently unstable and may lead to crashes, best to keep for 0 unless testing locally + // lru_size = 0` + + return customAppTemplate, customAppConfig +} diff --git a/cmd/networkd/cmd/root.go b/cmd/networkd/cmd/root.go new file mode 100644 index 00000000..5c0a38c7 --- /dev/null +++ b/cmd/networkd/cmd/root.go @@ -0,0 +1,147 @@ +package cmd + +import ( + "os" + "strings" + + "cosmossdk.io/client/v2/autocli" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/config" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/server" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/cosmos/cosmos-sdk/x/auth/tx" + authtxconfig "github.com/cosmos/cosmos-sdk/x/auth/tx/config" + "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/spf13/cobra" + "github.com/spf13/pflag" + + "github.com/ignite/network/app" +) + +// NewRootCmd creates a new root command for networkd. It is called once in the main function. +func NewRootCmd() *cobra.Command { + var ( + autoCliOpts autocli.AppOptions + moduleBasicManager module.BasicManager + clientCtx client.Context + ) + + if err := depinject.Inject( + depinject.Configs(app.AppConfig(), + depinject.Supply( + log.NewNopLogger(), + ), + depinject.Provide( + ProvideClientContext, + ), + ), + &autoCliOpts, + &moduleBasicManager, + &clientCtx, + ); err != nil { + panic(err) + } + + rootCmd := &cobra.Command{ + Use: app.Name + "d", + Short: "Start network node", + SilenceErrors: true, + PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { + // set the default command outputs + cmd.SetOut(cmd.OutOrStdout()) + cmd.SetErr(cmd.ErrOrStderr()) + + clientCtx = clientCtx.WithCmdContext(cmd.Context()) + clientCtx, err := client.ReadPersistentCommandFlags(clientCtx, cmd.Flags()) + if err != nil { + return err + } + + clientCtx, err = config.ReadFromClientConfig(clientCtx) + if err != nil { + return err + } + + if err := client.SetCmdClientContextHandler(clientCtx, cmd); err != nil { + return err + } + + customAppTemplate, customAppConfig := initAppConfig() + customCMTConfig := initCometBFTConfig() + + return server.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, customCMTConfig) + }, + } + + // Since the IBC modules don't support dependency injection, we need to + // manually register the modules on the client side. + // This needs to be removed after IBC supports App Wiring. + ibcModules := app.RegisterIBC(clientCtx.InterfaceRegistry) + for name, mod := range ibcModules { + moduleBasicManager[name] = module.CoreAppModuleBasicAdaptor(name, mod) + autoCliOpts.Modules[name] = mod + } + + initRootCmd(rootCmd, clientCtx.TxConfig, moduleBasicManager) + + overwriteFlagDefaults(rootCmd, map[string]string{ + flags.FlagChainID: strings.ReplaceAll(app.Name, "-", ""), + flags.FlagKeyringBackend: "test", + }) + + if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil { + panic(err) + } + + return rootCmd +} + +func overwriteFlagDefaults(c *cobra.Command, defaults map[string]string) { + set := func(s *pflag.FlagSet, key, val string) { + if f := s.Lookup(key); f != nil { + f.DefValue = val + _ = f.Value.Set(val) + } + } + for key, val := range defaults { + set(c.Flags(), key, val) + set(c.PersistentFlags(), key, val) + } + for _, c := range c.Commands() { + overwriteFlagDefaults(c, defaults) + } +} + +func ProvideClientContext( + appCodec codec.Codec, + interfaceRegistry codectypes.InterfaceRegistry, + txConfigOpts tx.ConfigOptions, + legacyAmino *codec.LegacyAmino, +) client.Context { + clientCtx := client.Context{}. + WithCodec(appCodec). + WithInterfaceRegistry(interfaceRegistry). + WithLegacyAmino(legacyAmino). + WithInput(os.Stdin). + WithAccountRetriever(types.AccountRetriever{}). + WithHomeDir(app.DefaultNodeHome). + WithViper(app.Name) // env variable prefix + + // Read the config again to overwrite the default values with the values from the config file + clientCtx, _ = config.ReadFromClientConfig(clientCtx) + + // textual is enabled by default, we need to re-create the tx config grpc instead of bank keeper. + txConfigOpts.TextualCoinMetadataQueryFn = authtxconfig.NewGRPCCoinMetadataQueryFn(clientCtx) + txConfig, err := tx.NewTxConfigWithOptions(clientCtx.Codec, txConfigOpts) + if err != nil { + panic(err) + } + clientCtx = clientCtx.WithTxConfig(txConfig) + + return clientCtx +} diff --git a/cmd/networkd/main.go b/cmd/networkd/main.go new file mode 100644 index 00000000..1ad3d02a --- /dev/null +++ b/cmd/networkd/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" + "os" + + clienthelpers "cosmossdk.io/client/v2/helpers" + svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" + + "github.com/ignite/network/app" + "github.com/ignite/network/cmd/networkd/cmd" +) + +func main() { + rootCmd := cmd.NewRootCmd() + if err := svrcmd.Execute(rootCmd, clienthelpers.EnvPrefix, app.DefaultNodeHome); err != nil { + fmt.Fprintln(rootCmd.OutOrStderr(), err) + os.Exit(1) + } +} diff --git a/cmd/prefixes.go b/cmd/prefixes.go deleted file mode 100644 index 799fdef8..00000000 --- a/cmd/prefixes.go +++ /dev/null @@ -1,19 +0,0 @@ -package cmd - -import sdk "github.com/cosmos/cosmos-sdk/types" - -func SetPrefixes(accountAddressPrefix string) { - // Set prefixes - accountPubKeyPrefix := accountAddressPrefix + "pub" - validatorAddressPrefix := accountAddressPrefix + "valoper" - validatorPubKeyPrefix := accountAddressPrefix + "valoperpub" - consNodeAddressPrefix := accountAddressPrefix + "valcons" - consNodePubKeyPrefix := accountAddressPrefix + "valconspub" - - // Set and seal config - config := sdk.GetConfig() - config.SetBech32PrefixForAccount(accountAddressPrefix, accountPubKeyPrefix) - config.SetBech32PrefixForValidator(validatorAddressPrefix, validatorPubKeyPrefix) - config.SetBech32PrefixForConsensusNode(consNodeAddressPrefix, consNodePubKeyPrefix) - config.Seal() -} diff --git a/cmd/root.go b/cmd/root.go deleted file mode 100644 index 4a4966fc..00000000 --- a/cmd/root.go +++ /dev/null @@ -1,482 +0,0 @@ -package cmd - -import ( - "errors" - "io" - "os" - "path/filepath" - - dbm "github.com/cometbft/cometbft-db" - tmcfg "github.com/cometbft/cometbft/config" - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cometbft/cometbft/libs/log" - tmtypes "github.com/cometbft/cometbft/types" - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/config" - "github.com/cosmos/cosmos-sdk/client/debug" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/keys" - "github.com/cosmos/cosmos-sdk/client/rpc" - "github.com/cosmos/cosmos-sdk/server" - serverconfig "github.com/cosmos/cosmos-sdk/server/config" - servertypes "github.com/cosmos/cosmos-sdk/server/types" - "github.com/cosmos/cosmos-sdk/snapshots" - snapshottypes "github.com/cosmos/cosmos-sdk/snapshots/types" - "github.com/cosmos/cosmos-sdk/store" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" - "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/cosmos/cosmos-sdk/x/crisis" - "github.com/cosmos/cosmos-sdk/x/genutil" - genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" - genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" - "github.com/spf13/cast" - "github.com/spf13/cobra" - "github.com/spf13/pflag" -) - -type ( - // AppBuilder is a method that allows to build an app - AppBuilder func( - logger log.Logger, - db dbm.DB, - traceStore io.Writer, - loadLatest bool, - skipUpgradeHeights map[int64]bool, - homePath string, - invCheckPeriod uint, - encodingConfig EncodingConfig, - appOpts servertypes.AppOptions, - baseAppOptions ...func(*baseapp.BaseApp), - ) App - - // App represents a Cosmos SDK application that can be run as a server and with an exportable state - App interface { - servertypes.Application - ExportableApp - } - - // ExportableApp represents an app with an exportable state - ExportableApp interface { - ExportAppStateAndValidators( - forZeroHeight bool, - jailAllowedAddrs []string, - modulesToExport []string, - ) (servertypes.ExportedApp, error) - LoadHeight(height int64) error - } - - // appCreator is an app creator - appCreator struct { - encodingConfig EncodingConfig - buildApp AppBuilder - } -) - -// Option configures root command option. -type Option func(*rootOptions) - -// scaffoldingOptions keeps set of options to apply scaffolding. -type rootOptions struct { - addSubCmds []*cobra.Command - startCmdCustomizer func(*cobra.Command) - envPrefix string -} - -func newRootOptions(options ...Option) rootOptions { - opts := rootOptions{} - opts.apply(options...) - return opts -} - -func (s *rootOptions) apply(options ...Option) { - for _, o := range options { - o(s) - } -} - -// AddSubCmd adds sub commands. -func AddSubCmd(cmd ...*cobra.Command) Option { - return func(o *rootOptions) { - o.addSubCmds = append(o.addSubCmds, cmd...) - } -} - -// CustomizeStartCmd accepts a handler to customize the start command. -func CustomizeStartCmd(h func(startCmd *cobra.Command)) Option { - return func(o *rootOptions) { - o.startCmdCustomizer = h - } -} - -// WithEnvPrefix accepts a new prefix for environment variables. -func WithEnvPrefix(envPrefix string) Option { - return func(o *rootOptions) { - o.envPrefix = envPrefix - } -} - -// NewRootCmd creates a new root command for a Cosmos SDK application -func NewRootCmd( - appName, - accountAddressPrefix, - defaultNodeHome, - defaultChainID string, - moduleBasics module.BasicManager, - buildApp AppBuilder, - options ...Option, -) (*cobra.Command, EncodingConfig) { - rootOptions := newRootOptions(options...) - - // Set config for prefixes - SetPrefixes(accountAddressPrefix) - - encodingConfig := MakeEncodingConfig(moduleBasics) - initClientCtx := client.Context{}. - WithCodec(encodingConfig.Marshaler). - WithInterfaceRegistry(encodingConfig.InterfaceRegistry). - WithTxConfig(encodingConfig.TxConfig). - WithLegacyAmino(encodingConfig.Amino). - WithInput(os.Stdin). - WithAccountRetriever(types.AccountRetriever{}). - WithBroadcastMode(flags.BroadcastSync). - WithHomeDir(defaultNodeHome). - WithViper(rootOptions.envPrefix) - - rootCmd := &cobra.Command{ - Use: appName + "d", - Short: "Stargate CosmosHub App", - PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { - // set the default command outputs - cmd.SetOut(cmd.OutOrStdout()) - cmd.SetErr(cmd.ErrOrStderr()) - initClientCtx, err := client.ReadPersistentCommandFlags(initClientCtx, cmd.Flags()) - if err != nil { - return err - } - initClientCtx, err = config.ReadFromClientConfig(initClientCtx) - if err != nil { - return err - } - - if err := client.SetCmdClientContextHandler(initClientCtx, cmd); err != nil { - return err - } - - customAppTemplate, customAppConfig := initAppConfig() - - if err := server.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, tmcfg.DefaultConfig()); err != nil { - return err - } - - // startProxyForTunneledPeers(initClientCtx, cmd) - - return nil - }, - } - - initRootCmd( - rootCmd, - encodingConfig, - defaultNodeHome, - moduleBasics, - buildApp, - rootOptions, - ) - overwriteFlagDefaults(rootCmd, map[string]string{ - flags.FlagChainID: defaultChainID, - flags.FlagKeyringBackend: "test", - }) - - return rootCmd, encodingConfig -} - -func initRootCmd( - rootCmd *cobra.Command, - encodingConfig EncodingConfig, - defaultNodeHome string, - moduleBasics module.BasicManager, - buildApp AppBuilder, - options rootOptions, -) { - gentxModule := moduleBasics[genutiltypes.ModuleName].(genutil.AppModuleBasic) - rootCmd.AddCommand( - genutilcli.InitCmd(moduleBasics, defaultNodeHome), - genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, defaultNodeHome, gentxModule.GenTxValidator), - genutilcli.MigrateGenesisCmd(), - genutilcli.GenTxCmd( - moduleBasics, - encodingConfig.TxConfig, - banktypes.GenesisBalancesIterator{}, - defaultNodeHome, - ), - genutilcli.ValidateGenesisCmd(moduleBasics), - AddGenesisAccountCmd(defaultNodeHome), - tmcli.NewCompletionCmd(rootCmd, true), - debug.Cmd(), - config.Cmd(), - ) - - a := appCreator{ - encodingConfig, - buildApp, - } - - // add server commands - server.AddCommands( - rootCmd, - defaultNodeHome, - a.newApp, - a.appExport, - func(cmd *cobra.Command) { - addModuleInitFlags(cmd) - - if options.startCmdCustomizer != nil { - options.startCmdCustomizer(cmd) - } - }, - ) - - // add keybase, auxiliary RPC, query, and tx child commands - rootCmd.AddCommand( - rpc.StatusCommand(), - queryCommand(moduleBasics), - txCommand(moduleBasics), - keys.Commands(defaultNodeHome), - ) - - // add user given sub commands. - for _, cmd := range options.addSubCmds { - rootCmd.AddCommand(cmd) - } -} - -// queryCommand returns the sub-command to send queries to the app -func queryCommand(moduleBasics module.BasicManager) *cobra.Command { - cmd := &cobra.Command{ - Use: "query", - Aliases: []string{"q"}, - Short: "Querying subcommands", - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - authcmd.GetAccountCmd(), - rpc.ValidatorCommand(), - rpc.BlockCommand(), - authcmd.QueryTxsByEventsCmd(), - authcmd.QueryTxCmd(), - ) - - moduleBasics.AddQueryCommands(cmd) - cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID") - - return cmd -} - -// txCommand returns the sub-command to send transactions to the app -func txCommand(moduleBasics module.BasicManager) *cobra.Command { - cmd := &cobra.Command{ - Use: "tx", - Short: "Transactions subcommands", - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - authcmd.GetSignCommand(), - authcmd.GetSignBatchCommand(), - authcmd.GetMultiSignCommand(), - authcmd.GetValidateSignaturesCommand(), - flags.LineBreak, - authcmd.GetBroadcastCommand(), - authcmd.GetEncodeCommand(), - authcmd.GetDecodeCommand(), - ) - - moduleBasics.AddTxCommands(cmd) - cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID") - - return cmd -} - -func addModuleInitFlags(startCmd *cobra.Command) { - crisis.AddModuleInitFlags(startCmd) -} - -func overwriteFlagDefaults(c *cobra.Command, defaults map[string]string) { - set := func(s *pflag.FlagSet, key, val string) { - if f := s.Lookup(key); f != nil { - f.DefValue = val - f.Value.Set(val) //nolint - } - } - for key, val := range defaults { - set(c.Flags(), key, val) - set(c.PersistentFlags(), key, val) - } - for _, c := range c.Commands() { - overwriteFlagDefaults(c, defaults) - } -} - -// newApp creates a new Cosmos SDK app -func (a appCreator) newApp( - logger log.Logger, - db dbm.DB, - traceStore io.Writer, - appOpts servertypes.AppOptions, -) servertypes.Application { - var cache sdk.MultiStorePersistentCache - - if cast.ToBool(appOpts.Get(server.FlagInterBlockCache)) { - cache = store.NewCommitKVStoreCacheManager() - } - - skipUpgradeHeights := make(map[int64]bool) - for _, h := range cast.ToIntSlice(appOpts.Get(server.FlagUnsafeSkipUpgrades)) { - skipUpgradeHeights[int64(h)] = true - } - - pruningOpts, err := server.GetPruningOptionsFromFlags(appOpts) - if err != nil { - panic(err) - } - - homeDir := cast.ToString(appOpts.Get(flags.FlagHome)) - chainID := cast.ToString(appOpts.Get(flags.FlagChainID)) - if chainID == "" { - // fallback to genesis chain-id - appGenesis, err := tmtypes.GenesisDocFromFile(filepath.Join(homeDir, "config", "genesis.json")) - if err != nil { - panic(err) - } - - chainID = appGenesis.ChainID - } - - snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots") - snapshotDB, err := dbm.NewDB("metadata", dbm.GoLevelDBBackend, snapshotDir) - if err != nil { - panic(err) - } - snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) - if err != nil { - panic(err) - } - - snapshotOptions := snapshottypes.NewSnapshotOptions( - cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval)), - cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent)), - ) - - return a.buildApp( - logger, - db, - traceStore, - true, - skipUpgradeHeights, - cast.ToString(appOpts.Get(flags.FlagHome)), - cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), - a.encodingConfig, - appOpts, - baseapp.SetPruning(pruningOpts), - baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), - baseapp.SetMinRetainBlocks(cast.ToUint64(appOpts.Get(server.FlagMinRetainBlocks))), - baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), - baseapp.SetHaltTime(cast.ToUint64(appOpts.Get(server.FlagHaltTime))), - baseapp.SetInterBlockCache(cache), - baseapp.SetTrace(cast.ToBool(appOpts.Get(server.FlagTrace))), - baseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(server.FlagIndexEvents))), - baseapp.SetSnapshot(snapshotStore, snapshotOptions), - baseapp.SetIAVLCacheSize(cast.ToInt(appOpts.Get(server.FlagIAVLCacheSize))), - baseapp.SetIAVLDisableFastNode(cast.ToBool(appOpts.Get(server.FlagDisableIAVLFastNode))), - baseapp.SetChainID(chainID), - ) -} - -// appExport creates a new simapp (optionally at a given height) -func (a appCreator) appExport( - logger log.Logger, - db dbm.DB, - traceStore io.Writer, - height int64, - forZeroHeight bool, - jailAllowedAddrs []string, - appOpts servertypes.AppOptions, - modulesToExport []string, //nolint:revive -) (servertypes.ExportedApp, error) { - var exportableApp ExportableApp - - homePath, ok := appOpts.Get(flags.FlagHome).(string) - if !ok || homePath == "" { - return servertypes.ExportedApp{}, errors.New("application home not set") - } - - exportableApp = a.buildApp( - logger, - db, - traceStore, - height == -1, // -1: no height provided - map[int64]bool{}, - homePath, - uint(1), - a.encodingConfig, - appOpts, - ) - - if height != -1 { - if err := exportableApp.LoadHeight(height); err != nil { - return servertypes.ExportedApp{}, err - } - } - - return exportableApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport) -} - -// initAppConfig helps to override default appConfig template and configs. -// return "", nil if no custom configuration is required for the application. -func initAppConfig() (string, interface{}) { - // The following code snippet is just for reference. - - type CustomAppConfig struct { - serverconfig.Config - } - - // Optionally allow the chain developer to overwrite the SDK's default - // server config. - srvCfg := serverconfig.DefaultConfig() - // The SDK's default minimum gas price is set to "" (empty value) inside - // app.toml. If left empty by validators, the node will halt on startup. - // However, the chain developer can set a default app.toml value for their - // validators here. - // - // In summary: - // - if you leave srvCfg.MinGasPrices = "", all validators MUST tweak their - // own app.toml config, - // - if you set srvCfg.MinGasPrices non-empty, validators CAN tweak their - // own app.toml to override, or use this default value. - // - // In simapp, we set the min gas prices to 0. - srvCfg.MinGasPrices = "0stake" - - customAppConfig := CustomAppConfig{ - Config: *srvCfg, - } - - customAppTemplate := serverconfig.DefaultConfigTemplate + ` -[wasm] -# This is the maximum sdk gas (wasm and storage) that we allow for any x/wasm "smart" queries -query_gas_limit = 300000 -# This is the number of wasm vm instances we keep cached in memory for speed-up -# Warning: this is currently unstable and may lead to crashes, best to keep for 0 unless testing locally -lru_size = 0` - - return customAppTemplate, customAppConfig -} diff --git a/cmd/spnd/main.go b/cmd/spnd/main.go deleted file mode 100644 index 080e3d42..00000000 --- a/cmd/spnd/main.go +++ /dev/null @@ -1,26 +0,0 @@ -package main - -import ( - "os" - - svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" - - "github.com/tendermint/spn/app" - "github.com/tendermint/spn/cmd" - spntypes "github.com/tendermint/spn/pkg/types" -) - -func main() { - rootCmd, _ := cmd.NewRootCmd( - spntypes.Name, - spntypes.AccountAddressPrefix, - app.DefaultNodeHome, - spntypes.DefaultChainID, - app.ModuleBasics, - app.New, - // this line is used by starport scaffolding # root/arguments - ) - if err := svrcmd.Execute(rootCmd, "", app.DefaultNodeHome); err != nil { - os.Exit(1) - } -} diff --git a/config.yml b/config.yml index be714a62..a9d2dc20 100644 --- a/config.yml +++ b/config.yml @@ -2,111 +2,108 @@ version: 1 build: proto: path: proto - third_party_paths: - - third_party/proto - - proto_vendor accounts: -- name: alice - coins: - - 200000000uspn - mnemonic: slide moment original seven milk crawl help text kick fluid boring awkward - doll wonder sure fragile plate grid hard next casual expire okay body -- name: bob - coins: - - 200000000uspn - mnemonic: trap possible liquid elite embody host segment fantasy swim cable digital - eager tiny broom burden diary earn hen grow engine pigeon fringe claim program -- name: carol - coins: - - 200000000uspn - mnemonic: great immense still pill defense fetch pencil slow purchase symptom speed - arm shoot fence have divorce cigar rapid hen vehicle pear evolve correct nerve -- name: dave - coins: - - 200000000uspn - mnemonic: resist portion leisure lawn shell lunch inhale start pupil add fault segment - hour dwarf toddler insect frame math remove twist easy paddle nice rhythm -- name: joe - coins: - - 200000000uspn - mnemonic: diary behind allow lawn loop assault armor survey media toe rural mass - skull way crater tobacco pair glare window soon lift pistol fitness annual -- name: steve - coins: - - 200000000uspn - mnemonic: initial aisle blush gift shuffle hat solar dove dwarf soup credit acid - update seed mercy thumb swear main verb image dove rose chat inmate -- name: olivia - coins: - - 200000000uspn - mnemonic: dinosaur submit around jacket movie garden crash weather matter option - time cabbage butter mind skin nature ride mosquito seat lock elephant merit empower - come + - name: alice + coins: + - 200000000uspn + mnemonic: slide moment original seven milk crawl help text kick fluid boring awkward + doll wonder sure fragile plate grid hard next casual expire okay body + - name: bob + coins: + - 200000000uspn + mnemonic: trap possible liquid elite embody host segment fantasy swim cable digital + eager tiny broom burden diary earn hen grow engine pigeon fringe claim program + - name: carol + coins: + - 200000000uspn + mnemonic: great immense still pill defense fetch pencil slow purchase symptom speed + arm shoot fence have divorce cigar rapid hen vehicle pear evolve correct nerve + - name: dave + coins: + - 200000000uspn + mnemonic: resist portion leisure lawn shell lunch inhale start pupil add fault segment + hour dwarf toddler insect frame math remove twist easy paddle nice rhythm + - name: joe + coins: + - 200000000uspn + mnemonic: diary behind allow lawn loop assault armor survey media toe rural mass + skull way crater tobacco pair glare window soon lift pistol fitness annual + - name: steve + coins: + - 200000000uspn + mnemonic: initial aisle blush gift shuffle hat solar dove dwarf soup credit acid + update seed mercy thumb swear main verb image dove rose chat inmate + - name: olivia + coins: + - 200000000uspn + mnemonic: dinosaur submit around jacket movie garden crash weather matter option + time cabbage butter mind skin nature ride mosquito seat lock elephant merit empower + come faucet: name: bob coins: - - 100000uspn + - 100000uspn host: 0.0.0.0:4500 genesis: app_state: bank: denom_metadata: - - base: uspn - denom_units: - - aliases: - - microspn - denom: uspn - exponent: "0" - - aliases: - - millispn - denom: mspn - exponent: "3" - - denom: spn - exponent: "6" - description: The native staking token of Starport Network - display: spn - name: Starport Network - symbol: SPN + - base: uspn + denom_units: + - aliases: + - microspn + denom: uspn + exponent: "0" + - aliases: + - millispn + denom: mspn + exponent: "3" + - denom: spn + exponent: "6" + description: The native staking token of Starport Network + display: spn + name: Starport Network + symbol: SPN claim: airdropSupply: amount: "1000" denom: drop claimRecords: - - address: spn1ezptsm3npn54qx9vvpah4nymre59ykr9exx2ul - claimable: "400" - - address: spn1aqn8ynvr3jmq67879qulzrwhchq5dtrvtx0nhe - claimable: "500" - - address: spn1pkdk6m2nh77nlaep84cylmkhjder3arey7rll5 - claimable: "100" + - address: spn1ezptsm3npn54qx9vvpah4nymre59ykr9exx2ul + claimable: "400" + - address: spn1aqn8ynvr3jmq67879qulzrwhchq5dtrvtx0nhe + claimable: "500" + - address: spn1pkdk6m2nh77nlaep84cylmkhjder3arey7rll5 + claimable: "100" initialClaim: enabled: true missionID: "0" missions: - - description: "initial claim" - missionID: "0" - weight: "0.25" - - description: "staking" - missionID: "1" - weight: "0.25" - - description: "voting" - missionID: "2" - weight: "0.25" - - description: "sending request" - missionID: "3" - weight: "0.25" + - description: "initial claim" + missionID: "0" + weight: "0.25" + - description: "staking" + missionID: "1" + weight: "0.25" + - description: "voting" + missionID: "2" + weight: "0.25" + - description: "sending request" + missionID: "3" + weight: "0.25" crisis: constant_fee: denom: uspn fundraising: params: auction_creation_fee: - - amount: "100" - denom: uspn + - amount: "100" + denom: uspn gov: deposit_params: min_deposit: - - amount: "1" - denom: uspn + - amount: "1" + denom: uspn launch: params: launchTimeRange: @@ -119,12 +116,12 @@ genesis: funded_addresses: "0.400000000000000000" staking: "0.300000000000000000" funded_addresses: - - address: spn1ezptsm3npn54qx9vvpah4nymre59ykr9exx2ul - weight: "0.400000000000000000" - - address: spn1aqn8ynvr3jmq67879qulzrwhchq5dtrvtx0nhe - weight: "0.300000000000000000" - - address: spn1pkdk6m2nh77nlaep84cylmkhjder3arey7rll5 - weight: "0.300000000000000000" + - address: spn1ezptsm3npn54qx9vvpah4nymre59ykr9exx2ul + weight: "0.400000000000000000" + - address: spn1aqn8ynvr3jmq67879qulzrwhchq5dtrvtx0nhe + weight: "0.300000000000000000" + - address: spn1pkdk6m2nh77nlaep84cylmkhjder3arey7rll5 + weight: "0.300000000000000000" mint_denom: uspn monitoringp: params: @@ -137,22 +134,22 @@ genesis: allocationPrice: bonded: "1000" participationTierList: - - benefits: - maxBidAmount: "1000" - requiredAllocations: "1" - tierID: "1" - - benefits: - maxBidAmount: "2000" - requiredAllocations: "2" - tierID: "2" - - benefits: - maxBidAmount: "10000" - requiredAllocations: "5" - tierID: "3" - - benefits: - maxBidAmount: "30000" - requiredAllocations: "10" - tierID: "4" + - benefits: + maxBidAmount: "1000" + requiredAllocations: "1" + tierID: "1" + - benefits: + maxBidAmount: "2000" + requiredAllocations: "2" + tierID: "2" + - benefits: + maxBidAmount: "10000" + requiredAllocations: "5" + tierID: "3" + - benefits: + maxBidAmount: "30000" + requiredAllocations: "10" + tierID: "4" registrationPeriod: 604800s withdrawalDelay: 1209600s staking: @@ -160,8 +157,8 @@ genesis: bond_denom: uspn chain_id: spn-1 validators: -- name: alice - bonded: 100000000uspn -client: - typescript: - path: "ignite-ui/src/generated" + - name: alice + bonded: 100000000uspn +#client: +# typescript: +# path: "ignite-ui/src/generated" diff --git a/config_2.yml b/config_2.yml index 9c746521..8d5afbd1 100644 --- a/config_2.yml +++ b/config_2.yml @@ -3,24 +3,21 @@ build: binary: spn2d proto: path: proto - third_party_paths: - - third_party/proto - - proto_vendor accounts: -- name: alice - coins: - - 200000000uspn - mnemonic: slide moment original seven milk crawl help text kick fluid boring awkward - doll wonder sure fragile plate grid hard next casual expire okay body -- name: bob - coins: - - 200000000uspn - mnemonic: trap possible liquid elite embody host segment fantasy swim cable digital - eager tiny broom burden diary earn hen grow engine pigeon fringe claim program + - name: alice + coins: + - 200000000uspn + mnemonic: slide moment original seven milk crawl help text kick fluid boring awkward + doll wonder sure fragile plate grid hard next casual expire okay body + - name: bob + coins: + - 200000000uspn + mnemonic: trap possible liquid elite embody host segment fantasy swim cable digital + eager tiny broom burden diary earn hen grow engine pigeon fringe claim program faucet: name: bob coins: - - 100000uspn + - 100000uspn host: 0.0.0.0:4500 port: 4502 genesis: @@ -31,8 +28,8 @@ genesis: gov: deposit_params: min_deposit: - - amount: "1" - denom: uspn + - amount: "1" + denom: uspn launch: params: launchTimeRange: @@ -52,18 +49,18 @@ genesis: bond_denom: uspn chain_id: spn-1 validators: -- name: alice - bonded: 100000000uspn - app: - api: - address: :1319 - grpc: - address: :9094 - grpc-web: - address: :9095 - config: - p2p: - laddr: :26660 - rpc: - laddr: :26661 - pprof_laddr: :6062 \ No newline at end of file + - name: alice + bonded: 100000000uspn + app: + api: + address: :1319 + grpc: + address: :9094 + grpc-web: + address: :9095 + config: + p2p: + laddr: :26660 + rpc: + laddr: :26661 + pprof_laddr: :6062 \ No newline at end of file diff --git a/contrib/devtools/Makefile b/contrib/devtools/Makefile index 2e3741fd..139beff2 100644 --- a/contrib/devtools/Makefile +++ b/contrib/devtools/Makefile @@ -75,7 +75,7 @@ $(STATIK): runsim: $(RUNSIM) $(RUNSIM): @echo "Installing runsim..." - @(cd /tmp && go get github.com/cosmos/tools/cmd/runsim@v1.0.0) + @(cd /tmp && go install github.com/cosmos/tools/cmd/runsim@v1.0.0) tools-clean: rm -f $(STATIK) $(GOLANGCI_LINT) $(RUNSIM) diff --git a/docs/docs.go b/docs/docs.go index c3306a57..6994b8c9 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1,8 +1,40 @@ package docs -import "embed" +import ( + "embed" + httptemplate "html/template" + "net/http" + + "github.com/gorilla/mux" +) + +const ( + apiFile = "/static/openapi.yml" + indexFile = "template/index.tpl" +) -// Docs represents the embedded doc file -// //go:embed static -var Docs embed.FS +var Static embed.FS + +//go:embed template +var template embed.FS + +func RegisterOpenAPIService(appName string, rtr *mux.Router) { + rtr.Handle(apiFile, http.FileServer(http.FS(Static))) + rtr.HandleFunc("/", handler(appName)) +} + +// handler returns an http handler that servers OpenAPI console for an OpenAPI spec at specURL. +func handler(title string) http.HandlerFunc { + t, _ := httptemplate.ParseFS(template, indexFile) + + return func(w http.ResponseWriter, req *http.Request) { + _ = t.Execute(w, struct { + Title string + URL string + }{ + title, + apiFile, + }) + } +} diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index c8036782..9b472945 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1,30108 +1 @@ -swagger: '2.0' -info: - title: HTTP API Console - name: '' - description: '' -paths: - '/cosmos/bank/v1beta1/balances/{address}': - get: - summary: AllBalances queries the balance of all coins for a single account. - operationId: CosmosBankV1Beta1AllBalances - responses: - '200': - description: A successful response. - schema: - type: object - properties: - balances: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: balances is the balances of all the coins. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryAllBalancesResponse is the response type for the - Query/AllBalances RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: address - description: address is the address to query balances for. - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/bank/v1beta1/balances/{address}/{denom}': - get: - summary: Balance queries the balance of a single coin for a single account. - operationId: CosmosBankV1Beta1Balance - responses: - '200': - description: A successful response. - schema: - type: object - properties: - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - QueryBalanceResponse is the response type for the Query/Balance - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: address - description: address is the address to query balances for. - in: path - required: true - type: string - - name: denom - description: denom is the coin denom to query balances for. - in: path - required: true - type: string - tags: - - Query - /cosmos/bank/v1beta1/denoms_metadata: - get: - summary: >- - DenomsMetadata queries the client metadata for all registered coin - denominations. - operationId: CosmosBankV1Beta1DenomsMetadata - responses: - '200': - description: A successful response. - schema: - type: object - properties: - metadatas: - type: array - items: - type: object - properties: - description: - type: string - denomUnits: - type: array - items: - type: object - properties: - denom: - type: string - description: >- - denom represents the string name of the given - denom unit (e.g uatom). - exponent: - type: integer - format: int64 - description: >- - exponent represents power of 10 exponent that one - must - - raise the base_denom to in order to equal the - given DenomUnit's denom - - 1 denom = 1^exponent base_denom - - (e.g. with a base_denom of uatom, one can create a - DenomUnit of 'atom' with - - exponent = 6, thus: 1 atom = 10^6 uatom). - aliases: - type: array - items: - type: string - title: >- - aliases is a list of string aliases for the given - denom - description: |- - DenomUnit represents a struct that describes a given - denomination unit of the basic token. - title: >- - denom_units represents the list of DenomUnit's for a - given coin - base: - type: string - description: >- - base represents the base denom (should be the DenomUnit - with exponent = 0). - display: - type: string - description: |- - display indicates the suggested denom that should be - displayed in clients. - description: |- - Metadata represents a struct that describes - a basic token. - description: >- - metadata provides the client information for all the - registered tokens. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryDenomsMetadataResponse is the response type for the - Query/DenomsMetadata RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/bank/v1beta1/denoms_metadata/{denom}': - get: - summary: DenomsMetadata queries the client metadata of a given coin denomination. - operationId: CosmosBankV1Beta1DenomMetadata - responses: - '200': - description: A successful response. - schema: - type: object - properties: - metadata: - type: object - properties: - description: - type: string - denomUnits: - type: array - items: - type: object - properties: - denom: - type: string - description: >- - denom represents the string name of the given denom - unit (e.g uatom). - exponent: - type: integer - format: int64 - description: >- - exponent represents power of 10 exponent that one - must - - raise the base_denom to in order to equal the given - DenomUnit's denom - - 1 denom = 1^exponent base_denom - - (e.g. with a base_denom of uatom, one can create a - DenomUnit of 'atom' with - - exponent = 6, thus: 1 atom = 10^6 uatom). - aliases: - type: array - items: - type: string - title: >- - aliases is a list of string aliases for the given - denom - description: |- - DenomUnit represents a struct that describes a given - denomination unit of the basic token. - title: >- - denom_units represents the list of DenomUnit's for a given - coin - base: - type: string - description: >- - base represents the base denom (should be the DenomUnit - with exponent = 0). - display: - type: string - description: |- - display indicates the suggested denom that should be - displayed in clients. - description: |- - Metadata represents a struct that describes - a basic token. - description: >- - QueryDenomMetadataResponse is the response type for the - Query/DenomMetadata RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: denom - description: denom is the coin denom to query the metadata for. - in: path - required: true - type: string - tags: - - Query - /cosmos/bank/v1beta1/params: - get: - summary: Params queries the parameters of x/bank module. - operationId: CosmosBankV1Beta1Params - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - type: object - properties: - sendEnabled: - type: array - items: - type: object - properties: - denom: - type: string - enabled: - type: boolean - description: >- - SendEnabled maps coin denom to a send_enabled status - (whether a denom is - - sendable). - defaultSendEnabled: - type: boolean - description: Params defines the parameters for the bank module. - description: >- - QueryParamsResponse defines the response type for querying x/bank - parameters. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - tags: - - Query - /cosmos/bank/v1beta1/supply: - get: - summary: TotalSupply queries the total supply of all coins. - operationId: CosmosBankV1Beta1TotalSupply - responses: - '200': - description: A successful response. - schema: - type: object - properties: - supply: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: supply is the supply of the coins - title: >- - QueryTotalSupplyResponse is the response type for the - Query/TotalSupply RPC - - method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - tags: - - Query - '/cosmos/bank/v1beta1/supply/{denom}': - get: - summary: SupplyOf queries the supply of a single coin. - operationId: CosmosBankV1Beta1SupplyOf - responses: - '200': - description: A successful response. - schema: - type: object - properties: - amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - QuerySupplyOfResponse is the response type for the Query/SupplyOf - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: denom - description: denom is the coin denom to query balances for. - in: path - required: true - type: string - tags: - - Query - /cosmos/distribution/v1beta1/community_pool: - get: - summary: CommunityPool queries the community pool coins. - operationId: CosmosDistributionV1Beta1CommunityPool - responses: - '200': - description: A successful response. - schema: - type: object - properties: - pool: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a decimal - amount. - - - NOTE: The amount field is an Dec which implements the custom - method - - signatures required by gogoproto. - description: pool defines community pool's coins. - description: >- - QueryCommunityPoolResponse is the response type for the - Query/CommunityPool - - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - tags: - - Query - '/cosmos/distribution/v1beta1/delegators/{delegatorAddress}/rewards': - get: - summary: |- - DelegationTotalRewards queries the total rewards accrued by a each - validator. - operationId: CosmosDistributionV1Beta1DelegationTotalRewards - responses: - '200': - description: A successful response. - schema: - type: object - properties: - rewards: - type: array - items: - type: object - properties: - validatorAddress: - type: string - reward: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a - decimal amount. - - - NOTE: The amount field is an Dec which implements the - custom method - - signatures required by gogoproto. - description: |- - DelegationDelegatorReward represents the properties - of a delegator's delegation reward. - description: rewards defines all the rewards accrued by a delegator. - total: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a decimal - amount. - - - NOTE: The amount field is an Dec which implements the custom - method - - signatures required by gogoproto. - description: total defines the sum of all the rewards. - description: |- - QueryDelegationTotalRewardsResponse is the response type for the - Query/DelegationTotalRewards RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: delegatorAddress - description: delegator_address defines the delegator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/distribution/v1beta1/delegators/{delegatorAddress}/rewards/{validatorAddress}': - get: - summary: DelegationRewards queries the total rewards accrued by a delegation. - operationId: CosmosDistributionV1Beta1DelegationRewards - responses: - '200': - description: A successful response. - schema: - type: object - properties: - rewards: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a decimal - amount. - - - NOTE: The amount field is an Dec which implements the custom - method - - signatures required by gogoproto. - description: rewards defines the rewards accrued by a delegation. - description: |- - QueryDelegationRewardsResponse is the response type for the - Query/DelegationRewards RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: delegatorAddress - description: delegator_address defines the delegator address to query for. - in: path - required: true - type: string - - name: validatorAddress - description: validator_address defines the validator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/distribution/v1beta1/delegators/{delegatorAddress}/validators': - get: - summary: DelegatorValidators queries the validators of a delegator. - operationId: CosmosDistributionV1Beta1DelegatorValidators - responses: - '200': - description: A successful response. - schema: - type: object - properties: - validators: - type: array - items: - type: string - description: >- - validators defines the validators a delegator is delegating - for. - description: |- - QueryDelegatorValidatorsResponse is the response type for the - Query/DelegatorValidators RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: delegatorAddress - description: delegator_address defines the delegator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/distribution/v1beta1/delegators/{delegatorAddress}/withdraw_address': - get: - summary: DelegatorWithdrawAddress queries withdraw address of a delegator. - operationId: CosmosDistributionV1Beta1DelegatorWithdrawAddress - responses: - '200': - description: A successful response. - schema: - type: object - properties: - withdrawAddress: - type: string - description: withdraw_address defines the delegator address to query for. - description: |- - QueryDelegatorWithdrawAddressResponse is the response type for the - Query/DelegatorWithdrawAddress RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: delegatorAddress - description: delegator_address defines the delegator address to query for. - in: path - required: true - type: string - tags: - - Query - /cosmos/distribution/v1beta1/params: - get: - summary: Params queries params of the distribution module. - operationId: CosmosDistributionV1Beta1Params - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - communityTax: - type: string - baseProposerReward: - type: string - bonusProposerReward: - type: string - withdrawAddrEnabled: - type: boolean - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - tags: - - Query - '/cosmos/distribution/v1beta1/validators/{validatorAddress}/commission': - get: - summary: ValidatorCommission queries accumulated commission for a validator. - operationId: CosmosDistributionV1Beta1ValidatorCommission - responses: - '200': - description: A successful response. - schema: - type: object - properties: - commission: - description: commission defines the commision the validator received. - type: object - properties: - commission: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a - decimal amount. - - - NOTE: The amount field is an Dec which implements the - custom method - - signatures required by gogoproto. - title: |- - QueryValidatorCommissionResponse is the response type for the - Query/ValidatorCommission RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: validatorAddress - description: validator_address defines the validator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/distribution/v1beta1/validators/{validatorAddress}/outstanding_rewards': - get: - summary: ValidatorOutstandingRewards queries rewards of a validator address. - operationId: CosmosDistributionV1Beta1ValidatorOutstandingRewards - responses: - '200': - description: A successful response. - schema: - type: object - properties: - rewards: - type: object - properties: - rewards: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a - decimal amount. - - - NOTE: The amount field is an Dec which implements the - custom method - - signatures required by gogoproto. - description: >- - ValidatorOutstandingRewards represents outstanding - (un-withdrawn) rewards - - for a validator inexpensive to track, allows simple sanity - checks. - description: >- - QueryValidatorOutstandingRewardsResponse is the response type for - the - - Query/ValidatorOutstandingRewards RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: validatorAddress - description: validator_address defines the validator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/distribution/v1beta1/validators/{validatorAddress}/slashes': - get: - summary: ValidatorSlashes queries slash events of a validator. - operationId: CosmosDistributionV1Beta1ValidatorSlashes - responses: - '200': - description: A successful response. - schema: - type: object - properties: - slashes: - type: array - items: - type: object - properties: - validatorPeriod: - type: string - format: uint64 - fraction: - type: string - description: >- - ValidatorSlashEvent represents a validator slash event. - - Height is implicit within the store key. - - This is needed to calculate appropriate amount of staking - tokens - - for delegations which are withdrawn after a slash has - occurred. - description: slashes defines the slashes the validator received. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryValidatorSlashesResponse is the response type for the - Query/ValidatorSlashes RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: validatorAddress - description: validator_address defines the validator address to query for. - in: path - required: true - type: string - - name: startingHeight - description: >- - starting_height defines the optional starting height to query the - slashes. - in: query - required: false - type: string - format: uint64 - - name: endingHeight - description: >- - starting_height defines the optional ending height to query the - slashes. - in: query - required: false - type: string - format: uint64 - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - /cosmos/evidence/v1beta1/evidence: - get: - summary: AllEvidence queries all evidence. - operationId: CosmosEvidenceV1Beta1AllEvidence - responses: - '200': - description: A successful response. - schema: - type: object - properties: - evidence: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: evidence returns all evidences. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryAllEvidenceResponse is the response type for the - Query/AllEvidence RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/evidence/v1beta1/evidence/{evidenceHash}': - get: - summary: Evidence queries evidence based on evidence hash. - operationId: CosmosEvidenceV1Beta1Evidence - responses: - '200': - description: A successful response. - schema: - type: object - properties: - evidence: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - QueryEvidenceResponse is the response type for the Query/Evidence - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: evidenceHash - description: evidence_hash defines the hash of the requested evidence. - in: path - required: true - type: string - format: byte - tags: - - Query - '/cosmos/gov/v1beta1/params/{paramsType}': - get: - summary: Params queries all parameters of the gov module. - operationId: CosmosGovV1Beta1Params - responses: - '200': - description: A successful response. - schema: - type: object - properties: - votingParams: - description: voting_params defines the parameters related to voting. - type: object - properties: - votingPeriod: - type: string - description: Length of the voting period. - depositParams: - description: deposit_params defines the parameters related to deposit. - type: object - properties: - minDeposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: Minimum deposit for a proposal to enter voting period. - maxDepositPeriod: - type: string - description: >- - Maximum period for Atom holders to deposit on a proposal. - Initial value: 2 - months. - tallyParams: - description: tally_params defines the parameters related to tally. - type: object - properties: - quorum: - type: string - format: byte - description: >- - Minimum percentage of total stake needed to vote for a - result to be - considered valid. - threshold: - type: string - format: byte - description: >- - Minimum proportion of Yes votes for proposal to pass. - Default value: 0.5. - vetoThreshold: - type: string - format: byte - description: >- - Minimum value of Veto votes to Total votes ratio for - proposal to be - vetoed. Default value: 1/3. - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: paramsType - description: >- - params_type defines which parameters to query for, can be one of - "voting", - - "tallying" or "deposit". - in: path - required: true - type: string - tags: - - Query - /cosmos/gov/v1beta1/proposals: - get: - summary: Proposals queries all proposals based on given status. - operationId: CosmosGovV1Beta1Proposals - responses: - '200': - description: A successful response. - schema: - type: object - properties: - proposals: - type: array - items: - type: object - properties: - proposalId: - type: string - format: uint64 - content: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - status: - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - description: >- - ProposalStatus enumerates the valid statuses of a - proposal. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - finalTallyResult: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - noWithVeto: - type: string - description: >- - TallyResult defines a standard tally for a governance - proposal. - submitTime: - type: string - format: date-time - depositEndTime: - type: string - format: date-time - totalDeposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - votingStartTime: - type: string - format: date-time - votingEndTime: - type: string - format: date-time - description: >- - Proposal defines the core field members of a governance - proposal. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryProposalsResponse is the response type for the - Query/Proposals RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: proposalStatus - description: |- - proposal_status defines the status of the proposals. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - in: query - required: false - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - - name: voter - description: voter defines the voter address for the proposals. - in: query - required: false - type: string - - name: depositor - description: depositor defines the deposit addresses from the proposals. - in: query - required: false - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposalId}': - get: - summary: Proposal queries proposal details based on ProposalID. - operationId: CosmosGovV1Beta1Proposal - responses: - '200': - description: A successful response. - schema: - type: object - properties: - proposal: - type: object - properties: - proposalId: - type: string - format: uint64 - content: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - status: - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - description: >- - ProposalStatus enumerates the valid statuses of a - proposal. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - finalTallyResult: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - noWithVeto: - type: string - description: >- - TallyResult defines a standard tally for a governance - proposal. - submitTime: - type: string - format: date-time - depositEndTime: - type: string - format: date-time - totalDeposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - votingStartTime: - type: string - format: date-time - votingEndTime: - type: string - format: date-time - description: >- - Proposal defines the core field members of a governance - proposal. - description: >- - QueryProposalResponse is the response type for the Query/Proposal - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: proposalId - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposalId}/deposits': - get: - summary: Deposits queries all deposits of a single proposal. - operationId: CosmosGovV1Beta1Deposits - responses: - '200': - description: A successful response. - schema: - type: object - properties: - deposits: - type: array - items: - type: object - properties: - proposalId: - type: string - format: uint64 - depositor: - type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: >- - Deposit defines an amount deposited by an account address to - an active - - proposal. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryDepositsResponse is the response type for the Query/Deposits - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: proposalId - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposalId}/deposits/{depositor}': - get: - summary: >- - Deposit queries single deposit information based proposalID, - depositAddr. - operationId: CosmosGovV1Beta1Deposit - responses: - '200': - description: A successful response. - schema: - type: object - properties: - deposit: - type: object - properties: - proposalId: - type: string - format: uint64 - depositor: - type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: >- - Deposit defines an amount deposited by an account address to - an active - - proposal. - description: >- - QueryDepositResponse is the response type for the Query/Deposit - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: proposalId - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - - name: depositor - description: depositor defines the deposit addresses from the proposals. - in: path - required: true - type: string - tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposalId}/tally': - get: - summary: TallyResult queries the tally of a proposal vote. - operationId: CosmosGovV1Beta1TallyResult - responses: - '200': - description: A successful response. - schema: - type: object - properties: - tally: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - noWithVeto: - type: string - description: >- - TallyResult defines a standard tally for a governance - proposal. - description: >- - QueryTallyResultResponse is the response type for the Query/Tally - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: proposalId - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposalId}/votes': - get: - summary: Votes queries votes of a given proposal. - operationId: CosmosGovV1Beta1Votes - responses: - '200': - description: A successful response. - schema: - type: object - properties: - votes: - type: array - items: - type: object - properties: - proposalId: - type: string - format: uint64 - voter: - type: string - option: - type: string - enum: - - VOTE_OPTION_UNSPECIFIED - - VOTE_OPTION_YES - - VOTE_OPTION_ABSTAIN - - VOTE_OPTION_NO - - VOTE_OPTION_NO_WITH_VETO - default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given - governance proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. - description: >- - Vote defines a vote on a governance proposal. - - A Vote consists of a proposal ID, the voter, and the vote - option. - description: votes defined the queried votes. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryVotesResponse is the response type for the Query/Votes RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: proposalId - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposalId}/votes/{voter}': - get: - summary: 'Vote queries voted information based on proposalID, voterAddr.' - operationId: CosmosGovV1Beta1Vote - responses: - '200': - description: A successful response. - schema: - type: object - properties: - vote: - type: object - properties: - proposalId: - type: string - format: uint64 - voter: - type: string - option: - type: string - enum: - - VOTE_OPTION_UNSPECIFIED - - VOTE_OPTION_YES - - VOTE_OPTION_ABSTAIN - - VOTE_OPTION_NO - - VOTE_OPTION_NO_WITH_VETO - default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given - governance proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. - description: >- - Vote defines a vote on a governance proposal. - - A Vote consists of a proposal ID, the voter, and the vote - option. - description: >- - QueryVoteResponse is the response type for the Query/Vote RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: proposalId - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - - name: voter - description: voter defines the oter address for the proposals. - in: path - required: true - type: string - tags: - - Query - /cosmos/slashing/v1beta1/params: - get: - summary: Params queries the parameters of slashing module - operationId: CosmosSlashingV1Beta1Params - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - type: object - properties: - signedBlocksWindow: - type: string - format: int64 - minSignedPerWindow: - type: string - format: byte - downtimeJailDuration: - type: string - slashFractionDoubleSign: - type: string - format: byte - slashFractionDowntime: - type: string - format: byte - description: >- - Params represents the parameters used for by the slashing - module. - title: >- - QueryParamsResponse is the response type for the Query/Params RPC - method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - tags: - - Query - /cosmos/slashing/v1beta1/signing_infos: - get: - summary: SigningInfos queries signing info of all validators - operationId: CosmosSlashingV1Beta1SigningInfos - responses: - '200': - description: A successful response. - schema: - type: object - properties: - info: - type: array - items: - type: object - properties: - address: - type: string - startHeight: - type: string - format: int64 - title: >- - height at which validator was first a candidate OR was - unjailed - indexOffset: - type: string - format: int64 - title: index offset into signed block bit array - jailedUntil: - type: string - format: date-time - title: timestamp validator cannot be unjailed until - tombstoned: - type: boolean - title: >- - whether or not a validator has been tombstoned (killed - out of validator - - set) - missedBlocksCounter: - type: string - format: int64 - title: >- - missed blocks counter (to avoid scanning the array every - time) - description: >- - ValidatorSigningInfo defines a validator's signing info for - monitoring their - - liveness activity. - title: info is the signing info of all validators - pagination: - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: >- - QuerySigningInfosResponse is the response type for the - Query/SigningInfos RPC - - method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/slashing/v1beta1/signing_infos/{consAddress}': - get: - summary: SigningInfo queries the signing info of given cons address - operationId: CosmosSlashingV1Beta1SigningInfo - responses: - '200': - description: A successful response. - schema: - type: object - properties: - valSigningInfo: - type: object - properties: - address: - type: string - startHeight: - type: string - format: int64 - title: >- - height at which validator was first a candidate OR was - unjailed - indexOffset: - type: string - format: int64 - title: index offset into signed block bit array - jailedUntil: - type: string - format: date-time - title: timestamp validator cannot be unjailed until - tombstoned: - type: boolean - title: >- - whether or not a validator has been tombstoned (killed out - of validator - - set) - missedBlocksCounter: - type: string - format: int64 - title: >- - missed blocks counter (to avoid scanning the array every - time) - description: >- - ValidatorSigningInfo defines a validator's signing info for - monitoring their - - liveness activity. - title: >- - val_signing_info is the signing info of requested val cons - address - title: >- - QuerySigningInfoResponse is the response type for the - Query/SigningInfo RPC - - method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: consAddress - description: cons_address is the address to query signing info of - in: path - required: true - type: string - tags: - - Query - '/cosmos/staking/v1beta1/delegations/{delegatorAddr}': - get: - summary: >- - DelegatorDelegations queries all delegations of a given delegator - address. - operationId: CosmosStakingV1Beta1DelegatorDelegations - responses: - '200': - description: A successful response. - schema: - type: object - properties: - delegationResponses: - type: array - items: - type: object - properties: - delegation: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of - the delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of - the validator. - shares: - type: string - description: shares define the delegation shares received. - description: >- - Delegation represents the bond with tokens held by an - account. It is - - owned by one delegator, and is associated with the - voting power of one - - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that - it contains a - - balance in addition to shares which is more suitable for - client responses. - description: >- - delegation_responses defines all the delegations' info of a - delegator. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryDelegatorDelegationsResponse is response type for the - Query/DelegatorDelegations RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: delegatorAddr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/staking/v1beta1/delegators/{delegatorAddr}/redelegations': - get: - summary: Redelegations queries redelegations of given address. - operationId: CosmosStakingV1Beta1Redelegations - responses: - '200': - description: A successful response. - schema: - type: object - properties: - redelegationResponses: - type: array - items: - type: object - properties: - redelegation: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of - the delegator. - validatorSrcAddress: - type: string - description: >- - validator_src_address is the validator redelegation - source operator address. - validatorDstAddress: - type: string - description: >- - validator_dst_address is the validator redelegation - destination operator address. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height defines the height which the - redelegation took place. - completionTime: - type: string - format: date-time - description: >- - completion_time defines the unix time for - redelegation completion. - initialBalance: - type: string - description: >- - initial_balance defines the initial balance - when redelegation started. - sharesDst: - type: string - description: >- - shares_dst is the amount of - destination-validator shares created by - redelegation. - description: >- - RedelegationEntry defines a redelegation object - with relevant metadata. - description: entries are the redelegation entries. - description: >- - Redelegation contains the list of a particular - delegator's redelegating bonds - - from a particular source validator to a particular - destination validator. - entries: - type: array - items: - type: object - properties: - redelegationEntry: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height defines the height which the - redelegation took place. - completionTime: - type: string - format: date-time - description: >- - completion_time defines the unix time for - redelegation completion. - initialBalance: - type: string - description: >- - initial_balance defines the initial balance - when redelegation started. - sharesDst: - type: string - description: >- - shares_dst is the amount of - destination-validator shares created by - redelegation. - description: >- - RedelegationEntry defines a redelegation object - with relevant metadata. - balance: - type: string - description: >- - RedelegationEntryResponse is equivalent to a - RedelegationEntry except that it - - contains a balance in addition to shares which is more - suitable for client - - responses. - description: >- - RedelegationResponse is equivalent to a Redelegation except - that its entries - - contain a balance in addition to shares which is more - suitable for client - - responses. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryRedelegationsResponse is response type for the - Query/Redelegations RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: delegatorAddr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: srcValidatorAddr - description: src_validator_addr defines the validator address to redelegate from. - in: query - required: false - type: string - - name: dstValidatorAddr - description: dst_validator_addr defines the validator address to redelegate to. - in: query - required: false - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/staking/v1beta1/delegators/{delegatorAddr}/unbonding_delegations': - get: - summary: >- - DelegatorUnbondingDelegations queries all unbonding delegations of a - given - - delegator address. - operationId: CosmosStakingV1Beta1DelegatorUnbondingDelegations - responses: - '200': - description: A successful response. - schema: - type: object - properties: - unbondingResponses: - type: array - items: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height is the height which the unbonding - took place. - completionTime: - type: string - format: date-time - description: >- - completion_time is the unix time for unbonding - completion. - initialBalance: - type: string - description: >- - initial_balance defines the tokens initially - scheduled to receive at completion. - balance: - type: string - description: >- - balance defines the tokens to receive at - completion. - description: >- - UnbondingDelegationEntry defines an unbonding object - with relevant metadata. - description: entries are the unbonding delegation entries. - description: >- - UnbondingDelegation stores all of a single delegator's - unbonding bonds - - for a single validator in an time-ordered list. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryUnbondingDelegatorDelegationsResponse is response type for - the - - Query/UnbondingDelegatorDelegations RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: delegatorAddr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators': - get: - summary: |- - DelegatorValidators queries all validators info for given delegator - address. - operationId: CosmosStakingV1Beta1DelegatorValidators - responses: - '200': - description: A successful response. - schema: - type: object - properties: - validators: - type: array - items: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's - operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed - from bonded status or not. - status: - description: >- - status is the validator status - (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: >- - tokens define the delegated tokens (incl. - self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a - validator's delegators. - description: - description: >- - description defines the description terms for the - validator. - type: object - properties: - moniker: - type: string - description: >- - moniker defines a human-readable name for the - validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. - UPort or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for - security contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at - which this validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for - the validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission - rates to be used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to - delegators, as a fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate - which validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily - increase of the validator commission, as a - fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate was - changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared - minimum self delegation. - description: >- - Validator defines a validator, together with the total - amount of the - - Validator's bond shares and their exchange rate to coins. - Slashing results in - - a decrease in the exchange rate, allowing correct - calculation of future - - undelegations without iterating over delegators. When coins - are delegated to - - this validator, the validator is credited with a delegation - whose number of - - bond shares is based on the amount of coins delegated - divided by the current - - exchange rate. Voting power can be calculated as total - bonded shares - - multiplied by exchange rate. - description: validators defines the the validators' info of a delegator. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryDelegatorValidatorsResponse is response type for the - Query/DelegatorValidators RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: delegatorAddr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators/{validatorAddr}': - get: - summary: |- - DelegatorValidator queries validator info for given delegator validator - pair. - operationId: CosmosStakingV1Beta1DelegatorValidator - responses: - '200': - description: A successful response. - schema: - type: object - properties: - validator: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's - operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from - bonded status or not. - status: - description: >- - status is the validator status - (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: >- - tokens define the delegated tokens (incl. - self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a - validator's delegators. - description: - description: >- - description defines the description terms for the - validator. - type: object - properties: - moniker: - type: string - description: >- - moniker defines a human-readable name for the - validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. - UPort or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for - security contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at - which this validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the - validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates - to be used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, - as a fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which - validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase - of the validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate was - changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared - minimum self delegation. - description: >- - Validator defines a validator, together with the total amount - of the - - Validator's bond shares and their exchange rate to coins. - Slashing results in - - a decrease in the exchange rate, allowing correct calculation - of future - - undelegations without iterating over delegators. When coins - are delegated to - - this validator, the validator is credited with a delegation - whose number of - - bond shares is based on the amount of coins delegated divided - by the current - - exchange rate. Voting power can be calculated as total bonded - shares - - multiplied by exchange rate. - description: |- - QueryDelegatorValidatorResponse response type for the - Query/DelegatorValidator RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: delegatorAddr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: validatorAddr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/staking/v1beta1/historical_info/{height}': - get: - summary: HistoricalInfo queries the historical info for given height. - operationId: CosmosStakingV1Beta1HistoricalInfo - responses: - '200': - description: A successful response. - schema: - type: object - properties: - hist: - description: hist defines the historical info at the given height. - type: object - properties: - header: - type: object - properties: - version: - title: basic block info - type: object - properties: - block: - type: string - format: uint64 - app: - type: string - format: uint64 - description: >- - Consensus captures the consensus rules for processing - a block in the blockchain, - - including all blockchain data structures and the rules - of the application's - - state transition machine. - chainId: - type: string - height: - type: string - format: int64 - time: - type: string - format: date-time - lastBlockId: - title: prev block info - type: object - properties: - hash: - type: string - format: byte - partSetHeader: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - lastCommitHash: - type: string - format: byte - title: hashes of block data - dataHash: - type: string - format: byte - validatorsHash: - type: string - format: byte - title: hashes from the app output from the prev block - nextValidatorsHash: - type: string - format: byte - consensusHash: - type: string - format: byte - appHash: - type: string - format: byte - lastResultsHash: - type: string - format: byte - evidenceHash: - type: string - format: byte - title: consensus info - proposerAddress: - type: string - format: byte - description: Header defines the structure of a Tendermint block header. - valset: - type: array - items: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the - validator's operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must - contain at least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name - should be in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, - for URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message - definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup - results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently - available in the official - - protobuf release, and it is not used for type - URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of - the above specified type. - description: >- - `Any` contains an arbitrary serialized protocol - buffer message along with a - - URL that describes the type of the serialized - message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods - of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will - by default use - - 'type.googleapis.com/full.type.name' as the type URL - and the unpack - - methods only use the fully qualified type name after - the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" - will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded - message, with an - - additional field `@type` which contains the type - URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to - the `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed - from bonded status or not. - status: - description: >- - status is the validator status - (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: >- - tokens define the delegated tokens (incl. - self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a - validator's delegators. - description: - description: >- - description defines the description terms for the - validator. - type: object - properties: - moniker: - type: string - description: >- - moniker defines a human-readable name for the - validator. - identity: - type: string - description: >- - identity defines an optional identity signature - (ex. UPort or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for - security contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height - at which this validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time - for the validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission - rates to be used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to - delegators, as a fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate - which validator can ever charge, as a - fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily - increase of the validator commission, as a - fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate - was changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared - minimum self delegation. - description: >- - Validator defines a validator, together with the total - amount of the - - Validator's bond shares and their exchange rate to - coins. Slashing results in - - a decrease in the exchange rate, allowing correct - calculation of future - - undelegations without iterating over delegators. When - coins are delegated to - - this validator, the validator is credited with a - delegation whose number of - - bond shares is based on the amount of coins delegated - divided by the current - - exchange rate. Voting power can be calculated as total - bonded shares - - multiplied by exchange rate. - description: >- - QueryHistoricalInfoResponse is response type for the - Query/HistoricalInfo RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: height - description: height defines at which height to query the historical info. - in: path - required: true - type: string - format: int64 - tags: - - Query - /cosmos/staking/v1beta1/params: - get: - summary: Parameters queries the staking parameters. - operationId: CosmosStakingV1Beta1Params - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params holds all the parameters of this module. - type: object - properties: - unbondingTime: - type: string - description: unbonding_time is the time duration of unbonding. - maxValidators: - type: integer - format: int64 - description: max_validators is the maximum number of validators. - maxEntries: - type: integer - format: int64 - description: >- - max_entries is the max entries for either unbonding - delegation or redelegation (per pair/trio). - historicalEntries: - type: integer - format: int64 - description: >- - historical_entries is the number of historical entries to - persist. - bondDenom: - type: string - description: bond_denom defines the bondable coin denomination. - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query - /cosmos/staking/v1beta1/pool: - get: - summary: Pool queries the pool info. - operationId: CosmosStakingV1Beta1Pool - responses: - '200': - description: A successful response. - schema: - type: object - properties: - pool: - description: pool defines the pool info. - type: object - properties: - notBondedTokens: - type: string - bondedTokens: - type: string - description: QueryPoolResponse is response type for the Query/Pool RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query - /cosmos/staking/v1beta1/validators: - get: - summary: Validators queries all validators that match the given status. - operationId: CosmosStakingV1Beta1Validators - responses: - '200': - description: A successful response. - schema: - type: object - properties: - validators: - type: array - items: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's - operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed - from bonded status or not. - status: - description: >- - status is the validator status - (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: >- - tokens define the delegated tokens (incl. - self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a - validator's delegators. - description: - description: >- - description defines the description terms for the - validator. - type: object - properties: - moniker: - type: string - description: >- - moniker defines a human-readable name for the - validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. - UPort or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for - security contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at - which this validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for - the validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission - rates to be used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to - delegators, as a fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate - which validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily - increase of the validator commission, as a - fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate was - changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared - minimum self delegation. - description: >- - Validator defines a validator, together with the total - amount of the - - Validator's bond shares and their exchange rate to coins. - Slashing results in - - a decrease in the exchange rate, allowing correct - calculation of future - - undelegations without iterating over delegators. When coins - are delegated to - - this validator, the validator is credited with a delegation - whose number of - - bond shares is based on the amount of coins delegated - divided by the current - - exchange rate. Voting power can be calculated as total - bonded shares - - multiplied by exchange rate. - description: validators contains all the queried validators. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: >- - QueryValidatorsResponse is response type for the Query/Validators - RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: status - description: status enables to query for validators matching a given status. - in: query - required: false - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/staking/v1beta1/validators/{validatorAddr}': - get: - summary: Validator queries validator info for given validator address. - operationId: CosmosStakingV1Beta1Validator - responses: - '200': - description: A successful response. - schema: - type: object - properties: - validator: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's - operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from - bonded status or not. - status: - description: >- - status is the validator status - (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: >- - tokens define the delegated tokens (incl. - self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a - validator's delegators. - description: - description: >- - description defines the description terms for the - validator. - type: object - properties: - moniker: - type: string - description: >- - moniker defines a human-readable name for the - validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. - UPort or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for - security contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at - which this validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the - validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates - to be used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, - as a fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which - validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase - of the validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate was - changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared - minimum self delegation. - description: >- - Validator defines a validator, together with the total amount - of the - - Validator's bond shares and their exchange rate to coins. - Slashing results in - - a decrease in the exchange rate, allowing correct calculation - of future - - undelegations without iterating over delegators. When coins - are delegated to - - this validator, the validator is credited with a delegation - whose number of - - bond shares is based on the amount of coins delegated divided - by the current - - exchange rate. Voting power can be calculated as total bonded - shares - - multiplied by exchange rate. - title: >- - QueryValidatorResponse is response type for the Query/Validator - RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: validatorAddr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations': - get: - summary: ValidatorDelegations queries delegate info for given validator. - operationId: CosmosStakingV1Beta1ValidatorDelegations - responses: - '200': - description: A successful response. - schema: - type: object - properties: - delegationResponses: - type: array - items: - type: object - properties: - delegation: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of - the delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of - the validator. - shares: - type: string - description: shares define the delegation shares received. - description: >- - Delegation represents the bond with tokens held by an - account. It is - - owned by one delegator, and is associated with the - voting power of one - - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that - it contains a - - balance in addition to shares which is more suitable for - client responses. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: |- - QueryValidatorDelegationsResponse is response type for the - Query/ValidatorDelegations RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: validatorAddr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr}': - get: - summary: Delegation queries delegate info for given validator delegator pair. - operationId: CosmosStakingV1Beta1Delegation - responses: - '200': - description: A successful response. - schema: - type: object - properties: - delegationResponse: - type: object - properties: - delegation: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - shares: - type: string - description: shares define the delegation shares received. - description: >- - Delegation represents the bond with tokens held by an - account. It is - - owned by one delegator, and is associated with the voting - power of one - - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that it - contains a - - balance in addition to shares which is more suitable for - client responses. - description: >- - QueryDelegationResponse is response type for the Query/Delegation - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: validatorAddr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - - name: delegatorAddr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr}/unbonding_delegation': - get: - summary: |- - UnbondingDelegation queries unbonding info for given validator delegator - pair. - operationId: CosmosStakingV1Beta1UnbondingDelegation - responses: - '200': - description: A successful response. - schema: - type: object - properties: - unbond: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height is the height which the unbonding - took place. - completionTime: - type: string - format: date-time - description: >- - completion_time is the unix time for unbonding - completion. - initialBalance: - type: string - description: >- - initial_balance defines the tokens initially - scheduled to receive at completion. - balance: - type: string - description: balance defines the tokens to receive at completion. - description: >- - UnbondingDelegationEntry defines an unbonding object - with relevant metadata. - description: entries are the unbonding delegation entries. - description: >- - UnbondingDelegation stores all of a single delegator's - unbonding bonds - - for a single validator in an time-ordered list. - description: >- - QueryDelegationResponse is response type for the - Query/UnbondingDelegation - - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: validatorAddr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - - name: delegatorAddr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/staking/v1beta1/validators/{validatorAddr}/unbonding_delegations': - get: - summary: >- - ValidatorUnbondingDelegations queries unbonding delegations of a - validator. - operationId: CosmosStakingV1Beta1ValidatorUnbondingDelegations - responses: - '200': - description: A successful response. - schema: - type: object - properties: - unbondingResponses: - type: array - items: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height is the height which the unbonding - took place. - completionTime: - type: string - format: date-time - description: >- - completion_time is the unix time for unbonding - completion. - initialBalance: - type: string - description: >- - initial_balance defines the tokens initially - scheduled to receive at completion. - balance: - type: string - description: >- - balance defines the tokens to receive at - completion. - description: >- - UnbondingDelegationEntry defines an unbonding object - with relevant metadata. - description: entries are the unbonding delegation entries. - description: >- - UnbondingDelegation stores all of a single delegator's - unbonding bonds - - for a single validator in an time-ordered list. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryValidatorUnbondingDelegationsResponse is response type for - the - - Query/ValidatorUnbondingDelegations RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: validatorAddr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - /ibc/applications/transfer/v1beta1/denom_traces: - get: - summary: DenomTraces queries all denomination traces. - operationId: IbcApplicationsTransferV1DenomTraces - responses: - '200': - description: A successful response. - schema: - type: object - properties: - denomTraces: - type: array - items: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. - baseDenom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the - - source tracing information path. - description: denom_traces returns all denominations trace information. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryConnectionsResponse is the response type for the - Query/DenomTraces RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/ibc/applications/transfer/v1beta1/denom_traces/{hash}': - get: - summary: DenomTrace queries a denomination trace information. - operationId: IbcApplicationsTransferV1DenomTrace - responses: - '200': - description: A successful response. - schema: - type: object - properties: - denomTrace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. - baseDenom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the - - source tracing information path. - description: >- - QueryDenomTraceResponse is the response type for the - Query/DenomTrace RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: hash - description: hash (in hex format) of the denomination trace information. - in: path - required: true - type: string - tags: - - Query - /ibc/applications/transfer/v1beta1/params: - get: - summary: Params queries all parameters of the ibc-transfer module. - operationId: IbcApplicationsTransferV1Params - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - sendEnabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token - transfers from this - - chain. - receiveEnabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token - transfers to this - - chain. - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query - /ibc/core/channel/v1beta1/channels: - get: - summary: Channels queries all the IBC channels of a chain. - operationId: IbcCoreChannelV1Channels - responses: - '200': - description: A successful response. - schema: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channelId: - type: string - title: channel end on the counterparty chain - connectionHops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - portId: - type: string - title: port identifier - channelId: - type: string - title: channel identifier - description: >- - IdentifiedChannel defines a channel with additional port and - channel - - identifier fields. - description: list of stored channels of the chain. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - description: >- - QueryChannelsResponse is the response type for the Query/Channels - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}': - get: - summary: Channel queries an IBC Channel. - operationId: IbcCoreChannelV1Channel - responses: - '200': - description: A successful response. - schema: - type: object - properties: - channel: - title: channel associated with the request identifiers - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channelId: - type: string - title: channel end on the counterparty chain - connectionHops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - description: >- - Channel defines pipeline for exactly-once packet delivery - between specific - - modules on separate blockchains, which has at least one end - capable of - - sending packets and one end capable of receiving packets. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - description: >- - QueryChannelResponse is the response type for the Query/Channel - RPC method. - - Besides the Channel end, it includes a proof and the height from - which the - - proof was retrieved. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/client_state': - get: - summary: >- - ChannelClientState queries for the client state for the channel - associated - - with the provided channel identifiers. - operationId: IbcCoreChannelV1ChannelClientState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - identifiedClientState: - title: client state associated with the channel - type: object - properties: - clientId: - type: string - title: client identifier - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/consensus_state/revision/{revisionNumber}/height/{revisionHeight}': - get: - summary: |- - ChannelConsensusState queries for the consensus state for the channel - associated with the provided channel identifiers. - operationId: IbcCoreChannelV1ChannelConsensusState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state associated with the channel - clientId: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - - name: revisionNumber - description: revision number of the consensus state - in: path - required: true - type: string - format: uint64 - - name: revisionHeight - description: revision height of the consensus state - in: path - required: true - type: string - format: uint64 - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/next_sequence': - get: - summary: >- - NextSequenceReceive returns the next receive sequence for a given - channel. - operationId: IbcCoreChannelV1NextSequenceReceive - responses: - '200': - description: A successful response. - schema: - type: object - properties: - nextSequenceReceive: - type: string - format: uint64 - title: next sequence receive number - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QuerySequenceResponse is the request type for the - Query/QueryNextSequenceReceiveResponse RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/packet_acknowledgements': - get: - summary: >- - PacketAcknowledgements returns all the packet acknowledgements - associated - - with a channel. - operationId: IbcCoreChannelV1PacketAcknowledgements - responses: - '200': - description: A successful response. - schema: - type: object - properties: - acknowledgements: - type: array - items: - type: object - properties: - portId: - type: string - description: channel port identifier. - channelId: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve - and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to - interpret this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryPacketAcknowledgemetsResponse is the request type for the - Query/QueryPacketAcknowledgements RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/packet_acks/{sequence}': - get: - summary: PacketAcknowledgement queries a stored packet acknowledgement hash. - operationId: IbcCoreChannelV1PacketAcknowledgement - responses: - '200': - description: A successful response. - schema: - type: object - properties: - acknowledgement: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: >- - QueryPacketAcknowledgementResponse defines the client query - response for a - - packet which also includes a proof and the height from which the - - proof was retrieved - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - - name: sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/packet_commitments': - get: - summary: |- - PacketCommitments returns all the packet commitments hashes associated - with a channel. - operationId: IbcCoreChannelV1PacketCommitments - responses: - '200': - description: A successful response. - schema: - type: object - properties: - commitments: - type: array - items: - type: object - properties: - portId: - type: string - description: channel port identifier. - channelId: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve - and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to - interpret this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryPacketCommitmentsResponse is the request type for the - Query/QueryPacketCommitments RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/packet_commitments/{packetAckSequences}/unreceived_acks': - get: - summary: >- - UnreceivedAcks returns all the unreceived IBC acknowledgements - associated with a - - channel and sequences. - operationId: IbcCoreChannelV1UnreceivedAcks - responses: - '200': - description: A successful response. - schema: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived acknowledgement sequences - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryUnreceivedAcksResponse is the response type for the - Query/UnreceivedAcks RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - - name: packetAckSequences - description: list of acknowledgement sequences - in: path - required: true - type: array - items: - type: string - format: uint64 - collectionFormat: csv - minItems: 1 - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/packet_commitments/{packetCommitmentSequences}/unreceived_packets': - get: - summary: >- - UnreceivedPackets returns all the unreceived IBC packets associated with - a - - channel and sequences. - operationId: IbcCoreChannelV1UnreceivedPackets - responses: - '200': - description: A successful response. - schema: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived packet sequences - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryUnreceivedPacketsResponse is the response type for the - Query/UnreceivedPacketCommitments RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - - name: packetCommitmentSequences - description: list of packet sequences - in: path - required: true - type: array - items: - type: string - format: uint64 - collectionFormat: csv - minItems: 1 - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/packet_commitments/{sequence}': - get: - summary: PacketCommitment queries a stored packet commitment hash. - operationId: IbcCoreChannelV1PacketCommitment - responses: - '200': - description: A successful response. - schema: - type: object - properties: - commitment: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: >- - QueryPacketCommitmentResponse defines the client query response - for a packet - - which also includes a proof and the height from which the proof - was - - retrieved - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - - name: sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - '/ibc/core/channel/v1beta1/channels/{channelId}/ports/{portId}/packet_receipts/{sequence}': - get: - summary: >- - PacketReceipt queries if a given packet sequence has been received on - the queried chain - operationId: IbcCoreChannelV1PacketReceipt - responses: - '200': - description: A successful response. - schema: - type: object - properties: - received: - type: boolean - title: success flag for if receipt exists - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: >- - QueryPacketReceiptResponse defines the client query response for a - packet receipt - - which also includes a proof, and the height from which the proof - was - - retrieved - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: channelId - description: channel unique identifier - in: path - required: true - type: string - - name: portId - description: port unique identifier - in: path - required: true - type: string - - name: sequence - description: packet sequence - in: path - required: true - type: string - format: uint64 - tags: - - Query - '/ibc/core/channel/v1beta1/connections/{connection}/channels': - get: - summary: |- - ConnectionChannels queries all the channels associated with a connection - end. - operationId: IbcCoreChannelV1ConnectionChannels - responses: - '200': - description: A successful response. - schema: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channelId: - type: string - title: channel end on the counterparty chain - connectionHops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - portId: - type: string - title: port identifier - channelId: - type: string - title: channel identifier - description: >- - IdentifiedChannel defines a channel with additional port and - channel - - identifier fields. - description: list of channels associated with a connection. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryConnectionChannelsResponse is the Response type for the - Query/QueryConnectionChannels RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection - description: connection unique identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - /ibc/client/v1beta1/params: - get: - summary: ClientParams queries all parameters of the ibc client. - operationId: IbcCoreClientV1ClientParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - allowedClients: - type: array - items: - type: string - description: >- - allowed_clients defines the list of allowed client state - types. - description: >- - QueryClientParamsResponse is the response type for the - Query/ClientParams RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - tags: - - Query - /ibc/core/client/v1beta1/client_states: - get: - summary: ClientStates queries all the IBC light clients of a chain. - operationId: IbcCoreClientV1ClientStates - responses: - '200': - description: A successful response. - schema: - type: object - properties: - clientStates: - type: array - items: - type: object - properties: - clientId: - type: string - title: client identifier - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - description: list of stored ClientStates of the chain. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - description: >- - QueryClientStatesResponse is the response type for the - Query/ClientStates RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/ibc/core/client/v1beta1/client_states/{clientId}': - get: - summary: ClientState queries an IBC light client. - operationId: IbcCoreClientV1ClientState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state associated with the request identifier - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - description: >- - QueryClientStateResponse is the response type for the - Query/ClientState RPC - - method. Besides the client state, it includes a proof and the - height from - - which the proof was retrieved. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: clientId - description: client state unique identifier - in: path - required: true - type: string - tags: - - Query - '/ibc/core/client/v1beta1/consensus_states/{clientId}': - get: - summary: |- - ConsensusStates queries all the consensus state associated with a given - client. - operationId: IbcCoreClientV1ConsensusStates - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensusStates: - type: array - items: - type: object - properties: - height: - title: consensus state height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each - height while keeping RevisionNumber - - the same. However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, - state-machine breaking changes - - In these cases, the RevisionNumber is incremented so - that height continues to - - be monitonically increasing even as the RevisionHeight - gets reset - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state - description: >- - ConsensusStateWithHeight defines a consensus state with an - additional height field. - title: consensus states associated with the identifier - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: |- - QueryConsensusStatesResponse is the response type for the - Query/ConsensusStates RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: clientId - description: client identifier - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/ibc/core/client/v1beta1/consensus_states/{clientId}/revision/{revisionNumber}/height/{revisionHeight}': - get: - summary: >- - ConsensusState queries a consensus state associated with a client state - at - - a given height. - operationId: IbcCoreClientV1ConsensusState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: >- - consensus state associated with the client identifier at the - given height - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: >- - QueryConsensusStateResponse is the response type for the - Query/ConsensusState - - RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: clientId - description: client identifier - in: path - required: true - type: string - - name: revisionNumber - description: consensus state revision number - in: path - required: true - type: string - format: uint64 - - name: revisionHeight - description: consensus state revision height - in: path - required: true - type: string - format: uint64 - - name: latestHeight - description: >- - latest_height overrrides the height field and queries the latest - stored - - ConsensusState. - in: query - required: false - type: boolean - tags: - - Query - '/ibc/core/connection/v1beta1/client_connections/{clientId}': - get: - summary: |- - ClientConnections queries the connection paths associated with a client - state. - operationId: IbcCoreConnectionV1ClientConnections - responses: - '200': - description: A successful response. - schema: - type: object - properties: - connectionPaths: - type: array - items: - type: string - description: slice of all the connection paths associated with a client. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was generated - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryClientConnectionsResponse is the response type for the - Query/ClientConnections RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: clientId - description: client identifier associated with a connection - in: path - required: true - type: string - tags: - - Query - /ibc/core/connection/v1beta1/connections: - get: - summary: Connections queries all the IBC connections of a chain. - operationId: IbcCoreConnectionV1Connections - responses: - '200': - description: A successful response. - schema: - type: object - properties: - connections: - type: array - items: - type: object - properties: - id: - type: string - description: connection identifier. - clientId: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: >- - list of features compatible with the specified - identifier - description: >- - Version defines the versioning scheme used to - negotiate the IBC verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings - or protocols for - - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - clientId: - type: string - description: >- - identifies the client on the counterparty chain - associated with a given - - connection. - connectionId: - type: string - description: >- - identifies the connection end on the counterparty - chain associated with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - keyPrefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will - be append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delayPeriod: - type: string - format: uint64 - description: delay period associated with this connection. - description: >- - IdentifiedConnection defines a connection with additional - connection - - identifier field. - description: list of stored connections of the chain. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - description: >- - QueryConnectionsResponse is the response type for the - Query/Connections RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/ibc/core/connection/v1beta1/connections/{connectionId}': - get: - summary: Connection queries an IBC connection end. - operationId: IbcCoreConnectionV1Connection - responses: - '200': - description: A successful response. - schema: - type: object - properties: - connection: - title: connection associated with the request identifier - type: object - properties: - clientId: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: >- - list of features compatible with the specified - identifier - description: >- - Version defines the versioning scheme used to negotiate - the IBC verison in - - the connection handshake. - description: >- - IBC version which can be utilised to determine encodings - or protocols for - - channels or packets utilising this connection. - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - clientId: - type: string - description: >- - identifies the client on the counterparty chain - associated with a given - - connection. - connectionId: - type: string - description: >- - identifies the connection end on the counterparty - chain associated with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - keyPrefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delayPeriod: - type: string - format: uint64 - description: >- - delay period that must pass before a consensus state can - be used for packet-verification - - NOTE: delay period logic is only implemented by some - clients. - description: >- - ConnectionEnd defines a stateful object on a chain connected - to another - - separate one. - - NOTE: there must only be 2 defined ConnectionEnds to establish - - a connection between two chains. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - description: >- - QueryConnectionResponse is the response type for the - Query/Connection RPC - - method. Besides the connection end, it includes a proof and the - height from - - which the proof was retrieved. - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connectionId - description: connection unique identifier - in: path - required: true - type: string - tags: - - Query - '/ibc/core/connection/v1beta1/connections/{connectionId}/client_state': - get: - summary: |- - ConnectionClientState queries the client state associated with the - connection. - operationId: IbcCoreConnectionV1ConnectionClientState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - identifiedClientState: - title: client state associated with the channel - type: object - properties: - clientId: - type: string - title: client identifier - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryConnectionClientStateResponse is the response type for the - Query/ConnectionClientState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connectionId - description: connection identifier - in: path - required: true - type: string - tags: - - Query - '/ibc/core/connection/v1beta1/connections/{connectionId}/consensus_state/revision/{revisionNumber}/height/{revisionHeight}': - get: - summary: |- - ConnectionConsensusState queries the consensus state associated with the - connection. - operationId: IbcCoreConnectionV1ConnectionConsensusState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state associated with the channel - clientId: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height - while keeping RevisionNumber - - the same. However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that - height continues to - - be monitonically increasing even as the RevisionHeight gets - reset - title: |- - QueryConnectionConsensusStateResponse is the response type for the - Query/ConnectionConsensusState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connectionId - description: connection identifier - in: path - required: true - type: string - - name: revisionNumber - in: path - required: true - type: string - format: uint64 - - name: revisionHeight - in: path - required: true - type: string - format: uint64 - tags: - - Query - /tendermint/spn/profile/coordinator: - get: - summary: Queries a list of coordinator items. - operationId: TendermintSpnProfileCoordinatorAll - responses: - '200': - description: A successful response. - schema: - type: object - properties: - Coordinator: - type: array - items: - type: object - properties: - coordinatorId: - type: string - format: uint64 - address: - type: string - description: - type: object - properties: - identity: - type: string - website: - type: string - details: - type: string - pagination: - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.countTotal - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/tendermint/spn/profile/coordinator/{id}': - get: - summary: Queries a coordinator by id. - operationId: TendermintSpnProfileCoordinator - responses: - '200': - description: A successful response. - schema: - type: object - properties: - Coordinator: - type: object - properties: - coordinatorId: - type: string - format: uint64 - address: - type: string - description: - type: object - properties: - identity: - type: string - website: - type: string - details: - type: string - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: id - in: path - required: true - type: string - format: uint64 - tags: - - Query - '/tendermint/spn/profile/coordinatorByAddress/{address}': - get: - summary: Queries a coordinatorByAddress by index. - operationId: TendermintSpnProfileCoordinatorByAddress - responses: - '200': - description: A successful response. - schema: - type: object - properties: - coordinatorByAddress: - type: object - properties: - address: - type: string - coordinatorId: - type: string - format: uint64 - default: - description: An unexpected error response. - schema: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - value: - type: string - format: byte - parameters: - - name: address - in: path - required: true - type: string - tags: - - Query -definitions: - cosmos.bank.v1beta1.DenomUnit: - type: object - properties: - denom: - type: string - description: denom represents the string name of the given denom unit (e.g uatom). - exponent: - type: integer - format: int64 - description: >- - exponent represents power of 10 exponent that one must - - raise the base_denom to in order to equal the given DenomUnit's denom - - 1 denom = 1^exponent base_denom - - (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' - with - - exponent = 6, thus: 1 atom = 10^6 uatom). - aliases: - type: array - items: - type: string - title: aliases is a list of string aliases for the given denom - description: |- - DenomUnit represents a struct that describes a given - denomination unit of the basic token. - cosmos.bank.v1beta1.Input: - type: object - properties: - address: - type: string - coins: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: Input models transaction input. - cosmos.bank.v1beta1.Metadata: - type: object - properties: - description: - type: string - denomUnits: - type: array - items: - type: object - properties: - denom: - type: string - description: >- - denom represents the string name of the given denom unit (e.g - uatom). - exponent: - type: integer - format: int64 - description: >- - exponent represents power of 10 exponent that one must - - raise the base_denom to in order to equal the given DenomUnit's - denom - - 1 denom = 1^exponent base_denom - - (e.g. with a base_denom of uatom, one can create a DenomUnit of - 'atom' with - - exponent = 6, thus: 1 atom = 10^6 uatom). - aliases: - type: array - items: - type: string - title: aliases is a list of string aliases for the given denom - description: |- - DenomUnit represents a struct that describes a given - denomination unit of the basic token. - title: denom_units represents the list of DenomUnit's for a given coin - base: - type: string - description: >- - base represents the base denom (should be the DenomUnit with exponent - = 0). - display: - type: string - description: |- - display indicates the suggested denom that should be - displayed in clients. - description: |- - Metadata represents a struct that describes - a basic token. - cosmos.bank.v1beta1.MsgMultiSendResponse: - type: object - description: MsgMultiSendResponse defines the Msg/MultiSend response type. - cosmos.bank.v1beta1.MsgSendResponse: - type: object - description: MsgSendResponse defines the Msg/Send response type. - cosmos.bank.v1beta1.Output: - type: object - properties: - address: - type: string - coins: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: Output models transaction outputs. - cosmos.bank.v1beta1.Params: - type: object - properties: - sendEnabled: - type: array - items: - type: object - properties: - denom: - type: string - enabled: - type: boolean - description: >- - SendEnabled maps coin denom to a send_enabled status (whether a - denom is - - sendable). - defaultSendEnabled: - type: boolean - description: Params defines the parameters for the bank module. - cosmos.bank.v1beta1.QueryAllBalancesResponse: - type: object - properties: - balances: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: balances is the balances of all the coins. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryAllBalancesResponse is the response type for the Query/AllBalances - RPC - - method. - cosmos.bank.v1beta1.QueryBalanceResponse: - type: object - properties: - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: >- - QueryBalanceResponse is the response type for the Query/Balance RPC - method. - cosmos.bank.v1beta1.QueryDenomMetadataResponse: - type: object - properties: - metadata: - type: object - properties: - description: - type: string - denomUnits: - type: array - items: - type: object - properties: - denom: - type: string - description: >- - denom represents the string name of the given denom unit - (e.g uatom). - exponent: - type: integer - format: int64 - description: >- - exponent represents power of 10 exponent that one must - - raise the base_denom to in order to equal the given - DenomUnit's denom - - 1 denom = 1^exponent base_denom - - (e.g. with a base_denom of uatom, one can create a DenomUnit - of 'atom' with - - exponent = 6, thus: 1 atom = 10^6 uatom). - aliases: - type: array - items: - type: string - title: aliases is a list of string aliases for the given denom - description: |- - DenomUnit represents a struct that describes a given - denomination unit of the basic token. - title: denom_units represents the list of DenomUnit's for a given coin - base: - type: string - description: >- - base represents the base denom (should be the DenomUnit with - exponent = 0). - display: - type: string - description: |- - display indicates the suggested denom that should be - displayed in clients. - description: |- - Metadata represents a struct that describes - a basic token. - description: >- - QueryDenomMetadataResponse is the response type for the - Query/DenomMetadata RPC - - method. - cosmos.bank.v1beta1.QueryDenomsMetadataResponse: - type: object - properties: - metadatas: - type: array - items: - type: object - properties: - description: - type: string - denomUnits: - type: array - items: - type: object - properties: - denom: - type: string - description: >- - denom represents the string name of the given denom unit - (e.g uatom). - exponent: - type: integer - format: int64 - description: >- - exponent represents power of 10 exponent that one must - - raise the base_denom to in order to equal the given - DenomUnit's denom - - 1 denom = 1^exponent base_denom - - (e.g. with a base_denom of uatom, one can create a - DenomUnit of 'atom' with - - exponent = 6, thus: 1 atom = 10^6 uatom). - aliases: - type: array - items: - type: string - title: aliases is a list of string aliases for the given denom - description: |- - DenomUnit represents a struct that describes a given - denomination unit of the basic token. - title: denom_units represents the list of DenomUnit's for a given coin - base: - type: string - description: >- - base represents the base denom (should be the DenomUnit with - exponent = 0). - display: - type: string - description: |- - display indicates the suggested denom that should be - displayed in clients. - description: |- - Metadata represents a struct that describes - a basic token. - description: >- - metadata provides the client information for all the registered - tokens. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryDenomsMetadataResponse is the response type for the - Query/DenomsMetadata RPC - - method. - cosmos.bank.v1beta1.QueryParamsResponse: - type: object - properties: - params: - type: object - properties: - sendEnabled: - type: array - items: - type: object - properties: - denom: - type: string - enabled: - type: boolean - description: >- - SendEnabled maps coin denom to a send_enabled status (whether a - denom is - - sendable). - defaultSendEnabled: - type: boolean - description: Params defines the parameters for the bank module. - description: >- - QueryParamsResponse defines the response type for querying x/bank - parameters. - cosmos.bank.v1beta1.QuerySupplyOfResponse: - type: object - properties: - amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: >- - QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC - method. - cosmos.bank.v1beta1.QueryTotalSupplyResponse: - type: object - properties: - supply: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: supply is the supply of the coins - title: >- - QueryTotalSupplyResponse is the response type for the Query/TotalSupply - RPC - - method - cosmos.bank.v1beta1.SendEnabled: - type: object - properties: - denom: - type: string - enabled: - type: boolean - description: |- - SendEnabled maps coin denom to a send_enabled status (whether a denom is - sendable). - cosmos.base.query.v1beta1.PageRequest: - type: object - properties: - key: - type: string - format: byte - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - offset: - type: string - format: uint64 - description: |- - offset is a numeric offset that can be used when key is unavailable. - It is less efficient than using key. Only one of offset or key should - be set. - limit: - type: string - format: uint64 - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - countTotal: - type: boolean - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in UIs. - - count_total is only respected when offset is used. It is ignored when - key - - is set. - description: |- - message SomeRequest { - Foo some_parameter = 1; - PageRequest pagination = 2; - } - title: |- - PageRequest is to be embedded in gRPC request messages for efficient - pagination. Ex: - cosmos.base.query.v1beta1.PageResponse: - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: |- - total is total number of results available if PageRequest.count_total - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - cosmos.base.v1beta1.Coin: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - google.protobuf.Any: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a canonical - form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types that - they - - expect it to use in the context of Any. However, for URLs which use - the - - scheme `http`, `https`, or no scheme, one can optionally set up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along with - a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - google.rpc.Status: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up - a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - cosmos.crisis.v1beta1.MsgVerifyInvariantResponse: - type: object - description: MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type. - cosmos.base.v1beta1.DecCoin: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - cosmos.distribution.v1beta1.DelegationDelegatorReward: - type: object - properties: - validatorAddress: - type: string - reward: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - description: |- - DelegationDelegatorReward represents the properties - of a delegator's delegation reward. - cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse: - type: object - description: >- - MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response - type. - cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse: - type: object - description: >- - MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response - type. - cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse: - type: object - description: >- - MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward - response type. - cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse: - type: object - description: >- - MsgWithdrawValidatorCommissionResponse defines the - Msg/WithdrawValidatorCommission response type. - cosmos.distribution.v1beta1.Params: - type: object - properties: - communityTax: - type: string - baseProposerReward: - type: string - bonusProposerReward: - type: string - withdrawAddrEnabled: - type: boolean - description: Params defines the set of params for the distribution module. - cosmos.distribution.v1beta1.QueryCommunityPoolResponse: - type: object - properties: - pool: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - description: pool defines community pool's coins. - description: >- - QueryCommunityPoolResponse is the response type for the - Query/CommunityPool - - RPC method. - cosmos.distribution.v1beta1.QueryDelegationRewardsResponse: - type: object - properties: - rewards: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - description: rewards defines the rewards accrued by a delegation. - description: |- - QueryDelegationRewardsResponse is the response type for the - Query/DelegationRewards RPC method. - cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse: - type: object - properties: - rewards: - type: array - items: - type: object - properties: - validatorAddress: - type: string - reward: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a decimal - amount. - - - NOTE: The amount field is an Dec which implements the custom - method - - signatures required by gogoproto. - description: |- - DelegationDelegatorReward represents the properties - of a delegator's delegation reward. - description: rewards defines all the rewards accrued by a delegator. - total: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - description: total defines the sum of all the rewards. - description: |- - QueryDelegationTotalRewardsResponse is the response type for the - Query/DelegationTotalRewards RPC method. - cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse: - type: object - properties: - validators: - type: array - items: - type: string - description: validators defines the validators a delegator is delegating for. - description: |- - QueryDelegatorValidatorsResponse is the response type for the - Query/DelegatorValidators RPC method. - cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse: - type: object - properties: - withdrawAddress: - type: string - description: withdraw_address defines the delegator address to query for. - description: |- - QueryDelegatorWithdrawAddressResponse is the response type for the - Query/DelegatorWithdrawAddress RPC method. - cosmos.distribution.v1beta1.QueryParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - communityTax: - type: string - baseProposerReward: - type: string - bonusProposerReward: - type: string - withdrawAddrEnabled: - type: boolean - description: QueryParamsResponse is the response type for the Query/Params RPC method. - cosmos.distribution.v1beta1.QueryValidatorCommissionResponse: - type: object - properties: - commission: - description: commission defines the commision the validator received. - type: object - properties: - commission: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a decimal - amount. - - - NOTE: The amount field is an Dec which implements the custom - method - - signatures required by gogoproto. - title: |- - QueryValidatorCommissionResponse is the response type for the - Query/ValidatorCommission RPC method - cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse: - type: object - properties: - rewards: - type: object - properties: - rewards: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a decimal - amount. - - - NOTE: The amount field is an Dec which implements the custom - method - - signatures required by gogoproto. - description: >- - ValidatorOutstandingRewards represents outstanding (un-withdrawn) - rewards - - for a validator inexpensive to track, allows simple sanity checks. - description: |- - QueryValidatorOutstandingRewardsResponse is the response type for the - Query/ValidatorOutstandingRewards RPC method. - cosmos.distribution.v1beta1.QueryValidatorSlashesResponse: - type: object - properties: - slashes: - type: array - items: - type: object - properties: - validatorPeriod: - type: string - format: uint64 - fraction: - type: string - description: |- - ValidatorSlashEvent represents a validator slash event. - Height is implicit within the store key. - This is needed to calculate appropriate amount of staking tokens - for delegations which are withdrawn after a slash has occurred. - description: slashes defines the slashes the validator received. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryValidatorSlashesResponse is the response type for the - Query/ValidatorSlashes RPC method. - cosmos.distribution.v1beta1.ValidatorAccumulatedCommission: - type: object - properties: - commission: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - description: |- - ValidatorAccumulatedCommission represents accumulated commission - for a validator kept as a running counter, can be withdrawn at any time. - cosmos.distribution.v1beta1.ValidatorOutstandingRewards: - type: object - properties: - rewards: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - description: |- - ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards - for a validator inexpensive to track, allows simple sanity checks. - cosmos.distribution.v1beta1.ValidatorSlashEvent: - type: object - properties: - validatorPeriod: - type: string - format: uint64 - fraction: - type: string - description: |- - ValidatorSlashEvent represents a validator slash event. - Height is implicit within the store key. - This is needed to calculate appropriate amount of staking tokens - for delegations which are withdrawn after a slash has occurred. - cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse: - type: object - properties: - hash: - type: string - format: byte - description: hash defines the hash of the evidence. - description: MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type. - cosmos.evidence.v1beta1.QueryAllEvidenceResponse: - type: object - properties: - evidence: - type: array - items: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up - a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: evidence returns all evidences. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryAllEvidenceResponse is the response type for the Query/AllEvidence - RPC - - method. - cosmos.evidence.v1beta1.QueryEvidenceResponse: - type: object - properties: - evidence: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - QueryEvidenceResponse is the response type for the Query/Evidence RPC - method. - cosmos.gov.v1beta1.Deposit: - type: object - properties: - proposalId: - type: string - format: uint64 - depositor: - type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: |- - Deposit defines an amount deposited by an account address to an active - proposal. - cosmos.gov.v1beta1.DepositParams: - type: object - properties: - minDeposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: Minimum deposit for a proposal to enter voting period. - maxDepositPeriod: - type: string - description: >- - Maximum period for Atom holders to deposit on a proposal. Initial - value: 2 - months. - description: DepositParams defines the params for deposits on governance proposals. - cosmos.gov.v1beta1.MsgDepositResponse: - type: object - description: MsgDepositResponse defines the Msg/Deposit response type. - cosmos.gov.v1beta1.MsgSubmitProposalResponse: - type: object - properties: - proposalId: - type: string - format: uint64 - description: MsgSubmitProposalResponse defines the Msg/SubmitProposal response type. - cosmos.gov.v1beta1.MsgVoteResponse: - type: object - description: MsgVoteResponse defines the Msg/Vote response type. - cosmos.gov.v1beta1.Proposal: - type: object - properties: - proposalId: - type: string - format: uint64 - content: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - status: - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - description: |- - ProposalStatus enumerates the valid statuses of a proposal. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - finalTallyResult: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - noWithVeto: - type: string - description: TallyResult defines a standard tally for a governance proposal. - submitTime: - type: string - format: date-time - depositEndTime: - type: string - format: date-time - totalDeposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - votingStartTime: - type: string - format: date-time - votingEndTime: - type: string - format: date-time - description: Proposal defines the core field members of a governance proposal. - cosmos.gov.v1beta1.ProposalStatus: - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - description: |- - ProposalStatus enumerates the valid statuses of a proposal. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - cosmos.gov.v1beta1.QueryDepositResponse: - type: object - properties: - deposit: - type: object - properties: - proposalId: - type: string - format: uint64 - depositor: - type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: |- - Deposit defines an amount deposited by an account address to an active - proposal. - description: >- - QueryDepositResponse is the response type for the Query/Deposit RPC - method. - cosmos.gov.v1beta1.QueryDepositsResponse: - type: object - properties: - deposits: - type: array - items: - type: object - properties: - proposalId: - type: string - format: uint64 - depositor: - type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - Deposit defines an amount deposited by an account address to an - active - - proposal. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryDepositsResponse is the response type for the Query/Deposits RPC - method. - cosmos.gov.v1beta1.QueryParamsResponse: - type: object - properties: - votingParams: - description: voting_params defines the parameters related to voting. - type: object - properties: - votingPeriod: - type: string - description: Length of the voting period. - depositParams: - description: deposit_params defines the parameters related to deposit. - type: object - properties: - minDeposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: Minimum deposit for a proposal to enter voting period. - maxDepositPeriod: - type: string - description: >- - Maximum period for Atom holders to deposit on a proposal. Initial - value: 2 - months. - tallyParams: - description: tally_params defines the parameters related to tally. - type: object - properties: - quorum: - type: string - format: byte - description: >- - Minimum percentage of total stake needed to vote for a result to - be - considered valid. - threshold: - type: string - format: byte - description: >- - Minimum proportion of Yes votes for proposal to pass. Default - value: 0.5. - vetoThreshold: - type: string - format: byte - description: >- - Minimum value of Veto votes to Total votes ratio for proposal to - be - vetoed. Default value: 1/3. - description: QueryParamsResponse is the response type for the Query/Params RPC method. - cosmos.gov.v1beta1.QueryProposalResponse: - type: object - properties: - proposal: - type: object - properties: - proposalId: - type: string - format: uint64 - content: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - status: - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - description: |- - ProposalStatus enumerates the valid statuses of a proposal. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - finalTallyResult: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - noWithVeto: - type: string - description: TallyResult defines a standard tally for a governance proposal. - submitTime: - type: string - format: date-time - depositEndTime: - type: string - format: date-time - totalDeposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - votingStartTime: - type: string - format: date-time - votingEndTime: - type: string - format: date-time - description: Proposal defines the core field members of a governance proposal. - description: >- - QueryProposalResponse is the response type for the Query/Proposal RPC - method. - cosmos.gov.v1beta1.QueryProposalsResponse: - type: object - properties: - proposals: - type: array - items: - type: object - properties: - proposalId: - type: string - format: uint64 - content: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - status: - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - description: |- - ProposalStatus enumerates the valid statuses of a proposal. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - finalTallyResult: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - noWithVeto: - type: string - description: TallyResult defines a standard tally for a governance proposal. - submitTime: - type: string - format: date-time - depositEndTime: - type: string - format: date-time - totalDeposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - votingStartTime: - type: string - format: date-time - votingEndTime: - type: string - format: date-time - description: Proposal defines the core field members of a governance proposal. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryProposalsResponse is the response type for the Query/Proposals RPC - method. - cosmos.gov.v1beta1.QueryTallyResultResponse: - type: object - properties: - tally: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - noWithVeto: - type: string - description: TallyResult defines a standard tally for a governance proposal. - description: >- - QueryTallyResultResponse is the response type for the Query/Tally RPC - method. - cosmos.gov.v1beta1.QueryVoteResponse: - type: object - properties: - vote: - type: object - properties: - proposalId: - type: string - format: uint64 - voter: - type: string - option: - type: string - enum: - - VOTE_OPTION_UNSPECIFIED - - VOTE_OPTION_YES - - VOTE_OPTION_ABSTAIN - - VOTE_OPTION_NO - - VOTE_OPTION_NO_WITH_VETO - default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given - governance proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. - description: |- - Vote defines a vote on a governance proposal. - A Vote consists of a proposal ID, the voter, and the vote option. - description: QueryVoteResponse is the response type for the Query/Vote RPC method. - cosmos.gov.v1beta1.QueryVotesResponse: - type: object - properties: - votes: - type: array - items: - type: object - properties: - proposalId: - type: string - format: uint64 - voter: - type: string - option: - type: string - enum: - - VOTE_OPTION_UNSPECIFIED - - VOTE_OPTION_YES - - VOTE_OPTION_ABSTAIN - - VOTE_OPTION_NO - - VOTE_OPTION_NO_WITH_VETO - default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given - governance proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. - description: |- - Vote defines a vote on a governance proposal. - A Vote consists of a proposal ID, the voter, and the vote option. - description: votes defined the queried votes. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: QueryVotesResponse is the response type for the Query/Votes RPC method. - cosmos.gov.v1beta1.TallyParams: - type: object - properties: - quorum: - type: string - format: byte - description: |- - Minimum percentage of total stake needed to vote for a result to be - considered valid. - threshold: - type: string - format: byte - description: >- - Minimum proportion of Yes votes for proposal to pass. Default value: - 0.5. - vetoThreshold: - type: string - format: byte - description: |- - Minimum value of Veto votes to Total votes ratio for proposal to be - vetoed. Default value: 1/3. - description: TallyParams defines the params for tallying votes on governance proposals. - cosmos.gov.v1beta1.TallyResult: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - noWithVeto: - type: string - description: TallyResult defines a standard tally for a governance proposal. - cosmos.gov.v1beta1.Vote: - type: object - properties: - proposalId: - type: string - format: uint64 - voter: - type: string - option: - type: string - enum: - - VOTE_OPTION_UNSPECIFIED - - VOTE_OPTION_YES - - VOTE_OPTION_ABSTAIN - - VOTE_OPTION_NO - - VOTE_OPTION_NO_WITH_VETO - default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given governance - proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. - description: |- - Vote defines a vote on a governance proposal. - A Vote consists of a proposal ID, the voter, and the vote option. - cosmos.gov.v1beta1.VoteOption: - type: string - enum: - - VOTE_OPTION_UNSPECIFIED - - VOTE_OPTION_YES - - VOTE_OPTION_ABSTAIN - - VOTE_OPTION_NO - - VOTE_OPTION_NO_WITH_VETO - default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given governance - proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. - cosmos.gov.v1beta1.VotingParams: - type: object - properties: - votingPeriod: - type: string - description: Length of the voting period. - description: VotingParams defines the params for voting on governance proposals. - cosmos.slashing.v1beta1.MsgUnjailResponse: - type: object - title: MsgUnjailResponse defines the Msg/Unjail response type - cosmos.slashing.v1beta1.Params: - type: object - properties: - signedBlocksWindow: - type: string - format: int64 - minSignedPerWindow: - type: string - format: byte - downtimeJailDuration: - type: string - slashFractionDoubleSign: - type: string - format: byte - slashFractionDowntime: - type: string - format: byte - description: Params represents the parameters used for by the slashing module. - cosmos.slashing.v1beta1.QueryParamsResponse: - type: object - properties: - params: - type: object - properties: - signedBlocksWindow: - type: string - format: int64 - minSignedPerWindow: - type: string - format: byte - downtimeJailDuration: - type: string - slashFractionDoubleSign: - type: string - format: byte - slashFractionDowntime: - type: string - format: byte - description: Params represents the parameters used for by the slashing module. - title: QueryParamsResponse is the response type for the Query/Params RPC method - cosmos.slashing.v1beta1.QuerySigningInfoResponse: - type: object - properties: - valSigningInfo: - type: object - properties: - address: - type: string - startHeight: - type: string - format: int64 - title: height at which validator was first a candidate OR was unjailed - indexOffset: - type: string - format: int64 - title: index offset into signed block bit array - jailedUntil: - type: string - format: date-time - title: timestamp validator cannot be unjailed until - tombstoned: - type: boolean - title: >- - whether or not a validator has been tombstoned (killed out of - validator - - set) - missedBlocksCounter: - type: string - format: int64 - title: missed blocks counter (to avoid scanning the array every time) - description: >- - ValidatorSigningInfo defines a validator's signing info for monitoring - their - - liveness activity. - title: val_signing_info is the signing info of requested val cons address - title: >- - QuerySigningInfoResponse is the response type for the Query/SigningInfo - RPC - - method - cosmos.slashing.v1beta1.QuerySigningInfosResponse: - type: object - properties: - info: - type: array - items: - type: object - properties: - address: - type: string - startHeight: - type: string - format: int64 - title: height at which validator was first a candidate OR was unjailed - indexOffset: - type: string - format: int64 - title: index offset into signed block bit array - jailedUntil: - type: string - format: date-time - title: timestamp validator cannot be unjailed until - tombstoned: - type: boolean - title: >- - whether or not a validator has been tombstoned (killed out of - validator - - set) - missedBlocksCounter: - type: string - format: int64 - title: missed blocks counter (to avoid scanning the array every time) - description: >- - ValidatorSigningInfo defines a validator's signing info for - monitoring their - - liveness activity. - title: info is the signing info of all validators - pagination: - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: >- - QuerySigningInfosResponse is the response type for the Query/SigningInfos - RPC - - method - cosmos.slashing.v1beta1.ValidatorSigningInfo: - type: object - properties: - address: - type: string - startHeight: - type: string - format: int64 - title: height at which validator was first a candidate OR was unjailed - indexOffset: - type: string - format: int64 - title: index offset into signed block bit array - jailedUntil: - type: string - format: date-time - title: timestamp validator cannot be unjailed until - tombstoned: - type: boolean - title: >- - whether or not a validator has been tombstoned (killed out of - validator - - set) - missedBlocksCounter: - type: string - format: int64 - title: missed blocks counter (to avoid scanning the array every time) - description: >- - ValidatorSigningInfo defines a validator's signing info for monitoring - their - - liveness activity. - cosmos.staking.v1beta1.BondStatus: - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. - cosmos.staking.v1beta1.Commission: - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates to be used for - creating a validator. - type: object - properties: - rate: - type: string - description: 'rate is the commission rate charged to delegators, as a fraction.' - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which validator can - ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase of the - validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: update_time is the last time the commission rate was changed. - description: Commission defines commission parameters for a given validator. - cosmos.staking.v1beta1.CommissionRates: - type: object - properties: - rate: - type: string - description: 'rate is the commission rate charged to delegators, as a fraction.' - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which validator can ever - charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase of the validator - commission, as a fraction. - description: >- - CommissionRates defines the initial commission rates to be used for - creating - - a validator. - cosmos.staking.v1beta1.Delegation: - type: object - properties: - delegatorAddress: - type: string - description: delegator_address is the bech32-encoded address of the delegator. - validatorAddress: - type: string - description: validator_address is the bech32-encoded address of the validator. - shares: - type: string - description: shares define the delegation shares received. - description: |- - Delegation represents the bond with tokens held by an account. It is - owned by one delegator, and is associated with the voting power of one - validator. - cosmos.staking.v1beta1.DelegationResponse: - type: object - properties: - delegation: - type: object - properties: - delegatorAddress: - type: string - description: delegator_address is the bech32-encoded address of the delegator. - validatorAddress: - type: string - description: validator_address is the bech32-encoded address of the validator. - shares: - type: string - description: shares define the delegation shares received. - description: |- - Delegation represents the bond with tokens held by an account. It is - owned by one delegator, and is associated with the voting power of one - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: |- - DelegationResponse is equivalent to Delegation except that it contains a - balance in addition to shares which is more suitable for client responses. - cosmos.staking.v1beta1.Description: - type: object - properties: - moniker: - type: string - description: moniker defines a human-readable name for the validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. UPort or - Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: security_contact defines an optional email for security contact. - details: - type: string - description: details define other optional details. - description: Description defines a validator description. - cosmos.staking.v1beta1.HistoricalInfo: - type: object - properties: - header: - type: object - properties: - version: - title: basic block info - type: object - properties: - block: - type: string - format: uint64 - app: - type: string - format: uint64 - description: >- - Consensus captures the consensus rules for processing a block in - the blockchain, - - including all blockchain data structures and the rules of the - application's - - state transition machine. - chainId: - type: string - height: - type: string - format: int64 - time: - type: string - format: date-time - lastBlockId: - title: prev block info - type: object - properties: - hash: - type: string - format: byte - partSetHeader: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - lastCommitHash: - type: string - format: byte - title: hashes of block data - dataHash: - type: string - format: byte - validatorsHash: - type: string - format: byte - title: hashes from the app output from the prev block - nextValidatorsHash: - type: string - format: byte - consensusHash: - type: string - format: byte - appHash: - type: string - format: byte - lastResultsHash: - type: string - format: byte - evidenceHash: - type: string - format: byte - title: consensus info - proposerAddress: - type: string - format: byte - description: Header defines the structure of a Tendermint block header. - valset: - type: array - items: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's - operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from bonded - status or not. - status: - description: status is the validator status (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: tokens define the delegated tokens (incl. self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a validator's - delegators. - description: - description: description defines the description terms for the validator. - type: object - properties: - moniker: - type: string - description: moniker defines a human-readable name for the validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. UPort - or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for security - contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at which this - validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the - validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates to be - used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, as a - fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which - validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase of - the validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate was - changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared minimum - self delegation. - description: >- - Validator defines a validator, together with the total amount of the - - Validator's bond shares and their exchange rate to coins. Slashing - results in - - a decrease in the exchange rate, allowing correct calculation of - future - - undelegations without iterating over delegators. When coins are - delegated to - - this validator, the validator is credited with a delegation whose - number of - - bond shares is based on the amount of coins delegated divided by the - current - - exchange rate. Voting power can be calculated as total bonded shares - - multiplied by exchange rate. - description: >- - HistoricalInfo contains header and validator information for a given - block. - - It is stored as part of staking module's state, which persists the `n` - most - - recent HistoricalInfo - - (`n` is set by the staking module's `historical_entries` parameter). - cosmos.staking.v1beta1.MsgBeginRedelegateResponse: - type: object - properties: - completionTime: - type: string - format: date-time - description: MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type. - cosmos.staking.v1beta1.MsgCreateValidatorResponse: - type: object - description: MsgCreateValidatorResponse defines the Msg/CreateValidator response type. - cosmos.staking.v1beta1.MsgDelegateResponse: - type: object - description: MsgDelegateResponse defines the Msg/Delegate response type. - cosmos.staking.v1beta1.MsgEditValidatorResponse: - type: object - description: MsgEditValidatorResponse defines the Msg/EditValidator response type. - cosmos.staking.v1beta1.MsgUndelegateResponse: - type: object - properties: - completionTime: - type: string - format: date-time - description: MsgUndelegateResponse defines the Msg/Undelegate response type. - cosmos.staking.v1beta1.Params: - type: object - properties: - unbondingTime: - type: string - description: unbonding_time is the time duration of unbonding. - maxValidators: - type: integer - format: int64 - description: max_validators is the maximum number of validators. - maxEntries: - type: integer - format: int64 - description: >- - max_entries is the max entries for either unbonding delegation or - redelegation (per pair/trio). - historicalEntries: - type: integer - format: int64 - description: historical_entries is the number of historical entries to persist. - bondDenom: - type: string - description: bond_denom defines the bondable coin denomination. - description: Params defines the parameters for the staking module. - cosmos.staking.v1beta1.Pool: - type: object - properties: - notBondedTokens: - type: string - bondedTokens: - type: string - description: |- - Pool is used for tracking bonded and not-bonded token supply of the bond - denomination. - cosmos.staking.v1beta1.QueryDelegationResponse: - type: object - properties: - delegationResponse: - type: object - properties: - delegation: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - shares: - type: string - description: shares define the delegation shares received. - description: >- - Delegation represents the bond with tokens held by an account. It - is - - owned by one delegator, and is associated with the voting power of - one - - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that it contains - a - - balance in addition to shares which is more suitable for client - responses. - description: >- - QueryDelegationResponse is response type for the Query/Delegation RPC - method. - cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse: - type: object - properties: - delegationResponses: - type: array - items: - type: object - properties: - delegation: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - shares: - type: string - description: shares define the delegation shares received. - description: >- - Delegation represents the bond with tokens held by an account. - It is - - owned by one delegator, and is associated with the voting power - of one - - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that it - contains a - - balance in addition to shares which is more suitable for client - responses. - description: delegation_responses defines all the delegations' info of a delegator. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryDelegatorDelegationsResponse is response type for the - Query/DelegatorDelegations RPC method. - cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse: - type: object - properties: - unbondingResponses: - type: array - items: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height is the height which the unbonding took - place. - completionTime: - type: string - format: date-time - description: completion_time is the unix time for unbonding completion. - initialBalance: - type: string - description: >- - initial_balance defines the tokens initially scheduled to - receive at completion. - balance: - type: string - description: balance defines the tokens to receive at completion. - description: >- - UnbondingDelegationEntry defines an unbonding object with - relevant metadata. - description: entries are the unbonding delegation entries. - description: >- - UnbondingDelegation stores all of a single delegator's unbonding - bonds - - for a single validator in an time-ordered list. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryUnbondingDelegatorDelegationsResponse is response type for the - Query/UnbondingDelegatorDelegations RPC method. - cosmos.staking.v1beta1.QueryDelegatorValidatorResponse: - type: object - properties: - validator: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's operator; - bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from bonded - status or not. - status: - description: status is the validator status (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: tokens define the delegated tokens (incl. self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a validator's - delegators. - description: - description: description defines the description terms for the validator. - type: object - properties: - moniker: - type: string - description: moniker defines a human-readable name for the validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. UPort or - Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for security - contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at which this - validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the - validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates to be - used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, as a - fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which - validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase of the - validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: update_time is the last time the commission rate was changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared minimum self - delegation. - description: >- - Validator defines a validator, together with the total amount of the - - Validator's bond shares and their exchange rate to coins. Slashing - results in - - a decrease in the exchange rate, allowing correct calculation of - future - - undelegations without iterating over delegators. When coins are - delegated to - - this validator, the validator is credited with a delegation whose - number of - - bond shares is based on the amount of coins delegated divided by the - current - - exchange rate. Voting power can be calculated as total bonded shares - - multiplied by exchange rate. - description: |- - QueryDelegatorValidatorResponse response type for the - Query/DelegatorValidator RPC method. - cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse: - type: object - properties: - validators: - type: array - items: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's - operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from bonded - status or not. - status: - description: status is the validator status (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: tokens define the delegated tokens (incl. self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a validator's - delegators. - description: - description: description defines the description terms for the validator. - type: object - properties: - moniker: - type: string - description: moniker defines a human-readable name for the validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. UPort - or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for security - contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at which this - validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the - validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates to be - used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, as a - fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which - validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase of - the validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate was - changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared minimum - self delegation. - description: >- - Validator defines a validator, together with the total amount of the - - Validator's bond shares and their exchange rate to coins. Slashing - results in - - a decrease in the exchange rate, allowing correct calculation of - future - - undelegations without iterating over delegators. When coins are - delegated to - - this validator, the validator is credited with a delegation whose - number of - - bond shares is based on the amount of coins delegated divided by the - current - - exchange rate. Voting power can be calculated as total bonded shares - - multiplied by exchange rate. - description: validators defines the the validators' info of a delegator. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryDelegatorValidatorsResponse is response type for the - Query/DelegatorValidators RPC method. - cosmos.staking.v1beta1.QueryHistoricalInfoResponse: - type: object - properties: - hist: - description: hist defines the historical info at the given height. - type: object - properties: - header: - type: object - properties: - version: - title: basic block info - type: object - properties: - block: - type: string - format: uint64 - app: - type: string - format: uint64 - description: >- - Consensus captures the consensus rules for processing a block - in the blockchain, - - including all blockchain data structures and the rules of the - application's - - state transition machine. - chainId: - type: string - height: - type: string - format: int64 - time: - type: string - format: date-time - lastBlockId: - title: prev block info - type: object - properties: - hash: - type: string - format: byte - partSetHeader: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - lastCommitHash: - type: string - format: byte - title: hashes of block data - dataHash: - type: string - format: byte - validatorsHash: - type: string - format: byte - title: hashes from the app output from the prev block - nextValidatorsHash: - type: string - format: byte - consensusHash: - type: string - format: byte - appHash: - type: string - format: byte - lastResultsHash: - type: string - format: byte - evidenceHash: - type: string - format: byte - title: consensus info - proposerAddress: - type: string - format: byte - description: Header defines the structure of a Tendermint block header. - valset: - type: array - items: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's - operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from - bonded status or not. - status: - description: status is the validator status (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: tokens define the delegated tokens (incl. self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a - validator's delegators. - description: - description: description defines the description terms for the validator. - type: object - properties: - moniker: - type: string - description: moniker defines a human-readable name for the validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. - UPort or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for security - contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at which - this validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the - validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates to - be used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, - as a fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which - validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase - of the validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate was - changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared minimum - self delegation. - description: >- - Validator defines a validator, together with the total amount of - the - - Validator's bond shares and their exchange rate to coins. - Slashing results in - - a decrease in the exchange rate, allowing correct calculation of - future - - undelegations without iterating over delegators. When coins are - delegated to - - this validator, the validator is credited with a delegation - whose number of - - bond shares is based on the amount of coins delegated divided by - the current - - exchange rate. Voting power can be calculated as total bonded - shares - - multiplied by exchange rate. - description: >- - QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo - RPC - - method. - cosmos.staking.v1beta1.QueryParamsResponse: - type: object - properties: - params: - description: params holds all the parameters of this module. - type: object - properties: - unbondingTime: - type: string - description: unbonding_time is the time duration of unbonding. - maxValidators: - type: integer - format: int64 - description: max_validators is the maximum number of validators. - maxEntries: - type: integer - format: int64 - description: >- - max_entries is the max entries for either unbonding delegation or - redelegation (per pair/trio). - historicalEntries: - type: integer - format: int64 - description: historical_entries is the number of historical entries to persist. - bondDenom: - type: string - description: bond_denom defines the bondable coin denomination. - description: QueryParamsResponse is response type for the Query/Params RPC method. - cosmos.staking.v1beta1.QueryPoolResponse: - type: object - properties: - pool: - description: pool defines the pool info. - type: object - properties: - notBondedTokens: - type: string - bondedTokens: - type: string - description: QueryPoolResponse is response type for the Query/Pool RPC method. - cosmos.staking.v1beta1.QueryRedelegationsResponse: - type: object - properties: - redelegationResponses: - type: array - items: - type: object - properties: - redelegation: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorSrcAddress: - type: string - description: >- - validator_src_address is the validator redelegation source - operator address. - validatorDstAddress: - type: string - description: >- - validator_dst_address is the validator redelegation - destination operator address. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height defines the height which the - redelegation took place. - completionTime: - type: string - format: date-time - description: >- - completion_time defines the unix time for redelegation - completion. - initialBalance: - type: string - description: >- - initial_balance defines the initial balance when - redelegation started. - sharesDst: - type: string - description: >- - shares_dst is the amount of destination-validator - shares created by redelegation. - description: >- - RedelegationEntry defines a redelegation object with - relevant metadata. - description: entries are the redelegation entries. - description: >- - Redelegation contains the list of a particular delegator's - redelegating bonds - - from a particular source validator to a particular destination - validator. - entries: - type: array - items: - type: object - properties: - redelegationEntry: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height defines the height which the - redelegation took place. - completionTime: - type: string - format: date-time - description: >- - completion_time defines the unix time for redelegation - completion. - initialBalance: - type: string - description: >- - initial_balance defines the initial balance when - redelegation started. - sharesDst: - type: string - description: >- - shares_dst is the amount of destination-validator - shares created by redelegation. - description: >- - RedelegationEntry defines a redelegation object with - relevant metadata. - balance: - type: string - description: >- - RedelegationEntryResponse is equivalent to a RedelegationEntry - except that it - - contains a balance in addition to shares which is more - suitable for client - - responses. - description: >- - RedelegationResponse is equivalent to a Redelegation except that its - entries - - contain a balance in addition to shares which is more suitable for - client - - responses. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryRedelegationsResponse is response type for the Query/Redelegations - RPC - - method. - cosmos.staking.v1beta1.QueryUnbondingDelegationResponse: - type: object - properties: - unbond: - type: object - properties: - delegatorAddress: - type: string - description: delegator_address is the bech32-encoded address of the delegator. - validatorAddress: - type: string - description: validator_address is the bech32-encoded address of the validator. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height is the height which the unbonding took - place. - completionTime: - type: string - format: date-time - description: completion_time is the unix time for unbonding completion. - initialBalance: - type: string - description: >- - initial_balance defines the tokens initially scheduled to - receive at completion. - balance: - type: string - description: balance defines the tokens to receive at completion. - description: >- - UnbondingDelegationEntry defines an unbonding object with - relevant metadata. - description: entries are the unbonding delegation entries. - description: |- - UnbondingDelegation stores all of a single delegator's unbonding bonds - for a single validator in an time-ordered list. - description: |- - QueryDelegationResponse is response type for the Query/UnbondingDelegation - RPC method. - cosmos.staking.v1beta1.QueryValidatorDelegationsResponse: - type: object - properties: - delegationResponses: - type: array - items: - type: object - properties: - delegation: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - shares: - type: string - description: shares define the delegation shares received. - description: >- - Delegation represents the bond with tokens held by an account. - It is - - owned by one delegator, and is associated with the voting power - of one - - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that it - contains a - - balance in addition to shares which is more suitable for client - responses. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: |- - QueryValidatorDelegationsResponse is response type for the - Query/ValidatorDelegations RPC method - cosmos.staking.v1beta1.QueryValidatorResponse: - type: object - properties: - validator: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's operator; - bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from bonded - status or not. - status: - description: status is the validator status (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: tokens define the delegated tokens (incl. self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a validator's - delegators. - description: - description: description defines the description terms for the validator. - type: object - properties: - moniker: - type: string - description: moniker defines a human-readable name for the validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. UPort or - Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for security - contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at which this - validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the - validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates to be - used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, as a - fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which - validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase of the - validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: update_time is the last time the commission rate was changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared minimum self - delegation. - description: >- - Validator defines a validator, together with the total amount of the - - Validator's bond shares and their exchange rate to coins. Slashing - results in - - a decrease in the exchange rate, allowing correct calculation of - future - - undelegations without iterating over delegators. When coins are - delegated to - - this validator, the validator is credited with a delegation whose - number of - - bond shares is based on the amount of coins delegated divided by the - current - - exchange rate. Voting power can be calculated as total bonded shares - - multiplied by exchange rate. - title: QueryValidatorResponse is response type for the Query/Validator RPC method - cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse: - type: object - properties: - unbondingResponses: - type: array - items: - type: object - properties: - delegatorAddress: - type: string - description: >- - delegator_address is the bech32-encoded address of the - delegator. - validatorAddress: - type: string - description: >- - validator_address is the bech32-encoded address of the - validator. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height is the height which the unbonding took - place. - completionTime: - type: string - format: date-time - description: completion_time is the unix time for unbonding completion. - initialBalance: - type: string - description: >- - initial_balance defines the tokens initially scheduled to - receive at completion. - balance: - type: string - description: balance defines the tokens to receive at completion. - description: >- - UnbondingDelegationEntry defines an unbonding object with - relevant metadata. - description: entries are the unbonding delegation entries. - description: >- - UnbondingDelegation stores all of a single delegator's unbonding - bonds - - for a single validator in an time-ordered list. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - QueryValidatorUnbondingDelegationsResponse is response type for the - Query/ValidatorUnbondingDelegations RPC method. - cosmos.staking.v1beta1.QueryValidatorsResponse: - type: object - properties: - validators: - type: array - items: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's - operator; bech encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from bonded - status or not. - status: - description: status is the validator status (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: tokens define the delegated tokens (incl. self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a validator's - delegators. - description: - description: description defines the description terms for the validator. - type: object - properties: - moniker: - type: string - description: moniker defines a human-readable name for the validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. UPort - or Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: >- - security_contact defines an optional email for security - contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at which this - validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the - validator to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates to be - used for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, as a - fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which - validator can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase of - the validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: >- - update_time is the last time the commission rate was - changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared minimum - self delegation. - description: >- - Validator defines a validator, together with the total amount of the - - Validator's bond shares and their exchange rate to coins. Slashing - results in - - a decrease in the exchange rate, allowing correct calculation of - future - - undelegations without iterating over delegators. When coins are - delegated to - - this validator, the validator is credited with a delegation whose - number of - - bond shares is based on the amount of coins delegated divided by the - current - - exchange rate. Voting power can be calculated as total bonded shares - - multiplied by exchange rate. - description: validators contains all the queried validators. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: >- - QueryValidatorsResponse is response type for the Query/Validators RPC - method - cosmos.staking.v1beta1.Redelegation: - type: object - properties: - delegatorAddress: - type: string - description: delegator_address is the bech32-encoded address of the delegator. - validatorSrcAddress: - type: string - description: >- - validator_src_address is the validator redelegation source operator - address. - validatorDstAddress: - type: string - description: >- - validator_dst_address is the validator redelegation destination - operator address. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height defines the height which the redelegation took - place. - completionTime: - type: string - format: date-time - description: >- - completion_time defines the unix time for redelegation - completion. - initialBalance: - type: string - description: >- - initial_balance defines the initial balance when redelegation - started. - sharesDst: - type: string - description: >- - shares_dst is the amount of destination-validator shares created - by redelegation. - description: >- - RedelegationEntry defines a redelegation object with relevant - metadata. - description: entries are the redelegation entries. - description: >- - Redelegation contains the list of a particular delegator's redelegating - bonds - - from a particular source validator to a particular destination validator. - cosmos.staking.v1beta1.RedelegationEntry: - type: object - properties: - creationHeight: - type: string - format: int64 - description: creation_height defines the height which the redelegation took place. - completionTime: - type: string - format: date-time - description: completion_time defines the unix time for redelegation completion. - initialBalance: - type: string - description: initial_balance defines the initial balance when redelegation started. - sharesDst: - type: string - description: >- - shares_dst is the amount of destination-validator shares created by - redelegation. - description: RedelegationEntry defines a redelegation object with relevant metadata. - cosmos.staking.v1beta1.RedelegationEntryResponse: - type: object - properties: - redelegationEntry: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height defines the height which the redelegation took - place. - completionTime: - type: string - format: date-time - description: completion_time defines the unix time for redelegation completion. - initialBalance: - type: string - description: >- - initial_balance defines the initial balance when redelegation - started. - sharesDst: - type: string - description: >- - shares_dst is the amount of destination-validator shares created - by redelegation. - description: >- - RedelegationEntry defines a redelegation object with relevant - metadata. - balance: - type: string - description: >- - RedelegationEntryResponse is equivalent to a RedelegationEntry except that - it - - contains a balance in addition to shares which is more suitable for client - - responses. - cosmos.staking.v1beta1.RedelegationResponse: - type: object - properties: - redelegation: - type: object - properties: - delegatorAddress: - type: string - description: delegator_address is the bech32-encoded address of the delegator. - validatorSrcAddress: - type: string - description: >- - validator_src_address is the validator redelegation source - operator address. - validatorDstAddress: - type: string - description: >- - validator_dst_address is the validator redelegation destination - operator address. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height defines the height which the redelegation - took place. - completionTime: - type: string - format: date-time - description: >- - completion_time defines the unix time for redelegation - completion. - initialBalance: - type: string - description: >- - initial_balance defines the initial balance when - redelegation started. - sharesDst: - type: string - description: >- - shares_dst is the amount of destination-validator shares - created by redelegation. - description: >- - RedelegationEntry defines a redelegation object with relevant - metadata. - description: entries are the redelegation entries. - description: >- - Redelegation contains the list of a particular delegator's - redelegating bonds - - from a particular source validator to a particular destination - validator. - entries: - type: array - items: - type: object - properties: - redelegationEntry: - type: object - properties: - creationHeight: - type: string - format: int64 - description: >- - creation_height defines the height which the redelegation - took place. - completionTime: - type: string - format: date-time - description: >- - completion_time defines the unix time for redelegation - completion. - initialBalance: - type: string - description: >- - initial_balance defines the initial balance when - redelegation started. - sharesDst: - type: string - description: >- - shares_dst is the amount of destination-validator shares - created by redelegation. - description: >- - RedelegationEntry defines a redelegation object with relevant - metadata. - balance: - type: string - description: >- - RedelegationEntryResponse is equivalent to a RedelegationEntry - except that it - - contains a balance in addition to shares which is more suitable for - client - - responses. - description: >- - RedelegationResponse is equivalent to a Redelegation except that its - entries - - contain a balance in addition to shares which is more suitable for client - - responses. - cosmos.staking.v1beta1.UnbondingDelegation: - type: object - properties: - delegatorAddress: - type: string - description: delegator_address is the bech32-encoded address of the delegator. - validatorAddress: - type: string - description: validator_address is the bech32-encoded address of the validator. - entries: - type: array - items: - type: object - properties: - creationHeight: - type: string - format: int64 - description: creation_height is the height which the unbonding took place. - completionTime: - type: string - format: date-time - description: completion_time is the unix time for unbonding completion. - initialBalance: - type: string - description: >- - initial_balance defines the tokens initially scheduled to - receive at completion. - balance: - type: string - description: balance defines the tokens to receive at completion. - description: >- - UnbondingDelegationEntry defines an unbonding object with relevant - metadata. - description: entries are the unbonding delegation entries. - description: |- - UnbondingDelegation stores all of a single delegator's unbonding bonds - for a single validator in an time-ordered list. - cosmos.staking.v1beta1.UnbondingDelegationEntry: - type: object - properties: - creationHeight: - type: string - format: int64 - description: creation_height is the height which the unbonding took place. - completionTime: - type: string - format: date-time - description: completion_time is the unix time for unbonding completion. - initialBalance: - type: string - description: >- - initial_balance defines the tokens initially scheduled to receive at - completion. - balance: - type: string - description: balance defines the tokens to receive at completion. - description: >- - UnbondingDelegationEntry defines an unbonding object with relevant - metadata. - cosmos.staking.v1beta1.Validator: - type: object - properties: - operatorAddress: - type: string - description: >- - operator_address defines the address of the validator's operator; bech - encoded in JSON. - consensusPubkey: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - description: >- - jailed defined whether the validator has been jailed from bonded - status or not. - status: - description: status is the validator status (bonded/unbonding/unbonded). - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - tokens: - type: string - description: tokens define the delegated tokens (incl. self-delegation). - delegatorShares: - type: string - description: >- - delegator_shares defines total shares issued to a validator's - delegators. - description: - description: description defines the description terms for the validator. - type: object - properties: - moniker: - type: string - description: moniker defines a human-readable name for the validator. - identity: - type: string - description: >- - identity defines an optional identity signature (ex. UPort or - Keybase). - website: - type: string - description: website defines an optional website link. - securityContact: - type: string - description: security_contact defines an optional email for security contact. - details: - type: string - description: details define other optional details. - unbondingHeight: - type: string - format: int64 - description: >- - unbonding_height defines, if unbonding, the height at which this - validator has begun unbonding. - unbondingTime: - type: string - format: date-time - description: >- - unbonding_time defines, if unbonding, the min time for the validator - to complete unbonding. - commission: - description: commission defines the commission parameters. - type: object - properties: - commissionRates: - description: >- - commission_rates defines the initial commission rates to be used - for creating a validator. - type: object - properties: - rate: - type: string - description: >- - rate is the commission rate charged to delegators, as a - fraction. - maxRate: - type: string - description: >- - max_rate defines the maximum commission rate which validator - can ever charge, as a fraction. - maxChangeRate: - type: string - description: >- - max_change_rate defines the maximum daily increase of the - validator commission, as a fraction. - updateTime: - type: string - format: date-time - description: update_time is the last time the commission rate was changed. - minSelfDelegation: - type: string - description: >- - min_self_delegation is the validator's self declared minimum self - delegation. - description: >- - Validator defines a validator, together with the total amount of the - - Validator's bond shares and their exchange rate to coins. Slashing results - in - - a decrease in the exchange rate, allowing correct calculation of future - - undelegations without iterating over delegators. When coins are delegated - to - - this validator, the validator is credited with a delegation whose number - of - - bond shares is based on the amount of coins delegated divided by the - current - - exchange rate. Voting power can be calculated as total bonded shares - - multiplied by exchange rate. - tendermint.types.BlockID: - type: object - properties: - hash: - type: string - format: byte - partSetHeader: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - title: BlockID - tendermint.types.Header: - type: object - properties: - version: - title: basic block info - type: object - properties: - block: - type: string - format: uint64 - app: - type: string - format: uint64 - description: >- - Consensus captures the consensus rules for processing a block in the - blockchain, - - including all blockchain data structures and the rules of the - application's - - state transition machine. - chainId: - type: string - height: - type: string - format: int64 - time: - type: string - format: date-time - lastBlockId: - title: prev block info - type: object - properties: - hash: - type: string - format: byte - partSetHeader: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - lastCommitHash: - type: string - format: byte - title: hashes of block data - dataHash: - type: string - format: byte - validatorsHash: - type: string - format: byte - title: hashes from the app output from the prev block - nextValidatorsHash: - type: string - format: byte - consensusHash: - type: string - format: byte - appHash: - type: string - format: byte - lastResultsHash: - type: string - format: byte - evidenceHash: - type: string - format: byte - title: consensus info - proposerAddress: - type: string - format: byte - description: Header defines the structure of a Tendermint block header. - tendermint.types.PartSetHeader: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - tendermint.version.Consensus: - type: object - properties: - block: - type: string - format: uint64 - app: - type: string - format: uint64 - description: >- - Consensus captures the consensus rules for processing a block in the - blockchain, - - including all blockchain data structures and the rules of the - application's - - state transition machine. - cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse: - type: object - description: >- - MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount - response type. - ibc.applications.transfer.v1.DenomTrace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for tracing - the - - source of the fungible token. - baseDenom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens and - the - - source tracing information path. - ibc.applications.transfer.v1.MsgTransferResponse: - type: object - description: MsgTransferResponse defines the Msg/Transfer response type. - ibc.applications.transfer.v1.Params: - type: object - properties: - sendEnabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token transfers from - this - - chain. - receiveEnabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token transfers to - this - - chain. - description: >- - Params defines the set of IBC transfer parameters. - - NOTE: To prevent a single token from being transferred, set the - - TransfersEnabled parameter to true and then set the bank module's - SendEnabled - - parameter for the denomination to false. - ibc.applications.transfer.v1.QueryDenomTraceResponse: - type: object - properties: - denomTrace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for - tracing the - - source of the fungible token. - baseDenom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens - and the - - source tracing information path. - description: |- - QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC - method. - ibc.applications.transfer.v1.QueryDenomTracesResponse: - type: object - properties: - denomTraces: - type: array - items: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for - tracing the - - source of the fungible token. - baseDenom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens - and the - - source tracing information path. - description: denom_traces returns all denominations trace information. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryConnectionsResponse is the response type for the Query/DenomTraces - RPC - - method. - ibc.applications.transfer.v1.QueryParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - sendEnabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token transfers - from this - - chain. - receiveEnabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token - transfers to this - - chain. - description: QueryParamsResponse is the response type for the Query/Params RPC method. - ibc.core.client.v1.Height: - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while keeping - RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height continues - to - - be monitonically increasing even as the RevisionHeight gets reset - title: >- - Height is a monotonically increasing data type - - that can be compared against another Height for the purposes of updating - and - - freezing clients - ibc.core.channel.v1.Channel: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channelId: - type: string - title: channel end on the counterparty chain - connectionHops: - type: array - items: - type: string - title: |- - list of connection identifiers, in order, along which packets sent on - this channel will travel - version: - type: string - title: 'opaque channel version, which is agreed upon during the handshake' - description: |- - Channel defines pipeline for exactly-once packet delivery between specific - modules on separate blockchains, which has at least one end capable of - sending packets and one end capable of receiving packets. - ibc.core.channel.v1.Counterparty: - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channelId: - type: string - title: channel end on the counterparty chain - title: Counterparty defines a channel end counterparty - ibc.core.channel.v1.IdentifiedChannel: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channelId: - type: string - title: channel end on the counterparty chain - connectionHops: - type: array - items: - type: string - title: |- - list of connection identifiers, in order, along which packets sent on - this channel will travel - version: - type: string - title: 'opaque channel version, which is agreed upon during the handshake' - portId: - type: string - title: port identifier - channelId: - type: string - title: channel identifier - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - ibc.core.channel.v1.MsgAcknowledgementResponse: - type: object - description: MsgAcknowledgementResponse defines the Msg/Acknowledgement response type. - ibc.core.channel.v1.MsgChannelCloseConfirmResponse: - type: object - description: >- - MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm - response type. - ibc.core.channel.v1.MsgChannelCloseInitResponse: - type: object - description: >- - MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response - type. - ibc.core.channel.v1.MsgChannelOpenAckResponse: - type: object - description: MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type. - ibc.core.channel.v1.MsgChannelOpenConfirmResponse: - type: object - description: >- - MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response - type. - ibc.core.channel.v1.MsgChannelOpenInitResponse: - type: object - description: MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. - ibc.core.channel.v1.MsgChannelOpenTryResponse: - type: object - description: MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. - ibc.core.channel.v1.MsgRecvPacketResponse: - type: object - description: MsgRecvPacketResponse defines the Msg/RecvPacket response type. - ibc.core.channel.v1.MsgTimeoutOnCloseResponse: - type: object - description: MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type. - ibc.core.channel.v1.MsgTimeoutResponse: - type: object - description: MsgTimeoutResponse defines the Msg/Timeout response type. - ibc.core.channel.v1.Order: - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - title: Order defines if a channel is ORDERED or UNORDERED - ibc.core.channel.v1.Packet: - type: object - properties: - sequence: - type: string - format: uint64 - description: >- - number corresponds to the order of sends and receives, where a Packet - - with an earlier sequence number must be sent and received before a - Packet - - with a later sequence number. - sourcePort: - type: string - description: identifies the port on the sending chain. - sourceChannel: - type: string - description: identifies the channel end on the sending chain. - destinationPort: - type: string - description: identifies the port on the receiving chain. - destinationChannel: - type: string - description: identifies the channel end on the receiving chain. - data: - type: string - format: byte - title: actual opaque bytes transferred directly to the application module - timeoutHeight: - title: block height after which the packet times out - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - timeoutTimestamp: - type: string - format: uint64 - title: block timestamp (in nanoseconds) after which the packet times out - title: >- - Packet defines a type that carries data across different chains through - IBC - ibc.core.channel.v1.PacketState: - type: object - properties: - portId: - type: string - description: channel port identifier. - channelId: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: |- - PacketState defines the generic type necessary to retrieve and store - packet commitments, acknowledgements, and receipts. - Caller is responsible for knowing the context necessary to interpret this - state as a commitment, acknowledgement, or a receipt. - ibc.core.channel.v1.QueryChannelClientStateResponse: - type: object - properties: - identifiedClientState: - title: client state associated with the channel - type: object - properties: - clientId: - type: string - title: client identifier - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - ibc.core.channel.v1.QueryChannelConsensusStateResponse: - type: object - properties: - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state associated with the channel - clientId: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - ibc.core.channel.v1.QueryChannelResponse: - type: object - properties: - channel: - title: channel associated with the request identifiers - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channelId: - type: string - title: channel end on the counterparty chain - connectionHops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets sent - on - - this channel will travel - version: - type: string - title: 'opaque channel version, which is agreed upon during the handshake' - description: >- - Channel defines pipeline for exactly-once packet delivery between - specific - - modules on separate blockchains, which has at least one end capable of - - sending packets and one end capable of receiving packets. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - description: >- - QueryChannelResponse is the response type for the Query/Channel RPC - method. - - Besides the Channel end, it includes a proof and the height from which the - - proof was retrieved. - ibc.core.channel.v1.QueryChannelsResponse: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other end of - the channel. - channelId: - type: string - title: channel end on the counterparty chain - connectionHops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets - sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - portId: - type: string - title: port identifier - channelId: - type: string - title: channel identifier - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - description: list of stored channels of the chain. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - description: >- - QueryChannelsResponse is the response type for the Query/Channels RPC - method. - ibc.core.channel.v1.QueryConnectionChannelsResponse: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - portId: - type: string - description: >- - port on the counterparty chain which owns the other end of - the channel. - channelId: - type: string - title: channel end on the counterparty chain - connectionHops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets - sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - portId: - type: string - title: port identifier - channelId: - type: string - title: channel identifier - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - description: list of channels associated with a connection. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryConnectionChannelsResponse is the Response type for the - Query/QueryConnectionChannels RPC method - ibc.core.channel.v1.QueryNextSequenceReceiveResponse: - type: object - properties: - nextSequenceReceive: - type: string - format: uint64 - title: next sequence receive number - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QuerySequenceResponse is the request type for the - Query/QueryNextSequenceReceiveResponse RPC method - ibc.core.channel.v1.QueryPacketAcknowledgementResponse: - type: object - properties: - acknowledgement: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryPacketAcknowledgementResponse defines the client query response for a - packet which also includes a proof and the height from which the - proof was retrieved - ibc.core.channel.v1.QueryPacketAcknowledgementsResponse: - type: object - properties: - acknowledgements: - type: array - items: - type: object - properties: - portId: - type: string - description: channel port identifier. - channelId: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to interpret - this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryPacketAcknowledgemetsResponse is the request type for the - Query/QueryPacketAcknowledgements RPC method - ibc.core.channel.v1.QueryPacketCommitmentResponse: - type: object - properties: - commitment: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: >- - QueryPacketCommitmentResponse defines the client query response for a - packet - - which also includes a proof and the height from which the proof was - - retrieved - ibc.core.channel.v1.QueryPacketCommitmentsResponse: - type: object - properties: - commitments: - type: array - items: - type: object - properties: - portId: - type: string - description: channel port identifier. - channelId: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to interpret - this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryPacketCommitmentsResponse is the request type for the - Query/QueryPacketCommitments RPC method - ibc.core.channel.v1.QueryPacketReceiptResponse: - type: object - properties: - received: - type: boolean - title: success flag for if receipt exists - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: >- - QueryPacketReceiptResponse defines the client query response for a packet - receipt - - which also includes a proof, and the height from which the proof was - - retrieved - ibc.core.channel.v1.QueryUnreceivedAcksResponse: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived acknowledgement sequences - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryUnreceivedAcksResponse is the response type for the - Query/UnreceivedAcks RPC method - ibc.core.channel.v1.QueryUnreceivedPacketsResponse: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived packet sequences - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryUnreceivedPacketsResponse is the response type for the - Query/UnreceivedPacketCommitments RPC method - ibc.core.channel.v1.State: - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ibc.core.client.v1.IdentifiedClientState: - type: object - properties: - clientId: - type: string - title: client identifier - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - ibc.core.client.v1.ConsensusStateWithHeight: - type: object - properties: - height: - title: consensus state height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state - description: >- - ConsensusStateWithHeight defines a consensus state with an additional - height field. - ibc.core.client.v1.MsgCreateClientResponse: - type: object - description: MsgCreateClientResponse defines the Msg/CreateClient response type. - ibc.core.client.v1.MsgSubmitMisbehaviourResponse: - type: object - description: >- - MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response - type. - ibc.core.client.v1.MsgUpdateClientResponse: - type: object - description: MsgUpdateClientResponse defines the Msg/UpdateClient response type. - ibc.core.client.v1.MsgUpgradeClientResponse: - type: object - description: MsgUpgradeClientResponse defines the Msg/UpgradeClient response type. - ibc.core.client.v1.Params: - type: object - properties: - allowedClients: - type: array - items: - type: string - description: allowed_clients defines the list of allowed client state types. - description: Params defines the set of IBC light client parameters. - ibc.core.client.v1.QueryClientParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - allowedClients: - type: array - items: - type: string - description: allowed_clients defines the list of allowed client state types. - description: >- - QueryClientParamsResponse is the response type for the Query/ClientParams - RPC method. - ibc.core.client.v1.QueryClientStateResponse: - type: object - properties: - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state associated with the request identifier - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - description: >- - QueryClientStateResponse is the response type for the Query/ClientState - RPC - - method. Besides the client state, it includes a proof and the height from - - which the proof was retrieved. - ibc.core.client.v1.QueryClientStatesResponse: - type: object - properties: - clientStates: - type: array - items: - type: object - properties: - clientId: - type: string - title: client identifier - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: >- - IdentifiedClientState defines a client state with an additional - client - - identifier field. - description: list of stored ClientStates of the chain. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - description: >- - QueryClientStatesResponse is the response type for the Query/ClientStates - RPC - - method. - ibc.core.client.v1.QueryConsensusStateResponse: - type: object - properties: - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: >- - consensus state associated with the client identifier at the given - height - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: >- - QueryConsensusStateResponse is the response type for the - Query/ConsensusState - - RPC method - ibc.core.client.v1.QueryConsensusStatesResponse: - type: object - properties: - consensusStates: - type: array - items: - type: object - properties: - height: - title: consensus state height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset - the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets - reset - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state - description: >- - ConsensusStateWithHeight defines a consensus state with an - additional height field. - title: consensus states associated with the identifier - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: |- - QueryConsensusStatesResponse is the response type for the - Query/ConsensusStates RPC method - ibc.core.commitment.v1.MerklePrefix: - type: object - properties: - keyPrefix: - type: string - format: byte - title: |- - MerklePrefix is merkle path prefixed to the key. - The constructed key from the Path and the key will be append(Path.KeyPath, - append(Path.KeyPrefix, key...)) - ibc.core.connection.v1.ConnectionEnd: - type: object - properties: - clientId: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in - - the connection handshake. - description: >- - IBC version which can be utilised to determine encodings or protocols - for - - channels or packets utilising this connection. - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - clientId: - type: string - description: >- - identifies the client on the counterparty chain associated with a - given - - connection. - connectionId: - type: string - description: >- - identifies the connection end on the counterparty chain associated - with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - keyPrefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delayPeriod: - type: string - format: uint64 - description: >- - delay period that must pass before a consensus state can be used for - packet-verification - - NOTE: delay period logic is only implemented by some clients. - description: |- - ConnectionEnd defines a stateful object on a chain connected to another - separate one. - NOTE: there must only be 2 defined ConnectionEnds to establish - a connection between two chains. - ibc.core.connection.v1.Counterparty: - type: object - properties: - clientId: - type: string - description: >- - identifies the client on the counterparty chain associated with a - given - - connection. - connectionId: - type: string - description: >- - identifies the connection end on the counterparty chain associated - with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - keyPrefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - description: >- - Counterparty defines the counterparty chain associated with a connection - end. - ibc.core.connection.v1.IdentifiedConnection: - type: object - properties: - id: - type: string - description: connection identifier. - clientId: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings or protocols - for - - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - clientId: - type: string - description: >- - identifies the client on the counterparty chain associated with a - given - - connection. - connectionId: - type: string - description: >- - identifies the connection end on the counterparty chain associated - with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - keyPrefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delayPeriod: - type: string - format: uint64 - description: delay period associated with this connection. - description: |- - IdentifiedConnection defines a connection with additional connection - identifier field. - ibc.core.connection.v1.MsgConnectionOpenAckResponse: - type: object - description: >- - MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response - type. - ibc.core.connection.v1.MsgConnectionOpenConfirmResponse: - type: object - description: >- - MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm - response type. - ibc.core.connection.v1.MsgConnectionOpenInitResponse: - type: object - description: >- - MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response - type. - ibc.core.connection.v1.MsgConnectionOpenTryResponse: - type: object - description: >- - MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response - type. - ibc.core.connection.v1.QueryClientConnectionsResponse: - type: object - properties: - connectionPaths: - type: array - items: - type: string - description: slice of all the connection paths associated with a client. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was generated - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryClientConnectionsResponse is the response type for the - Query/ClientConnections RPC method - ibc.core.connection.v1.QueryConnectionClientStateResponse: - type: object - properties: - identifiedClientState: - title: client state associated with the channel - type: object - properties: - clientId: - type: string - title: client identifier - clientState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: client state - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryConnectionClientStateResponse is the response type for the - Query/ConnectionClientState RPC method - ibc.core.connection.v1.QueryConnectionConsensusStateResponse: - type: object - properties: - consensusState: - type: object - properties: - typeUrl: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - title: consensus state associated with the channel - clientId: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - title: |- - QueryConnectionConsensusStateResponse is the response type for the - Query/ConnectionConsensusState RPC method - ibc.core.connection.v1.QueryConnectionResponse: - type: object - properties: - connection: - title: connection associated with the request identifier - type: object - properties: - clientId: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in - - the connection handshake. - description: >- - IBC version which can be utilised to determine encodings or - protocols for - - channels or packets utilising this connection. - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - clientId: - type: string - description: >- - identifies the client on the counterparty chain associated - with a given - - connection. - connectionId: - type: string - description: >- - identifies the connection end on the counterparty chain - associated with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - keyPrefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delayPeriod: - type: string - format: uint64 - description: >- - delay period that must pass before a consensus state can be used - for packet-verification - - NOTE: delay period logic is only implemented by some clients. - description: >- - ConnectionEnd defines a stateful object on a chain connected to - another - - separate one. - - NOTE: there must only be 2 defined ConnectionEnds to establish - - a connection between two chains. - proof: - type: string - format: byte - title: merkle proof of existence - proofHeight: - title: height at which the proof was retrieved - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - description: >- - QueryConnectionResponse is the response type for the Query/Connection RPC - - method. Besides the connection end, it includes a proof and the height - from - - which the proof was retrieved. - ibc.core.connection.v1.QueryConnectionsResponse: - type: object - properties: - connections: - type: array - items: - type: object - properties: - id: - type: string - description: connection identifier. - clientId: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the - IBC verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings or - protocols for - - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - clientId: - type: string - description: >- - identifies the client on the counterparty chain associated - with a given - - connection. - connectionId: - type: string - description: >- - identifies the connection end on the counterparty chain - associated with a - - given connection. - prefix: - description: commitment merkle prefix of the counterparty chain. - type: object - properties: - keyPrefix: - type: string - format: byte - title: >- - MerklePrefix is merkle path prefixed to the key. - - The constructed key from the Path and the key will be - append(Path.KeyPath, - - append(Path.KeyPrefix, key...)) - delayPeriod: - type: string - format: uint64 - description: delay period associated with this connection. - description: |- - IdentifiedConnection defines a connection with additional connection - identifier field. - description: list of stored connections of the chain. - pagination: - title: pagination response - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - revisionNumber: - type: string - format: uint64 - title: the revision that the client is currently on - revisionHeight: - type: string - format: uint64 - title: the height within the given revision - description: >- - Normally the RevisionHeight is incremented at each height while - keeping RevisionNumber - - the same. However some consensus algorithms may choose to reset the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the RevisionNumber is incremented so that height - continues to - - be monitonically increasing even as the RevisionHeight gets reset - description: >- - QueryConnectionsResponse is the response type for the Query/Connections - RPC - - method. - ibc.core.connection.v1.State: - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a connection is in one of the following states: - INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A connection end has just started the opening handshake. - - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty - chain. - - STATE_OPEN: A connection end has completed the handshake. - ibc.core.connection.v1.Version: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: |- - Version defines the versioning scheme used to negotiate the IBC verison in - the connection handshake. - tendermint.spn.profile.Coordinator: - type: object - properties: - coordinatorId: - type: string - format: uint64 - address: - type: string - description: - type: object - properties: - identity: - type: string - website: - type: string - details: - type: string - tendermint.spn.profile.CoordinatorByAddress: - type: object - properties: - address: - type: string - coordinatorId: - type: string - format: uint64 - tendermint.spn.profile.CoordinatorDescription: - type: object - properties: - identity: - type: string - website: - type: string - details: - type: string - tendermint.spn.profile.MsgCreateCoordinatorResponse: - type: object - properties: - coordinatorId: - type: string - format: uint64 - tendermint.spn.profile.MsgUpdateCoordinatorAddressResponse: - type: object - tendermint.spn.profile.QueryAllCoordinatorResponse: - type: object - properties: - Coordinator: - type: array - items: - type: object - properties: - coordinatorId: - type: string - format: uint64 - address: - type: string - description: - type: object - properties: - identity: - type: string - website: - type: string - details: - type: string - pagination: - type: object - properties: - nextKey: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - tendermint.spn.profile.QueryGetCoordinatorByAddressResponse: - type: object - properties: - coordinatorByAddress: - type: object - properties: - address: - type: string - coordinatorId: - type: string - format: uint64 - tendermint.spn.profile.QueryGetCoordinatorResponse: - type: object - properties: - Coordinator: - type: object - properties: - coordinatorId: - type: string - format: uint64 - address: - type: string - description: - type: object - properties: - identity: - type: string - website: - type: string - details: - type: string \ No newline at end of file +{"id":"github.com/ignite/network","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/ignite/network REST API","title":"HTTP API Console","contact":{"name":"github.com/ignite/network"},"version":"version not set"},"paths":{},"definitions":{"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}}}} \ No newline at end of file diff --git a/docs/template/index.tpl b/docs/template/index.tpl new file mode 100644 index 00000000..ec098e82 --- /dev/null +++ b/docs/template/index.tpl @@ -0,0 +1,28 @@ + + + + + {{ .Title }} + + + + +
+ + + + + +Footer +© 2022 GitHub, Inc. +Footer navigation diff --git a/go.mod b/go.mod index 39414c01..bf119eae 100644 --- a/go.mod +++ b/go.mod @@ -1,343 +1,399 @@ -module github.com/tendermint/spn +module github.com/ignite/network -go 1.19 +go 1.22.1 + +toolchain go1.23.1 + +replace ( + // fix upstream GHSA-h395-qcrw-5vmq vulnerability. + github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 + // replace broken goleveldb + github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 +) require ( - cosmossdk.io/api v0.3.1 - cosmossdk.io/errors v1.0.0-beta.7 - cosmossdk.io/math v1.0.1 - github.com/aws/smithy-go v1.8.0 - github.com/bufbuild/buf v1.22.0 - github.com/cometbft/cometbft v0.37.2 - github.com/cometbft/cometbft-db v0.8.0 - github.com/cosmos/cosmos-proto v1.0.0-beta.2 - github.com/cosmos/cosmos-sdk v0.47.3 - github.com/cosmos/gogoproto v1.4.10 - github.com/cosmos/ibc-go/v7 v7.2.0 + cosmossdk.io/api v0.7.5 + cosmossdk.io/client/v2 v2.0.0-beta.4 + cosmossdk.io/collections v0.4.0 + cosmossdk.io/core v0.11.1 + cosmossdk.io/depinject v1.0.0 + cosmossdk.io/errors v1.0.1 + cosmossdk.io/log v1.3.1 + cosmossdk.io/math v1.3.0 + cosmossdk.io/store v1.1.0 + cosmossdk.io/tools/confix v0.1.1 + cosmossdk.io/x/circuit v0.1.0 + cosmossdk.io/x/evidence v0.1.0 + cosmossdk.io/x/feegrant v0.1.0 + cosmossdk.io/x/nft v0.1.0 + cosmossdk.io/x/upgrade v0.1.4 + github.com/bufbuild/buf v1.34.0 + github.com/cometbft/cometbft v0.38.10 + github.com/cosmos/cosmos-db v1.0.2 + github.com/cosmos/cosmos-proto v1.0.0-beta.5 + github.com/cosmos/cosmos-sdk v0.50.9 + github.com/cosmos/gogoproto v1.5.0 + github.com/cosmos/ibc-go/modules/capability v1.0.0 + github.com/cosmos/ibc-go/v8 v8.3.1 github.com/gogo/protobuf v1.3.2 - github.com/golang/protobuf v1.5.3 - github.com/golangci/golangci-lint v1.50.1 - github.com/gorilla/mux v1.8.0 + github.com/golang/protobuf v1.5.4 + github.com/golangci/golangci-lint v1.61.0 + github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 - github.com/ignite/modules v0.0.2 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 + github.com/ignite/modules v0.0.3-0.20241001010902-46071e4a67ad github.com/pkg/errors v0.9.1 - github.com/spf13/cast v1.5.1 - github.com/spf13/cobra v1.7.0 + github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.4 - github.com/tendermint/fundraising v0.4.1 - golang.org/x/tools v0.10.0 - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 - google.golang.org/grpc v1.55.0 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 - google.golang.org/protobuf v1.31.0 + github.com/spf13/viper v1.19.0 + github.com/stretchr/testify v1.9.0 + golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e + golang.org/x/tools v0.24.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed + google.golang.org/grpc v1.66.0 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 + google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v2 v2.4.0 - mvdan.cc/gofumpt v0.5.0 + mvdan.cc/gofumpt v0.7.0 ) -replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - require ( - 4d63.com/gochecknoglobals v0.1.0 // indirect - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.19.1 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.0.0 // indirect - cloud.google.com/go/storage v1.30.1 // indirect - cosmossdk.io/core v0.5.1 // indirect - cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/log v1.1.0 // indirect - cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff // indirect - cosmossdk.io/tools/rosetta v0.2.1 // indirect + 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect + 4d63.com/gochecknoglobals v0.2.1 // indirect + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240508200655-46a4cf4ba109.2 // indirect + buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240610164129-660609bc46d3.1 // indirect + buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240610164129-660609bc46d3.2 // indirect + cloud.google.com/go v0.115.1 // indirect + cloud.google.com/go/auth v0.9.3 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect + cloud.google.com/go/compute/metadata v0.5.0 // indirect + cloud.google.com/go/iam v1.2.0 // indirect + cloud.google.com/go/storage v1.43.0 // indirect + connectrpc.com/connect v1.16.2 // indirect + connectrpc.com/otelconnect v0.7.0 // indirect + cosmossdk.io/x/tx v0.13.4 // indirect filippo.io/edwards25519 v1.0.0 // indirect + github.com/4meepo/tagalign v1.3.4 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect - github.com/Abirdcfly/dupword v0.0.7 // indirect - github.com/Antonboom/errname v0.1.7 // indirect - github.com/Antonboom/nilnil v0.1.1 // indirect + github.com/99designs/keyring v1.2.2 // indirect + github.com/Abirdcfly/dupword v0.1.1 // indirect + github.com/Antonboom/errname v0.1.13 // indirect + github.com/Antonboom/nilnil v0.1.9 // indirect + github.com/Antonboom/testifylint v1.4.3 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect - github.com/BurntSushi/toml v1.2.1 // indirect - github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect + github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect + github.com/Crocmagnon/fatcontext v0.5.2 // indirect + github.com/DataDog/datadog-go v3.2.0+incompatible // indirect + github.com/DataDog/zstd v1.5.5 // indirect github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect - github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 // indirect - github.com/Masterminds/semver v1.5.0 // indirect + github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.0 // indirect + github.com/Masterminds/semver/v3 v3.3.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/OpenPeeDeeP/depguard v1.1.1 // indirect + github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect + github.com/alecthomas/go-check-sumtype v0.1.4 // indirect + github.com/alexkohler/nakedret/v2 v2.0.4 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect github.com/alingse/asasalint v0.0.11 // indirect - github.com/armon/go-metrics v0.4.1 // indirect - github.com/ashanbrown/forbidigo v1.3.0 // indirect + github.com/antlr4-go/antlr/v4 v4.13.0 // indirect + github.com/ashanbrown/forbidigo v1.6.0 // indirect github.com/ashanbrown/makezero v1.1.1 // indirect - github.com/aws/aws-sdk-go v1.44.244 // indirect + github.com/aws/aws-sdk-go v1.55.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/bkielbasa/cyclop v1.2.0 // indirect + github.com/bits-and-blooms/bitset v1.8.0 // indirect + github.com/bkielbasa/cyclop v1.2.1 // indirect github.com/blizzy78/varnamelen v0.8.0 // indirect - github.com/bombsimon/wsl/v3 v3.3.0 // indirect - github.com/breml/bidichk v0.2.3 // indirect - github.com/breml/errchkjson v0.3.0 // indirect + github.com/bombsimon/wsl/v4 v4.4.1 // indirect + github.com/breml/bidichk v0.2.7 // indirect + github.com/breml/errchkjson v0.3.6 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/bufbuild/connect-go v1.8.0 // indirect - github.com/bufbuild/connect-opentelemetry-go v0.3.0 // indirect - github.com/bufbuild/protocompile v0.5.1 // indirect - github.com/butuzov/ireturn v0.1.1 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/bufbuild/protocompile v0.14.0 // indirect + github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee // indirect + github.com/bufbuild/protovalidate-go v0.6.2 // indirect + github.com/bufbuild/protoyaml-go v0.1.9 // indirect + github.com/butuzov/ireturn v0.3.0 // indirect + github.com/butuzov/mirror v1.2.0 // indirect + github.com/catenacyber/perfsprint v0.7.1 // indirect + github.com/ccojocar/zxcvbn-go v1.0.2 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/charithe/durationcheck v0.0.9 // indirect - github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 // indirect - github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/charithe/durationcheck v0.0.10 // indirect + github.com/chavacava/garif v0.1.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/ckaznocha/intrange v0.2.0 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect - github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect - github.com/confio/ics23/go v0.9.0 // indirect - github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect + github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v1.1.0 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/cometbft/cometbft-db v0.9.1 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v0.20.0 // indirect + github.com/cosmos/iavl v1.1.2 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect - github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/creachadair/taskgroup v0.4.2 // indirect + github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/creachadair/atomicfile v0.3.1 // indirect + github.com/creachadair/tomledit v0.0.24 // indirect github.com/curioswitch/go-reassign v0.2.0 // indirect - github.com/daixiang0/gci v0.8.1 // indirect - github.com/danieljoos/wincred v1.1.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect - github.com/denis-tingaikin/go-header v0.4.3 // indirect + github.com/daixiang0/gci v0.13.5 // indirect + github.com/danieljoos/wincred v1.2.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/denis-tingaikin/go-header v0.5.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/docker/cli v24.0.2+incompatible // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.2+incompatible // indirect - github.com/docker/docker-credential-helpers v0.7.0 // indirect - github.com/docker/go-connections v0.4.0 // indirect + github.com/distribution/reference v0.6.0 // indirect + github.com/docker/cli v26.1.4+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker v27.1.1+incompatible // indirect + github.com/docker/docker-credential-helpers v0.8.2 // indirect + github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/esimonov/ifshort v1.0.4 // indirect - github.com/ettle/strcase v0.1.1 // indirect - github.com/fatih/color v1.13.0 // indirect + github.com/dvsekhvalnov/jose2go v1.6.0 // indirect + github.com/emicklei/dot v1.6.1 // indirect + github.com/ettle/strcase v0.2.0 // indirect + github.com/fatih/color v1.17.0 // indirect github.com/fatih/structtag v1.2.0 // indirect - github.com/felixge/fgprof v0.9.3 // indirect - github.com/felixge/httpsnoop v1.0.2 // indirect - github.com/firefart/nonamedreturns v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/felixge/fgprof v0.9.4 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/firefart/nonamedreturns v1.0.5 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect - github.com/go-chi/chi/v5 v5.0.8 // indirect - github.com/go-critic/go-critic v0.6.5 // indirect + github.com/ghostiam/protogetter v0.3.6 // indirect + github.com/gin-gonic/gin v1.9.0 // indirect + github.com/go-chi/chi/v5 v5.0.13 // indirect + github.com/go-critic/go-critic v0.11.4 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.2.4 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-toolsmith/astcast v1.0.0 // indirect - github.com/go-toolsmith/astcopy v1.0.2 // indirect - github.com/go-toolsmith/astequal v1.0.3 // indirect - github.com/go-toolsmith/astfmt v1.0.0 // indirect - github.com/go-toolsmith/astp v1.0.0 // indirect - github.com/go-toolsmith/strparse v1.0.0 // indirect - github.com/go-toolsmith/typep v1.0.2 // indirect - github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b // indirect + github.com/go-playground/validator/v10 v10.12.0 // indirect + github.com/go-toolsmith/astcast v1.1.0 // indirect + github.com/go-toolsmith/astcopy v1.1.0 // indirect + github.com/go-toolsmith/astequal v1.2.0 // indirect + github.com/go-toolsmith/astfmt v1.1.0 // indirect + github.com/go-toolsmith/astp v1.1.0 // indirect + github.com/go-toolsmith/strparse v1.1.0 // indirect + github.com/go-toolsmith/typep v1.1.0 // indirect + github.com/go-viper/mapstructure/v2 v2.1.0 // indirect + github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gofrs/flock v0.8.1 // indirect - github.com/gofrs/uuid/v5 v5.0.0 // indirect + github.com/gofrs/flock v0.12.1 // indirect + github.com/gofrs/uuid/v5 v5.2.0 // indirect github.com/gogo/googleapis v1.4.1 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/golang/glog v1.2.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect - github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe // indirect - github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 // indirect - github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 // indirect - github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca // indirect - github.com/golangci/misspell v0.3.5 // indirect - github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 // indirect - github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect + github.com/golangci/gofmt v0.0.0-20240816233607-d8596aa466a9 // indirect + github.com/golangci/misspell v0.6.0 // indirect + github.com/golangci/modinfo v0.3.4 // indirect + github.com/golangci/plugin-module-register v0.1.1 // indirect + github.com/golangci/revgrep v0.5.3 // indirect + github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/go-containerregistry v0.15.2 // indirect + github.com/google/cel-go v0.20.1 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-containerregistry v0.19.2 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect - github.com/google/s2a-go v0.1.3 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect - github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 // indirect - github.com/gorilla/handlers v1.5.1 // indirect + github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 // indirect + github.com/google/s2a-go v0.1.8 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/gordonklaus/ineffassign v0.1.0 // indirect + github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/gostaticanalysis/analysisutil v0.7.1 // indirect github.com/gostaticanalysis/comment v1.4.2 // indirect github.com/gostaticanalysis/forcetypeassert v0.1.0 // indirect github.com/gostaticanalysis/nilerr v0.1.1 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect - github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.1 // indirect + github.com/hashicorp/go-getter v1.7.5 // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-metrics v0.5.3 // indirect + github.com/hashicorp/go-plugin v1.6.0 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect github.com/huandu/skiplist v1.2.0 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jdxcode/netrc v0.0.0-20221124155335-4616370d1a84 // indirect - github.com/jgautheron/goconst v1.5.1 // indirect + github.com/jdx/go-netrc v1.0.0 // indirect + github.com/jgautheron/goconst v1.7.1 // indirect github.com/jingyugao/rowserrcheck v1.1.1 // indirect github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect + github.com/jjti/go-spancheck v0.6.2 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/julz/importas v0.1.0 // indirect - github.com/kisielk/errcheck v1.6.2 // indirect - github.com/kisielk/gotool v1.0.0 // indirect - github.com/kkHAIKE/contextcheck v1.1.3 // indirect - github.com/klauspost/compress v1.16.6 // indirect + github.com/karamaru-alpha/copyloopvar v1.1.0 // indirect + github.com/kisielk/errcheck v1.7.0 // indirect + github.com/kkHAIKE/contextcheck v1.1.5 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/pgzip v1.2.6 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/kulti/thelper v0.6.3 // indirect - github.com/kunwardeep/paralleltest v1.0.6 // indirect - github.com/kyoh86/exportloopref v0.1.8 // indirect - github.com/ldez/gomoddirectives v0.2.3 // indirect - github.com/ldez/tagliatelle v0.3.1 // indirect - github.com/leonklingele/grouper v1.1.0 // indirect - github.com/lib/pq v1.10.7 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.7.16 // indirect + github.com/kunwardeep/paralleltest v1.0.10 // indirect + github.com/kyoh86/exportloopref v0.1.11 // indirect + github.com/lasiar/canonicalheader v1.1.1 // indirect + github.com/ldez/gomoddirectives v0.2.4 // indirect + github.com/ldez/tagliatelle v0.5.0 // indirect + github.com/leodido/go-urn v1.2.3 // indirect + github.com/leonklingele/grouper v1.1.2 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/linxGnu/grocksdb v1.8.14 // indirect github.com/lufeee/execinquery v1.2.1 // indirect + github.com/macabu/inamedparam v0.1.3 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/maratori/testableexamples v1.0.0 // indirect - github.com/maratori/testpackage v1.1.0 // indirect - github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 // indirect + github.com/maratori/testpackage v1.1.1 // indirect + github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/mbilski/exhaustivestruct v1.2.0 // indirect - github.com/mgechev/revive v1.2.4 // indirect - github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect + github.com/mgechev/revive v1.3.9 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/term v0.5.0 // indirect - github.com/moricho/tparallel v0.2.1 // indirect + github.com/moricho/tparallel v0.3.2 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/nakabonne/nestif v0.3.1 // indirect - github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect - github.com/nishanths/exhaustive v0.8.3 // indirect + github.com/nishanths/exhaustive v0.12.0 // indirect github.com/nishanths/predeclared v0.2.2 // indirect + github.com/nunnatsa/ginkgolinter v0.16.2 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect + github.com/oklog/run v1.1.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc3 // indirect - github.com/pelletier/go-toml/v2 v2.0.8 // indirect - github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect - github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d // indirect - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect + github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/profile v1.7.0 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/polyfloyd/go-errorlint v1.0.5 // indirect - github.com/prometheus/client_golang v1.14.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect - github.com/quasilyte/go-ruleguard v0.3.18 // indirect - github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f // indirect - github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/polyfloyd/go-errorlint v1.6.0 // indirect + github.com/prometheus/client_golang v1.19.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.52.2 // indirect + github.com/prometheus/procfs v0.13.0 // indirect + github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 // indirect + github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect + github.com/quasilyte/gogrep v0.5.0 // indirect + github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect - github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rs/cors v1.9.0 // indirect - github.com/rs/zerolog v1.29.1 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/rs/cors v1.11.0 // indirect + github.com/rs/zerolog v1.32.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/ryancurrah/gomodguard v1.2.4 // indirect - github.com/ryanrolds/sqlclosecheck v0.3.0 // indirect - github.com/sanposhiho/wastedassign/v2 v2.0.6 // indirect + github.com/ryancurrah/gomodguard v1.3.5 // indirect + github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sashamelentyev/interfacebloat v1.1.0 // indirect - github.com/sashamelentyev/usestdlibvars v1.20.0 // indirect - github.com/securego/gosec/v2 v2.13.1 // indirect + github.com/sashamelentyev/usestdlibvars v1.27.0 // indirect + github.com/securego/gosec/v2 v2.21.2 // indirect github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/sivchari/containedctx v1.0.2 // indirect - github.com/sivchari/nosnakecase v1.7.0 // indirect - github.com/sivchari/tenv v1.7.0 // indirect - github.com/sonatard/noctx v0.0.1 // indirect - github.com/sourcegraph/go-diff v0.6.1 // indirect - github.com/spf13/afero v1.9.5 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/viper v1.16.0 // indirect + github.com/sivchari/containedctx v1.0.3 // indirect + github.com/sivchari/tenv v1.10.0 // indirect + github.com/sonatard/noctx v0.0.2 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/sourcegraph/go-diff v0.7.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect - github.com/stretchr/objx v0.5.0 // indirect - github.com/subosito/gotenv v1.4.2 // indirect + github.com/stoewer/go-strcase v1.3.0 // indirect + github.com/stretchr/objx v0.5.2 // indirect + github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tdakkota/asciicheck v0.1.1 // indirect + github.com/tdakkota/asciicheck v0.2.0 // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tetafro/godot v1.4.11 // indirect - github.com/tetratelabs/wazero v1.2.1 // indirect - github.com/tidwall/btree v1.6.0 // indirect - github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 // indirect - github.com/timonwong/loggercheck v0.9.3 // indirect - github.com/tomarrell/wrapcheck/v2 v2.7.0 // indirect + github.com/tetafro/godot v1.4.17 // indirect + github.com/tidwall/btree v1.7.0 // indirect + github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 // indirect + github.com/timonwong/loggercheck v0.9.4 // indirect + github.com/tomarrell/wrapcheck/v2 v2.9.0 // indirect github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ulikunitz/xz v0.5.11 // indirect - github.com/ultraware/funlen v0.0.3 // indirect - github.com/ultraware/whitespace v0.0.5 // indirect - github.com/uudashr/gocognit v1.0.6 // indirect - github.com/vbatts/tar-split v0.11.3 // indirect + github.com/ulikunitz/xz v0.5.12 // indirect + github.com/ultraware/funlen v0.1.0 // indirect + github.com/ultraware/whitespace v0.1.1 // indirect + github.com/uudashr/gocognit v1.1.3 // indirect + github.com/vbatts/tar-split v0.11.5 // indirect + github.com/xen0n/gosmopolitan v1.2.2 // indirect github.com/yagipy/maintidx v1.0.0 // indirect - github.com/yeya24/promlinter v0.2.0 // indirect - github.com/zondax/hid v0.9.1 // indirect - github.com/zondax/ledger-go v0.14.1 // indirect - gitlab.com/bosi/decorder v0.2.3 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + github.com/yeya24/promlinter v0.3.0 // indirect + github.com/ykadowak/zerologlint v0.1.5 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + gitlab.com/bosi/decorder v0.4.2 // indirect + go-simpler.org/musttag v0.12.2 // indirect + go-simpler.org/sloglint v0.7.2 // indirect + go.etcd.io/bbolt v1.3.9 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/otel v1.16.0 // indirect - go.opentelemetry.io/otel/metric v1.16.0 // indirect - go.opentelemetry.io/otel/sdk v1.16.0 // indirect - go.opentelemetry.io/otel/trace v1.16.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/sdk v1.28.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/atomic v1.11.0 // indirect + go.uber.org/automaxprocs v1.5.3 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.10.0 // indirect - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect - golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 // indirect - golang.org/x/mod v0.11.0 // indirect - golang.org/x/net v0.11.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/term v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.122.0 // indirect - google.golang.org/appengine v1.6.7 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/oauth2 v0.22.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/term v0.24.0 // indirect + golang.org/x/text v0.18.0 // indirect + golang.org/x/time v0.6.0 // indirect + google.golang.org/api v0.196.0 // indirect + google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - honnef.co/go/tools v0.3.3 // indirect - mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed // indirect - mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect - mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 // indirect + gotest.tools/v3 v3.5.1 // indirect + honnef.co/go/tools v0.5.1 // indirect + mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect nhooyr.io/websocket v1.8.6 // indirect - pgregory.net/rapid v0.5.5 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + pgregory.net/rapid v1.1.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 6d39a654..03d35d5f 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,18 @@ -4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA= +4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs= +4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc= +4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240508200655-46a4cf4ba109.2 h1:cFrEG/pJch6t62+jqndcPXeTNkYcztS4tBRgNkR+drw= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240508200655-46a4cf4ba109.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240610164129-660609bc46d3.1 h1:PmSlGbLLyhKIAm46ROmzdGVaaYgDdFsQNA+VftjuCLs= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240610164129-660609bc46d3.1/go.mod h1:4ptL49VoWyYwajT6j4zu5vmQ/k/om4tGMB9atY2FhEo= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240610164129-660609bc46d3.2 h1:y1+UxFIWzj/eF2RCPqt9egR7Rt9vgQkXNUzSdmR6iEU= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240610164129-660609bc46d3.2/go.mod h1:psseUmlKRo9v5LZJtR/aTpdTLuyp9o3X7rnLT87SZEo= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -18,7 +25,6 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= @@ -34,8 +40,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= +cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -50,6 +56,10 @@ cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjby cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= +cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= +cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -72,10 +82,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= @@ -113,13 +121,14 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.0.0 h1:hlQJMovyJJwYjZcTohUH4o1L8Z8kYz+E+W/zktiLCBc= -cloud.google.com/go/iam v1.0.0/go.mod h1:ikbQ4f1r91wTmBmmOtBCOtuEOei6taatNXytzB7Cxew= +cloud.google.com/go/iam v1.2.0 h1:kZKMKVNk/IsSSc/udOb83K0hL/Yh/Gcqpz+oAkoIFN8= +cloud.google.com/go/iam v1.2.0/go.mod h1:zITGuWgsLZxd8OwAlX+eMFgZDXzBm7icj1PVTYG766Q= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI= +cloud.google.com/go/longrunning v0.6.0/go.mod h1:uHzSZqW89h7/pasCWNYdUpwGz3PcVWhrWupreVPYLts= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -173,12 +182,11 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= -cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= +cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -190,97 +198,132 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= -cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= -cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= -cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= -cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= -cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff h1:P1ialzTepD1oxdNPYc5N8Eggq3RdejZq3cJs8YYMs9Y= -cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff/go.mod h1:AKzx6Mb544LjJ9RHmGFHjY9rEOLiUAi8I0F727TR0dY= -cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= -cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= +connectrpc.com/connect v1.16.2 h1:ybd6y+ls7GOlb7Bh5C8+ghA6SvCBajHwxssO2CGFjqE= +connectrpc.com/connect v1.16.2/go.mod h1:n2kgwskMHXC+lVqb18wngEpF95ldBHXjZYJussz5FRc= +connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= +connectrpc.com/otelconnect v0.7.0/go.mod h1:Bt2ivBymHZHqxvo4HkJ0EwHuUzQN6k2l0oH+mp/8nwc= +cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= +cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/client/v2 v2.0.0-beta.4 h1:LGIzWbVTOof/IHQZeoWwxPX0fq607ONXhsfA7eUrQIg= +cosmossdk.io/client/v2 v2.0.0-beta.4/go.mod h1:c753d0sBv3AQRx6X+BOKL1aGpKjZMTZAHGiLPbVi5TE= +cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= +cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= +cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= +cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= +cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= +cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= +cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= +cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= +cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= +cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= +cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= +cosmossdk.io/tools/confix v0.1.1 h1:aexyRv9+y15veH3Qw16lxQwo+ki7r2I+g0yNTEFEQM8= +cosmossdk.io/tools/confix v0.1.1/go.mod h1:nQVvP1tHsGXS83PonPVWJtSbddIqyjEw99L4M3rPJyQ= +cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= +cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= +cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= +cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= +cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= +cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= +cosmossdk.io/x/nft v0.1.0 h1:VhcsFiEK33ODN27kxKLa0r/CeFd8laBfbDBwYqCyYCM= +cosmossdk.io/x/nft v0.1.0/go.mod h1:ec4j4QAO4mJZ+45jeYRnW7awLHby1JZANqe1hNZ4S3g= +cosmossdk.io/x/tx v0.13.4 h1:Eg0PbJgeO0gM8p5wx6xa0fKR7hIV6+8lC56UrsvSo0Y= +cosmossdk.io/x/tx v0.13.4/go.mod h1:BkFqrnGGgW50Y6cwTy+JvgAhiffbGEKW6KF9ufcDpvk= +cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= +cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/4meepo/tagalign v1.3.4 h1:P51VcvBnf04YkHzjfclN6BbsopfJR5rxs1n+5zHt+w8= +github.com/4meepo/tagalign v1.3.4/go.mod h1:M+pnkHH2vG8+qhE5bVc/zeP7HS/j910Fwa9TUSyZVI0= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= -github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= -github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= -github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= -github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= +github.com/Abirdcfly/dupword v0.1.1 h1:Bsxe0fIw6OwBtXMIncaTxCLHYO5BB+3mcsR5E8VXloY= +github.com/Abirdcfly/dupword v0.1.1/go.mod h1:B49AcJdTYYkpd4HjgAcutNGG9HZ2JWwKunH9Y2BA6sM= +github.com/Antonboom/errname v0.1.13 h1:JHICqsewj/fNckzrfVSe+T33svwQxmjC+1ntDsHOVvM= +github.com/Antonboom/errname v0.1.13/go.mod h1:uWyefRYRN54lBg6HseYCFhs6Qjcy41Y3Jl/dVhA87Ns= +github.com/Antonboom/nilnil v0.1.9 h1:eKFMejSxPSA9eLSensFmjW2XTgTwJMjZ8hUHtV4s/SQ= +github.com/Antonboom/nilnil v0.1.9/go.mod h1:iGe2rYwCq5/Me1khrysB4nwI7swQvjclR8/YRPl5ihQ= +github.com/Antonboom/testifylint v1.4.3 h1:ohMt6AHuHgttaQ1xb6SSnxCeK4/rnK7KKzbvs7DmEck= +github.com/Antonboom/testifylint v1.4.3/go.mod h1:+8Q9+AOLsz5ZiQiiYujJKs9mNz398+M6UgslP4qgJLA= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/Crocmagnon/fatcontext v0.5.2 h1:vhSEg8Gqng8awhPju2w7MKHqMlg4/NI+gSDHtR3xgwA= +github.com/Crocmagnon/fatcontext v0.5.2/go.mod h1:87XhRMaInHP44Q7Tlc7jkgKKB7kZAOPiDkFMdKCC+74= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= +github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= +github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.0 h1:/fTUt5vmbkAcMBt4YQiuC23cV0kEsN1MVMNqeOW43cU= +github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.0/go.mod h1:ONJg5sxcbsdQQ4pOW8TGdTidT2TMAUy/2Xhr8mrYaao= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0= +github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= -github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= +github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJPdp74zmpA= +github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= +github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= +github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c= +github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= +github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= +github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexkohler/nakedret/v2 v2.0.4 h1:yZuKmjqGi0pSmjGpOC016LtPJysIL0WEUiaXW5SUnNg= +github.com/alexkohler/nakedret/v2 v2.0.4/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= -github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY= +github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.44.244 h1:QzBWLD5HjZHdRZyTMTOWtD9Pobzf1n8/CeTJB4giXi0= -github.com/aws/aws-sdk-go v1.44.244/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -290,53 +333,62 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= +github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bkielbasa/cyclop v1.2.1 h1:AeF71HZDob1P2/pRm1so9cd1alZnrpyc4q2uP2l0gJY= +github.com/bkielbasa/cyclop v1.2.1/go.mod h1:K/dT/M0FPAiYjBgQGau7tz+3TMh4FWAEqlMhzFWCrgM= github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= +github.com/bombsimon/wsl/v4 v4.4.1 h1:jfUaCkN+aUpobrMO24zwyAMwMAV5eSziCkOKEauOLdw= +github.com/bombsimon/wsl/v4 v4.4.1/go.mod h1:Xu/kDxGZTofQcDGCtQe9KCzhHphIe0fDuyWTxER9Feo= +github.com/breml/bidichk v0.2.7 h1:dAkKQPLl/Qrk7hnP6P+E0xOodrq8Us7+U0o4UBOAlQY= +github.com/breml/bidichk v0.2.7/go.mod h1:YodjipAGI9fGcYM7II6wFvGhdMYsC5pHDlGzqvEW3tQ= +github.com/breml/errchkjson v0.3.6 h1:VLhVkqSBH96AvXEyclMR37rZslRrY2kcyq+31HCsVrA= +github.com/breml/errchkjson v0.3.6/go.mod h1:jhSDoFheAF2RSDOlCfhHO9KqhZgAYLyvHe7bRCX8f/U= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/bufbuild/buf v1.22.0 h1:dCWUIx1gm3nm5U+FKdkVjaL+Rk9Ev3hh4XYMa2Cbn/o= -github.com/bufbuild/buf v1.22.0/go.mod h1:ERFRzJiIjAOzUSJ3vz1zoI7XfxlBnCwZEyL+NJm4pko= -github.com/bufbuild/connect-go v1.8.0 h1:srluNkFkZBfSfg9Qb6DrO+5nMaxix//h2ctrHZhMGKc= -github.com/bufbuild/connect-go v1.8.0/go.mod h1:GmMJYR6orFqD0Y6ZgX8pwQ8j9baizDrIQMm1/a6LnHk= -github.com/bufbuild/connect-opentelemetry-go v0.3.0 h1:AuZi3asTDKmjGtd2aqpyP4p5QvBFG/YEaHopViLatnk= -github.com/bufbuild/connect-opentelemetry-go v0.3.0/go.mod h1:r1ppyTtu1EWeRodk4Q/JbyQhIWtO7eR3GoRDzjeEcNU= -github.com/bufbuild/protocompile v0.5.1 h1:mixz5lJX4Hiz4FpqFREJHIXLfaLBntfaJv1h+/jS+Qg= -github.com/bufbuild/protocompile v0.5.1/go.mod h1:G5iLmavmF4NsYtpZFvE3B/zFch2GIY8+wjsYLR/lc40= -github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.8.7 h1:d3sry5vGgVq/OpgozRUNP6xBsSo0mtNdwliApw+SAMQ= +github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= +github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9w277ABlgELO7H04IM= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/bufbuild/buf v1.34.0 h1:rZSVfYS5SakOe6ds9PDjbHVwOc+vBGVWNW9Ei+Rg/+c= +github.com/bufbuild/buf v1.34.0/go.mod h1:Fj+KBmY2ODYD2Ld02w4LH9Y3WiRH2203IjGJbKYK5Hc= +github.com/bufbuild/protocompile v0.14.0 h1:z3DW4IvXE5G/uTOnSQn+qwQQxvhckkTWLS/0No/o7KU= +github.com/bufbuild/protocompile v0.14.0/go.mod h1:N6J1NYzkspJo3ZwyL4Xjvli86XOj1xq4qAasUFxGups= +github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee h1:E6ET8YUcYJ1lAe6ctR3as7yqzW2BNItDFnaB5zQq/8M= +github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee/go.mod h1:HjGFxsck9RObrTJp2hXQZfWhPgZqnR6sR1U5fCA/Kus= +github.com/bufbuild/protovalidate-go v0.6.2 h1:U/V3CGF0kPlR12v41rjO4DrYZtLcS4ZONLmWN+rJVCQ= +github.com/bufbuild/protovalidate-go v0.6.2/go.mod h1:4BR3rKEJiUiTy+sqsusFn2ladOf0kYmA2Reo6BHSBgQ= +github.com/bufbuild/protoyaml-go v0.1.9 h1:anV5UtF1Mlvkkgp4NWA6U/zOnJFng8Orq4Vf3ZUQHBU= +github.com/bufbuild/protoyaml-go v0.1.9/go.mod h1:KCBItkvZOK/zwGueLdH1Wx1RLyFn5rCH7YjQrdty2Wc= +github.com/butuzov/ireturn v0.3.0 h1:hTjMqWw3y5JC3kpnC5vXmFJAWI/m31jaCYQqzkS6PL0= +github.com/butuzov/ireturn v0.3.0/go.mod h1:A09nIiwiqzN/IoVo9ogpa0Hzi9fex1kd9PSD6edP5ZA= +github.com/butuzov/mirror v1.2.0 h1:9YVK1qIjNspaqWutSv8gsge2e/Xpq1eqEkslEUHy5cs= +github.com/butuzov/mirror v1.2.0/go.mod h1:DqZZDtzm42wIAIyHXeN8W/qb1EPlb9Qn/if9icBOpdQ= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/catenacyber/perfsprint v0.7.1 h1:PGW5G/Kxn+YrN04cRAZKC+ZuvlVwolYMrIyyTJ/rMmc= +github.com/catenacyber/perfsprint v0.7.1/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= +github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg= +github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4= +github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ= +github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc= +github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= +github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs= +github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= @@ -348,6 +400,8 @@ github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/ckaznocha/intrange v0.2.0 h1:FykcZuJ8BD7oX93YbO1UY9oZtkRbp+1/kJcDjkefYLs= +github.com/ckaznocha/intrange v0.2.0/go.mod h1:r5I7nUlAAG56xmkOpw4XVr16BXhwYTUdcuRFeevn1oE= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -361,20 +415,30 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= +github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= +github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= -github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= -github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= -github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= -github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= -github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= +github.com/cometbft/cometbft v0.38.10 h1:2ePuglchT+j0Iao+cfmt/nw5U7K2lnGDzXSUPGVdXaU= +github.com/cometbft/cometbft v0.38.10/go.mod h1:jHPx9vQpWzPHEAiYI/7EDKaB1NXhK6o3SArrrY8ExKc= +github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= +github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= -github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= +github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -383,54 +447,57 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= -github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= +github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/cosmos-sdk v0.50.9 h1:gt2usjz0H0qW6KwAxWw7ZJ3XU8uDwmhN+hYG3nTLeSg= +github.com/cosmos/cosmos-sdk v0.50.9/go.mod h1:TMH6wpoYBcg7Cp5BEg8fneLr+8XloNQkf2MRNF9V6JE= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= -github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= -github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= -github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= -github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= +github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= +github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= +github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= +github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= +github.com/cosmos/ibc-go/v8 v8.3.1 h1:cUNWvTCftKQIcpbf2y/jVzo2OY3g4GVFw6tTC/pQ+tA= +github.com/cosmos/ibc-go/v8 v8.3.1/go.mod h1:izwHZvn9lKrBn8xWj0aXWut6HKcwHMPD3uyuvOJoPSA= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= -github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= -github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= +github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= +github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= -github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= +github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/atomicfile v0.3.1 h1:yQORkHjSYySh/tv5th1dkKcn02NEW5JleB84sjt+W4Q= +github.com/creachadair/atomicfile v0.3.1/go.mod h1:mwfrkRxFKwpNAflYZzytbSwxvbK6fdGRRlp0KEQc0qU= +github.com/creachadair/tomledit v0.0.24 h1:5Xjr25R2esu1rKCbQEmjZYlrhFkDspoAbAKb6QKQDhQ= +github.com/creachadair/tomledit v0.0.24/go.mod h1:9qHbShRWQzSCcn617cMzg4eab1vbLCOjOshAWSzWr8U= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= -github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/daixiang0/gci v0.13.5 h1:kThgmH1yBmZSBCh1EJVxQ7JsHpm5Oms0AMed/0LaH4c= +github.com/daixiang0/gci v0.13.5/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk= +github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= +github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8= +github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -442,28 +509,32 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/cli v24.0.2+incompatible h1:QdqR7znue1mtkXIJ+ruQMGQhpw2JzMJLRXp6zpzF6tM= -github.com/docker/cli v24.0.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.2+incompatible h1:eATx+oLz9WdNVkQrr0qjQ8HvRJ4bOOxfzEo8R+dA3cg= -github.com/docker/docker v24.0.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= -github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/cli v26.1.4+incompatible h1:I8PHdc0MtxEADqYJZvhBrW9bo8gawKwwenxRM7/rLu8= +github.com/docker/cli v26.1.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v27.1.1+incompatible h1:hO/M4MtV36kzKldqnA37IWhebRA+LnqqcqDja6kVaKY= +github.com/docker/docker v27.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= +github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= +github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI= +github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -475,42 +546,51 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= +github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= -github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/felixge/fgprof v0.9.4 h1:ocDNwMFlnA0NU0zSB3I52xkO4sFXk80VK9lXjLClu88= +github.com/felixge/fgprof v0.9.4/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA= +github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghostiam/protogetter v0.3.6 h1:R7qEWaSgFCsy20yYHNIJsU9ZOb8TziSRRxuAOTVKeOk= +github.com/ghostiam/protogetter v0.3.6/go.mod h1:7lpeDnEJ1ZjL/YtyoN99ljO4z0pd3H0d18/t2dPBxHw= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= -github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= -github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= -github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= +github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= +github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/go-chi/chi/v5 v5.0.13 h1:JlH2F2M8qnwl0N1+JFFzlX9TlKJYas3aPXdiuTmJL+w= +github.com/go-chi/chi/v5 v5.0.13/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-critic/go-critic v0.11.4 h1:O7kGOCx0NDIni4czrkRIXTnit0mkyKOCePh3My6OyEU= +github.com/go-critic/go-critic v0.11.4/go.mod h1:2QAdo4iuLik5S9YG0rT4wcZ8QxwHYkrr6/2MWAiv/vc= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -528,56 +608,67 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-playground/validator/v10 v10.12.0 h1:E4gtWgxWxp8YSxExrQFv5BpCahla0PVF2oTTEYaWQGI= +github.com/go-playground/validator/v10 v10.12.0/go.mod h1:hCAPuzYvKdP33pxWa+2+6AIKXEKqjIUyqsNCtbsSJrA= +github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= +github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= -github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8= +github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU= +github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s= +github.com/go-toolsmith/astcopy v1.1.0/go.mod h1:hXM6gan18VA1T/daUEHCFcYiW8Ai1tIwIzHY6srfEAw= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5 h1:eD9POs68PHkwrx7hAB78z1cb6PfGq/jyWn3wJywsH1o= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= +github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ= +github.com/go-toolsmith/astequal v1.2.0 h1:3Fs3CYZ1k9Vo4FzFhwwewC3CHISHDnVUPC4x0bI2+Cw= +github.com/go-toolsmith/astequal v1.2.0/go.mod h1:c8NZ3+kSFtFY/8lPso4v8LuJjdJiUFVnSuU3s0qrrDY= +github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco= +github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4= +github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA= +github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA= +github.com/go-toolsmith/pkgload v1.2.2 h1:0CtmHq/02QhxcF7E9N5LIFcYFsMR5rdovfqTtRKkgIk= +github.com/go-toolsmith/pkgload v1.2.2/go.mod h1:R2hxLNRKuAsiXCo2i5J6ZQPhnPMOVtU+f0arbFPWCus= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw= +github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= +github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= +github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= +github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= +github.com/go-viper/mapstructure/v2 v2.1.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= +github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= +github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= +github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= +github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk= +github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= -github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= +github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= +github.com/gofrs/uuid/v5 v5.2.0 h1:qw1GMx6/y8vhVsx626ImfKMuS5CvJmhIKKtuyvfajMM= +github.com/gofrs/uuid/v5 v5.2.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -589,8 +680,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4= +github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -625,36 +716,34 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= -github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= -github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/golangci/gofmt v0.0.0-20240816233607-d8596aa466a9 h1:/1322Qns6BtQxUZDTAT4SdcoxknUki7IAoK4SAXr8ME= +github.com/golangci/gofmt v0.0.0-20240816233607-d8596aa466a9/go.mod h1:Oesb/0uFAyWoaw1U1qS5zyjCg5NP9C9iwjnI4tIsXEE= +github.com/golangci/golangci-lint v1.61.0 h1:VvbOLaRVWmyxCnUIMTbf1kDsaJbTzH20FAMXTAlQGu8= +github.com/golangci/golangci-lint v1.61.0/go.mod h1:e4lztIrJJgLPhWvFPDkhiMwEFRrWlmFbrZea3FsJyN8= +github.com/golangci/misspell v0.6.0 h1:JCle2HUTNWirNlDIAUO44hUsKhOFqGPoC4LZxlaSXDs= +github.com/golangci/misspell v0.6.0/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo= +github.com/golangci/modinfo v0.3.4 h1:oU5huX3fbxqQXdfspamej74DFX0kyGLkw1ppvXoJ8GA= +github.com/golangci/modinfo v0.3.4/go.mod h1:wytF1M5xl9u0ij8YSvhkEVPP3M5Mc7XLl1pxH3B2aUM= +github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c= +github.com/golangci/plugin-module-register v0.1.1/go.mod h1:TTpqoB6KkwOJMV8u7+NyXMrkwwESJLOkfl9TxR1DGFc= +github.com/golangci/revgrep v0.5.3 h1:3tL7c1XBMtWHHqVpS5ChmiAAoe4PF/d5+ULzV9sLAzs= +github.com/golangci/revgrep v0.5.3/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k= +github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs= +github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84= +github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -669,19 +758,22 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.15.2 h1:MMkSh+tjSdnmJZO7ljvEqV1DjfekB6VUEAZgy3a+TQE= -github.com/google/go-containerregistry v0.15.2/go.mod h1:wWK+LnOv4jXMM23IT/F1wdYftGWGr47Is8CG+pmHK1Q= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.19.2 h1:TannFKE1QSajsP6hPWb5oJNgKe1IKjHukIKDUmvsV6w= +github.com/google/go-containerregistry v0.19.2/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -693,27 +785,28 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= -github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs= -github.com/google/pprof v0.0.0-20230602150820-91b7bce49751/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA= +github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.3.3 h1:QRje2j5GZimBzlbhGA2V2QlGNgL8G6e+wGo/+/2bWI0= +github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -723,30 +816,25 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s= +github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= @@ -756,41 +844,39 @@ github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3 github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 h1:gDLXvp5S9izjldquuoAhDzccbskOL6tDC5jMSyx3zxE= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2/go.mod h1:7pdNwVWBBHGiCxa9lAszqCJMbfTISJ7oMftp8+UGV08= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= -github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4= +github.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= +github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-plugin v1.6.0 h1:wgd4KxHJTVGGqWBq4QPB1i5BZNEx9BR8+OFmHDmTk8A= +github.com/hashicorp/go-plugin v1.6.0/go.mod h1:lBS5MtSSBZk0SHc66KACcjjlU6WzEVP/8pwz68aMkCI= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= @@ -798,23 +884,29 @@ github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoD github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= @@ -825,26 +917,34 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= -github.com/ignite/modules v0.0.2 h1:yvrwVUn+Rw33ZQ4W9wa7RjUfCL/R4Jp1we6y6DJ4Cmc= -github.com/ignite/modules v0.0.2/go.mod h1:xAUWlXeQsgyn+ppv/8lnmXbAJIKpkyMdV3J6gl3wO3U= +github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= +github.com/ignite/modules v0.0.3-0.20241001010553-074d16791470 h1:hQyV9fCgRKSRqixQLI30IJd8BW93ML9j96kYmClYeXY= +github.com/ignite/modules v0.0.3-0.20241001010553-074d16791470/go.mod h1:dUUmof5pdx14d7YGRByjzErnaTSHYCFd1Doz+sPIjhs= +github.com/ignite/modules v0.0.3-0.20241001010902-46071e4a67ad h1:55iaGD5dHzkr7/VOXz5EncTMDgNw+1zZYSK6SxdFGSI= +github.com/ignite/modules v0.0.3-0.20241001010902-46071e4a67ad/go.mod h1:dUUmof5pdx14d7YGRByjzErnaTSHYCFd1Doz+sPIjhs= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jdxcode/netrc v0.0.0-20221124155335-4616370d1a84 h1:2uT3aivO7NVpUPGcQX7RbHijHMyWix/yCnIrCWc+5co= -github.com/jdxcode/netrc v0.0.0-20221124155335-4616370d1a84/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= -github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ= +github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8= +github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk= +github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/protoreflect v1.16.0 h1:54fZg+49widqXYQ0b+usAFHbMkBGR4PpXrsHc8+TBDg= +github.com/jhump/protoreflect v1.16.0/go.mod h1:oYPd7nPvcBw/5wlDfm/AVmU9zH9BgqGCI469pGxfj/8= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jjti/go-spancheck v0.6.2 h1:iYtoxqPMzHUPp7St+5yA8+cONdyXD3ug6KK15n7Pklk= +github.com/jjti/go-spancheck v0.6.2/go.mod h1:+X7lvIrR5ZdUTkxFYqzJ0abr8Sb5LOo80uOhWNqIrYA= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -852,15 +952,14 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -870,72 +969,75 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/karamaru-alpha/copyloopvar v1.1.0 h1:x7gNyKcC2vRBO1H2Mks5u1VxQtYvFiym7fCjIP8RPos= +github.com/karamaru-alpha/copyloopvar v1.1.0/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= -github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0= +github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= -github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= +github.com/kkHAIKE/contextcheck v1.1.5 h1:CdnJh63tcDe53vG+RebdpdXJTc9atMgGqdx8LXxiilg= +github.com/kkHAIKE/contextcheck v1.1.5/go.mod h1:O930cpht4xb1YQpK+1+AgoM3mFsvxr7uyFptcnWTYUA= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.6 h1:91SKEy4K37vkp255cJ8QesJhjyRO0hn9i9G0GoUwLsk= -github.com/klauspost/compress v1.16.6/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= -github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= -github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= +github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs= +github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= +github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= +github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= +github.com/lasiar/canonicalheader v1.1.1 h1:wC+dY9ZfiqiPwAexUApFush/csSPXeIi4QqyxXmng8I= +github.com/lasiar/canonicalheader v1.1.1/go.mod h1:cXkb3Dlk6XXy+8MVQnF23CYKWlyA7kfQhSw2CcZtZb0= +github.com/ldez/gomoddirectives v0.2.4 h1:j3YjBIjEBbqZ0NKtBNzr8rtMHTOrLPeiwTkfUJZ3alg= +github.com/ldez/gomoddirectives v0.2.4/go.mod h1:oWu9i62VcQDYp9EQ0ONTfqLNh+mDLWWDO+SO0qSQw5g= +github.com/ldez/tagliatelle v0.5.0 h1:epgfuYt9v0CG3fms0pEgIMNPuFf/LpPIfjk4kyqSioo= +github.com/ldez/tagliatelle v0.5.0/go.mod h1:rj1HmWiL1MiKQuOONhd09iySTEkUuE/8+5jtPYz9xa4= +github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.3 h1:6BE2vPT0lqoz3fmOesHZiaiFh7889ssCo2GMvLCfiuA= -github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/leodido/go-urn v1.2.3/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY= +github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= -github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= +github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= +github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk= +github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= -github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= -github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04= +github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc= +github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE= +github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -948,24 +1050,17 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= -github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= +github.com/mgechev/revive v1.3.9 h1:18Y3R4a2USSBF+QZKFQwVkBROUda7uoBlkEuBD+YD1A= +github.com/mgechev/revive v1.3.9/go.mod h1:+uxEIr5UH0TjXWHTno3xh4u7eg6jDpXKzQccA9UGhHU= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -981,6 +1076,8 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -990,8 +1087,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/moricho/tparallel v0.3.2 h1:odr8aZVFA3NZrNybggMkYO3rgPRcqjeQUlBBFVxKHTI= +github.com/moricho/tparallel v0.3.2/go.mod h1:OQ+K3b4Ln3l2TZveGCywybl68glfLEwFGqvnjok8b+U= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= @@ -1009,17 +1106,22 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= -github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhKRf3Swg= +github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= +github.com/nunnatsa/ginkgolinter v0.16.2 h1:8iLqHIZvN4fTLDC0Ke9tbSZVcyVHoBs0HIbnVSxfHJk= +github.com/nunnatsa/ginkgolinter v0.16.2/go.mod h1:4tWRinDN1FeJgU+iJANW/kz7xKN5nYRAOfJDQUS9dOQ= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= @@ -1028,17 +1130,21 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= +github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= +github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= -github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1047,9 +1153,12 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= +github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= @@ -1060,18 +1169,19 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= +github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1079,100 +1189,98 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= -github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v1.6.0 h1:tftWV9DE7txiFzPpztTAwyoRLKNj9gpVm2cg8/OwcYY= +github.com/polyfloyd/go-errorlint v1.6.0/go.mod h1:HR7u8wuP1kb1NeN1zqTd1ZMlqUKPPHF+Id4vIPvDqVw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= +github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= -github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= +github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= +github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 h1:+Wl/0aFp0hpuHM3H//KMft64WQ1yX9LdJY64Qm/gFCo= +github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI= +github.com/quasilyte/go-ruleguard/dsl v0.3.22 h1:wd8zkOhSNr+I+8Qeciml08ivDt1pSXe60+5DqOpCjPE= +github.com/quasilyte/go-ruleguard/dsl v0.3.22/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= +github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU= +github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= -github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.9.0 h1:l9HGsTsHJcvW14Nk7J9KFz8bzeAWXn3CG6bgt7LsrAE= -github.com/rs/cors v1.9.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= +github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= +github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= -github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= -github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryancurrah/gomodguard v1.3.5 h1:cShyguSwUEeC0jS7ylOiG/idnd1TpJ1LfHGpV3oJmPU= +github.com/ryancurrah/gomodguard v1.3.5/go.mod h1:MXlEPQRxgfPQa62O8wzK3Ozbkv9Rkqr+wKjSxTdsNJE= +github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU= +github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= +github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= -github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= +github.com/sashamelentyev/usestdlibvars v1.27.0 h1:t/3jZpSXtRPRf2xr0m63i32ZrusyurIGT9E5wAvXQnI= +github.com/sashamelentyev/usestdlibvars v1.27.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= -github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= +github.com/securego/gosec/v2 v2.21.2 h1:deZp5zmYf3TWwU7A7cR2+SolbTpZ3HQiwFqnzQyEl3M= +github.com/securego/gosec/v2 v2.21.2/go.mod h1:au33kg78rNseF5PwPnTWhuYBFf534bvJRvOrgZ/bFzU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= @@ -1182,59 +1290,58 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= -github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= -github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE= +github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4= +github.com/sivchari/tenv v1.10.0 h1:g/hzMA+dBCKqGXgW8AV/1xIWhAvDrx0zFKNR48NFMg0= +github.com/sivchari/tenv v1.10.0/go.mod h1:tdY24masnVoZFxYrHv/nD6Tc8FbkEtAQEEziXpyMgqY= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sonatard/noctx v0.0.2 h1:L7Dz4De2zDQhW8S0t+KUjY0MAQJd6SgVwhzNIc4ok00= +github.com/sonatard/noctx v0.0.2/go.mod h1:kzFz+CzWSjQ2OzIm46uJZoXuBpa2+0y3T36U18dWqIo= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0= +github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= -github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= -github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= +github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= +github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1242,68 +1349,68 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tendermint/fundraising v0.4.1 h1:4N/Ogj8SYpkYHnCfgP86zzbJqWg3LSCencb9DwRTbhk= -github.com/tendermint/fundraising v0.4.1/go.mod h1:dHsY1oG8kykz7S1BsHtohsvXuGJOLR/WrY02PGFQmvE= +github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9qkHM= +github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/tetratelabs/wazero v1.2.1 h1:J4X2hrGzJvt+wqltuvcSjHQ7ujQxA9gb6PeMs4qlUWs= -github.com/tetratelabs/wazero v1.2.1/go.mod h1:wYx2gNRg8/WihJfSDxA1TIL8H+GkfLYm+bIfbblu9VQ= -github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= -github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= -github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/tetafro/godot v1.4.17 h1:pGzu+Ye7ZUEFx7LHU0dAKmCOXWsPjl7qA6iMGndsjPs= +github.com/tetafro/godot v1.4.17/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio= +github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= +github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M= +github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= +github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4= +github.com/timonwong/loggercheck v0.9.4/go.mod h1:caz4zlPcgvpEkXgVnAJGowHAMW2NwHaNlpS8xDbVhTg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= -github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tomarrell/wrapcheck/v2 v2.9.0 h1:801U2YCAjLhdN8zhZ/7tdjB3EnAoRlJHt/s+9hijLQ4= +github.com/tomarrell/wrapcheck/v2 v2.9.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= +github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ultraware/funlen v0.1.0 h1:BuqclbkY6pO+cvxoq7OsktIXZpgBSkYTQtmwhAK81vI= +github.com/ultraware/funlen v0.1.0/go.mod h1:XJqmOQja6DpxarLj6Jj1U7JuoS8PvL4nEqDaQhy22p4= +github.com/ultraware/whitespace v0.1.1 h1:bTPOGejYFulW3PkcrqkeQwOd6NKOOXvmGD9bo/Gk8VQ= +github.com/ultraware/whitespace v0.1.1/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= -github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= -github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= -github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= +github.com/uudashr/gocognit v1.1.3 h1:l+a111VcDbKfynh+airAy/DJQKaXh2m9vkoysMPSZyM= +github.com/uudashr/gocognit v1.1.3/go.mod h1:aKH8/e8xbTRBwjbCkwZ8qt4l2EpKXl31KMHgSS+lZ2U= +github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= +github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= +github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU= +github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs= +github.com/yeya24/promlinter v0.3.0/go.mod h1:cDfJQQYv9uYciW60QT0eeHlFodotkYZlL+YcPQN+mW4= +github.com/ykadowak/zerologlint v0.1.5 h1:Gy/fMz1dFQN9JZTPjv1hxEk+sRWm05row04Yoolgdiw= +github.com/ykadowak/zerologlint v0.1.5/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1311,15 +1418,21 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= -gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= +github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= +github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= +gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo= +gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8= +go-simpler.org/assert v0.9.0 h1:PfpmcSvL7yAnWyChSjOz6Sp6m9j5lyK8Ok9pEL31YkQ= +go-simpler.org/assert v0.9.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28= +go-simpler.org/musttag v0.12.2 h1:J7lRc2ysXOq7eM8rwaTYnNrHd5JwjppzB6mScysB2Cs= +go-simpler.org/musttag v0.12.2/go.mod h1:uN1DVIasMTQKk6XSik7yrJoEysGtR2GRqvWnI9S7TYM= +go-simpler.org/sloglint v0.7.2 h1:Wc9Em/Zeuu7JYpl+oKoYOsQSy2X560aVueCW/m6IijY= +go-simpler.org/sloglint v0.7.2/go.mod h1:US+9C80ppl7VsThQclkM7BkCHQAzuz8kHLsW3ppuluo= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= +go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1332,33 +1445,49 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= -go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= -go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= -go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= -go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiMWgE= -go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4= -go.opentelemetry.io/otel/sdk/metric v0.39.0 h1:Kun8i1eYf48kHH83RucG93ffz0zGV1sh46FAScOTuDI= -go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= -go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= +go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= +go.opentelemetry.io/otel/sdk/metric v1.19.0 h1:EJoTO5qysMsYCa+w4UghwFV/ptQgqSL/8Ni+hx+8i1k= +go.opentelemetry.io/otel/sdk/metric v1.19.0/go.mod h1:XjG0jQyFJrv2PbMvwND7LwCEhsJzCzV5210euduKcKY= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= +go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1367,15 +1496,12 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1387,11 +1513,12 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= +golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= +golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1420,8 +1547,11 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1463,16 +1593,13 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1485,8 +1612,11 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1512,8 +1642,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1528,8 +1658,9 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1587,34 +1718,29 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1628,23 +1754,27 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1654,29 +1784,27 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1687,7 +1815,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1701,7 +1828,6 @@ golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1714,33 +1840,23 @@ golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= @@ -1749,13 +1865,15 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= -golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1763,7 +1881,6 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1814,8 +1931,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.196.0 h1:k/RafYqebaIJBO3+SMnfEGtFVlvp5vSgqTUF54UN/zg= +google.golang.org/api v0.196.0/go.mod h1:g9IL21uGkYgvQ5BZg6BAtoGJQIm8r6EgaAbpNey5wBE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1823,7 +1940,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -1863,10 +1979,8 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1933,8 +2047,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4= +google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0= +google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1976,10 +2094,11 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= +google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= +google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1995,15 +2114,15 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -2029,8 +2148,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2039,25 +2158,20 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= -honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= -mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= -mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= +honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= +honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= +mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU= +mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo= +mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U= +mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= -pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/papers/audit.pdf b/papers/audit.pdf index 449474e5b6600cede94fd4d198cc53c5732bb430..31fcb2e7d7436011dd9ec9faad8384ed7cbe1e4c 100644 GIT binary patch literal 301008 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 delta 148879 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≶c$WTf#-TFj`2dt+RM;X(^BjhgL zRfIx$P4<UPLn`b5P)f7`sP)Z!SNc#$2{qWb zA>_8&&unNtA^GcV_TzWkJ}5(gm3G&f5p|11Oa~w0za8USe$aMt3D(`RelkkJ?X8$HxZ<97YG!jMS~9 zuxFx1vSz3bi*c7pVqq`41XU|Cc~v1jTi`lsdXYLS+2Ew%Wrq~Tn~&Azg+N9RfG!&z z>MbyPq0kAFC<-sK9#wq($puQhPit@5hx^k%X*x_Lia+W843F@`Njv?A;_Z$XKJNNBP>vs#_qG~{XW5^!w0 zw)Z3I^+P!FQyOXsXAXhmb(>iTPIT70Q_;2EJvpBVHYGmfV%ra>@0DdCIs z%BdpJwarOz2Y}U2&KhKV6(n9rulyQv4<=4m4gj59s0+-P1i7Q>a#b0lcsn>_q9Nt2 zg^JpTjs4uw47E$Trr)#^p_-aw^)k5Nu)2^um5DVQbQqBA&#TXCmJS7%`~ko(S(G*8 z<@7A+>_9bv!!-rnD(Nc~PRZL?X5`o@mE>?azoeWk=r&fJm6N@;C;3$;8OxM_00)!k z#iOUx-B+2~lZ(R`N>=nG&V~purV9hQ?Ss5SMoV8PSxfaFmek`xA(;Lw0NV?eJ#Klw z#*gr|t$w8q`u4G9edK`Vbcyeu8INxlp_mU2H4#0fIP2HMyQMGq1Wo}!lT7;aLtpna z29TN|tUCNp+k1$lvR6Jql7d@AqxgLI2YEP*LqyhzpU# zHxilO2%JjCOdL$BWh&j%y0^E=U#mi5p%9FN;``<^C|*tc&uNzU4x|G9e%aXghrKG^ zHPyQJcv~v1E`vm4AKn_8|kow%>=cLnm|<1O%ao-p76X%RDcHrl+Z zgYc%*!|FVzlWhipD{LJfUfbxTw{m`LUr+7$0`|gFgjdlWb8%PSdFNXX8i?a6Ck3D_cO@V`F`@LO=mT7 zTeCQ&GRPOoz)G!QL~^d;dOTgP492~RYq|1YdW~}w0y3`7KI%U*s$ck_xKyrIZ{jn8KFErvz7NnuWN9YAlr_u z-CV6;7;<{Z{F&@t&g(gyzg>ipw-q2q98tDgdZ0@-_!mtUQcSx*aMsagrO{yp#>NT)6)JOU_{Y2Hu~IV?Qz}5b_g&wH#jpSB1qoxysbIcLykm z%_)xKlTy|Y%Myge=3YHj%v`}yojbIVk&lY6FUVb2&UAO%t*43=QuECk2L@Ra+}&vVH4c$ zc_k^Ti3|MQZVqVJsCh2C0c<;TCT8{N@MxD_0gfD zFo6EOFl+i8fpm{ux`7{9GSB_=R}s$kYTvx2`3*iuGg;>X=fdNi@_KIoNMG)DH0nY2 zz&80N?CxqJTZ0bp=In#a*6scLh*Mg+pFsnNtt`?_B7z(}R>WrBAd~(SSy^FgKz3iC zisYp&95`N7>0}zKQuRT{$Z$PjV=gD=rUlVu-bKr0AI8~bFy(O?uhc1!kfH8711GuS z3FJ(3FQto=AOI_}CpFP~`LGJJEy*hUaNV?9;SksxYdL%l-;p2uo5u8T`V|JUs;Ez5H4ko;y zzSUg;_^LRP2qm(5&nsxk=o9&Eyh&Ypirg+5Q5bo;#v1Cr1_bJ4x_cg2-T&_R%b(tf z-aCa5O3$^=9>FC7Xz)Ju`_?k_FY*9!Y<{{&xqH^(>gS3~IWOc&6>Yeh;bUB_EzaKU z#>EY{e7JFv>?n>MX3XE}8@^R@$Y5mEadbGE56;ZSV5kb?jIcF=f_32RfVd}t*1fH{ zn;GzrYuhL*2jY<1iF(he#uWYe*P)8av zvf{rQa2|P+6-9*vLCu=y$$HrPW53cgBd1?7cd1k?@ptO_apo#jD!|fXk2np3M6a-D zF!SHSgd3#i6>&k2_l^0_0JQWz4MJ8}ojvnGp!TA+&}K%Ev}4*c`$g|#X30(0 zd&x+3;0S861cxl}C>D37<={ z2>YEOh@I+I^W-7S%Z_~*-t-!e7rC7WWe1PmTp$fdjB(KKWPy&`=v!59$aMF-N|Ic_ zMah0~i}A(X_?~W;9pOHvqWd`c_WWHRy1YO!4!hS_kS@C2goYCp+igTqC2$kD ztvIIg0^|Arpi;mkBIHL^vdAXXqZMFjkF+5vEyC-KN(H5njE2Xscd@S}!4jf^T=o-M z$Q5ZHjiIA<++2vFLcnF7)#}~!t%A}{7XNi31@W}6T|aU4>5`F8vZoQ>{*6iz%225y zKHH=}0LyJbbTzXd>WBqR?}X&mGx(Yp85}+d544(60FbKY1bxp$4tbELXk~Kk8bT+<{M5GX>+Kc?3oZyK?M<93*XU;aa@vA+q*=z!+q2k(vRv$5OZXR zCz$g>R2Fky)-3ZaKI@$J9-Y@Z2q@=SaTGx|q0QoM=RV`qX~uroW=%umy&oxF22)DF zp`Jd0_L0%*Z+u5dHHIYSHAt@wgKc>HZy=3}6X76p;on9@uFww)dj>5QlYi1G+*yHO zZXSd~J<-*V>tqVd7C2ZD4(~ksv?|cQzT@{)ytqk?MnGDdJKOFDG~aUngw!8X+cf z0QA`~*E%e8_|FYrRe($v0-tz4*?iW13OO@$;u@4&)R5M3?GKu0v6KjLLkb9nhlMpi zY{E$ZlC1Xia3M_|V2#@fA3=si*-F0Fqn@*b6})mCi2TDa^uwau7)JNK-5hF+`ucmw zQXaWzqb6Q=@N?o2sW)`dLTf7!Bv_vuq=_x*M^073MU+8*h&FlXeml(2Cj7t<7los-!9Etc#{VR`b6@Lv1S#fxgFz0SZ01iMAOpxGr=w2<)*GD>PJ6Q==dOi3D zx)P#4F~e=cVjLJA;GCl_(&CNe2n;?|B8SK7$ZsO87!fTJCn$B&2uNY~VW z+t#GvJBOO@@4ba|rnXJS%kC0NgH}`o%4}R2r4&uN(ERSC0}r3J__pS|o>x0C7%CAm z6ZgkA;=3vkuTR#vDqkv*a1d(Ngok9A1sybN&j`aR72{HVYIF*{{OvkLfQc50!9>06 z=+INE3ajjZZ9W$~nlq-Zg)(+K<_?0(ZTrSgt+Ni#=zxYE@1B^>?d#a}LonL8!3r*_ z-}6cHq$8RzB!4kGiNu2gaOh(bdR0RDtsDCCz!3dfieLn7e~$%(GD(uSB)UCnvt9pS zy@#~ErNJ0hRlxo4CQrIVmMK^3@EPr~gwJqWvM^l2+60=S&k!ga+WUGJ!%>FrCgxek z9ntx=EG6W<27VB#KqeZY*?v6NY3@oW90_2*KbqBC%hD1qy~1loO09c`bFC(XFZD&Z7p zdk^S!EYKY?pPJ zPh#C_5lq{0#*4gR2jXu4_FxOf=!GG#hz>p*WVrWtodrsW;TM~6Yv@g=g&BlAjM!kq z9m)-LFvYV?GuEbLf@n*uNy0V0Gv5cMgBuZlaG!Nm|G1=jAOlSb6@g-I zsTSUr$z1yCDdxP^*l*)hXfi^W5;X z(z>iExO^aqb^skDmavpfs3(luWNj}AqOL%%XLN630UcfHd60%}vpBymLNTS@!t3dbFb!vC%wYF+g3=e7awEP&tmG+knQ zQ`n=`v`@HtN8bSuJ9B!oQzEM=Z9vn8B;46ojG7a@9Z6(+w*PxHf&;WA4qvGeqvnBN zy*8(9bH_nms022lEUwSWxMX2o_uNQl$0R7xHjpYI>79RRba@f-jg0lb;fUhes^$q(IqKls#K8Xe2zUcRT&y%_+Mz@&$psfsyk-P8N<9_2_u;D z`j@~$XAw7D622A{#PdcaF5E5$4~F6xHw5<9!<(PqgpAQbHNX8x{Rw)_yE|JvIBwSj zOm?Bi+IpN$QiT6KB{33Dtp|*PQC>apzh%W^p=WOHcRwdRE8~V16SYsY@Oj_*EFN^3 zANhh=L(L>pXU~@QO*iZ%Ba*{9=cI=LNasWk$Xo=JHRBD3SO{(%WG8i`VV7wsGRQ40 zJDh~@abvymv!$9I7e880dCSw~HoWk9Poi9u7ww0@I}7S>B&lwL6GiVg4?ecsjoG1j zAo8G&ooYS=dJ*;_b7K?wD1Wj*;o-^CkW-fwtG{)V>U(43rppwe0`lgQt1iMh-BGzV z>HhQmJ0$RDYpisUe_-!o`rq_5;BRKo!hZEmc1ad5|F|jZLuWKgO{gI5W*~PWfAkyP z2(bgfUKY`|!x~<2BJfQ>eH#f7?ympS!Bg@9a8z@+qobwEcl^yTtLmSp)>(3zN0vP^ zsT5}Pehp4`$%oNdOGYZpW4F-C0By<{lOxQ9Qk!kw$xawnCBGKG<;hMu;k+cMX4e_a z2()9zBou&v+QXeB#pHg-!3}QhcpDCB~vG^jx%@d7WK8LReJ* zQprl&*Y!z#s~N(}$d%=4VKIp=xH}1Dj@@$)<8JMx@QpMIpxInma@3o-K|!!@yn}Tp zlku@6(G)b+=&k&o(2pU6>^9!GUZbOnsy`QYJcEo~ca5dx1-{wlRNOqsORdPbI$N6= zmAlMJmtP7P{aJ6^(F6@y2`V&!+eLF`$=%b2%cCSn27@=(2DjLqcPuqLwz8a*x?HS9&%l8o;b*4i8bk>uW2$Yde5g;mT?u7T zd;C>0$2XSaVcl`OEwA`olum)|CK#@^85H;l#R74j5y(pb2lWAO&T@CA8>sQ78eSv- z_BGZ%ta$SEKW&MM-nPD$?emes$p3hNVT4juLiqj1FZ5Z^3-CHlyuk=f9c%Bmj*GGq zF8ZK!NGDN^^b^-bSF>wqSp2-9M74PFnlWFTz}RkAt_~93zjqxPDTi1OS)|o^2-kVP z-<`CF(#@)$8pIDDt->ZvD8HzYeXvjCmQ)K7PC5OxOurM`0lYnq%rV6fcP*H{kl)hl zR0@7(c|{+y`ffN*dRam#$#)t*Lgq?8`aP`- z6x#Icn$^?b%V2B=O3HXp-McYYG>ZbHW(=T4)|jH43#2)kw>^c=SuvBb&&QH*C!VjI z3BeCSUjQ8jy)G~n{&yt$=8cV}?gN4RyCW~eSi50ia$CyuZS^4DG z)PB2@!21VDpwJ1VXO30}&%qf{?1~D0xWp!xf4LTI>Mu{k1-cWYAKrqDHsJ>=JnuP* zpw3nDj_#SjloRFhb13KWMpnZ>GtPRUOJQtZdFBqRm&J|B>IX7)V?j*_ zgv}u$No-cyZ`ca1BfYqd9w@_b(&ZojK1k|$Rhe~8aENdGh@B2i%g-j%RtR&zHzxUF zVudAXF~6rx-BCsiFN?9GM&1Be;gM(JX>PNdz}kqVE67(6I_K}L`S6~{wjo~l(u?)# zjzR!o`<=z8GPL>1uIFoAIeaohp8r+wz4wUs_KOEqEcVbdgd34Enez8-+!`FWoS3vu z_N+UdXyKd<sWf^|4PIc~TAv$j)|Srtj5(Bt?=A zM3D-6QXn&AI~g^8?SkY~Tgtc7Kc#Qchl@$c`?y=e9^2G-;fJJjP@tHI%eB5EU1#w} zO-szxU>lVF)-{iGeq{N`jXb=80#l(ZG!)Xdq?yKXOv?Ye@uK_{`cS$;qIQ)>vN0^R z^xQTG(6l{v%lPGE4?0J%SH(kSpKx$J@deWu%t11z*;ursk|}X~RPXVhjAzKdw%UI;BJR4Z zR#_2A_0kZAdCG?9q;ZqOz>s;8g745vi==*gG3a=oNIveK>Mqs8hZ~5wXhn2%D!4Jl zG$+@xYje$sIalK&=_6h8Vuw*?1YXE@DB!EKmi9)KLCrXfi^4DNDV*)9?H*?FNJ`!F zrxgCTp?|RLwl(n~HOF{$sEO+)k zjcWq4ee|j2JY{+OwUlI|Lux6A{;UH{lMl3`>zau-ps$KvRqoxo{tV{%K_?t$ap{@! zN*|E$jeEbmA`~A!axAxN`EUokA4j*F`+&hX=i#$FWScho(vLpZuZjhCK0=|=rwnat z`pZ4J`RhhjiUF*wmn8@%)mFE^#jr04dfy)F`U`Ve#x;io3S^=g=ElM=*&QZs2psgGzii_`@y^ZkoZm z>vl=@6idW0$%%SO%1v9E$PA~<4ik(*Pv1Y8NeslT1qHy;$~m$%yo!8IzBvYH6E1x= zb4SbL?X|#o(YUx$bjW(1_X)@H5^0{XWZ(s-32cou%zX+I|0V{L_6vtbNUA$KUNJA@ z5AvGu%>frm_bQL=$w&+ud#yoP{NP~P*~eltN(>Br7`fmz>uXLSk$jwaaek3w zb>f)rR7HG1`@03DRpr4q!6!xNk*Zv8ie7NJVOXJ*p~WFADmjS>s&tCg5(5zdzArF= zKNY;!q>4m@1i-ZEb2hAtvN-uv-cGw1hG*O*4fkH8Cyjl^LlygmadoE{-MN?)x0aCt z8756Y{O?WAP%+f~nhXbX8wuV5?~sRM-tn^Hdrf~>hr-kyHi8K)5uhKj;jR|r zABqzjLt3h#`ty4S$2|<*#SWH6#8XJRw@okH;1vlncznnAA+waFMIYhT-U1(J)Jbwr zl32Q~aM@vZcb-IzN$Y}4A0;*NnKi}$@M3hY2smR`CA`lDqck$l1T@s46&mVHEf1;{18>uC*(d%zXA4nn- z`{AKw3b(v|3sE!|BiRkJl;%}O!#y1K@b%W;XN?VOR4YO6$jq$UpPbkqc&*-mC_>d* zOhhD-&oBxt4Car>Xls$f88tX9Hz(<>JI28oR{X#VRlGNF4_Ams1cSK`Xf-sHww|D4 zFd*ags2263&3r@=>7^)Zti81~DgkbDHg@3JhD7`Vz7ZaF(-6GA*KGCtEu9O3{KuZw z=2u(c+{>z0zwq&1ClT?kEaR6&?hn58oHsT4Cgv4bs~A2wqOI2=4>9DDh2OjG1?J?) z2fo(p=RYBc@M##p|5cn%R$iZGKlj%uD9Cpsd@W;3Zz!hSP#2{N3uP*~|MU*jP6S4U zIi>f15&D0&WWgE7gDyH5v%ap5%(~=MaI?Xl6e_RCkEFzqo^Mm_aASS0cn&j1_U-%N zF=}Sf-PDf*XeOPdRFh{7yh#D*{yjBw-tqhoUWP{MbqR*^;!kf<&nWJO(M?1gRXpYDjk(jg;WcTQHm*$r8(>Ww)MfsR*}A5TKVA~8e-QJ95aIFf7SI;eWyjKM@H>T8Y9A_bp6m4lpM2R+~; z5oBKqR9R~2rm`P~oDl3{niBj~b_>z&?!i9EfAE%B5O^;W4z%;9=(n%&SnB83lts<7 z#@@~}!2LA_byO-zDG&^cN}E?d>#Ii_DXe+HQU3S4rtt=O2_6B!^^-;u51?upYg zBY`2vdE{aSCk*um-bmLODO?^mBdn&9a~r9;ME6*Q_=QlNH%i#%Zs@mN2KjL-0+REd zmtQ_?_(Dnb$(wBgKb&y>d#OJpgebhHM0N+>_{wYEAN&YHKFZGy>c7L7$dc$Fj?)6y zB+z!4j-|%vl%mhSd#FF#BL`iU#C>nuojZ!WA%_Ggp?tWlVlDr;?oGl7Qh&`sU#gvy zMJ54D_zn0cdk+Es$Hjwg_^cW}k)lZW=TvrWr|K*SX}=eAxWHEhZ_K)$9Qk|!&#^Cw ztmF$Qkb^sSUH{YOo?eUUwSqx+e3ZJh0H-RwRw0;T!f~Pg}%L zh7jUu;m3|3yzsw#1w7xl>(v)DREn83$6-{ugk4X}_c-H7WH|R|@@M!1$zNLZ1D!;Je(|lgLPpio3OMvq?6;VyK32D-IDM{mzfL~u-ANH1WPHl@odkIqabsPX*ZXA7shdp*cQ8NU&N|y# zEG28Eilo#!QF<-m+aFATni4Xcmq%i!c>37qF6`w4NhuUr<|7qh1R40ZTV$c6jz9He z-Gog2HG`W)ucp>lTo?lH3tjr_iHzsSX^mMkTncp=fdv<0C(VSGXaLS6jp%&gCgV;k z%*tNGXyf?*&qh`#EIirMxn5$l2{WnojtHh4-Hs;dV0I(f-@N-FEn>!@ z_+slS@r6PNZ}`*k;P|7wcgnw6!6|m}2T9XozH3bLoR4x5r{D_@_&B!>fp*6oul6Xc z_{hSS*+KSptDEKx^YUNRSxrQNfCcRLC67p4vW~$V&IuAOyzurI49N)S+riXX@dzIy zKyG9mdUA+!<~x=qN%$ps9ZxWLD!-_{1|)fbQLO`RlPRO(Hp9}X(Ckf434yU+Ja8_FFtag+`s-8a7 z4y@TnHN^3`g(+!{!XdHv9&j&?jPBXA3iv* zK3HqtlUlh{7sQY(gI5qJJ9@y8#FY zq3fFTT%nFNP_fXd%;SzI4=m~&WQuC>@T!m;PhNXmzV8=t!S)1GT7$odWJ5D8YzY-I z(};Zj^XU!%QrSrhefd+=4wM!)OxcsJFC2=`vAWPV)HkWMR&ez>^3X5Z^!c2lp6B zdkz6A$?J)2YCj1wGdIscV|!76WSxQ+QDili76Y&^_Imd$;hmxHsu2?N;#$IZ5e|#i z#-t~~xC22-@R)+TSDZsMA2}<{3dv}#3RRb9E+ie7vy0o!SwTU?-S=4mla+>BU1BE` zG>F4^GPvl1$J+kp*~u7qwYGPg&VFXnTy!1p0sF;|zRb&$=QmyndP$?&p;!sHYV~KG zY+5zRe^>sNk->KIqmQA3rPq^ioyeScT<}wNuJix~^Zt5kp4O2l(oM9Upk4l1_`g@jFT z&GYXD;7}af6td6^PcQ_ZpPv)EVc;jYbBigNOCHQon+pFIiIFx%gqXYVv+!Ua0zuSc7JbRg7$dfsRmK_V$ z7$W+OtCQg^+>ux=WL<30y!0gU zX3JiZyqeU5T{%7NuPuyK9zv~-yzlYr*DR%tS;B(&yO&&zXYMh5FxiLPB`r3ar8>)MZnU*q6s zFJ~8uwM#%a`WeN)qCfIFV0T$U6koUJT)ux@NLFf9ZLbWUQYHxR5!xSXo*mP>YkA-( zH%(p1@@IN_BopUQ@&3ZOPzmo~)n_UB&C2cUd66FioJXu9 zBpP&Y-p@uVr>4`_k-S?e*}L=?^Q*Ae^m^fe%R{vF+F=5xYn3j;RbAaAszsGjm9 z_$bKvn02h}WgksjPu6bC&n>tyO!1Wue{;3L1WtR~CrzKu=PQ_W4S%!gH#d0^O|E$i z{=>t*%`+rGNk>33e|W$z$pfun5ecuNert;H+dV07F06Du0o(EC2qFWa&!!oqqmfo_ zy%Z;39#$X@ystfVD$QW^oA2~XnEm4j+!+BIlcPJzd{0oSC0sG*o5*CjR!@7^8M2PW9lp8qWHeJXP2crB&3!OX(Xf- z1tk@bZbVuaq-&NIK|qjB=@Jm>TtFHD=@OQZ?rxs_{h#N>^KL#f=YH?G_sqF-=iC#C z+0MJ$^4@NVIBomUJLu2zLd%U=SB&`c(}-k4_ydXJ2eO3gq6Rppp^e~<9w8ldjWJbm z?L%dnPSaerw$nW0=wwr@AA{_1CS)aWlq4TRogGyivnna%syz`$H~8=SFZ?ImvcIZU zY1wZQ<>KtnWFI@)JsR%ZYKrZ=_`Su<)z8V294Q%(8LFxu@(kfMzRA+SIH4$Osp2gx_#vy**T9(O+jYS~anSYOoh(Q=z7}vJmDg5df%$euepUb;tM{mP z4jQJU!H)lxVmq{lq8`%GV-9(ltgs-k7cq=I2C8w*wGV9g^+9rRSl5~(hZ9LmM#!KY zv!pmStU?g;fK(jDImuKf{f0(FBH*=o3=WKJ7{iZ%gQy*a()~wo#K;&@pwN%$&y|sw zu{4c;p;oZrQ(tx2Ix@tIBHCD!bg<(KWS|y+abi3!%+{aFmGs5({{2@?#y}U`1`uG- zeJYu?IzSvF18?T^AtzQz0lR?VH)|)@zp)>*g`ie47qX08I{Tsf(ax5*Ru+yS(!AS` zg)c_`jzsV`=W&awJyS6?58d_e^2IrxPJ13&;Zx_hz)|x^gr_(C8@DXLa5#%cLU=g<;M6d{j zbe(Q{YGQHS}Lj3A7B;CzodT{G>u6)`QWec-X#S6k|Lt2h@~9wfCjF+QYou-ol+ z&4xc70&2LTLU1ba)z>--;s(Y)W2dvojPW8LOtQ}=xA=TByKN#TX%QeRB90=aKj!6u z&stxNZ{s{eC$N87J^vC_-g5r-bk^ft-#)GxIHHDlKDF^?B3&|s1|l8sC9#t2fd!r? zCjW$leCr3NZs}GDg3AqbVTA?WLgq~jO~uFe+I{x(pN^_+^P z^*mSndY_aLaVDfPM)NM=cgsB`JJB{4@=)Z0>!@w1_5(EqE1=GY*6euX>${`@6)F`k z5cB*?mus#6_|=5phudM9_?pvrBzqmUuvyDLj2rWl3I(d|3(|n&YC%|TTQI7WeC{@3 z9@m+c_+xN{JqausI3t#zsqFjkS~t+Gr26GJztw z!YCt6P|{%rpG^2`G?G6h1l$HtofCr_t4vd4EjTeaKS>sKMd8mNv*V?(F!o0zZR0J_ z7$sNBD&MCM(0L|*R1nX9@h3<*IbA)zuZB0!FpbT6kL*_PIVV2_A=jU6#x88z$?CxV zXKW%0cM4KG1XJVUOziE!sAGp&mfXu_^H>}xnNkzfy;>c&XgJ{IJ>8mIN01$yx`T+Y zYRq`XW0Mp$RV@mc>*tmEFCx5H-`3R<$0LNi%Cnu+$ zK;ghfx)gTq**O(6z7#CK+=&`UMOC+KffxIGWUWDu!%*->HUN#C1!CM9F!Vr{q$?g# zlmsSY1Aw{UlmdY6Fp>a_!z>g)9>%Z;#h;-d0P6lQi%?mO0VWcj0fSnCK?S~s%^f!X zkVRnb1xk!Slrne#6rlpfd!+jNe@&a>NHE@ve3+ayq;$|AhFSnggVMeX!_XsXkR$eB(1AesJ{R{WOBYnCgzl&^CgmI0MslrVD29u79%TerZr+RecH324b2X z*Su?EbdLW0_2kuE2UDG1n@PEufK5mMW7&HbaS~LTN2;jEVW#}uxpB}{Doh~c_twgO*PsSOd z_-F2QOgF?-Xm(}GgX@L$7{MSPnUndviFd$}vswl&;W?9QYo zk@9oSZPuFx(&ysh@oU`3Dx1$$vVtQQe`D9nsrJiKZRq{gApQBdpw=L65XY3XJ(0Je zYgj;vVT!E%ED0oXaq@0aXskIvhrb$~^P;LAdNuasXb;=+xluF;ZVhbj4Pw#6=9J_9 z#KY^?lIl;L#vaPsr@+bXy`;4M))7G5HfV2l-m@xEqu6jlv>-;j;pZQjl2D^vBXGD| z*ThJ2@$K>bIjV?Z#t@R}@7AX{UTn=nxjfa)tQ>uPvx{UPA>N3&cfu6ru~)^q@Aws; zOkRy%@Kb~Tq}3#P)5r6#?swV_fp~#%vX&25^N^Ez(at@AR}))qk`>mpVZTbSlb0Pg z>)4OK&iuNXJNi0f`pu)8F{dLSM`1{nI5f5@-?-91NwerX%`hbP8-=w~ZASo2?l+$@ zQ7UWQqg=2kEgjnxsgn?1IkAHPdWIhtH5c)H*S+ih0+mwW9co-Y^pJeBgncmV6>g|) z;4O7^7w+>4_3Fa0&%I8dv>Qt(;JVPT;C0W7x=DO@ET#Pa8q~>E^kWG<>3eO%m*!nY z>`BfUUP<6uSHVPzf>kP4ceNWorvWsN%Z$Sa!JQ-E+L_hotDDJZgFjg2y|S-#!%5aG zz2$(rx*q6<1IPEcl5+Cll`5{1G=B~tb&pS#eQbGHjTL|npD!e9tWt7-M9=M1Y6ROm zI@q5(!Ijp0H%Xeg9Y`H!t5tFcYTYGGEgBjF z?r-2B(~ZimDHsPs&U^s>thmzT4{EDEk5G#j)1+G29rZ~Wq^QriOdJfc#Hh$t#YWxdBnJ2Jx*oR)MC!}1AI zwJ%PW_?_3WaKI9>nagpFkj9b_3nRf5$Ckj^{H0~=!Jzx2UT!n@pTpH6%@FDOf6AFf zYX4e_-G_mK#LgsJ!;oo^w6&nsMj;H#C=g%ZJb$faiAyTw1Ser-zI(x>)s-zS?OVqd$<9!x_oVlQFwUJXXQMEN0=^mYzN3$Mi{}mi-xC>h-%VgC#HG?^#zMW?r6MzJDa z%&Z21Zb^jb;jYQx{~%Su93ALMbuD?3S|bmzFe`xeFOQy@nhkS)PN?nd87J~TIG?$y z$c#HIhR`s;zy7!nBZz#@i16W7^PA-mgn<~|f5X!DY*81F;E-hXfT*Qjr()XGJX@D@ zGn+N9;FW+7&7E-u{g1OA35N^9`JRZyffwbanAvywV_1-nMF9^8+Sf%VV-^v0=fec1 zWLj(-6f=e$qqM=9!#RY~d)PEa%Jdy>*LoKt*lY4oh5u$h@{E+%?$0Ey6dN}bGu^aY z9@6nwwOpq+VIGL53Xg{uG5J7rAfRcQL^q*C~(4&Qo9?R#A`Fu5TFu(=v?T}r{ zh7gD$fxXOM+|@Li6#*1P$Q0--q5Fd`XDeyb)(V~I^uGjbjd{q~&w{m_m}f2JP2=MH z(5}q8{2FU>+4(m&vum}o)OcBVTM)DImKrB=1t0)D-n7(63ZZiL6}%{QGJ=sQ?C&i+ zqr^C1hCF~ms2&|P=a&D!+a{x}TX{9%|J`1^hXutu#iyH+S_^Uac>+9xBhj{nO#7-A zC^7|djKN=$_InvPxwW+t7zlhaCx6E+8xNE<6@dpo&$BM8`GvetjfVj=vAc>Yih%VL$Imt` z??1D~1`c9yWW2#I_*FH(x!L(6X%(+}&tBi>pdDToku?4~e_pG&yB-UMM3Tzi8Y}p_ zx~Tit9ovK0i2k*avT6AOgXs#}1i@rd9ukO- zB)^=Hgg}08)4zOGy(vR%Jadx-Gws$&>^JZ8r#_Q5`C>YB#>-MtJf=&%B`b%RfMoh$VH1B~!F%GPPH~4O2vRVOe8+^;P zG5_&}H?tNK)HdsprcywMvK60FDZDXI_dXKP4cX_oZlLBadRef|&d>Yb2oA{<*mk*6 z4}DMp2VAV7!||fSP*?@0j!ttq_zu!tQEdI=C1wak092odcV%o`3?Hgb$xB{T{;sWd zY)2nbm^cuo13>t2+#F0y;^0WJZ|?UlUh`+=mE}CkG8(UX&OPd9k8R}n`i!(5y}CIA zgOuVWe;m`RMSDAKy!#PWRk)(Ms%Vb{5(2khzY7w-c{y2@h@5-9QDOulnlqAiG^C$L zsJPoQYhl4EsB#+@{|AAa9@<%M2Th+|j<`~+&3AH+`H#ndd#Lnah!gc?$>!#LY)I+< zsB9t25Fhu}wN>r*;s1yN@1dS>wh~ogkp4&0jQ_j*KbqDbk1A*GeU1ohVP)3BSQdzM zK;My*aqRuyf4RlW>h!<@omH^lgyjH!;iaST}b zt7)3P=g>C}|6pd4zsXhvN50S4u}mEL5U1}m>h9tnrwVG2x9wf#{k7^SIAKJn*&ob* zVAoggP&=-!Z51}Ce4^F<5MPf%@2iS7g|DU))YD!*`Cjgdfba56&`xLKka!a|xRvf} zc8Y&?OxgXnU$+XWDl^|ZF1DR>H1AEX;d@UFHM!($v%I4?>zgthps|-N`I%_dN5ZBC zJFOf3gR8@!Y3OM(-!!V~NVL!Dv?nC@*}oyu(f%$fS!{N9vf^bJ!h1uVi;?4UJfHZh z(MeKq`3G~tr;Pn_-iKpb%NhQi;QT*R+q>UM9=-AcAK?3aqh!*ylfDTC6QO|#EO z11IPwc`{1~Xi$Zkqh@Ye?JCR0)OSrSx@lNMzFYG2KH~)+#u!`tXXHnn_a^mJ4d@qd zZp~X+YE&&#E_Pl=`VybwfD=?GyuHK{4RVDKnt1CbV6gk=mLC&pR2lCbS2UG8%XoDF zHhJ~v&ESL7-?(qHP2Q*JQKI%A?{`W~R9q72&`%7xe(k>;ZEvTsWFW?Z)Xuu9yFTbx zSfG>MdGLG--+X`FxLAW4C2_S(|Ac0i)jN57Jikw4K>C1JR7UR}Cx{fL{CTtqyD^+n zV)cEk;edIW)kwwso+$d_1P)sI9VhK{8F#aB1~EUK^T2=m^tO&|;MweGb{Pj!eR!qZ zknt?|dMEmErr`1;y4JL%G$JEl5hWmq;YsG;up~0(kJuV%K2G83ser5M?*!Vi0 z>oW=5B}}io#m6^<4T4p-g}rFpgR{&))sRbCDp9lfwz+l{sBKCtVZ~Dl1&fDI$g`2g z`d>fwYG)I;gCLc1_05uhDwuq1moiX)*!siwbBN7pODv#7n#IS+ZSnl1BQYOocR8tU z|7myGgCYZf6m%}TiOM4;sCCIvocGn^Fw|t3U7g z?}p`aOM1^5Kuo3@Iw~PIyu!$wxTXm&^nL;?<_I}^z%`KdD~K1@NqjVRGFk}IPbK1ZmH>;W>79#_rI`ZY5nAg~vi3MDu^XS0# zdZvlIqa1wmIqu&swG`J2(#6o&JpVC8A9)(>$SsgC3p3WjvxL?b!2^4j=65fwu9!u~ z%Z(1n_E{f(5$}A+%J=kvILdg4B=qgAe9o0GFG2P4JgrQ{<5$E+tA|=1*5- zOb+6J%GLcw5!&OM6nas99B+w_hfdc8TgJZX*W(|)d1R6=Dk&LJY>$^!8Owr-M$P{# z={;=NphVsf?QSKxS?Qy$)cPsi1du|m=5!fSIipS~FJvx4MrfvP| zH8F%rM%aMiywT@X8E5wvr!*>Y_sicJFPfv0qDM*VwdjOzldaNghUM%ptXoGaL5~q| z{wJ^hvFk~Pw$m)R!n?796=i3+3a3u11)o()-<;r%vW z+j|iwGcixrGk(I-av9arCq|wWUark8eohk(J>3lMopg|(iI8B`KK>9r7YVqe%22cT zCsbQfPcf`!GO0D||~k{7)ZeW@;Dbfyw7YaG#pu>{6#OTG70l*8`}$`Ty}k~ry+z5 z1vQg3XRX~-Vtd}PA8w`cJXTCkbD9}7TwQic^QCEmCtTI3ZnAkBftrL{aQ?^irj6Ty zXdWXt-cERZrlvxW1-Cu6P0x&t7dQ;-zKPcoR!wE<-NWfA!Xa47JF^)|{|eYe65!l`N>KEYZaCVZ>MZQcU z+fbsxE0(RX`epxYs~ndGq*7R1o)CGakF7%!xW^%=l7VP5V{OgY{`(~@rMC4tcVD1cz}Adqw*+Vl3E z(__erjf7MUQKRFW{dd2G%*XN(p{;WnmtNc2SC6iOOJ9}GI84TnfF6nXdY^q3_zW~i zc#*Cd+QM1EPG)Hw1$#fHUUrD(8jpUR9a+3-a@f1Fu=D1CteE|c;_nDc0yoF+?<`r2 z>&?t{H6u2wd>o`-gx^KIY>fi#e|P8I17B(b^&HOaKmM6YsIt~r5x^&X@`TNYsyPOF zD}M4}(xA}rnvHrogQ1Eh5Afmg`m28Cw^xU>VhNNAw~roeh|~*M%=zcFnF)>qS7V0F z9G&P-&>r`^w--k5nmvW8K0Jr4a9IUEFA3mbwM~w}dBNQ&_J#sQ=<{hZQU%J*7gQl9 zBt1tb_A?ErJUz7(9?TLS&yc?M_(k6OHZ#RpFj(OkWThoS5&W30@qR4^y3Q()SZ$az z92Y1J>rQ^aX*$Zdb--E;i!sC5NTO)Mm5~zagvHQH+3F3%FAIoJo#rScceWB9KBFz< zM$YlW{~Eq)sTiGolntnqwZ4pD8a&wh$jA9)-?f|SOW6kQ@-*w+CVrN+j6~So%Saj{ zHNc>m>1*JC9{B3P+mM@e@1^eRzxdL7p;;L~<-#-Nn-qEx`jKp=mq4d2tWC`A8}|J_ zPg~$;`oRvD-$dt<%!={hcj6+;rnOi{jxpHx$RQ`yOFY!6Xj-O`YQYqB4`kSxzEF5idrdwJe)IK8AK?z46`aK;=1^>%pHgL!X71z(t ziQHxz3DxMeIp~2kvs?DGDUUR$$wF2#)RgbiMpakWC`q`HpY=stQ{;4ni1qqpsTWhq zEH3plfr~3uu+fXu^KdnRLP7Vt+hn-cW51NgAO>cnN!)GS3mAvRq^Fv9k!*YDG@mcy zXMvTcom}#)#As#ipto%Dw3eR^CtZot&C0ou*CKe+9@D~8$HEve_wBKgXWFD}arizj zrW!wRJ%*Ox!?!$~6WdR6bR9N4p;LVv7lfR|=o>=WzS!t`JIp92-^kbRCVE4AR1KA{ zlkQs7{#AYjDmygGsjbyEM~SrTZHTnNXqf-}cf0%)z{Q_Nx?zzi?>>R63}nnj`X}}a zEKi!>MM|Lpc>9x7GW9yIfa!dm*4XA|8twRSXpiZ8dY^d3l*cMNZGNs#r@?`js(^t+ zHn9MCW}%UUXtAvwM5mVR2geJn^H5hdEZo#sz}?$Hl$QX$cR^V>L_%Y;yrl&~dj|J5 zC;Me*9|qmx(WlG|mR#6(>=be!x1YLnP%mcWiM#nrLL!IMH14BnMln7Qd;_;KGELdp zz+rQ((e+o*&8EL11Qz3gGpG@iszUN`@%K&c!qv8q_Ke>u$Ko>aTUrlt^+I;!b`ZIe z#9Zk&akx|(Q1j;*57xQIuS)PwN_rYyPv%djkoWe*Jjhas%Hx3PFN009)D#L{7Z0Pl zrcP(CYBxjl_Imq%DJ0P~Gto-q#R8R+Y(#5QBA@3b7GcBBX!3~A@1r?*LrCjcz`mN)8ku>e@P_n9oCm*n+V zniB++*6gbY@~%cIDE>M^Rqh4GRA!)5OaPztJUdpL$C8`oRijjBnenWWcC(Kop*?o} z{#eU@ zkLw3%A-xrEC{R}Ot5$;Hr~ z)+kN6ig7&wcH~@>7eRZvRIhSN^1kt3dpxt-aTq@SkrVk9DHV-0zent4%E$|-X;bwg-g zwxKj+rViFYO|LjlN$}m-{r27#A}YeRE<+)s6#xgGy0-4t^HXdObdbJ>qApc(qtgB~aN9A8qMrkRqIP zT!YenQ)4h~g7@d6xn}C5*=N5z{q@ZDc{bu92ys2Yyozw7eBJOV|HYiXfxhSU6*VgI zvY?q=V9swldpE{XnP6Jh{Ng?fG8;mMVm7XT7)$IjwVKPK|2?^F!4^ur^AT%em-7{q zTqP-Te;T)dl|b5y1U}&?03c$Th}O@10?Sm2uaO#68j)h!T&Rt3wW4>*AM5}EiT1*JvI(KUYZSKV)dQbU~IGBX5R}<5Rpx0;!whFw}$lVXZ z_a$qI7d!Sb@C<8;x%@t!lbwSG=m%NxK3w>0C97yDQ)z|yzQ&r#4XLBBeU|gY9)AdM z{JuqKPEM+S7(fZD_{`fN2w9n2;nzKsNNk$QtyvwTQE;bQnZ#X{F}Ii0dJast8SLfQ zWz58w+3r?E5efDdRSOnWM!-r4(M2C|`G{R8VM1j_yQ;vbsqF1)Y-0=`2cYq4qcV3A9IdmgBW_h-RTr(BG)kH4f+16PvP`aqJjo9gYzMKPR5~-1<5< zwC=4GpQ5&Iqfe2JE@Xv$cNe2yLV5TOgyxw#J5+Y~`ct7_);KQwahPk!$5CI+On?ue zM8D0?WV!I*@*%A8Gl?K@SgZX0xwmug$aXogx`EMdo|XZ2%+7#(CdnWc=j0XvK3saS zjH%RG$@80FJJ-WRAmsx>*s!Sv=)+p2no>@IBd^orRd!T?iwd=fdfziHKjzcP(EN<4 zK)~g4=?-5u-ItOO-~7o!ZF>!TZ>Wz8xuDO9m2A6Sja`w13l8`=9;7S0bSRo?fe8u4 z?&15BQe7NXm_;}~2I>V@e#4wTPkD-kt90r*BrjCJOCcUw^`%hTFA8swRW(3@e&Suo z>^_Acvb`hz(~cT2U1sGRH$^`db~86TMwv>c(DgC3$2lU$Re~S0q<1)tZu-I1AmUo} z15n!-g@!4x584y>m5amG;*@KOB}Uk3 zFgEI)sF03R;BbPDqYboYf%)c*>#f&_Zl%1QkzoZfkgNS-{nO+af_bUuhi7w!{Pt+#?1f(8# z@)52t(g^u}>773f(s#;x@bUvj^Yt^2!cJ|20R&lo-DP zLeT7X)GxWan%50>2hsb4<~H6vnePt@QQdv)&e&Z@3Q#vMT=VjZ}PpZqta!n}TkN@%Qi{ z73;8LS&r)>m|uUTRN%QYrqLSm%5n@3$D$&YJbMZO84b4(@qSmfKHxe10v&x-NAw&t zEcN=vp(yicvWHYQWN(!;)~g9Ph0xSvw$!8PX2#ud-oifVj`$d<|H6lZc}{is9#G3h zPvwF%;M0fc^y=8!-6yl{nhrk%s|!KLz8cjvwS-EXKb;}dJ;t+n%)z1S75fJ~E9x|z z17G-UFS*=REo{fY89^6y2$gr+NyIL$rQln^IR0-7(Kbu47@CxGI$@tsi5C2M0h*p{ z;#XO%_dBq~*A^g7F^g%fY+IRMf4ZCxi-j}qk4TuUU#f|hbGkR^?;B%P>&6s>p4WSl ztmT;x$QT-BsHG%cvO+_#*dVcU6s@_( ztazN2rWemr!D%u0$v5qge=ntAhQHwZ$J2w7oUtP}W-}eX5`wIUuhJi zts)91tKb?y9!SVIcT}EwI(tO9b@jM~o~@k<@dBdbd;HD%`=$SaOZsD_xF-PR4%POJ`p zTn#7nN=p0kZ-(?Vql_16m{O^Fc58DI&Ha(6$=Z?bBn89>Gb=5omRb7A^7UHQBv-14 z@~6lLJV^V0iM@pTb+4AM@{?#Xo_FyO$n@XX>c{PLW;6MnYvC0stQ{AK zuEp8wr)HqrT+SL?|B}eVno{5{*)MCN2Xxv6hEFG8(HhQ+)I@r#6SC&;SO1xr9Lh;< zxpeW9hy?rLBNIp2P)`w}SFPTALxc4{&svsEVSO&o6y%1=>Td@8z?W(T9-c>k=~~p? z&t~qLKU?94hSndE;}-|7aibOr_XlL2MCW)LprlL^e8`-S4=Q8bu!WYzcT6iH`ExPK z`y4_fAE#6%n5AWx-&hE2Dxcl|#wQUe5V&u>3zD>QGMXk%(MZC`KTUn@0Y`8)*G|9u z4{84e^0!8_v@q0`j$_Ie)<5+Gqg)@UQ2V4U#tWqRf*G`1uXTYBe)EOJAEE_(lN(1X zYv3e2v<~x~Qy3TDyh3N(av!_A#CJ0Tk&Q`$ZdfQ)wc_DRyAbAZHKY7}&_%F(DV9V<` zU-zx(UB|!VL})go2|9cH+6Xhh>g4K$yEYc0>@DV0%6Qh8pk1jp-{1Q|Wb&?FjJ%qX zm%j@lCf?-{;tkn&J=Ip~++igWwA4YJTli zA85{f!c{xCYb{OpE4&RlFQG|`jDMgh{~ws{0;&C-))U4)LUR)AH}+A^j4dYEm)a|Y zbBxxJ_oSp^9dh2wnaz^DN>4)tAGa^%+YhDvOY!^W$C`yxFrTImQS(AXDz0 z$;)!Xo_VwDy4gX#!<%JEbJ3ZrF)VbOX=onof%Q@bHvZ*P}`UK<;VA&sm z63{X;Hd6pgk!k$W|7DA(VSDXs*!}{K%!(C`k+XR-XcFR0CU^FC%JvlbD z@J^;-J~v5k4iV3?qYS2CCgv@iP@djOUq(pPoAz%OBX57>*ZF_;gb-a*Z=T%17bKkW z-ZMhLu@66b_D^tl&}=WDZsT%Ce}%o0EHa|=l#X^b+8r9%@YGZj@pMoN$Ip))bKaRH z4K?$by#V6X^!U3kQpG&rS^TFqhBJe8&benO|6uj|psx z_Ci;biW+4xrycJ-_}mk6XiCJp|7eE23BG@o=Fxp>&_aG#W4PrD_hZO8+E?*c>xdVY zzv`t|AKXvjBU-oXA31>u&Aqy;kn6+<{5b`R4Ey0Y7oDq^@2VaZYA+%>2G##zW&p&l zS?rYAVEsmvQP^mHB$17xJwI z_&|3-U{ptt`TiI5OkZP6_3OS)!KI6W@y`3+itE_l_4j|RHn+YsBT;@xW}Y86FWM61 z_v;K%V@q#-`Z@0S&rOS-y1Cyq$VT}6c}yg-$Ge5iS2Wm^`2jMZprx$0_aaK|=*Exv z=6%gSg#=cyW9CJZknZZ+pIle}^zNM9d&jSaLV8XyC$3jK$!-RwtCKdDzpXsk2KCN2 z{Tjo3W}2>^y>FbJ9~0*z2;DMSq;51jvgHfPnmBORd!H%4W94L%ESvl z^spL|FS<_ezZ6N|JzFkV;GUI$}R^Neb^627xv0#4Py7bhs>Vw@(_vBKakLD+|(7fSd+2xN6@jh0G zpZ~IN{gZCylV>-&o`m|SyOUFIe4@JSnFs=jNWCO(ZRJAO>|5mKgNlJXGO4b~`WL(l zMtu*Ul3p*Y^Q1oS)Yzx)jg~x|dj4>Y#_uw5F~{J#f$?tc;B{27%+u*(KAM>ar^g>` zoK_$5TgO1ZMevcUf8Ag+iWa`!>X4c9kk#(ydWgX4@mn6vi{BeROaU^w<+yZ3|Iprm z>DOs9Q-$(oh{MDZ)L}7~)w7!V-a6jH-=47%8W&y?cNgupQSOF)Ldb-7=)j< zLsk#9yg0(0Ab!It7saE1%(8Za)MPL4HWX6j@^kg09{Z?r4U^M(q8x#*kw)Br?a3_e zr)>A=i0iK>hZ^Dv|?@cmD@ zv%9^G5{6Yo#@F|k@!J!dWC+#=2_e|AHuW(NE`2YnMQaXMMmMl*PyE%tlt0gnc9iYh z*JwJ7TjlNPY$Kp$sw_l?9v;FUQ!1pA%C!7W_wIc^`N%um&f?vHViAH>V#V6EZ-Jk0 z<;i`svg|oq@Hn*Ml^h*(uTe zC@LnitAEm>EfYLjfzd`6brlIW-_5SwEvR~}O8?5fr3ma6#uzr=&mA8PMj^S(`rR)k zwXg0q&tM<6oked@+-4>2)pmka~B43;-C-co93;SGK<|_P8gOcvtju5a6prJ=q*E`^lE{q z($K}j!Msq;fT>nsuq7moWmzx*Jd6^O# zl~?dkA?}agtJV>2d3dwEz=eep&z`ZCwHcSaxoWd+@)#WXm9tddYs2L#_!|O4G_-GR zj4Yplc<<;+Lyu$VPgwe)l626TQV0%&pwStog@5$~KJ4Xb02dRYL-(Lt zsAS_+#cM*1M5I-sy`5R&QRH&TS6qKm?*7vvc4 znPtB9?zzJX(sl;nr(-tfdJ~# z!c^0o8;u#BE1vhb&YR{Lfh9%pH+1(J+w|+Lh=uU8sI-K&qq0qW2Vfao=%rM%FH1)808;c}k~}Nt3c5FT4FH#K_3S2qwVCzCEFd zM+Xu9m@>x-b#lQ0a1w!#@T*V z)4}-Yb0vv0&@+Xy$^`~__y(QsyIrPeTOp~BzriALsYs0-lX7TgPN^`DOLBlrwdTjD zymnud6n)c4gz)5DDmKPnuK*_*AFcSWp>wZ=lZJv78C^cSOfrQ#tQ`eM#x0uU%z8KK z5J4rvk7KyPkETecmT7L5G~?(%3#2(E>Xk%jL2IxlY8hL$Z0&%+0juJ`QmUFU{NQ(e zwdCz&jLsIRD8!fO6*Yc4(^=&W4LfpKli5&~BunuLgcO562g+TaAr7H)8CdLy2s~0R zk)0u%X`ky{Gpbtt)EO8;1n^nD&1wzmXBk*wHTtnW+QXmGn>3_(r}%FEmm0uj@IJ%; z^qeT|78@VE-YgLfijrm(=ujv~(PzEmJ;%t}|Mgm`M3_Y{*$LE>KK zt&n;_CyfLlh?X2qjpkIg7}5Slp_mlTEoTPkiJuPl$>%Gg4nVGp@geck+B@&km#&)f zSB*_zWK1Qz!t%*+sk_$O+W*rq52@RUOsca9!%{ z{k+rSr%m*oJz!oa0>`H6ffkR^!)&@=MF>TQpY)|zM==X;N$VxP-nq1<-E=#i>d}eN z{RfXFgLcLfWqj8>J(F2#EB&1%P`P-}^Vwlc)0O3mJU$viDkvq7`eB0iF8GE@|14D2CS$wlx6*sqYusnqLE9?{GU5 zsT+$-8{&yEdt6#iF}2(H)cd)#jh3P}ppB(nk~u5VUh)3VflGPUUblHqjIREY_WR59 zx%GFyZJ@~fhWq7E7vwl{8PD8C2qpLz{T|=ZX(DK3oz%enT~#~HZ_#Q3^e^mGynBt3 zO~G{SYNm@C-09jt;##NphTE+X9$He$flEHcF(@_u56qgOCSx6B9&l$;0-RPsiAM)%vW?gxBce;%2jI}e=X>btzEZ*E!_ zGHpI`>lB)!W`rxOj=sgQ~D{(-!Utmf$ z1y+pDU1TrqS%pF00S7GftGv1GhSSXdgM%>bPYoVLkq=6|{j^4g`thPa#K-^-z5JbC z&+ittvQ;1HVnE7oLKN2xse0Z00N)&8)XyY45~AxaB{>{b(^ zCGoE4cf}y;pEJ?7UZN;T)xWd@0~D1KjATS~n^zVr$Y|-)I@xGxcYgskvkA#NA(@5d zm^V}&n3Y1fzJESbb`f%f94F5>FrThxbE6o&^=|~Ca$*+Gmc}^n?P?2~8I}zGLVHdiayCP%ni{}|z5k~#v+|B-X)QaFoBKmzdft!e zdU=TN_2@71kF(?(oQ><-9z;}DzSN|dtJ}s;FZ{1-1Hen=D9j1;X@DZ;{E;yVsdwWH zv#aA~OssA2N{{AcUY=OoXr0Yt)F||dCDv`9-Jbga2pm2N{g83Vy76dO;XeM2m1zs} zozr2mcOM?#^xCuiNa%SV{;8U)3~%SA$pRC9+3*W z5`~l1fOXFU&3^_EK)(LdCB1dp}^PpARq&tV`94b>#A z=X+}6CXc;@${Jt%69MRTpUB=ac^8L)+OzR=@@ttH6%=k#yJ#35e#Xnct6YW|C{&qk zMYO)$uh!B2H}@a}8^6ioQY?aD{f3d8s+A3bVHQ_ z4u;A!JXul=WD>gmh_)Y&k`KbU`uI=rTKZ(VlztNr@p+v(+0A_k-=|fZv}>-eWH{fw*{BUF@`dkUNa;SKj*`)I&Y>`zELfdcP}j z^V}0+x$-b=!+6AZ^yw!o+5ZEQKyAO0 zmdQe9sFDC7oc)4%EE%}1;GPIe>N}Z{Go@VifASY|5Klb`@bqtkQ&vVL6xc!6yJj5d z6~`w)Oz_OQ^fhZDCvIX4bU}lC#PT62VwTBj0!$-1Gv*?8c%QgC?_oqAL-w2UlY4z5 z8Lb}yZm+Vs=4CWOf#`P9f4hc7#+!OR00Ck;L{a3U?EUJe&F>B~Dciz<-e|CoSU#j> zz$v;{RZD=|h;A_@C>I7@OTF5*^Y`o7O`pSX=lM;25-BPmJ%5P+H4vhiLh!5eqp&;P?PD+l z_k*wlPCjG`?Pao_0JjmH839ZEa>n^gwK@MY5tvbQB*0kbS<}O1+XVNqI9n+P`U?+1 zfS3-++Kb)sI0N$se?Zs)Cm(X9KvtTkR!x9$L}zZJ(T8-QV#%wt889%T=t+Rle|eu3 z8D%z#Uu=Z76+4>`L4fGu!|5jG`w2;%zRAs)x%p367mFcg{J`A9xG`!~{>ye+tchJvV@X9|d6toP5X@ zTg&7f1Q`2ZlU18`VbHZKo^E|kHlkw$W)NKo5T4l9xitt-a-LScigciFcn|`F1W)d$ zztQV*?@clTyMnL-PCn$zVVS&SE7TJpMs#MlRdYUrKF#Z4R4D>8h^_=!*atEQPzE|% zy~8!&M$HEye?Uy|gtWAnE74C$5A+3L2b_G!m%}od_txqO5F0)}ndnp*>{x?c4H zubwjPt^_DgELkwh1PIJoapjIx_fZHC6FfdGKAqpv&OWdV`uj5=jze+sTHNz0JzR3- z&ug(~`@Be#rXgL+y+?4;t}`o7{<`%8ZwI~z^*YNde?RVu*a$>&!l|C+3n;ni`P4-EWqoZQRzw?w@gIh}zlCb5$9 zgIdXdDO7_Em$wE1M}M5PR!wW%Fc7`_SLj^W$$Uv8K`CTOHs_Ru_TDyuLRy;sf9Tk< zR@-$FyN7zi#?iCq|goqSG5whR%n-+JVR;DWev!&L zw!J?NR|gH8s*Mzm4+C`u+yM}W^PP@*;=24onW)h#8N<)xr% zNhq&N0;wr7YqS#ABPM%A!y5wLD%9)QM*%k8!uo%R0SaEnU|D5}+1~W!;!- zZbG~@8C@lDgO{1!aSBDE+<|LZ=Uo$e@n7VfmOW0K{Vn!PD&yXnnx_Rchp(wgb9|JE zFXQ*{QGcBox+G~-GbQ9cMcYOw-hCdb*=3a$wi>SrRM=nX%cZp?fe<5~^-^ixEjn;M zmh2RldMdmq#WIz-5(%`Vu~pXNYK=({lRJ?f*xZ}N$L;8(1Fbceakbt=-yn=WWiETu zXLodpX+y+Xd2yY1#3bvf2)1fr&hFgSfmc~cHDD1RKBFRNOSN8;M4RE+SMV#ZfuuZ*)M ztbR(R-b2q!*4m0b+}%7yk)>OPb+5+;)f>&;*tkB&nvVq{tClzJM%jOSyaEbQu~P{Y zy>iZX{h;Zt4+GxLo-DvS0w;Fb9NVNd2aa@NjUpAboA9DZI*dN*Ntnh=($~(Y!1MeS z-+xWwH(oEQS2j+VP)-Xd?DF5cV}tFTV2d@EAF|9r-dR31Le=zStR)pH`nX@0qYO5) zuDt|Fc2$xz3Lx|pJzKYo+VV6VveAn$mj<5@?wz&SJng5c!O1HwW+JM*F;hrEF z`*Fgh4rJI@;1Vj5L+YH3_lq8tP0)|g#!SH!rfGPqWFlc5M5qgFM7~0ePB`oqMr39q zQsN92ZcWn}MJxb&MtTwc7T@RSg1VH6%4dj}e3#gY3M#5%xEG)T^{6Y<66ok8;(yEf z2=bFsoaez8mL|l?uq{>6>N-RwY>C!|1$l7lM6Ek-O zN3MSQ7ew4lM5{V4XfsWZwUaitJ}B5Z7RZWkDm#aLyady5@(aO}(YEFd=&q>(*yN7R z_r-zjr$GxjDxZN4h8PxwF|Yy3C4ZSn5C#$tzwQ^I=pnX{wY7V3Y&O(zo!X7+I|T_ufc>7t?nL0*swi{_>i&*nZEHA7X`;$V2su~kH7mh^30`Yl0+O#x)*IxXK2`6!xrN-WpxRe#V68_JOFtA_j8 zZF?Gu3l>OJ4>J-}2)e>Nu?%U7`dH~9*Q<~S3f0gG(0cvxtd21+;R^R?PrgAJPhVte zCbBB_vF0`*>g!}5wA$ZJKl9SHAyEs}6cL&e+~#;1=A`=-PmrsJ&k`y%;-jyGnZ8yRj znsVb0S()KP9~>*-vttqdnKCyML50-tB6U?!n6Qp-lF`0W)c!P?vR zCBa%v>(bVG)DoE-{7>JM{G@939UNqzJE~PpuXk|XS z>lP2wJe=5MjG0IvmEk4H_L6>kpaWIdyen?M`bWFfR(&d}0CKXEs#AODm*Yy9u1!=f zgYMc+=BpgbDu3K$pUxjO<10Eb>Lyj2uT>|I2Xvw{8>}$%!k8NhMkv3=>s@e(eYax; zc(hds`H6QyeLw#!+V>G}*a*_RD!E}FS^K9}Rz6qGQRGhKiR%qnA_sjWRtMTy#uaDq znCVq5-+#Si>2@Q_4ZAi`1l_&>g((hI%iGK7IAm+y!GE;h`T-1}Azi*it$yvy#|3`? z?Wy_9NBg1;$QGY))NwecB??&@s*beem9;8|lNV=TZjvSSHUeZHS!*? z;(r3$Jl%${Jy}qZw;GgDzn}s|RhK+7gVVhyGJ)wR6fe-znh>wMU~ga7?&Gi41t)>* z;DX!BcYo~%0Gp-WUi{fH+HPNWhvE5-rx_BL5gF%0O&zc~o46&U*HX2W&7DP}Q*Q3e z?k~AQs3_S%UJ1TXC7KhGZ_mu0R^;}P*88a1zUyLz$KPf9?jqsq3U1%MiwieZOS>m) z_Z4J&7AwGzpt_g-*U(aTe z{eK$LLQq8og2gp3lPMx88L#&tr~*gAvff(91&)T@x*Ry)FFZ<(dJb;5ckLV%Mq+&x zg;>tz%)PQQ+!B){$P2=)*#<*S1Qo@{>4Hwn;o5Z1o07h{^w|x=g`=7ZKdu+2OVJh# zT#9{)Jy@K3V3Uj8q~Uro-?I8*`rrgI^nZlWI+Z3aG(f6meh5~u^U1?-@1>9Yc0Gum zTS~;FfL0_T!FzG1&;|WLNZ(I>PYsOeiv@x!(pnE1{5NT5eR^v`_vbmrtL-vu4Fv7J^M>26j7=^^H&5|)Bv6Kqi;6Oauh z2k%Pr5?j$+CdOh#I(Njgol2taEfqD;p=%jx)^h-Siib4gUd-K;=S|LsG=E!`wbDbm z$yHJV0fG%h;cO_t7?)M(C*u_uNb0F|u~;RMnu-!E7bnf?$C?nRwd9dpY|$y@ItNiY zc!6e7eY!BaMwQM{j34%ym$_{z4)h_^F_aQU6MO^C8cG(v0q2c6ZL!ooH zhJ5uyiO~XyK~z|D{2`CSLE$fvvbeH~dc?vd6z1zT5e(`*9E?NT8u3QM>#M{l~oj^mwKJ4Y$3Y z^l!5MwUTFgP+$IhWdIxQDL)gyan5cW0A&(L&sPS}ek1n^3V0e<9RfDoWeowK{WR-( z0BpE%80$ZrKU?X${eMp3+amLRWku>xW5yt--NM$U9bNQcSVlduPabFz* zHf$@o?*321&r=+Hd-y+>mz*#GwGMP;Ze(S0ZE0?FFLQ8iw_h;?Oj{19J+YBY$Jj_RO4fG8-UGM{7}{ zDDo3UQt}|^pAVA$6^uIk<)?>#KQ!JRe@*{OKgvV<&mX@%bpP?o-yS}Gs}Fzs&qLep zqd7>a^x>Bu9)5iIj(UG+f3?vzw(Yc0wr%bt5@sJ~Yy};~&W*|e3Nlu3 ztfMet7Kesb7oLT2#8VrCt6%rwKRN4Rd}zWVoqi@V9C_t=Gl_qyVkT)l#z`dF(tnL~ z#&_gSe;mm@eR=r!Sw~VHO}C8>Uw(X$qk{g>D0!T^K79F!bnFLWMQDF9hcACUd@V$f z-yFXD<3W*#L@9s0p>K{2@}+B#rm;f!sO``qKXomxp>C}Ua%hQ9T?;L%ibBrx6{)X~ zQ8E75;v1vA@G8s@5ynMfNAfS~*z)Pi8K%Zg$8}6SWtAv+B<)c@5NA6kkpk;G>X;;7 zy202+>h|vqGZUY6nsIFVkQtXmYEdMIA>*GNxD?u!=!Sn59lI9Yw4xh)IOVJ_$avd* zLh7*nMEarSY3R(-prh79i+fBhjx-~Y8VBu{c`KDXs`p-Em6ZpYq9NJTLLKGxco=wd}zXtaohuqPAJ zprj*vX+Nglm8aG7%xU|Wk&wx>kXd#{ zREYCLLadDyGe@EWXKvCL(K}=EeVmDiA;U61LlgY`%4#>iu!P>`SJo=Mfg^CVP>HZd zik4Wxw6IuHC0rK;;W|@68!{b9!ej#ycx7xGLSu9|@XMpZ^XuS1 zq)|x|t(j+)vw+4#KzleS8iIy&RAFxa$>#Xn%Q|sThLJ>%MF}HHN5ieyAY5f1mX5Us%hY*BZ+i5Yv6wuYyhw$+Ponuff@+U8?q2G1T8Gv(zEBy z2cbJI5~7VsKt{oNLzsqykiP@2V%Fer;Q}Jfi$y(GJQJIfvpqNTuSV|#1dsF4<}3^{ zY!P*c>>zsN4$3@%#i-kVxeeYC`KWGwbR6;~cj25d=kO>7(LBE|Df{u#xiK0s?s9*G z)Kuu_;Z5r$9Ot1v_YK+-Ph!mx10HY^kWnp$QfgUpF-!2V>k9a)!X+tf*wrWb*l}B$ zMzrqZ@nEyYSJ-b1OVU9tYHUbuSVg;%T7()~2LGl#q5mX%0Z~UU=D;TH6BRx6dnOlx zbjPcjFbXGjul7V}lI`VAP!%J7)D?fL6l8mm(cLTYA*~Sr(<(!RRCIxM-w0}H$7x9t z*{_>PFVIi8F^LOM4{PP|AF8lFVne6_Z-Fnig;dYM=Z*XaOxF309_o z(w=t4`RsrvpXYza9m!sdr1P{KGYaVR3-u{k3e#R@WRplr!`L85VU|Y6I75GCXGYB^ zK?+M(5SI?j8}Z}QL=4a=iB57Px>6A97o{OBAwh}|wJK*>KqfY-Mjv3<$@a}>mX%gf zR~-1UUxtmV_2A7Hj?jrZ?W%)iB0F2#$G*W>8>Fb=)dEmWA|auc@no8G@P1Jw#B;xn zCTNm~878+566a>%i_yV~OjdtJldPjv(PZM4l#NzWyUa;4uDy_f20X(|Nngkr?}-Y* zO_msaF|2)Ygnp?o15v*VGw>?)UI4#W>ODbXV_NOAJbeUV@kZmj8PYD-q}+T3h2au_ zu&|XG8s*%C>gX^-gf%2-(3VvwA2+)cHwUP z^dkDbPW{Eugm%&89m(&9 z^mkt8}&FD6toZQ&}qIu{e^P8>^nSw><@+qA-!XM3# zkE-jAkwKQTI5q2a$4G0oK!@LqajS`WRY8n~XNQp2jt^}~f|HE)G3ZmAw7d+uN}hza z_FT1%4K0nb^uSDK-JGRw+N}ACz}Bai1jXI7aKJ!BHnD$g@uO(rm{%8;Sw1Q6a@)%e zgc~aEI#5vh3Uk3$X|REPh}WZ?q}B00E)SP)l-NEqc$b3DjgTeq@-q*V_sUnS6R^^g z)J3-?^%T#dCOdhW8Fjm~^A(pCRq5Jwzz=Pv{Sv}(<_A1svk%fLO}r>Xkrtg~EOL&Nr)H;ldz=r8cjf!Kly4A##+$;nUSzuW>a~oMPdzj)*fBtU zsC(fWtDLjrqHQU192+l)+gUhma@^Y{8li(8%j%}OzM;{PERQ>-a+aw^WaYcJU!tTd ziQ<1kt2>R2IYcW^ z>qAHV zm$xABkp;{UKGTtYUy)Ncm8l(_d^qoA~*e|5|mX)34YrX@eBP9r2&5id!=L$ zr3l5^494o7gwRH3w?zH#wjpMavSG4kaKm4s4Ur|`i%4{a)nYY ze5W;=2H$JVEj0+wnY$HIe5+?-vMck^&RfnNNG#=0Ih_o*HQC&df*OAwp{W1j34AfZ z8IuN!8ayJ7lpP)}(*F}IGa>%S?h4L4pa!@ekOrHH_#6ef3zrrWhckx_aJX=3pSeuL zD+u=o92J6ESa$P<993iP=Ib#*)x!fCXVi%Ew*k+uGU%Lt(Q>b=&BR1^{C~&)mjz`$ zTHtW32{70(mb?bV#fyJLNmgJzY?C1rg4Peh6x0B*1-9aRyALM_ksAaZ=!+HR9ikCP z9KtOK(BK5w3k8RZg#k_w%>xP?{sImcE))b$5CrbGf_1**JoXSC87I(`i}jqmQKZp3 z!Frc>N-e#G7aRK9T7^s?_;BimshIb;qa^>MAwM6flkn>Tf1#9 zbMQT|d`By~=DTV95%${N@X?xUBye6uq`3jm!=Q{8!CK(Gn1oETW2_+yp=*LKRPQf* zU5g66voU_%WHJROUUP(XM&0NLdk?64eF1efk#gss`nL91`^f8isN4cxeXpT%TJ(KM zFP(SXgLGZ#KEQuO{sX-H zid4N0xPSGB^RU9X8#$}?ekg7EQg3Sd&tK~CBUE>M#j5JWuqpWnI~b}?3>zO}-tPgs zn-)BSjt7`}$gjc5&&_9tj#qharlVrVTx0wllNvC}*i3(PSJY=mm&^P#IINvfofw#L z&d(l$33dE}T@V{xA@3V8WWTaw>{s%Z)kw8(`nCy%5bLntfSJ5Z<0}TmE>9stU#_!> zT3MUFF1tYrtKXw#KL@~29wr}w zX|i}#J_^hdcwr2?LSaFB-aWsui;Y)UC1M3b;3*lNd2#gCBs5eUycc9e4mOhQBBXTq z<%fswzdHPkO_Fc_;?W$D-ah32J{qLcA4`9eB)ZoR{fS9xEwuNY_gL9s zKSe7EJQP*YW_AZ^fHd$%Q^TH(&Xs?8ATz^F8_j7Ww`}De&a^?@RVRkCdf7>`I?^e# zsGnuU`?O1kUw)X ze4(Vuzu?cK4-zNssWqv?0^H4*aj0*TeK$l}g~Bz-(2{)Hi_ODx`hrBnsp5ZF%h8f+ zQO9xb*TS>2+e_Nk*AhtSF6=X%un3)ewDTjQ`Xq7^5#qSj@s#KL=qZwmMzlpu&W}>1 zv$`TqtNcc|1I)1@sSGOE8PPwn-RgN+-vt@hX*(%as=Hwslx#7tD#eoISO-&F=8=%K z&aSND=ditKuSi>Z_}hCWRfd1q+x8O7n_Rx*K$?bHT!fVR6c1^Td)n^0jIlZ$(y+6P zAqwS5l8y!>2qqNKBQz$fU0zK$Wne_(wUou(3?VfU2`m@!VD)275-25|dTkNlSn_oM zQ8IWtlY2NbJLZxOD8{$(6J;(;$qv*JA`H2Nr3rokXAL?p&mjMcGH+>ttZl< zT#?CLt{tMlSFvaggExh6lM%6SK_At-6S`*8LmF^YkRfPM(RRu8yY|KNd7Y8+st914 z*)DlkE)>V%nZd$&@1|X_*?bz0D5os%)}nQtT0cn|&aPZLAEM~phry`Um$>9YT=7JQ zlr1zeo)~nHrsX*Ov4@`?w0GVA%YXjo!=I`X-x=iF6lbei-cQG1l_C@DoGr)j-NXL@ z5^VbGml{_ANq?N}U0cuN$Z>uDeuW+r1Iz9E1z0RFS3l*!$pC&f>|G;4yht1e$j?vl z6Dc-D9kGgRk&;HUz<4b#*|+NIQ>QMi4~qWzLDOH!nZuv|_V(XzP4w@-_Ww&i>O=d_ zzyAJk{FlG~_3g*s+rwY~=dFDnvpZ;Q?BVafy#4z22Y>oP`>W5s@$E+&BiC@eK2Zh{c;mAG>O|pqf==AL{SS_ zaRyOzzZ{A2>~@^$hQe*97|w-e)-PC-ZM28-Z|cwV$Dwa7(Fe6RO-w#$lAa)1y@l<$ z)EFIAG=D{VxW(}Zjn{|9MCT8URp!0Dv!906K7M=q@vEZ-?fYC?d-(S2o9;K7anz8> zA;pjn-~RU2{%9H%mDM!w-~Mv=N$KoEg;AoIG#^HD8-+zydaep~Rt%nyv_kveB2RHogx)&UM#ydMa zu-yaNLpldL{Zg`?WHiq9N$dCDZ4+qDd@#ccrfY&;NI4Fjb-8<>f>vI+*(UtQ_usW@ zl%^KEU=(Nb;l6e=PP3t-iSwhtQ{Iolx@a?r%ju2OJ@7hEzryg~bJvEk&KZ^Fr`B{Y zcz;Dd>tftrx?u!b;hZg_iLuaXxB--FRPr>=IpI~Gx=y=fvn>~;mulKb+Ua5{KXntM zlMC6n=^ShNEY0$C8EJRCtH?7E3QgA91|6r9e=c;&^)nM_fz3p?GO0Ul-NofnIz@Y7 zxlBr-lsY&-*tk{wRxpPCpJ5CT&J~(=*neHvD|2ikHO|Bkt)0re&f2J$S4_!i>pGiA zyf3ISdO!k~R;-8r+)as2raf;N!tkMcg9JKwtLGbs>w(uic5g%*slP>cm9!0aIzX&7 zAr|7(>$#v)sW|Y!;c}SMlETYaS9VtUc>3eaWvR*@%t$$m(TpTDbV@t)0KS19sL#EE=i;=7MNJ6P%%dYNrh&)k zX~U6pIaffJxr0~ITWO~-3W5mCcEeDbu~KAoK!4Pk#c0W`*7c-y}L7!@LrH0j2dosqgIsD4_>fP(SqB zC%RUPGq%qFBk;Kq#$jfuTxtWOGZ~mAi@lYP4@j zzT{%Rk8=N|uFdYibxpACe|K6roj-Qn%cYi)~Pg(|r z-Z@P;ZLIePzOk|W{WKXm9v7ANeP{U-?YTEEgrI0`hWsX(t3 zBBHhG2Wfo!#7ri}5U`-nDRVxT>AcH*GuM~gQpbQ+fcF~q zRn9JF4yZ)fanSq(S|>o{0)MF|COIMa?svpJL1{d*AG)@Ki8Lc|z71$x;N?bh3s(c; zVmOY9Qv#Rc(`kGv5%`=RM#Wi&)(Cz8KZST|`7VR9jz>Og{n`{v05p8?7m#)PCGQ#H z)@k1BYScf4&&I^=C<)P%hSm(JK)xByx{UTN)DOsSBKN>RWsM%l^?wH3qPyx1xI-}` z0)1;@egijxUxDYd*mrpQLsEZb=!ftW?BoLdfF(@M#x1}pP%fbM5Mu~To5IG$$OikN zp-zM3p;!ZVd*#P}`>#L!_R~*4e)#i0{`XJ+`R$kg`^Vv*e*O1J#fw ze7vEssfuR7)^tLtr(qK(7eprA6~V^H3Q$oa+ZpQb@&LA3Vt-Ixb!V5o!s9zmdZu1! zmkTcdBnL)q_|iSFE=aGOl99NjB94M{qGdb8-#+Y#W?grpSwr(|I6{FoLp|uV!4Y)@ zLc${l!uxux>AuF3oc3NYi}i@e$0B}M8vY(bu)kCNZd80Gi^V6~I)@(<%87TU6v1vn zbksA87T7Y-U4I1+FY&>G34-JCY?`3y9}XOrpS4&Hk&rAnYd4TwIWmCD(QCyvc-R?6 zrpZXyl?VQvq%TE?(Hk}}UMNrb(g;~#$04o11oS~`N<4CCWfhX^v;pANa{7c$PS_`w zDO`?j3(Un*N#mJD@90Xw0Ggx?o(9^hL8BQm+bbojoh-aTbEdS&h0HQ-I3P_P6%`-i7n&}NPp1T^WQ~pGDoE3u;)I)noZD8VD#A! zooQflbWt&?AmQv8c~XL$F%Mvq;Khg0u2PhYO*nDVMa8VWmy3N}m9v%b=RT^O&7vQP z2ttJ{E))VWHA}xn_YB^EmwtWe*Oz{M>DLt^D7W}n`+gnuQqT9jfSzNeV{@oMd9VtP zY=2%yImsg}@TUqs78ev9#h$RrI9MoQRc@7j z22|f?agatQoNyrqke~i3J>2(mw(=q#}?Vospp&;LQUIUhe0Y`&oj0 zw0{PV5z1g?M9Zldj4J2|c}+J&WYr9mt{0K_SQ(SwujR5Je4$=Yg*>)UT)z-wGJn+D zQ3_dN$-0y(z+@yV3gbrEPxYY8g3}Yi28fCvsVXJwFggJ1x-#^2Bng}tkTEX>&u4LP zD1yQA{0uRRhUIqFFu2O>r_!YnfE2=+LiaUkT0`F-~qt|i`Wa#<9~cvI=g1A zC>E$LZc5@2nPYAOrfEWHuU99h9&aa)LB|6ZlWhwc7X$GZ0>TK$`)8njVEGNPJuEK= z14$&Y5qm1Y?vq|wjPKZnC+(NL8SZvlP~MKG%WgEc;_DXhRG~nbik!lN$=xET^2JoK znJRHnK{@#Y&*u&NGOQCJOo#K0FoWgelLf-pny0^r>4aQXGC1I0GY$1g-v^CSkojOa~a`Pk;(2P9rj&<(ZQ*Ky+YLr3ZNcc)OUtat`pv+?%9qU5E8_E5&d*&h6@L|1#N7B&7Ox%0 z4Oh)^C(kl~=a@Wr6Eb}ADt_XaHf`n)I9jE`Ov$9|4-MJ%bes{8jPFO>{Aqr)>r)GyjVhW!;e?}6ty7y# zk_L-J>v(z)36h$Anh~#Y47Ri&hFfQ zXaq8~r|#2#7mEQOFUF?B-q4dg1htB<07|R9csF2 ze*|g1@u}_b=@lDO_nX1%jib8<9G89mdwjX z-65p2(eqY3k_4&h$;4{jWBn@5aUaDwmK@XdEI#}ODy6d^e1A4`GElbyCvZ`Ih0m@f zbL!nIBp)8mZCRHfnHXH!g5dgk1$xCEMM$-m;Lota@wNyX5a0hIzaK@u{dT^;jtOwk`B?>GG6Z!V;9|pYH zqA(FIq||Rv=d}wQm9=0Xkie7{>R1rZ$j~RG(47N3I4dorVrgP|^~5i|&bn66>sDm1 z90k|RDXtk?TT+^2&Ym8?l3wDxIB{~{U8HlgIr`j$kROJme(1SBe#mlEB9FkXLbS4 zGv`?)PJeh;LeHjS@PUf_T)t6(qfy@J26wJ~uVhpGh^`uya^;OL&I_7}xtUWfTP3E8qb}tOE8jHYFu@HfA>-75*Wma|51$8-Kwq=?8_~I1>=Cz4!H|ZB6d%@Xo+u0%%D}gfO!-6iKe%vSk0CwV5d&kt58spUPjiD zxQx$Dyu#j^eVD*kx+*^=OkDO?p4d?HKI4j|?q`b&a?34lkT3a)f2^BvVTF;BD~*uK|t^RfxFj%V95IbLEFQg>`gHG zCg=Yv67cRL0mba%0)SmH+^-(fe5a{eql6O@hS|MzvpeKjy}kT@vRpuj`MErjV{V?UJ=6G?thIQ-TUH;(&sF8HHV$p)sLss#+aNugAJ=mXUM&% z>ukJjtM_f;xxR~PM(w19qMn-Sq^e1ZCQ+^8$i!9Ru}fQ?sqyUhHZCZ2Sn(3$4cHgx zp}QmYd}CnFy!oYcvf>a2cn^p?mt73yeWck@IchD`~EF;yLdEIPl9LR!nD*lc@Ese%X-$+#$&Qi65&b+tw}nxoLEqCCN3 zUn4(|nsd3*BZM1m9t$+4qkqJgA#YJ3uHG#Zx3U{}k&gF*u2?RGSEA#CCpy-1ENyJt^4s6Tu%KFtoIjG|74fcFkfkoKOdt_jS4b+Uw>88cmXo&Y8h`(Zl+>IZ3tY&B~i9uOE*X+t|;m9$U_L==41KT0bC1i zio1Pu+$$8UCb+E`LcSoxb9rLudSm}i(?aA4ytkJUETNU_fz(b`9r30cbDB}G4Xn%IPwua^F;$YBqvGk)Uu2>M| zyQyfy_nXP9w6MzDvDohg$?qH7+5H{(dSJEYJ;~cG?xB&_uNFG_E5?yx^P7L$vkUd`PTdDhBe zY_AAtMxs*_&~jn@phzEab|P_$1ony9O~Qte0S8eNfQ_)(30}A7atFw`Zq{Kf|;1b5-qtDb-eF=E`L0` zy1lg54Yf>4cV?g29*bD|F%-8^n-9H+(2V=S;oi-89X&;I(WtD=OfOAO6&adoQ-*mR zaer<|Dw9bQW_)^fn@{ulF6q2X+iA5>-JO=f=oa&usaTR6+vFyu1qqqYnGFBw_M*L_ z{j~UF%V(Qubwb|;q()cDcRn>uU4NaJ<5PW#yL6I!+U|DhTR891X=gb{EliD4G7U%& zT$;pmP@lXdX+7V(BnD*fYdxWO2&pMDho=QZ_LM>F&m}sp>(qY0RM{2ru zs0F!-MPoRzDTJGx$`f+?^!Jw#6P_KKZ{w%x4VJ?O9X$M?Oj`s?8b3^ z-(NA0NdQxQzW{=O-E+}X9vmOQ&xRuzHY6i)93VeG#TjzgT+T;Ukv-(>YR>^AVJNb@ zt1tC+UB1#MMSp*%=^x3N)1QBR`tPSE`tz^-zv)MPYXAPnkEhFj{NpcA-~DJ$fBB!M z_Ib?iq_wf9fBf|H^V5ItUwt9i#s;O7KL3}`DcJUl-TN=!p1%9)(n*KYx1XQ%(3{w# zXy~4(0(Ow^F-zojR0>zkiX8J|Gb*c#?k+-ay!kJ=`_@2j#+oYv6u10Cab98 zbuN|5-R~-B!Qse4-Y~=F)HU!eChM~cbXRKoKb0bp`S_X zZ5#xt{O7J|OP#WDm|^AmFXim=Fe%D?y7oz>r0wv)cMpuqG3wz{z8@a#0;`>8v=O>b zIqIu-mLWp)z?;6i-lohMAQBZEpZnVHIC>JwVbtpso>=s$>oAOeu|DeJ4comzyHMv~ z8I8mBi9UsUh1LQbpiAASybjb%U`V&$95fx?8N*niXv(3~#RKQftn&W$r&2M2yp>DZ ziLqx(8Cq``-DOQj`6=F%+u}ZmDws&CCklm|mA!{>k>r z*+STfP#IK6yQ|3(O0l$LIdI&B`~-yS4d1ZfCJ?VsefgAWf~LPLkOeoILu(p7=occX zXgZHLdJ-Z8s6Y{rtEUt2Vn8?mFF4R!d8bBe#DbHxY(cDU;g^s`huC=qn1OAG^|OEO z)v!-`bf1TRjSEGK6^eWfBAJWf)gI?9M$Vr)nFrd@IfMNjG6Qnr`~M!;PPzr~`Bj|t zP8)FjAE8~=kxt#c<2IW|qB6TiS-$4qX5+)x@Ufy2!RG~1ZTL)L9abzmE4zUqFP}ec zfxY_WvL(L!`=?fVF=vy&m1Kk~LZ}zBcNju*54_h!)3F)+*kn}-guyaMvLdb zfR0WJ%p*@{53;DrL;Nrzg2q{h7+5-r*DGY_l>^Zg4tcrFkLBFhIVe!>MVE#)%3-#D z+=GulRc_E&;550iJyKHQJK7#sF}w<)`%4V@HU@`p3z@^+g(DY_gXM%MO@1qEPhym@ z!tcHVew4c{S&v6TlC|)>W||TW;pVy%j?lG0Lw9 z=JCLnV>6ht#rSGNtT{I~4O*MUCdNIo-0H>Y;@*~C`s8lUH%rqV8kzQieBL7Rfwz(r zCXNI?{$F7w-XrdI5BstB=7UXu&^TXjdwlHK`|sI#>>Aa@!1_43Q*u*LHEef(aCD{^ zN6GI$I9Ug;VKL0vcr@;7H{1hyy?6Wgoubdn{ChZX-qm1Zyc|6FAx5s40aFhnt53Z~ zppS)kIv?GqCY?|E@h^1H&z|ts(?!X)PR6B^-t`gHG zKIde`m@;^P%9ZIOcpkTBA?%R~EYFkaAy2CrOTe`<){LLwT{FJ}hKq}1@9=t-tJr!* zHrCP!2(iAC(41{tD;OxqU6ml7W{<>y6}^>bw!nE3=k)B6IDidA70sl7_fILfL;R$& zS(S&|2twE}Y$vO_2RiDI^{}c&r-HML-s*mVx_bSY8W}r!8WjZY?Frq^rcK2K1ZXR#EeIM zwJD$ANIiMIu{iIOR<{p-3|7pE98vJ*uXL$F;}{Ht*&!4S-wuYgLpmJkqU<{y1}c7+MwK2UoKpHLP+dUV$)j zBobHLB9YZ?g*zDDLFD<|(hJ^_+iD&Z8hxPg@WV@1#Y-kPgVu|GpsN|aC(lXUA@AkG zKzcU=shq?_ewvB_jTCh*$0t`dctpl5jqDw^pxD9oj!?W2SZO35#xnLLK%5rc5HSDwXS2 zT8Kri^Tna-7#Yfc&6whPGF^9XGVT0wW!jmHM!$5M^UR;)LkhtGHm@2<7Bh?@uWcqv zBfWudfy{T{QmQsZ(mEm@J$<^U%=e!qdEG_P~)u#&Q>>I05v3{uNFzY>*$;(D7X{Qoi26 z#UM^h5%{(M@*Zi(%hUH-B61vjq=6F}A7Kt10&w#@1Z%@M%7eXP!o&)1SjD_IF@w$u zayRGNUQWDpzL-WSqsk|(Se1X+wIxOEK<{S+qjY@1Q#?rYDNohKA4>6@%Jzyp$+EW{&m0;yy#B zRm^Tv#srPPU>OtS-IiMyjyo-Ss}+ZCTnvw~q%OUGO^s23jzf--wx118YA$=mc3K^) zG>;QgIL1(Fp8Mr!mCjCbG`-edkg`D@yC(K5kHUwwUfw+L_i_o9d*>=B8$#AaDfMl! z!yIZ7h&<#p#E8jxMQ68BXz{29-x4WfO@FBPX0v5Z<0k^;S9*^__%9+GdWK0=_9()B4R0a?9C-kW==z&FT zMD)gI^xzpiNT|C(+{QKHb{0l!IxsR}@3>5VX0>cNYm)$C9G2$_;-q>G=LgNR7ME$h z2bs+s3p-=8WVQH)6}jq15?QUN<-In{W@)$6HIDEu$^Q|YEGxVKQvP!B(pqtgloN97 zkCj5p+vei&eFM zmoKFzIOBY=+@Ps-l>HjRU8;O+G}o~5+p#T-Ww2pEvrX#7>(U1VjYV>|ro1rs;-@B| z?_xi%-1&_7cf@|sn!L)+(G@b~Wpw(WNv`24iaJTIHqollHoLnfxmp_sg*~$3q*L4A zNCC%IfUV7=?}%?`>1O)VxA>)3f^;T-l1Q%N(b4xP-KADo*ICm#_U|bAcws2e{nrTD z=b+56Qf=(lyf=wZ|FEr|FSDRqz(XBK*EOtPa{sZMjnYNv!Ph?BwjG=qR)_XqyH-e{ zD>clu?r_8O!Hez}8c9jnYrphohOgAN|LKp&H~xrmdeiWTm7~VFkwBY^JjjoK73af( zSw(_cOY+8m)sJW>*qF;Z61w<$KW@YzA-=<8Uil4gMN~UX9}!m@u9yHI&(UI~7P4?; zy~smOOiq~$y&~BJ3GhoNKstANUjo0H4Gz##L;2mnhNzyitj5z>Ww6D zR_8pCM1P9O7&#kYoRP4{4&Nb2a3rd%87OfDb`{gZiisFjF6eoDn$Fx-MbZm zQ>-icrogF%dZf(iOwlpaWT6JEmg%o;YV1A1J+WJsldw3qlL-V^&z)H`HSs zY4|>DUA&wP9w1wxy5wM6&Tc5DHyw|$ z=&eYzff9qjM_w*g3ezeUuB#ZF9a0O*qhBt#17i_kq&1}1k@N0QUm91K0xD)@zb%*JTeJ$zBU7ukSQfXj+GxZdgIR4L4~|0* zAbAZU$ia;xVwsMA9MFmm zEr7$Nxh1vOsASUeJr>jL%i)OF>vOOA%dF}^a{Ue`xw!ClaE1hi71%ma5?XYY6X4RIVXv?H)`sFhGwrERieUP~| z;VpJ=j{wybuJt2X3g4EWy6jZe#@+rDuQ2yE@~=_IXPE|mM1WUZs`HFKZX0=*MGn@r< zULQpNx#I39j=T})+Eg@y*W`Vv4(l2>N8?s{Cj?D0K1mlam8( zTb{i0wH{RrHnB-F-XZhiW1@+gNn9JN5R6)XuSS#)Q?lw=jW()Mo}o~lktNMumyPz?wa^0>0fuM&{gP_-wut6gsgE7T=|ej&YEfXVh*5x zkAmPw)PQ7E@49VFym82s4nOZWYg#PChcQ38gQz$^%#ZwV6S?7Mh57zK7{dh#Te3Yw5m)?0hIv8a5ZQ>jXdpGBlai4sqQxh3qa$ zI@1*>C^ICt;nH(DT#g@2lSyAQ#kWv@={p^s`yEZYMHSWZuC?cKE0DrI0_)qMH*kGB zJov6#^HY>ndmnkz!RuQx__&9*`_i?cQ;UW;^}D54%@uVD#A;zp$a%d;BQYaSJ&j*8 zyo+VqSlm!5g|KSLb^*(Y$If8&(WHQ*)sfBP;6@r9J2s0&`m%e0RU?!J++5KSn>VwzplaXo(!baJ3z6y9y) zP8CJOIP1uCy`=)6^QzXQLe=ihm!Q8~N1L20Y+;=RsTF9>Iu}F=JxPa+q$tB+b3zOY zHl|L}q$r~+@89Cadplf9kVsE>o+4>Lc6o`A{*0vp5GwT=0IA-Hf1cG|;u zwnt7Oj)JLI0IXs*SjAL8YvhfczM51(AfTm z6t8;g&dv&7lb_xzf(e9w3zxaTSQs{{0rG5i={|q$j~Eh|q8&0Ix!!Tx7Hc$a@PlG^ zXTHKhe3zhj|0^yfUJ74E&1i-JU^ux)Wx-HMs*Kb5R^F~{Y9Ug7bXP7%K*@xhsD zkI47&{sX_osR{M0q8q89g5!W?7B$qyNb!;!DilhhL!+|*lHNHe84qF~u`Hn;##LIX z5p#)^XIE_?QD=Qyx?(u8`uYSq(kzByWy8SU_f>M`trX(jMp4A#=Mdj8{DBR`{dhuJMvnyjlE+X(v zAfXk8)_!eMe`8EZ72CakBSq)J^qy+lbo}JiB<{pCKGBl26IEeblWmTrPoqzXSB|Cf^?LOj zDG}SNPm)MPC0_jTWraTek9A7u(H$b2(^IExIj1vvfXdMnpErqE{X( zj0iw+w0^WUxBzr3^m{MaNRk~CA$ovk=nI%rtWV%d6Ke-N4ksO;eB|!>hS8>cLq3kq zfffLx63hhDN>0hOsN=l%x$tau zdugwK8)}&j-GzN-dn{t<#}JFkna}+aA&GmNU(3ACIYsNDQEfEMd@oI(a%S2xS*7n$Cv&D8tjTMKJ+<@(Oorm3rwNb>1_d5XJqUH7!z?eq@)x=Yuc%N_aKFH{htDWZ@fd+^BJ}WRUuEWN1UNwqw6yy-Q&fxYs|hPMI6Anm0ZrmJ{6C)z+-Mv+x{3EmS)((Oi#KhY1r( zp6T477UV}P8pG9^Lb%DPJPEEjAMY)B31id4Hej!yK+vS3?NXlaHcq@=7bO)R!#6q$$6f8f7Rzb4qP!M)&yGWX=r6{yoKRswyx0&`XFg2Mw6?@06QYhKF$*KI z_q!jpZlRI&igX>x`lKC+iath4@7E`r-Sp>Qp8hZc%#6|Ny5N;+=bL^Xb-_C~{dv9% zmM+wKl@uJUMcqc4(ihH++Orf=oc=uD1-eZYfuVvfgw(ar4tMB+Zj**+B7!bFe_!as zs5Z2q4?_c^J|uJLLgIH}%ta^Y!kKvMh8$W7s_Sat^XE7knrV?qG8hqz7s;SLDE{+}=D(sfhd=)O^nXuXaL3Z}FBj@V z{`23zJ)C~|`=6h_{Vg5-{Ew$xACf(2ZRqg#KRx~U^gDmY$w;N`7|)>-^aH zw>&g$8vEtT)3={(JZRPV{1Xmeetgm+R(#kdraCf?i2UKp{~W$k%DC?j zU;g^U^H+aHJDVXqR%rd{SmC>1toA+)6)7Go0)uU0TL0cZ_upIPjbbVfEkfxiSfhNy z(6}qrw=m8bJ2tSVA*eGdIPYkEh-W%heEM>MWKq{7Gfp2m6Bu#IQPROv5Bp z0hWI(uaVe5R)lg4l`V^k(c~;Ov=GyKLsy|fx~*E+H-Hj61|lqG1+)aqhJbv%zN7O>~nhjXc+#oPILVBv;--Z>+G3*Arfwi0E+L?6+pcL#*-JMO!V|lVyK%TkWBU zcTmJ|@C`;PGNm>csjw?Fb7XdeMAOLd@GQwd6MsAy*Jh9t%vuk%80tT3_ba5I?DQs$p%|3sq4sT$U zsn;UlxicRQM?rk(;!$o-OIU1Ql-Fcpr;>GceOCur63|USk_cCbUGjT+JlYLZXi}dS z>0p)XoVS^1D|AqA#h)V9<%{U$Wvx%9()zVNr*trCrpdqQv`hRGZ78s$($i_o=g%jR zWIC()JG0n+<;i-=Jq-9PdzydT#&Atii|tVsa3*jY8n;?|6X4t5|L+ff`|i7Mpa1yJ zfBo>&mp}dcpNIeW@h|^*`2PFD%iHS{V=!jm25Re1edz7KUh{YhNQUud&{H_IbJ>ee zF;(`1>lsmJ#4I;tkD4JjS+96W1w$_5ffl>IXE201g8I zLMT3^g7{-b_24XE1ypi7MvZ%W}*8gphyKF>g{eiHT!rtD*M`L*5tVtAV{aEt+C(wJ!*{_DbJ;50*Lu z?NuRA8&Wt=ze!+Le4gPJJc5G~@`$D>i@+PEcxc#cz%#@VKuD1$?Q~sGddGkddq+JEef4%P|>+}Ie9w? zXilINAO4U>!|~wI5Egrhc=_+PTaK*Sk9nLE4IyXrmUY>-?T#zN+H1$-oEr``+~9l! z=7k-NGP&^#p@Np}Jr{x8HLo!eQj2iArwzBk$=S{%S)Y+=0C#N_TsAqQtuC+K(&St_ zsn@P-#m80gUao)GxZ7a$eaKU(&}i5Yz7{(Zg|dzvQg7q>#Ia#1wgy*j9rTOG+fM8L zwr64jS3+J~q_2!i}`0p_~#?^?Fe(N}P zIuT>hHdLg(A_T_nxD%*M!7r~(6{_&az$K&;%f`wdrk;ONDMUx=OfYWVVgpnq5U4`5 zNt=cWG!Hy@>?@3QHquyu(N6u~MwxuOcC4saE;F6guG6d-Q^j;z`-@Cx_3_Kx=B`Y) zhA+mjw}xtbmAk|`dY7uu8^kcAdq4Pq$ZGYH?ISE@_2!G-tLv8v`ZFpU&UWmhA}4{j zL@j3e4V-`aflfYIr^lZ9jbmkp0}|In>AgKleCiD@F$s1jNX<2*Y?1Vw6;* zqN)x;?6{NaW`e4c_=BJ-5+4hyO6E@l)h&-d6j6W7Lftyw5XzKWi4eJvN8lk(;nn;4 zs^CnYcr~*IoAilym1_RA>ytqev)^v3r7Tw{Wc#kjFuT>8?M>00mcz;N6T0%<4RP8A zbOscbBjsmGiWKsm&0=Zb^E!>S;p7Uyxp_s33E~_EiIBP+P^Ggya8|IjUNywgbSPFK z1xbGuumU@@x?%nGrnmv^A5vt<8`{0-_#wD=9%YzdX9}3)X7Y&9^ zrRL|ln~;-@m|A|;qB!_Ussl-dMcZ>v4V{08G&%xzcFTI^9&NbMc7rpWD5S8RNX_?c z#h2`G#dT-OknxF9mdw=5Ao2uiW+Lz&&f>f4C0@Ec!Xl6@3l|wTjcHN(h&PV)uB=Bg1z?h@GN6fs!#$|6FyA}#X4*v_bY$o zNhNoaVjGODtGY@mf)L0gY%lk;VDbv-QSY_nJ7;v}D3058=2RFzTr;r>q_koGjlsFc z{@def_4%vSJdJ2sNLPm?I(Esmkn}Npvxvw_2Ga2y}$DFZo_6F1$B?j!iVykE5G4{PaI75D#bVD9_XpM_g8|=3e3wjj zMC zVb>jB{&o%egP^jc(OCH37RuApB|OqWyNg=3C4OD+0t zuUpmf+nzVc&?LSF3T1B{m-2t9!5~|U8Ld!wj^WD$hJ$U0lkWG-3^wI-17OBcrMe zc6z)gWtc07!g;dLcnSp1^5w0kJx`dmfd`XRkyZzp(q+7}-;}e}`g%)!?uip0Pah-p6(be1pU!HA3Xfk&? zqi};0Rq}}C#yffM`_9-M^Zeg6_3t}93v(Uoy#MRKc;4cC6}uf1*pTJsn%lcZx8$0{ zPe`rjHf@e+!<4*YZ(1Io-Y=CEc3hh-s<);6YPv4)6(=c%^MjtR{Kew+2la?elt}DzTx~{YO(EPsW`p%MB*k51m$&GcJST9w_@+H8|12#FdH&c-{J+p zl}w8ltx%`#bcu1t_f>a%RzYkDZm@5@u6O6X-zh4I#FRNkJdJYvKlySv_fNJ6EaDZKOI+V+f3zTU`JJpd1{;-r zMHQbwg;6zp=k_&!8um3WJWZ&mV-b>b23{7n`lWvl@wgT0eDu|GUKjMg_@z|2{kG@c zwfNL5?h1b@ZTP6frv_c?=o(!MxmY!EuR*-{3@ZBlxHBz2UuNqw6>uS-uHfK4pssdb zo)V}~iZQ9RqblXeWx9-=*j&ydG_-i z4g38(n%#1tY@ia11&r3w|Lgg zuYSw7JU%#I8AC2KJx_w-+%2XdcXq95XqGl1iv^?e1I2@ucOjR=0$DyHb39SS|9+9y{At7&m;!JCLkWfW0{WrY*M+=?RvmO{H;e&Wpuy!` zeP!U{_y!bqkgt%igDAlhgklAXM`y ze(8D)yIo>~1A^P=5~)K7$GomC<;1SRpxmybObz+NqdfH{9O}Q15_Mjbh7o~y%Y6a=dE*w7AJ8T-VkCO6N!}r;jW9UA^d;xIzQ#C z?$OmR%%6yCIv2gtw7A_wIb~D|)!EPCYPqru?(&H)(|L-@RwoBdNmdk-HC8XquP?#1 zB_R?U<6&}vS`03Ps@LVdb6%Td7soG`XzvdpJJyHMQH^#g;D$hHnUkEl=$U2A70~)} zRnR4GjcS=6Vkss?}*M z*3;*HaGP0IEsmG(LD^wFC8r%#$sL?Rs{>WQG4Mh&!bpg3}_MC}~{%a^qmDKLL#M+*{FU;CWc-1m!cgLkpu#-9kQ(-cV%eNyOrCal_$^8i(?>=y%IQS84na;v|twTW^rRxA|wFHkR!3XpQ4G2TR%(PZC=;qUDRotw9{&%xEsh| zbhdfTk}a8!DOR_aMkaG9RarI1GBF#&c{$I;$fZoz?Ozt5ti4f*fn5AuyJvNE~iSOD$i$Gyv%tICb7??E|2_nwSPDs+hiV690pl(11>Ie-Cv4pt^wt%ySn1wCi zywTud%pwH#2@i5g2g8>CVo!F_QITlT@PcYuj)h~Ljee3Pq*RbqCi<4H#CU>BdpDky z0}JI48eunyiD-X4;SS>$$?}%8LnFvVESkd*O<}vqsKfJB4s|7A{mz0OI9Rcje>49XflPzC_@}4eFP^hv z-(|yV*M^exwd)hOCs?z`oU@+io3bi{Yiv3}Sr?xL*Q*WhlN#@&?~|SZH{;X$3@+I? zBE1x!1vmN)kA<0Jq>qIyz@>^AOwffH=pr+W&&`Y8Hk&*+zZJV9xa?Al%y1FhTfNkN zk#|Yikr{t3@$Svu*1gEPY<{%y?#&*$yU4rNssipg-W5w)!;*GHXUs0=@K=U!T2jMz z!WBcGce<@F_#Dekh&|tC`0|?(r$smYek`AUpHl(kayR>aET4Y=O=pj9*Dz+PUr*nk zzN(664aoGUoP0l)&OZ0OiV2g?$I{v7TG6@htKu(t13IC^>uH0rc-|oNpiaLZN@t%N z#h{wWw|&w4LraSfPet<&Lm}ei+o7~D=>M0o;Q>y6ob6rPjw3e?efL+?^8%@ex=<1j zEHFLYo#!kX$OmMT00FWB-~Z^k-~U;y$7A*#k#*hQzpj2;{d6z` zyWX*XF@`q(3OTV`&)C~QU2mfgUGI!t&wcpOZk4CE)%UMHcO)}x{&a7@t!O9uchplP z7o79m+n=lT2d>YXPeS+h-|h!vQvP@M_QxvrIVW1HYK8&(f(D+@0GbM~@rnkFS}HV^ zgHyr9JsOB=1>t~NDreCXU(moa8sHDE2ScfU)Qd9}1Dx_skE|UqXsY-XO~q)yp@A1P zuvPHo?MNa@alu4{w+4nI3}Afj3I6;G(GH zko&+Vpfk`{wGojXgp$Ob+4lx48bBE;p#ef^We*bTq%vBm_PpfQ;xbCXP%5k-lnPCM z#d=%8C(s%WddU|w@QenKtthFz1X>p%pFvaMz=2Xdsi(SL3=-Nwf@Tj|XTb6CdYUDW zF@0K&CZJRs5&FbXp_BCs>eSFqF%={kkUy$Tg1H?k0I^hRrl#jaR}>d}BH9mJUaN_v zLsCHuhI#D4a{ir?3^g-&v|<_Q0r$Lrrivz?mc++aM%OFY%IMEcELs_TD{=1=;YeLM z=@&P!Y=c{?U*m(+z7b7TRl`NQ#oa5zu1~FoyFAsl8tzu&wi>S0a20y!YdCndhz6Fe z;a(~rBl9SxzM)ZN7jR#=)sznno2PPH!mb8nifWUVsXJ>dS5< zE|dxbEm{LBh*~Nj#lTOX0f=?_sqh-G{R9pme&Zljf*^>bf(a4c?KlKba4LPq$M<>Y z38%hg#6YXQ$%L9iD1fLkVBPVA>iu#FwVmc&V-5HOENRqJJ(#!*s|uLxpkL{m388}e zasy^Tn4wUz!>3@dctGU_J_SR6Qo)0d49h0{!63w#>lrbk12udEr|tm3`vGwbO?AYFPOo;PYVOwz{&OX=6ydK_@}O z{CdoXdfdW@%eH(VigJ?@RbNq8l&H=x*f_ziLO@>dBGTxg0Cq&^`!w`#>QKM00(V5f zuDPmP{&E2RiXy(>(zhOe!U4Ul5EtCL<*CvflM;1fkiOXkPo-{;sayP=+ty zH+Ton6@3pfGZ?wfyQ+oxVl#u_$=^x}o|Vy!)>k3fXVJ zmGI+y+YnP)PNjx*imBR*s=uMQ?M2m#Wc)j&812i3z!S%Rp~Tw-(XrLg^$NBc`g8M& zRzu%P-1`K$_FY5wMT0K7Lu2Lwb~Cxy30hhKSz;eIz&rc!5PDNbrswsacmTcJheXa< zI|8riofRNBZ8eNGou?3j}DUVhwU;?XX`eK^NV`;M0S=q1xonzZy|>{*{Bfx-J-Z*%rJ@16)e%p^|)Z|&)+d>m|?BYSWBZeVm-p|~a#17Un3MeE3i z3aPdcCJrR|hix%10w&95=iSbmFfQ(VbeVTy5zM%MhV$N5>5;0Ub3mBbY&q4%FN z0Oxueh27)~&pIvFIzAoS(~)q-9;%Ik2cR#ON#A8aarWX9BtIj>QEkbUD;{-AUm{ZVH*L0#=Fg7@U6@qWfHS~**9&D`(ktzTmTUX8NaZLfq zUl}I3;CR@5V0nVfehVJ5dkcn%QY}{~UZ&DOg-~AxpY}ltTT?-9^|g_H%Mn#o*MwNu zv2YMNL20KQ*+JG|WC3~yR*lQ1Oi8<6Jqnf`?{@Esn0^LnL7|MP6a*vm#DxWSNsQ`$ zoa!?E13|T}S}TDYnxw8;E3J!-h#(!C1g&w#Q3E15C~oRXrn(wLUCvyS3qvAhfcI>@ zD#%QEok9;Y$w0777o!or)P)@S&_y9jzpj4%SNA_izQpC^2RFn^l6F`AcSF4nKb(^< zaD*wOjAImYq=9|qKIM?scZnsq2)nj_lzp)=!;Xon0v2NEL$4QkV@%1+%CjIF<2{$j zh6ii1>}oK@8e4PPJ|x*1mku}I^}NYjef|j;NnA;4Skd~s1z4@&yp6Ix+ldVLP%r9{y~?18i=hCadRovNi}Bi z^g1l=*RE@3sqq>+JH=BL!sOD7Bfk?JXaKH(1IB8oeX#7-;M~T@uOz>_~>M ztBsH5WhOyFV(U-lXR7Eu5nGIZ;BiLP4uC_5tS1ggEFNPoxhR(10U;W|JM;qf6ypi> zG&MS4J-k*yz2<&;!jdhY(CaaD=ScQ+PSWA5{CEe(VZI&l-OJK8&1wckmegY}hKH}? z6XGIk26RD|JePHBV!xK29Stw3%6nN^lJ1E(b0ZgV@*&4rH=ekNSX|0~l|!3fCr^oA z^d^%%A?4IRV8zn5xYZu2t=x-Ors9IUaQy@99$HS1=DS4sylhA2%yc(xgQYd+wR5)= zKX%E_4t2%JLe5ej&cjP$g~I$QPojuQAfDosqcDxqzw@-Th&nq|oaa+4(&YCN?rvVL z9*Q(YmiMy4{H#Mt191d@pNfKb%%-y0;;o0lD{kPUBbpsy2~#s!$g(?M*3korOiE#P zG%~mAM4~7~an0Ge%sbjCw{&7LG5DCN!W?KKv@o<1_9plQ)EZhAJ^}Sci>ob*3^<&+ z3K)1R%zt*QHJfP6Xvs=IRfXf|vB4+aJIELZoHsUc%~WbT!O*^cn$PNmg?R|AaJ7ty z_Il4dEYEKF=6i=$(5G0W!*rS=yvdtfY*3Nj*|?gZhigEoph3{4qHrnmyNk1H(k)0u zn@*d2Zz@i+a`+u#q25(jmrz$Cf9EKdt@`D&C&O3T19&b98cL zVQmU!Ze(v_Y6>^EhV}tY0)L$CU0ILhwh?~sU!ljuz-oCPfMH;c9Y5v4@c@1{d?A5t zB#r~*=clL^C90*b#Zqg!X9r^g&ZfB{tBO^{I!W0G`uBsR{{*9&AAURh`_OvZ{hI%m zew0o6_wQdf$3Oh>%i-hKy7}clhcxb^X{1!T`QxX<&xdblhV-kAwtuy0(pK3t^4%BB z?au)om2omlVMBra##joKEw$QEK0`($j{w(ixxDnEyDg zcmI6&_+$uv(RO_6o9CYoauh$;+8{OUUi19hA^j#=tt|1IYo32>z7)cnubSt79_V-J zU63KrN8N}tz8lf465cwihk<+94VczxYiaWJFLdk%5@SSTy?@CA;z@S{1f@68Idj1p z-u6>P5;7UbsoY&R@ag%?CIne-g0iw{l{Z9gEmXG!CqJERKy0M$q?iDm(!VwI*NJUi zroW;k2}0QuK;Iw9FI%Tn40a&DFqvk8xXy}^X2N6&#Asr)!+>=?&2%6Em+Le2v`i#( z#uNiq_g^?6Wq)*f9FPOJfjCjPiV?WHRsDdrIz(Rp9Qpw(9YNqKP!Ab(tGyq8HxGFU zBLWG+IAHq$Wuo^|uFk|?8ls)49=y`htj`2LfG`=C<&EYcU3^uhddxFvW0VLrykh{k zR)D!Mad%`x_Rf}kYeOM6>&&B+wq6#*LK2Ag{JtQfj(-IjagYITq>{@rU~Qc5ISp7k z_m;m14$v@^c$73G4ZBQ4ZPoffodizSsFMB(=4dLsI8>F8BqdYpLJA&xG1r8-RW;nh zUV8&^*;7Fp+WTy32x-agt-vEQq7?*I@Z;i7J*{Z>3Y%pMk3cl4)N~b(OjKgI<7~wa z2?B*2vwtDnSOhKn0BIgfkp1KjPX!TwT(<|KX~RwI!3ixVCpSD+@3Pt;GsZ9Tb=7gl zw{Z9;J%magm11(S=-(Q}ge^F}xdajMnN;%N%oZ*wprfk3Ib_&qcdA)w=Y`dlzb5tqJ3UNc;VL- z1%Eyrfj+=K_^M_J+8Q7IDop!n7K|OVJn-Sq4-suQ+pCXss5<%E#E!C6#W!AkTuvQH z7+U8o$^OXuB)g~}S;DHEdRMjjC3UglJ8ux3}oI_J31*&0&-`c{w&`Hme7 zPQ#!8a$KSB4?ciPW72|{4#w^-pMlDgkbn6K3YKX5_%d-Zes~D6CywvIeT5;6-8Ov3 z5F6aUy6uQUzr=P-0{@dBFbX zt}`>A{c+HpO{qRKa^Cp0;zkL~t?u)Y03^`M!dd0ILwkguJ;6z!suQioAi*ByZhr}= zm&mB@keNa@9kxK>#_nfG^JSgQ=__Hy9V3(s{BTeZ#%6266W$yZ&~2gQ*l`5%96 zzWS=Ue|%V|Kl#*0LjU%Vj$hKWBY%s?UWGf_SJIqnwR(4RbwYHAH_x) zTSzokiuxVEDEiE2I@^{k<*wGS2mQz%mXvTH zNJjSPV{4%$225PEKG28hNC;z8BuTzGk+u|`rf<|}y=kA7r&YAP9k)#$HGdoNg)(HB zjl|YHRZUCGNq!@UTqE(0&g|zdz zV%k7AlBJhf(*{W+g<9{$KX#j^M%I+}Y59vYxIblhiH1p|)r|OziFe5=K6N9~C$uZl ztkWLi2+4(~>U9ErkvLlUntx3}w9oDe@mHi}L|mr5hgvFfkr1KbopChGFkbI<;mNM$eOCB#X8c2d^?kRq^h2lQe6FlN(O7NQBfgl{q&j zUcD`&oGVCLk++`^6Pq$0WQrJ*IigLbrX~Q>FE(2<*`kOs$S_K~2oVe@4+i7|7#PCW zv#HP;J%=uQ!3Gykh44@Y4X}UlP)|1m7w;f~3NnLpY;YgBM1<@E!G%+802g6Cfy#xr zO!mn@1OrZ>FBBTM0|U{60r3b1^b;Cz75XWP7gYK6iF`-rsQ07Bf6NE0_9;*^Gk8<6 zjZFyr+LVdd`0QtaAT2 zR|LyqU>p!8U)Y5-EBR*HvhxS3CzmxDyQ=13od|W^DT4HzfQJQCnQT2L;PC<#`5hVv z2wbF=@fv=zGq4IT>XyWi6u@fi9~L7FF&a;dCKj@rmgKeIzHEgWOWI4+6j`y07cNYs zPihhPCA6zq-LtJ0lc0Y&6k&F=%=OAP)_6|qo9|S7 zvqK7pFK+DI6)H@_#pLXS+J+581-Jb3eZN9uL@K@}!+66GIKN;3N+wzZL-j&MihFeN zoVQWS_W5husF*m2oO?Epa0}Bn6oj#Pbw};HUVS2Tq@fY24K9Dfj)~;es=DgV4{oLA z=VqBfUGwsl(i%2wT+cUYt1!E7Wv(L?238#`w`gCD&dHN3vnauT$GC2lQ?OU zhJ}f+R1=oTt=8wAw8m~Ilgo%JEo3w`HBtNxhn3O~JsOS#E=J&LgepUEBC$19kr1j$ zo1!U-*VtCW>#Tnt#gw{Cx0T?+#fON73AB5K5Ws;QJL7k(a2`mKwpP1hpe!G;26*TT zQ|UHcedG%D4W)VWoi69?*YcvKtJ|;82U~TJYK@s4%>%ye%QxZ$97ZEJ-3Ph-uXHK;VCUf}OmdDs-uhg)U{+T3%M6 zfRpR&L<-J`qqGRlJ;Q-}FyJH@5O4tIeJpzbtpQ1*Q9{Tevcu{Dh#)2+N(kYM7u;Hy z3PT%(6I(D%1v7UDb6ki37l#O(4JM0EzCc9+xYz+zC_tztB$+^kN*5FyfQvgW zNpR5y0vCVcF-d<;5QL>9sG38;H6Z4YRtPH0C5Ray<^mCMqL%6g_+*Ee!##&$aK9V3 z<25Q;!~)u0!fkqIxqp0M9Xp&KQkK2=L*9Y75{R5}FV2VBps=?no>cTw$aQO?Rbk$;niPMqMN{C|38F0FIv$-vv!IiHJnqKkLLIcyMQ8ba zMUv7ub4g(Rs!bsKITWyVo^P;ixTlt1z7DfYFMnn0h8u?7%gt|6ZvN)q5UIL|DoSOR z*M9x)EpYFe+)%f|f7yV2=N$WXC4K=TRxy7&`n)%+JH(DEyOwT4GY0#HPc+k3PG7j^ zj$H+|`?($E22xtwYYJRW{#3Jl4BX&)APXT#_NW;L#7Zv9uvdx7(%M@9!eK znmexF%~M8fncXdTjdr^Ad-_k075G39vaFy&{=Dpnnk)0HP%juBS-)B%$3%lxW^8{H z!Iw~uaTBGath%>S<~6h@Msi~e2Hm0YYVKvSO5EmneSc$h>4^QD-g4M*butVG>}DXr zt4k-HWTnjvU!J(>3$GjQZf7%lacMm1Ak_c$YT{3~eAIK#KnVX-=K6;l9-m-8Pf}Vu zRYd_CUU9ub-y2`Z#Y48-=pQM8)Rcd=9&QUmZ*;;h_~99uMRwM|2M0VD=x<(2rU_XO zynBAEBYu`- zcxb}VRI0c-8!4#@0CosMVQ%5>kIFa;1T@BO3W65)JX%)Vi(6} zl8USxMl&a>&TB1eif6~J|N6aHDtJ1}uqnqo}A8+B4ZxWu{g|ec)lvzN_|a zN1}GS)fG1(qe6%M?!e>+U3Pp_enZPGyJ2+4`_5ivPk2>lrYbWhFi(HCTVp1_#1gsX zd!`7t)D-Ybnc=g&{ICZG7>0bKmebupAcR0UtWA=8W4bB-Rx(Z*7mA9poumNp8+80=FO?XaKH( z1x*by8=ad!Q?USU7Br`gyhN18$D-;EoU?k_NpeJ`Q)YivKg)`{2#FT$_M;FS9O;F1 z=_~@vW!Veb>*9qGIDmKP6WCLHo#I>{bu! z`Yy=0P1{MaQQZyOpk%Un)toJfk99D!%1mN18)K1&9K}m_iT$NBT9ya#Ag9igrJ-iw z)U-5#I*aAb^(h8v;Cm8xJrA>W2E+&^%ragClhtL1qs_V0XuK}U z2?|S1L^783c33k9N-09Hvmp7Lu7eRJgD2LUC7l+qV{YkS#rTxWlNIDZ6QPA6l`uEK zFCf;CvhWLtH(H!cSwz4--=tH^A6fpho|xH0S)&C-0#zlBnPaU9Zj!{v1KJ1`T+LK$ zIzfNY-i>GZz(PHQR@hBrqP?DQhjOz<`}y9X75FL^;V?u~$Zj$s78_KkcPDg>(8Dz# zRFEKOQ<1oo`d#~3uIzY7`QiyiEH33#F3jBF1z;iGyD4lookkbsl;pWTj;udl-cnN5 ziXLN#q7NSild9KNLx|B3$zoD4$u<(n#OYCjoJ|`#(`fojXBkPEOrsd+s3Vgoq`Ir_ zPtG>K9i(x`|0m1ee?5GA#xhgR6&E=&VEE9Qu8cLtuJ|j}xQYZsdcMxelb??;d~^6e z%C2ALUVMC z^X|hLu@d|$v4W*aW9ZjKl&+U4iYAIa%3g8|h_uQnX@^ytexKTi5TqUldJGd&3M3C=29c>RoaI$X^ z$K`*T=l&IKh-*$yVPnW|ql`X_J~hE>EBPuBsI`$xpeJW1AtX}jnMg|QM(9pNPn6^A zdeCgb3tz$my~Z}+pF+s zY{C>!&SPT$un~NYOaVLtdIM@c;}R0Gra+u8kZOoqus%kxU7%cnO2pd$FQh!Bqg#JN z2pAhr02}y?lna#z1t6@ar!Q~HZEA+F&1bwQXvy)pEZs&Fx&Z3Xs6e89OVdI2t2M#U z^y4-kY zFpZSB!p@fXSPsE93&IM14wRG7c7%VV00**uYS846ijoZ?HwSWNkyWW}YE?$5{f_vO z*tj7t%kS;V*~8;Vc-WC#ckPcqGA&(W2^X5o?9Q|ljaHUSP}gtQcGw|nT!jG#(j7J> z+emt_QVqM3vEQz;E+n4ud)=YaNk0NwO3^*mK`TA}zI>7e(6Q@s1Q!VAK?8qxo$$0~ zMmHHflfJ>X^RO9Pq-VSz8RIrVWqax(ekHcpQ^BqYd!m^>A(}Z$EF^&%M=aF-c7|#o z@Sq&x2l2{8^D6TaI~u8+o%m{SphN&0pU9DJ8!hIF`28&I6bZ1XREzEm>eyEM0`mj% z9CEt&;UDacAq*|ZPOu$XHlcsvZ6J>?lS(0SI!h>|BO4{!taX;hFCbFO9Y3^9Y^XwB zMv;0h=J!**?|e3pGksvf;)%w3pWB^ff@@!3x@yJc@!x~@}a2GtlI*e zBAE2nS(J(lP5M)k?ZBjfNE%5Q7zBgl+2_3+z2YL^-^5^E z;3=~yVu2vV49Z^?w8*%ImmXI|c=J9faOg#lp@Ent<)M)czjf2>aGVCl^0FegLrDV% z*x^)uG@NhzU88`3&o_`cJCI}&kH-PCOy035p;HuUu9ro`(1b91>=xyeC(IN?>=p#y z*~I~TFBWGP5UgOB6oP*WAvQ;M^C@769VN3DI5upIL&RcHbNTo%jH_a76iNON3ciG} z0SP*1bDy`IqBvMi+r(kL>9H(5iQExDvV$lgM|kV(7+LKCs6lMqhtKHb{EG)>Xp7p3u`UE4W{L*uNQ52qpFGA{t9{Ffut1=9B ze$0yP-gDzQo7R8RU8r1e;?hIU2zj00`E5oM&|=yCE^x^f@M=*wtN`HrI(SsUwBSqx z*KIBcl3AKMkx-8vU^Q{6HEU{%%J{2<3N}55g2N$c6h5ReD732liGxzS-b{)vl{jT& zs|BzGisB>~gos@cGA2=bTJ8m@?Yw>K%%Onn+V<^&k_UfSc@GEpmJrhKP${!5q>A<& zt`fMySp>Wfetxi?CChi+QDp zDuhH=T|HLyJW!5P1iFEbW!G+k+yrGvD2xH7_|&7-3Zk8HphH0(tw*_ocOk*6A+0=e z=vYUtS}lJ&)}!A{?m`Qbq7_`NSZ~A+5ms+=^*lA6GA&MuFHQ6icq$n8ZoqF#r-RiWJ(aq>owE# zq9Hb#cBzuo=@^!Bgqppy;sEkeFfV`)||28lUZBukUuexK|m zN@~9qXW{?2Cq*?fntb-%fNjAtYU5s*nTE_0A(Daq1P{sWV1)7ow1-~7JLwV}^ey6X zp~HVEM3T4>T7W%@aq}Y}J#A8s&4`XrFOpd%45mv~T*ky=Y)r7=Q=Pi#h*;TEq)MiV zG9HlEXhkQ~rIpZf6|{!gEuq)gnW{W5OKp3!>r&>4G&%dk4T>WYN)q;mTKo1*h9DA< z7MxS6*Z)qV7IgfsW0N*sMV-xH(>naAdR>3ua5p>D1x~}sVe>uM%?<$(uL?GMLm0$B zgdGgo%f;>bAU+ECfrQcpMNE0N-jQDPW2J$7?u`QNTiOy*%Pi#wTXUb^SP@H3s7#cVdymu6fNjbcKKZ10@3iI z8X#ct^S0Z#A?G@29*MC8xpvFCu!4UCxzVnX%T2^}PAGH`p@xNSD|Qgk9JtXtT-9f5 zJPGI;^MS~>+@6c{n+!x=HYk(TZwu;s4xo(mhHTrG7RVx45f>8?B9h7&ZepaIKh9=rs<4v zVd9$j)7`kZ8y7cYT(tcTz0VsLV?jDeQIk|hEohUp{P-ZKJ2%z_DGIb!*`fLu+~1=9 z1s&PYu2!Nksy%42=6)(H4j>Q5A`;iuHeMRq^5QOs{BRz&Krp!Z6u6-=x1_^LwN6?5 zW`NkfyU9}9OPy3I0xrAZ@nV0E=Dd+be_av5S<&%}FDkFlbZbG(5?w%n$*x|%s7plq z&Z{9Q9hnDY`5>OnR|37iX+3@3twaS`ftL3#EU0Vf_VWSmngX zp)f4f9sCGP$5x?n-nOk)^FZf&rxnX=ZZo2C`5Y3OTZY3Fs&TIEHoK}f?#*-(4(3G3 zLxoZ$czP4|@Z|RqsCRP__a0XMm-w*-2q^Y#N>v+L*J}sL@6o`%=j_T2B1{zb`j@+N zov{pGf^&V*`WMjOrl5aEfDN+D!i4@XJ4aQq1xdeJOK@^&G7olfsn(OF=GD*FxM|@Q zla+;;FK6ggRd7etr=GLf)ZeKnGb*y@ExTvg$d*;AX%D!@qR19Hx+kF)hXXedbvkSI zk;vI5j8iko$uDBawGwlUHA1QJ@O$q;%O+}NZE_(^&D+_xix7V-&}aEYskTITgyD*s zk`o(YpQNf-CJb}uMNOwBs)>CriodFDt6Ni?2M2P;B^^=grIaf=78W-6FdcTv;RYb<16FgL1u_3M!sd+VuR%O{TtTqNBuXC=;2e z1wX&#Heb8E)Fe!%I^Gz9K_Cd+6DRk?$u$!vR)r?$eXF&y#L0Q<#>f|Qqf*6|Fx9S~ z=ZAKxUCVqg@7%_sypX$eAuH)6wjJBg9i=L%<60F?E4qI*WI=NA8kIFEE2q(zj6}*5 zES5FMhx_Aiqu#AOWp|&J-SboHMy^jic7(+X|H@GQy?&E#Ia?C1FH!ubYXFa9n7Lab z=J;S==5C#%V3TgfV@pwGT}ZB!9J(Ak z=|{2{yCQ$}-REpKC0;nB6PD zc9%Np|FUeq&$T7dRq*$s$^%vw;Z1HdtY;>(Z?L@lO@LRpsPZa#ZJ3Q_UqYLg#H8cM zfduxpJ7p9W=Yw&BPIgwEZuLyBT#t+Ik3|q8v2iYz@E%-qsB{%;B{-G2cVRcMK`p`eh%%)0&t@@ zfvy#}nX6HpvKxibp9XqXDh68+xvh8Jpz0ytit*(8CH9-Ob)WlXWfyaD4oV;SySQo- z2B&}cz3nzUk&Gkt6P78vefv|X_2L%~)N(ear?ic}hm$M1E$d2mrmi15NwKnaXW}$L zLl(Zl^)|{*=v_7mbKWM>am@|0_p{3TH|`}j+n3z1&nlni3ulso;_EwdgP|6Kx1&IT zF4F=h>uC_m1T6APhJli6;7IgubTjo8da{4%feD2dzMzI88#F%7{=gESY#u3SYkZQC ztLMrpVyMeH+cY!j~LRYTnRqy@=d2ts~6JD=a!V!EPbcRvEU{`Sv${lgYm`RV?IEeW|* z3%}NjI;UxCHQpybRgi&Ql2(+lSgC)!Ce;N+$}5xvu=(kSb@x0JwOioV>n{jwuXA)K z%UzzO{oLBe);vVZuY9W|M=Dk)F3pylH4(iC+XNnOxEWy;D<(^%(kdy<@*e6NTuUQ- zTfXF-D#}K&yZ$fEuw-)?R<_Qm45|iMo)m1azWe>-Z?9j!di?&+zdru*;fH^}|J;4? zhJ{Hz(rMalkQHzJcKjJ$BCWy zf~5G)M%&n(ClUU`!@vHq`wgoE-~QrW9k{mRYVzN`LO6anR|z0ZN6hKGC%lG^`C=2I z4Xp^-FI@L3Q7cJK$jrziW1N3vywbBs8Lij*5JVzO`!|9&#?4D&bjw-6CNbm=0jjZq zAgyPm6S^@pflnHc4K9K(wA?urlZ&9qK}b-h`f|$*ladD%waM?46LbB=LjQDcJk0DS4ebDmMpva6~e*LT$!sUGINc5*&X@l2LynkfaYvDG<4Nvc42!8#8`--%V~>(iJo3uLfoZ zeu`F-5S(Q!PH+brfOB9*Qv=UN=i)3b zpPlz7qHC7>5;}nrCO(t96cOW)iv?KGVG|qUoVaZffc>;zS|@ajWAo%z6GBAoP z|5-k0_Mu*)1w{;1#Ew11S`*wPY~K%PBUErDpJKxavUYzpn&mGR${{pEHHnFEJ)sWe zX6MD{xI;7WMJ(FG5KSSw$%vRBC=u^Y=n|%fbHG(WfFPtIc1h*C_On8)gOc)U7L7c? zF6pOSn7P9z77O=XO<=R(G`c9qAV1)u4QX4S)-Rf1K@I zOOGSB5x(nJ^f3wGUcMi|!obYVu1`5Q9>8bASsMv#BXJxcKR-pO+07R9sadTaX~vcf z_#rOIV!f+atd^aizrT?5k6={y{m;99?|N_dzvh3_kFraD|Lv>p@E^baxO?}N?tc8w zE{*$WIw_Uze*L`rVfXdX3QqUhe+ePv@L$^Qx9OwQzU!q|mj3CCPpj8IPCGq5@7{ef zp_8I_=`Y_s|FDx2_^!7>YOPfF{PQmTCVH)`*4lN?fA8K4@$})#?)jfPPe7>XU7E8W zkn-bx!1Z1k>0BHK;^Th6^wtWc;Ck^ zKmOc(`DOR`^kJuaCA@W3kMll;{k)HV{Xk$C<;@;X0~BI_f`E%sxjY~~>0!Wn6P+{T zj7K?u=d`tS^keYq{kx@&#FvPg&XZbOIuj7HUttqo0mQ7duHy z?f*KWTyN-)izr>DoT7~qe-Z`+XtxJ0&~cn0;*FRwaiFMhQdlt_M_50cGkBt#vD1Ja zW;jB4bb1;P8D-iSCBiiDFf66Llzw?@6NUjxtVD<%2c%j?F)dZ#xWt~0of1cQ`=XaN z(qDn(WWZd^D;@TH__W`X5Nag-IW=+c;{kpmiPf}3!902#@o8-ze;P&x38H;eT1|{3 zk`D)jlQ4<|K|E$&BI~F zfiD;6^tu7}7~~*Fi6h8V&<$*X_rJzj@Gkh2%H~rl;v}sjf7nJB5lHyYZmIoO> zuOyv%N#`wT)$`ulpjC-|i4fjTO!^c?1FcLf1_m6Fqa~aYMjfBG_JU%z-E_=Q84=q% z8*C{b(9dcze>=e)FnV=&DxWf1(&vThFr$NPLjs|g7AO@RUr_k&= z8H)T|f18ej!Up*XN+F~*+n#F3<+91yimLY%rO?DhGN2qAP6%ePG2UBiD%bYJj0K8v zHit{)G$j$q*uD~Fh82Ee{TuoLje@=H3_J@@+(wInUWhw6K@~f2gEklMftJE59olui zOUd?{E^8>6P?eR>GFGi@ZiicIcBn40tJADf4*cw8-e4afj*iY4v~AfVo|-5j$|@6 z&?K1l1L6|8L|F&e#3~KOdAmS^Z=yC2*BMDDzT?A>`nJoMLAL-=3D4kqx>z@~ zlrAbO3Sql?aj!R7)k{y{*M&NDkp{nfR%g^18;$i7>RwBUu5#fv8c#otyrWbMwjn0i zE^CaHC(J!yGl;G8cCi>f`Yj`Wf2iHy`5pmKH&yrO+&F$(yjy6#zSxj?_+)~|fb>Hy z_)FzHW^O+8H{lF+@U~*9rkuxRVGKWC)}~y`-B*OhC^}^)DlSv(Wp?2Piv2Q%+wkZx z8^TR5EGK(X1Yv?-W(9T_inoBLKsd+5K%p+2fKYqw@HD7P?ib)qrMTZvf4+YkHYfQq$!o+z4Fw`ys_st41J_WyD7Zz zAQSIf^cTn~U!gFMpEQ8Ve+Zrq#sC*w5pPiZ$Idgrn2b-R?NsE7sEC~o;u@^0XWGh3 zSN5IgmLbb_*Lh}C?WB%FXjlnB%TJbU7f{;_ttIp1%1Vrq6GBN>L?!mt`~n78J;BZ+ zKq4WkzC3U8FVj~PbXVe|g_f`#1KU=tYg} zhT$->ve=k%%NMo`N!jUUzLUhy{tq2BLhqunvQT~7z4*C?XUeYjMg*Ugfw>mV_dCy| zV2>461HLI&uc=CRUN2Wx=~{EieHp%wfK0`%e#6C?@Pd|oWz`f2&2M601koe}GcOIg zHyhqS!_BvQjCWyue_L6by`f{r4>S2!p%>z+Y}&V_6O0bn;`3Q~qt`vmCj<+Hp36Nb z=XO;-9#rUg8Kc0)-gdDli6>lz}k z4SnL*-Hg;oKhb2VEvDc18x-Q+6*B|Y+!Zswh9rGUD^FbkfB9W82S+mDSQ!GplG^$t zPkz|lraj^^yuuHgsGcl`P^P+{J3+{ysY|^*8o(_PVM9i^M`NePl2s5DA*6{2z`TcVgzbRG3E6r14f z2g^t%GidU7e9!4Mx`l|ORAyWDupxse?A1eQMXk$IvSC5OQ9K|m-p&j zOyhikQjxH-cNx1r?D0AOWz%9yogKaQ7Hs@>op34GF^=8(3%3{Jccnx1r?9~%#uaKJ zirenN0oYiL-N6roi5LZn#$8PGpETRVk;t33Bw3KeB$Tm^F zpw?}#f1&%mw79k+7WjM%HFw*#xRyxTusVSv0yQkVxhr3nNy#<{uwEZ71>1pdcMbuO z2;UvR8SL(`kRAfzN?0@i!R7b=M2-f=)pqu4Hc%?-8Fps_&>$eaFGg>Bp;;mM@4>0K zT(be+k;2<#cJ27)N%h6!d*7$1&MaSFuwQ4Re^K;_K*JHeN)qQS+xBg#E7 zia7Cd*^-SdPKR0(;U@|F_YkhlURse1rnTy_?;X5m{k$Yw){z%vhyj;BBGHhQC-1D6 zxA3Xdfzu-~n@nw|8gvhAzZ46-CyGu^EAK{i?+NfQeNksckr0**_N70+s&7T}8l>44 ze{}_XsByFsA5+t{drNxd{L4r!`WUop`0@(>K5q59!DC!EHC8y?Ik`=8&*LbF-g?4O z>&Iz0C3BmZJ3i09SPN&RQ$VQQh2P$J%eF|9IaWILTwN3^sJz*|kNFRdm-_Z@QJdUW z@;AHr=hv|EpIVO=kX$!d%sDeEaC2CEf4yOGa%KjnOo$p3BDRS=zf6MPZfDDP>Fg$d zZJjM&NI$cKtqsfMuhHte$qi^KMCLbeN!7MG^R`zk(AkE(wc#f< zxDM}%#LhxIy-?g&sgCnSo2&iM4Lj+d*kgTj?dH725{*v;hAk52#4WFZ?yW5Me?;)% zMt4W|R+gJQJKU~$;$~^iH`d8=1*X`&lAdN^4wkK z!5boea*p4zrTYbG@yu z#fJn2=gRiN5V*CPCnnbEG2JvnWvK|!kOrvk9BXh*eoT>`m&~Zo1{Xp#a6O5=lZpJsf)g9uMHf2L3^BiaKAw^tWH>+OPhtjfHTdf7>`Ez&8of2g137)@f^O}OaS z+ihSt$Ymve$s({^mc5`oVRkZvXaG~_BcLg^Cy>+F)&ZZxa1Y2oxfy3DsmdAra|~ZO zA?>L(slzI4IAO-2zRmXC(ALEhz!h4OZ+o$M_>gB1i#SyUgd8oo*6Y~Ieye+SR=lK@ zy-Zb>Zb8oU_^^|He{{Zh=k$bpR}+A3`)#Y%NIl0nJj^QxLHiH~(C8%d5#W@9W~O6TGC4a|pYXY^ZjH~r225IDb5_esfryYYde@d1~A#0uXqR@aC!G!8k zfMBw^2wAi65*rw=rL6KlsVBv4J_ zm^s#(;AUBge>|X#P{Fk<#l{m9?ag?W4=mI}Xot--CZhF>JCv&~5o+3@9r!91ong$T zkl$oPEC^Jn_ta0RLFnNg5GsfeL{ua$rGD4Gdh&cQQeIVGL_Z-ez!%?8NNPq9Tx zRI|Spsgb+KWsT{ryW z_g{8zzmwfB|Jj9c>s80OklpV;?>_B5(hT9M_PT%9VbWgcF!IA+y5Ei_H?o(8F~&RP zd2cwAdXboPx@S^x*KyNZAATjeAK~=Fzob4aFiy6A+P!^LVVdsg(~eJau)VW_ZnNFf z=Uup_d*u$4x~IQ)?-;v#eBV9&bH`aPm}5eQn+_v<@6(9)f^l!h5gA8#AEp)uE|*65 zhctg1^M>e{apX=OMqICGfM>Vt`C-8HJ}lf!^p!mfsNQiJ@zWhvCnCxbc_YRVbC(!n zny8GoNbBNUS~$8sE?+Wr81TI!0dlRz0p;TzoWw#)UYv@hwe#N6h_G^62|vvidz6uS zP@hox#6ozW&eU^ck6G4(By}%HlH5#GxE+5v4xI5C4I|;N&@g97D>Rc(;I&VhU-t1w9s=aRi3DpLAm zHNO4+UqAl#?%mtFpZ@sokH0?s{J%fCKYjYgpS$<(yZys`(z0}Jyz#?8>%(8~4`P4N zf<}=IWIW>aP6E;-(#&i&l+Zl-NMRR6$EAyGu|UIeKwV`F`+dB{g{2t2te<&UW_A*@ zcjHnNS*Pd6nv1GoPL?(($!tZYvna_0WePy%=a!&J zPodfdv{7E1kjE$kMhl@|_DB?*G~~DpdWe!>y%btXVsltHG z9UFz|1&wfFj%8jl7($jyEW!Jld zK<8JErRiyc!ypYG85Vhn<&wmwk~k%C7_R6j12?1 zLNucBp17l(-ABZgLU-)Z09*%R7jtD=X<&8{aRb>EXy6VEc%*aofY^n`@KE6?THQS5 z<|*HZry#DRt?(4<22VLSiXeZ)(+f-RpqES>Jmu)pk*i=&=@tEV<^zZs{6rARkXRFQ zKH?6e2#%Pntg{J-S}OG?q{39vFf*L#3G1;~22-~6Uik@YGo8>Jxu><+Ov!zuV$MzF z@d^^^Eg?=(i>kvJgMAUqf{n#s6eXbK6=zx`#F)&^JBntnz)_$PLq`#=)gFf^}<{W#@T<0#t6aFuO7t0J8tOqhHh`@_FCxHyIaz}CGA_%Zp6c8*|ns| z3&*WDh|JRdP~5#Vz43xsJM9lWq`gyVh4Qx89;PJ1j9}Ah@urSXUL>_})An`TKhwR@ zPUjnIaNDS6$BnZ6bwH3vA=wD!e75Jy*sTBX`ZogEW@fwEvF5ch5mzPYG<~ccDur%mZ0G- zczX+RB&y~P17v?Hw_C+UmH`rg4TW}g@M|8eB}j1jbtFNhBZUCYwDuKxMG}O|YZvW{ zv_kCR+Y#3_NMFn8u=ypC=__gCtY{5xm>(~IbiPou%!zXmiEAqMG(RCjCOr*JdXi%c zL<^H0BCpI*GnKbT-VLY91E%GC+1{`%G`kJsF$tbiE;)?uL|!!Gi>E(?#q;Ao(m8kE)A3+CzU2aA2Pz_bbCyE z)OI6 z@3Z`fo7dYNg1}6TkF6R?w2HMR!m8r~7ns>wyRKAs=YJRi~ykNwC^67%slg^+lrPEG@gHU0I~v*L7RqXKJPag4|a#1)o*Mq zpk7Jy@VYH*=uNOrYWLXDYbZV_l_lAV2h5~nS88b{$q=OH6vUU)Hr5wR&&|8h8y>t{ zfp#y!)djks5EP-{hhcsz;CuT|=SnbVGB&c99L6 z#aI)7tz??4~%~< z?HdZs0ORuIb`{2WX1V>Py7Um_!?XqEyJ*$b2cz1H6)Z%k4~W#T(l1aj)Kp5$Ha|4- z3IXJ@-v}YKS$WM(qwxuI>m60dnXbXM&5Dhl{itV( zO+pmUn4gzV{t<{(u~HR5Qge#fA$X=B>75e+;|wd5;jQEMLE*u$!Ye9+9|w~Ou_Sn6 z2=ilHAq6rLMBeEc?mOJ$<9$3{r0vWKYEZ z<7%7J1*yZd59PGl#;Nu6@9=kEMeXBnAFsKIRt+8?tf;lg{Npwrk%g={H4GDn`C*V{nx=89WBSG9Ez@ZCa3+y zQH^~JSg6fCgmu=k@Tr{PyE%VWEPgYGut6V1PmsLJ|2zo)_+lx3^fG%=t0mJS{5{Cu zhmSD0@M@qz{7INnkjdym{N&V1>+HKYDK!(n);h#F3i3+fh9C$5v15T7qL)Xc@)s44F*vU_}GBCUtoma( ztPhzLB(BmIcP!E1IlIVut|<|j3I~#iRjdddC-etRdLIKIBX)hx)#5S=e|n6>RWMyv zlr39mcJwDt8DF~M_`-h)??3~P26i+t`Ya_&UvxT7u$vssNX4Jy%6fd^d0loq8<$P^ zd`$o_i}9H!xA0C{TEdiZ)N)cMA@%DMI>;zg_Nj1&0`O}Pzi0rf?gLOZPBhR2o6`nf zhiYA5`^wdLhu|W=qkSFmRninzrKC7nv>#67cNmCM;#WjEd*^@HityQb8nx);~HC(0C!7yNAe3YVmdCfo3iuizsSA&G10k7d4103*Ag z>Y0lLF2^?^itsi%pDAakZamcto@)5w$XA)v#r<-;b5zBxigui>40od%1P@?Xlx9hG zES)O4-(+Ort8RbRlW*!cB_#OhH+A51%fraC%4sas>r~l#1LXkMGhJXR3xI zWrbT7`D|n=*5az~aj*HbBj*7dz3J8P zRqjK3*M)w&)ZOQu;6ZfxwO@DNZ~V!;Z8=!+C83QOX#YaX0t1q_G0^_D`E?9@-2ERX z?5O{@CV~PI0e_tBUD=N8#*uyRuc*fv1DDEu0R#cvckz=SJidUR4Uc4uVF@0M2bj-y zu!^ioHv1GKl1Z{|kK2GP7e(e48F@066Z)j+KOZ#xS90d`=bxYc`>Bim{OkC?^rJrY z|M`#Ko-Y6J>tCL}`>j3w<$s>~=P|pJ*2bQG{qgCir+?qm7y4g)_MPuP+8N(J`QvX+ zzr6Z*u$>J`DLwp?_2zD4A37KF`R`QxV=%t6^haNDV;6qUYpKiH##5&wb+OaI#lF?~ zkGCGYe0}=vi_Iq!x^VtGef{Z4-{w%qP5@Xyr@xzXJ70gMS@=L*OPc!TPGA4?^nL%} zhtt=;KIzqs2wq<$}?-H(rJ|bVtJs z&iV0)jp_V^`WTg`Pmd2&c)q;iI~uOa?)pUQ&*KxC6(31N#&^Eh>l3GJvbPRA4^L>O zy^A*3HC?;Sm~lSXuwwk$>FXqWldM^uXO}Acv@W8knsqw`x z;ijE<0`2f1(5B6|J%>Mqr(C|?i!(wSPHVTpBEdPwZ#)l+5lo~;ZjJkV9YwS`6rDBW z18-A~w>I3UwY&~A?|~r+SLGBEoh>RbRu;7mq;O(=ryW)Z01llJ(*|Ftncz=_s;RLxTFjp@4 zr}0xH3f?e=0o$0!PAaAfN-j?umg~e*hm&5_FFC*Qay#|M>2e#z_IKJ8vM?@GipFZ^ z*R+3uBorzo{3%wiLh&gqaB$?~F0d(>pqHDF_ZFX9rLrnF8tg2T5wvAt(`eVgQQ)14 zLCr{l>6Q%hL#g13W^`4&?zU2#cgm$U*+(#IunB z;xJZYsl|=(zqkoAs-|G*(r7KT)4-%{cq>5ThNEC9*ap1UZWFhclk4%>Dh-Eg1Z?tz9+{bEO9c43=yY8UoZ)bUtyA9!KE5C=!aYn^lLHjCP z4`_Im`pz33-MhGJwl^kXJ%`Mzyd#<=>rmV_Gjpt*6L{i6!w7t^c;co$5UPKGgwQtG z(yRtmJcgZe_tvu009lb{lLfoQo0N4X-il*d3^&9v6YwyWTlFfO^bNh}+MCx<6;r1QP$Z;S4?C?dO{6nCQ!J;v6#Vjx z7=dGs1Wi|j97x5wA_#Ovge`l$E4*o=0h$1Ujs{qcCbJGLwD3Vg>?swVS|jP5*mJ(4 z2P(yD>VeWe7>2!d!Ob>@6b=234V}8;@zogEw|9C%94C#|;~frJ7q)*>xpfa-K_FCw zhFgfY0h%u8pj~FzHRad+tWSj6wTzey`27bFI%YGVIQx5a-nSQ?-j^SHuLvM&o_DFxx!dM1@RCK?Q#~ot- zPdQa-T_ytSViz;#lF@L4HE}%hyUaTeb%i%)`BhCEFh5ZxlXPTpE*6|AbnBDOY;FAc zeXy(DF*ej)GDIMH6epT3DcJA+@b^Fc^8NSUJ^%S1|NE!Eef{zO{&D)ZpZ@FLPe1%{ zdinHme&*_zAp(E;cOUzq#+*$G%dJ)T0}#-XrjX+qKsLhV9nYiySawdagR;coyvsoh z$`UXup!*))f%k8bX4qeCL040ei~`jrG`}_seniS21Bzx=MJ5piD`mMNp!X4TwHroz zE#J!ePlZrOE;NY2B^RqbY~^L$rBbOW<$)$>2Z~R*h9Q3v6>})RI3S!V_jqj*wQEc| z#?o0~FOnJp#YPawTqXByH;mec@S;CoGQ0~yBUd{)F!E1TRVp$dCETG@OMTZ63<+(w(*wgHM8S(^|qnT5> zVZxc5p>v5ktA(q4n-n##9mi7CFpa6gKPpz&6-j^LVw0EDWh745W|-!=WTtZ0p*WFe zk8JH7j5sX`2%t}R2SGnJMtBdxTe%+@B1?!n+5lp99`s#{prvHFMY5JP0^wQflUj|3Qn5PI6NdSnXaQe--dtMYctir%00r4mU3Ii=`&LEsL6j2hp zm{jFP|8}qz!o(GqR5qZ0&?*qi{+!iB(=A;N;!P{h_(bwn!Rfqxj5}@{K-3-iCGUU2 zN5Tuo7$6U<>H19-#jP-`vu^t9(5@VOtVmyappvybO3{fRpeUpzlINXL7%T1?;{65@ z_sXjguZXL>GC{*+@jZx2+xfJi!AO2{xawGfl&%aslGk2>Dcwr6{>g zu~~4wd^;U`pMg^)4lI`s5F2LY*ROy2`YPXs>KVdm?t@jG53+SOgj8Y&1}BcdI(y8_ zn9*)!tkT(WL|n}Md1x_Sv9)j)Px~X*=)hDJFd&Sh23heQ>kM5u!EII9w2D+mX{UCG zPFa~$1S_*4QqZZxey`G(^E0|(LY&wSyGtzyDMN?6?i?dZ)%sZ2pHxr8a6W&CPF*^m zThm|K#i&9jw2+?%X9ht#^T;u2Ow6>2ZV&9xgrd{Duxkvz`_5$(T=7Chu2i!azKSvo z4;!inLpR?b2yMy72iNso94I)AaPI?!RrXAdoQh6mZHg&`CyE{QArGP7)o~=Qoinsu zmQ)?*`ruTVE0Ad&Po0i*&*^_iWaGJevmamSVw+DUbm9E>N*RCXsGsyloxOC?_%8Lo zxS@;bA}WS@p0&Pls_K`^GV0V3h%~n>L!GY|vTQQlqOOx{<9NT)krum9qw%7tscq*& zD84l)WKANhtq(VEwtl(pU78w_)vHu!r^k+IZ<4(Vw~l`N7;Wm{Z{L5?@%l!ji*H_j z!;kFW&PEk)X=L~fdz~(uNs_LrMt@?Q#MDZ6#tyrOqPMIvCwJ6rP}8|VLfJaQN~zH0 zbbzdS7cAY`u8xv8=8I>C|&9dYSW`AxW84*MR7IP2n`rU&v?HCrdPUX~u= zRRrH5IA^1RI;#jB8)kn_wzOs-69l@{H}nR`eMw@wNa;)W4xGKb5T=KW_u>)8mSQ*| zjI{+bWXocvkN^_uTxo>SMzotMvW!c$D(pT)^}5qXK-BkfBd<78Va9g53L^~xKr^pT z%fR4ub$rX?rN#z-)6XO_xd_JjVn@Z9`%m0XQ5`NvA0eWk`+LUCsXl)O4$xU`=^bksUmN`GzVoT? z)^$oKJ1Yx(97)`MKl#((c)3^DQ4y+e$)X575NxRfopu(3j$Ya+3s zz+`1wxk-(8+Dk&B$ch(KCpH<5?l9JRX~tmUnTrV|ggok+kGHFvFqYRn(}FbD+pg zc5?b277@ofw}!Z~LTwh$eS~TbihO-9Wo3@#C=-7pADpNt#xe3_!TOL&a z2Q705Nm%4j!f*k_B{D0@${%@BJVI4ANepj0B94}%!??dXdH#0ZG_p;>q8NqFkgn%_r-?x0}PcJYlZtF^$D7sIcH zVVZx3GJ}Z0;#E#vRLOfrK&Ct;34_08v7im}h#JB&EDHFP+{3&qzh%MWz8N{2ILr(K zAZWxAJ1LJPvJ(5N;Rcjigc~{sSOrmdv|`Ji{ndQL%#F!HGEhX?rR(ij*H5yQc_w?krmPQ|B-hVRoL`hT%37K0KbU>d}oYzvsW zF!D6geD}!)g*gntWmn$F}`dT~}Yuf*~j zHK*Pfg`Ac}%mLW4_yR-#(3&V;@s_E-N2U)QngP<1-%%V9gYMgMiu-mkaSeYHl`Dd| zb}Z-_R1D>18?pl;V^l-m@}A>n$FRvu*);^Ij~UA;H(`hqT%cWPk+##(DovbYrFk{5 zVgMT2E8!cgigg9g_>PyQ`#{vBgQ|W>0hzptM#E73t%6c_NU5Ac2{B=LyUM_O(7-ed zpBpR5=+qnfIQ3t|JWPX(bV+~FN!#H!Jd~#Ktyx zu*CgBSqs&)lV`ZQhRg_Zj3{PNUl(~ft!yXv5^sY@y&hR+i32%-PUJE6(_Bm~{JyAVfg_%^!t) zEp|_m+nKPuDOnWEuV@GOj->q9BU58ZM7P9|_X zi+eB)HRPT@bk{se^ecalnoy2_H_{4aRk;cx3@MOk$s>pIJtnXxl%err1T0RVZfHc@ zBSHNCOLWFJ5vA~;x!7{9t^58CL5Ot2yxZoUz57r%!`k1*^TX%ydim$II2NTlT={{hFE@^3g2s4Ls_#s@mzn&IYyu&HxUh0@lZOOI4NkcHlH7hOJ{l`31j#EGR>0jO)4k*o;0rV~Z_Mt2)lDmi z{^f-h8F|$qnPY6FkC{XyHtuka7GBP*oGeHVYUPF4#dg|lh)FAoeXv3swHWR}dM*wMkfYF+M2zj?M#TtN+_czCdSui=#eIK7?48DE!Mis$9b1wFIz1rK z0*trZ!>S~X<@-Fm;FY${thy$x%Ti*Al|1TETytP$DWA!S39amq0un7#t0bj%_m?%4 zFf+PJIZNmQiRN7t8dW|h26fpKwAQv+QE){}SGh+(BAh9xMa7pv3`1d1z;0E^53y$N zQZ+{01`dDo89zn$=9DdmZBaaj6=<;81{8DLSERDZjZh82irf&iM~QKmq9G54KvQxo zce;EMOGTo*fBOLo<;#7sdnDdH;*9JNT|7~sF){)r_b{yDUcq~7X|VE+1KHmbAMbsv zYwST5*Bwxzy=eE;85LZavWHJXp1EY=LKTNL$gO{s5EL~mtJ2U7&GJ_A!0SRl-5}fQ z6r&O%h)U&(z>c^o56 zZ5jlh?vmLj>qeOzM`Vr8ZeE1UcfonOL4MmgY9N}K9m{vhQFrIoT*4?e(T(W##t>akOO~B+rAZ8Rci2IpQ`EMf zds7A7g}oY7LFjzYh6b`c?ZbxfB*n?wa@y_K-AI=KGfT#`T?!;JGk=_*w_yZ;o`Ahk zobe&Cf{hPa$aj(2&~aw3noG}-Gh#=DMl*jBotn9w-dH~<(l5iQps2gK?A78hX8UQR zEO))=su^Bwv9j0wl)WZpKC@81u{+QM*aqHc=DKHd2=n{V8{Hi@TCh&9*~)|JCk@Yo zC3p35IFrX4Zx{8m9=AnKHrgAd{rKQMn#!T8M^fNKAr7 zpa_bO4LlAf9iV*V?)rw&rhG#_4y#7BYAxx>*}e0P^BpSU@!)sVv`Moofr2(5ea672PNvW7LJ^i0vEU4-Co-3j#?&dys*#g2vRKl7>aABc^*ZCX51I?ImX}m zx>|veTy%7sG7G&l*Qz5l)26H_bh&@nWV)>7WYWx2GC$PK$7Ow&bgt8OT2-pM>oOSK zgW*{bG}=XUIZkeNZ6+b>>y5-&c$n{KuV_E_Z1m>0@`S$b(+~-Ql=7XgO;cBA5l?e{ zio0}`d)n@H?$~_YrR&aej#`)-x#-S7g5Xkd(;BrYEp{jvp@z*%V&J0HdKQ1pK@d)5 zLeVp~G{3K-1Zu5P@-w&Jd|t2UN~h@G$O?I5biyUQ!kgIF-owvuFYbV=5g6&d`-$X4{^9Xw+!Q(1v1d$5CRvOJQP67#~=tObVP& ziRTG!?PfA7?<~|qsD)-46Rm&sL^@1}%WH>PkgHfUhO3!{aFbJcmdJNj??GA4riX37 zUcm`Li;A{Oso!m!(eYjmsj}7q-Y(^*LYm!^-{>qHcQb`8o~PRt<@JS|1CWy6Pd$*+zcq(is{}e>o!~t$S$np>rF3={5R0Y1dCX z{rS_+PbP-T|0{p~+tVM;9sHN?umVnhob6p*uiUl~eZRkAAKLhR$oPdYSS=l|E{myQo~>>rpWbRW?1{6wqM6WzG(6?1v#r9C~djkozFYtK(YIzBPF z(YEW(R;F z`5hZm|1ldo!Gz&~dOo$H-DH$_Fwge%L^WzGW-K!QzHdKu4}x7De&5Ku4>RhMLKeZG zK8^AEkU!)6p|QEQSv9YJbWzfylC_82Q+xb%rD~1K|6R2@42ouQlUdY%gQD4&L2H6B zZSv=CD|Zq>Y*g-c6oq4^`FYUim_<>Et2}ViTs(kMnzzkkf2=ZA9x+Ibi;BR zXmn=*=C-{vW<{sq?0MI};d0Bgxfpt7Q!qgj^Z<4Wj2jCIb@tMym^&Mm)f_I2(I~p@ zZCQfof#kL`jL)mi>=>rrdf(ojjieLdjdE+Vg>c^vYb?vko1(XW@A?NJ&serax0kE( zp3te6V#aMt*z!g?QoezOTdJXNfk7GR0_raQ)Z5!KWD6aSo3uZdqrk>tc*DBrw7IeL zJ2iAEE)EaM1L_VQ->{=QpRI=Sgx(^(g~|r!yWEIJ_5@9z3qT8@q(Eocl7*Va-q7;{GE3gV|d}Nw~ zq8PhkLEAR8%c6pf^LI#1>AYXD~7*}=RM7N_;?J;?g1aM{&FoU-`H&s&w`&agF=LC>sq@eRDw|# ze}H0PC>+0kES*W~>p&DV&w|0tdguc}c5nXrukU{O^2;~R z-~aaC@BaDWhyVR{_`{EX|Ks7SuMRJ7UnhgnFQ-0#zx(rRH=vlmX$iepc_uOf4{S$j zc~^E(CGWv8(FhkptOLOGGc>UbYxzALaT@+)yr7VhszR#-iu4Jr3B8wgrh zt?Bb{*uag?6AxikfZ_hOB^${7-$REUcw0 z1fW!Z*zbh814joDFv}7`#I6;Nvl;)({6~S?x5ii^7W4 zRD%UZ9Guux99%$vBL{revH2-FbuTjiN+QLbf(3V?Kht7oH$dWYta{wiG+3?e4TCp- zf#PteY_IH-@jJIT+qh30)VoJxmGWaJI7tK2=1A@`n;u7m&@gbrMoxTUCloFOpJKqb zB5RBp^Q$;V8_bN)KqM3=hWyw%ZC@0lV$wpnqr>q)^1J2e)9jT|9o$|peG~5L{5dT) zeb|;fumQLy|8WaaCV$}TNcH3HLT`b8z4!998Q)$6IX)x*=#d?{otZx|CazpMxEwGO3|yJh zr&1H5SIQD%+_XKPPiFpT_xuf#HMW3OGfXYG{^TMpo8%1fPv$C(@U*uTB;XBySbKsL z4Zbe$v(ed7-{h3AKCBD!qNv1VLG)d*{1)bW9)~7E;3&tAP)oEG>7zD#?8!!d$8s{v> zFCXWWn=&>5vBLX0^)`E7t@FBnh~dMdaLB5YD-lrPY-|uF6C@KqLTN3pv~@-V!fuse zm5OYb3g+ymoME*@iI@k&tvdx}HwVLVx#aA48=q?j@$38kK~^^%4aK_2B}ns2dSYte z-4jbNFhU9O{3ByN!0WB%>=H3LU6#oDV#m)XmC5UYUbz?+2%dRTQwLao_X2En_c25G zmX1UF;aF4oJbg2zi=hB;x#x2o;_ITySZ4eJ&A547x|ve$*f`y!u)`iJS?;)^&Kro`&(9wP z@8qH>^HCO`cc0uZ#Cs75FU^BX?@xEJJU&Gom*9mD#8@jEFnR^^Ecv`^h#590%*!v1 zxAmG`3Qqt)ghvV-{AfoQ`>P8qz+YPkv-a zGTtPJq43P_hzu$MDS}iXcI}CZ=p(xf+C7+CSI~7id4W9RP}|@eC3nEwCwJi@^gL8o zx;^Zg+0_N01Y=}>B1N>=wIpC|G&Vfm@NOrLlKf61ll(ezd^cuKXH1Z;wF&Cur}nP9 z18QA8mC{F4vHTSD_!I%%C9_lPk>==-szkuZ3k*s=WJqRh#$WJDj#f-=omkvL7y~2@$ZW$~w0QpSpFo2|c$u`mzmwNKE)Y(aE zP*iX_SCYn z%XR88uUqFvTMELyYc0W*-lVz|ycvh&1&z3t?+FOj+MSM*_N+NRK!^N!mq3UmSdZ&Ayk7050O%)u*uJ;G61AC=P3exlVStXJ@Bf0#*EmF_;7qVBJ z$w1V93vWPSlgRmu2{skC0)WZUDDg7bf=#{d?qb?O0DlI#wSCx`1{FY(eYCWS9!qmh z1U@w+!5*hFehh3YAp9(5?iXc{TLhHVX z5JT%x6*SVN27FSIAhDbsh2>wmSrNAttYr^>swv`NE7yhG^?H^~3jXmiGdlvwX2EPw zJC%RGHNMYugR6)t&>r6IAy^T-M^Vs)VPDC}r_Qf5PwSApq_4^LtVX8Jsaveexx}C{ zB?Es-d>r$@GN^q*nwSK{jydsRLq(x5AK=c))EH-$qh*3M|Jn$$4S#`ZjdxKqujUcv&#Qy8+>W#MN%&WswM!l<$kMyGarBiX!kI zZxQy%SYQo$`}#V3D|T;$#W&Qm8)WRdLif=SMz7wVdps_Vk3|XP0_V$VBo_EBEJ;h) z;hov({ycjULEGqHRYFFQ#7JM^DofP~-J8ZFc!ndH)Gn6j@wtHf>VsVzG2`cdJHYVJ zI`WV6U>qy!rLfsQ``#*cFI`_nkKy0zDj5cnW0r8TA}?~8PXVbohuAZQbf2V1k`kd+ zvUyOObSNZPWAP}>1ZVfUpN>zK;TOc0BO-57|LLQu_`hqp(+%+L(rnx`SL5q& z$Frqh-kuFs#szs1$6zQY=lnc>clLz=j}JuATyBm-+03=eEpf@XWGFN-e$7cqv%$Ua zS2D^jcNs62wq7wjxi5Vp{>5W@Z}{3tTF@+bzUY#(W*hfRZlyC!;bceX9Eawzps zUC{ePStYA~epJ!P?RW-%l?>^Jfo?EX2-{{uG{MWBproJ@^2@NWPbT=fv$DvAoL}m- z176B!KJdI1=6n651+`A>6(!=?iJ+8A(Pt8;Mz!VSAUnTazo7PPP{fBHy(O6l(oGD4 zx;}Dy%DBeo6p(49{S`+|T`Vj4Nf>$_rAEI~%$0qRS#e;p$km^Jy+DSPak&NSRW5MG z&*NPPt^U3lw{jqtAEU3BOSYe|V-3%h*jI-K$%Uhxe~jvlh#i#Ejz504SKp8T(iQ;l zAxk|!;&BG;HUtV)1Wzj|0Y4NltHS@bH_7ZK zg%)Wk(cF}8HazB2ZfOO@M}~fJ>zxF}*q1qOaC6EAWq<{F3wy?~_;noR3I|>;0lW(N z^_uSU3U9rMD8*kLVpQ4I9(?N?e~8)8{_ynepANr3!<`j>tLcq)Zu3z7c{JPCKb#tF z)r9U>yfWNfMt6)^6AKpmO zxiDR#wktoIe0ithNt~wfDNm)H>@>D%z4eWAxx{q z-RSPH(1LY(%~I~INZ#RTe%0*095O)7I^^x*{;Y>((Iy-1rCvz3e5J(!R;3M1y(t4<@4#eZLjzTiZ8q>Y9Cv{Hk-PI7Mw{{t{y3}}wpDBMJ~@GE zH|#rq+=vIm?{d>7O)^Os+b7>BW4rM>ypdI;gGMX1&ssQg+!Uy|ZFYHSubbR*-i;U5 znH@k%_Ofj#Sh{`0KC4KUxG(OF>t!ypfn~jDRIANGFU{aNnJj5j##v5&dfQ~JOeRg@ z(o>^uUYGZ~q}#gPPOHl8?mP`fcVO5|)iUdUu}yB`eP$)=N_Z76#Cdt;wW9qr-q2;D zl@|KEPD9KP#7rEauIb#>iRU!kPjQ#ddY_lOot}bRcj>&coXagt{le@sWJPdk!XwOm z@-}Ph_2SKH;G)%f!l2F&PPG|DPbf+Bz786wb@pNXBw=nU*E71(Df$~h-W#K1PU#tc z-o!2{IVBfO#eqJA8irEB+63Q#qlS`&Z@_V*#@UiZ0_;O`*%&yJU4luP=j21fj+RVb zP^9HJXsmZBjKUAY1M8GYf$}M~oZ!+H(^-CJ;XZ^~5Zf`)T#vNFgt$C+s0IEOi^gyc zvt-=lR6B|19=G?PEM?KdHej!yK+vQ(qUBQV?>5Gpqwvv8VsAH=OZlmgCVujb&cbnv zZP;u%U0jrFk)P(GJ3{m^7C5#HEq?R#e@=afw_wx)5g~t^?K%l?TgP>8_v7Fx5+n{@ z00BZINKqt20w6%~763vNFYp#6>HsN0waa_RZhF$J=-9dw<{m z01yC3#7chx;BmQYwJ&PB0q9N~J?!x|w*`jDAprTm0Z3o-v~_IQ@!!)=00?IR$m`8* z=Hj-8zw$KVBRcGCYp-cPHS;efoI8yDjeVoOiPRsb{uAP-VE_1lZ_fndhVx3iM-7b3 z?#?}W>_GrE_G8t9{k~l(suxe;{9c?d8N`9;H0ggs*zdvq>cP>;na=m4?*lNb1xWCZ zjQ9Ee@~v-w8zBBsB)50eH!~q=gTF)k48+%u`9}K-HLbry*-;*vGBLhqQhW-EalV|* zPx$*M24!FWD)!^BFF#DguRbsN26lmnA|wDaOBHm39It5BizosIUc@ID&1DL%5dK+| z0?2=KV&~NlrI!}b0O3A95(UtI;C$DPgz`^75I$ft@5Bab+5N;56R(M#fjQ|VVGg^p zps6`+g6mjM$?MfXrw0Zn8M&cJ-v~*@c?r%j87YyFNAPxp%T2Ja49f=+>c=^hkv>E> zW4}IlC)=Tzlq}WfTIp!00r(l{VK%6vq=SE~(gS&n%~2`mr4MogU1-TF-UEo^7o$cY zm1{yki&zBu5eVFiK;W+t2>b+rz^e!Z&La?#ND{Hu5DnHkf~$y!c(86J%~)?GTe03j zc3?eBhOwR^Q&@kOd>8A-$>UfbBnPp6fxLkA%j9LO-zINkeViP}`U7%0BpYz+DY<_Z z>@I=V@ScTwNpMyV>u}%KgA;0D6Es0P?1mv2feDy`X_!S1f_a>p5Kb%j5a%8k1Ah=l z*i7G|ZwU$9KIxFl@9&4qy_IP(Z}7B`9fS8A#9ceTFU)$iXs@53oz9a4w2=mF<6sof z3R9^4Y2g0NsTiu3bujbh;;#z7K|?dQ>Ff^A0W%}|@-P9F)i1+>nC zp|%8{7CS?2DN0xyYRhmuE7*S~EJD?xw&WTee6GZy^@43Bw__`e!zlXo7}UWe-bc{G z`=ARWc?bqz5XTx3V+`+maLkY3!*&6#>&N*i#P{J?C!gDcYZ$H`r7gtRVX)k4{i4;^ zu*;wW8Zh3-A?PvY2N73)9T~mY8i#*j9P8u#8ss#I zE5^B|dfa11ZxZS6!DoaSVF0->j49|vjrzD{&G_V);#TeF_U+)(nwRC7$Gs&6)}Td# zv908>tqjF>IMTRJ-P7+M3q?RMGFaqM=`LJPg#!#%@~rSXjDloXrif3AA1yb2;{_vT z@yL}0y-OmVed5RBbIX6NW4Pi4Y)A3lN$~_5!_fqY5ic#n?PHGrk`CYiyw&rNLYU)$s6K1l;)gxLi{cE z-bagnBK}8ELayr~{OjwqVE#%3mUPk1EbzJTTyUSn--mS+&v1P&gs%S){|oE05o;2H z_$cM4SpP;m!#E+Y0LTA0ND=joEHS)}3d@Bj@N%+W3SoU1TqFMPg4y{U;#6WHrczNR z%1?^0Ux&HV`F($jn;*qD7$|ENkScJz$~WaI!L$<30#LL zu0t}{K^CDyBG(~?>#&OJK)DVA*CCec5XW_pavjuM?j$aE9G9DNxrGS1l_*PGD62>cM7&m-Gm}$;1NeAr@l9%WgMlD5E4WSpMqH;b6suKAnapS}Rl8p+i4-tRh;iygIKLf*L zs5)?r9;wE(4d3Z5lRro7M1ZcW9FtwGwiJKc6b73?p_IK^HjtUGZ76&IU%cxEWY%@X zYu0|BJX;+|A0K0xVAyKR)(W(>!lFQXEBqDYxB9w@fKHD_K0tS(p?A(5KzSJc4-h{d z?VJ&^bI{O6yTV|yXtL)GZTAyd_g=SqZ}$lUdGwI?r-5|Cdqbn6L+=^rkb(3pGqOm%E{rvT2wf!QmVuL@SIS;$RYH}CkIrD5KxdkP5Ymv1QZQmzep)>R(zH5J|*&Coc z%qg@3*|>Ldjmpj~7B-VwP5kb$>Y6cE{j|$99eBnQBY)ko*=pVFaCBQN-O{R=j?U>y z=Zv>`)+MDU179B=esaBKTSaA$#nMw*vCYEvr4TvCqR!d{T(510dS1(lrZ3gjeyPbh zl4(o#njKrL)-4XRH{F&wB6WYyHZ{+Cu#IhPjFst~nW z%2S2GBM-BTRBuD;musC!o+flKuO_ysNVmf~|&A6Sj&C*zz zO;y@mT)bs{Z24A8ma%ZnTIM|pH0LxugLf74Fl&SzRVs}_K#v=5ZPYoEQxbAD1?%Wv z5jSnF?MzhI;^T{pyoNwFdAqEPeMf7#jNm&lrh%LFKQrybl?fS6(5shcxoH3#m zeI6P=cOLP(aQr3uP8fe*IK%M;hEH42`ciz>!~;y*iA63KaHT=8lgBCXbe+n5!$Z99 z6%xtUwvsg`vI6Jm$+nP|b4}3`DA4xB*VOC>1-Fz#rJEG<*)dfvfT(p8Cr?D#K68vo(_jy?&RyenWQorn>U% zb=#bl-G)q~H`n9LuBfZ4$hP>T*%^)$quHc2DB=<`OA7K`rgU{_imE6_mz5l+(Ax3~ zo!Q)rk@pPU2dmguBeawaH=aG|c#NP6lju!ek9n;*GgW_87C24ZQg0pkD4;1UPPZf{ zkz?q<1h(UzR-m7%L$(f)K=ZOQ$i^s@J9jbvu(#wh{}_@M@2V$7fn)6*1)b$2dG7op zY3pnF?-L*lASGr$!IErD=9gd;EW)o|cOA-nx#FeFmui0Dd|veejSr-fQ|y{MPu>ia z02NP(rBr{5tGTCMvt$)bwvbiSjsyp?ohb&TS!=XtvZ9XH1}>>>mAlVvdgm7@DYj&l zsi-j)$sMwkryiym0Ue7?jB>h)o{{7b_Pdarct{(B#>rg7_zpIX_GDQ_AD(-k&%f(i z?%%la{+5>e>+0@rsbrp1S-#zB-7f2RYGUH4j$nVi!MShy_I=J^9sK44GzodIQ`<%= z>4I~MGm;aNL1iMw+}u@dEtNa6EO~pIJ%gpmMdrXKO7fzGXia5SO+{@^?%H+Mg3k3> z8|n%JmouuF272)-d6*o;JVL{*XyZ>dq-qLg1NCF({$8Ko@9Xs! zc6xuk9UWe8C;z$#WCkgvGCA!fB@542rA#hIDcAjjDb-q*Q?1NSYb|MM$u$31L3GAv zjrl6=8jVJqso$_J)3N3;WdXCgo}`k8>Ca?x0j*24d_;@>%SH@r1i9M8EASKyvOFkK z`eAiurW!A)UX!BJrD*hw9>=9gGLyi*oc(_YWbBSKuF`u+4}FKxsEMFK)+#eHlz7p5 zGnA_Ibd@rLVPB;C$WDB2F2PpobZWIuOZVwiDs6^J&3WxtKX#$#z)z2Y z^-l7<(L&j;V_#4qpNLm)m4;C8#mRrW3jOuUI?w?y-xS@-;BSWi-wJI4`yJ)?4D^3d z3ly#}fBm_h>(AZJg6E*(rq{+p8(w`Y%y-=gJ=(pH)=IROtbO_haQEC9+kT$Hd?ef^ z-&$D*@&TmX3=i_1mG_t)fbBO!_eP2^9{jC-32&Wv>Q?AdA1K&$D>UwwyX9`VTdr5= zcY?V%bp-#baiebEx!v2x4rOn0PQ1o%G#3;4HS z5(66pf1F*C%Wi`(5JmTVg_rFj!p49b2_ZoqQWkxvX+MC#kRmk(Ib^}#*UY7r+S-iG0uE@Vd`gFF`vwLa5xHM~?8 z5+Tc0hsMXdaawuJ-;IxHAQ3SuxT*Vwu0vImtL&MAO!||HZ0}DVkZu0OBLmr~t-mVA z*Ok96Wvud<;uMrJr3t8DGD~d7R2Zft0_{PXsoa8MroCoLxq?#Ar7>s+N|^K$h^wo3 zf4RA4N=i@(LcMgulolX%rVL!Cd!{vV8VN!c!>&~UXNFy?5}hz`R<1#Cwv9jrwB%%G zdg-8+Amr3sLC46Vxr5q37fBw?GK1)MBKHX@v~TH646l-3tdzv#q9p}H^PuO2yl+u` zbIvaiZ!K@myfdAp`(h9MFstV82e=u?ml+rX^M9P}e0O|Q#oF-9oU*&AyPL9Uklk!Z z=mF9oAWcFqk!FH~A~m#x0HOC5LNIg?2wBXhSdsa?qpG6f-g5n5BarS%)o zCVwTQD?-6t5YkTQHegWa?!D@@Mo2Rh`jqz@5Z7vYqjqm1L`FmZ5u+xL%(;4^$1td$ zg!;TudDG2J_GpTsu7~=-u{q-=&wMmuKSIK8c>mpTBd6scEee49rtsWn+@#rKC!c=m zI70O$gpz{CkDfeh*1QS*5z;k;KKI6t8GkvtYQlv%aK8ikCyj>&uOph-P@e_$=<$=M z&zg5BdOSjY0KX<@Que5k7qf1TMaVl4A+Bul$XPkOKc|EKfCDm5898~3k#EMsvyRXf zn3Fwix??f|TyQ#lo|8K!=f$y)&jN76 z{L#>ymX~nunr$JQ*A9s&UP<_|EAFBa%Sz;psuN$DYaNiy-j8f4sgz-^) zjP+}biqRrefM%hK0C`_D1g%6P(0^c*K-!^qkqteEC~pJh5h##sM`q4~y!jLq$ge?q zK|+CI2nxclB7<0l{KTt33Hkt9K&8Lq_!W39Pzed!gm?fi(phrn(OAL&a{m^=!;T6X zbnDlz8|sM6m7IuVgvM&N5oAVq7k$R3!1v5>ajqd~83;LMC67Q3fIE6<5usNj!1#Y@ zz-Bm_gXWn-D>>jI@EFCQCa4o@AIaLW!{NB4zHUwuk9cxN@zcQD@Kqk<3Me_$b&rAC zX|8($TyO^4JBYGcqiGy_cnICFs?V<4Y~vf$Yi zz@imuj#{F4lnhwXS_`Npd%U9@?@511IcPStWKo@8Irj zn_B|m_8pSmy>&x&$Mt_Qp+PXcj~dr*(2dg=|J|4Ip4nou3ub#nvGVPqPiD*+QDdh2iP8el*LbSrN?+(9A)z z$S^#EzA=NoF@wG_!{%R~zDs|z2Q-VU5B-MItcYfx(9A)z4)vjPHqGM9&@US@5CRD` z?Ir2b(n~OYF5@tEESHwmE75Vohc%OMQ?ofWtBZt3G?PeE2{*Phlenhlt`gUvYyWg> zhPl98&|`FgxvP2n$k7ttfR*rIOhHDRSwaKSvmhUsZjm}>gje5=$;f|5X(sV>7@iGN zkO2csa1Ahl4FK=kn@K{`US^4lNlSk!U0T#7T#J#+F-R8Svs1wiy_Dm6@PCV4lN8bRUHv?Lbin+pb{ zmv)5tIqI+$}x@D%Kc1E508z6gpMQPp^;@yz--m{!D47e`OYo{ZAQ z=8hbNx=zX(HxhMZc>>FuPMI+|7c`KwuT!5==y_M^Oqgj|;`}!Ij);z-ZDGr#M3D%hpcUOUFy8_* zU5NGNXm^2Vo%fu;Yj~blSi|Zc=X55xKQ%%B-~Bv@#Q(jw1VKwZD6aaad{{@5`nM77 zN0*QTIdB8q1wVu5gA9I6^kfA2j0@-HbJuxqei8pYZx@V;D_uA&`icX@P2xwIHkxIc zU78EpSZ#kV?ep48x+c1rx-Y#_yk7M>?;YU%r1w^Kov*&`dEfIH>vPIC)OVKeO}_-c z1Af2xH}{|Gf5HF0K12Vq{ue{K;fUdpakTLrqa4sYU|zucfx5uXaAo|hYhO@|;!6MT z_1~-3HSaI4qW|diD7aVf6;n6YwZ-&)h;PXJkg|W!dZ9BzUkg zpw5um|H-pC|Ecf%_xIo5e}Dh){_yhu*4{)uVpjnL8e^ z@}G#VT>ib0ep1!m`^&z+Dc^B?qkezaqwg=O+Rt@8b&caWia%@JRL7WiYPWgx_^0Eh z}|oibCsnpUxP^IaizHDm^5@anqTD zv|n<3#hUy)dH`;YlYatbEq*w@ca;|z4K9FGybXCRY~WcWq%Z0oSJ6xDJ7d%Uc>~Rj zP{yEG)DZmorl=Wej^fxlc`JVuj}lO8)CP25ThM%|s4MCQy0ABT3iU?=&_K|RL(ou^ ziH70jY(K^uE`J!2j%k1^5K1E(zX1~A3$f6v30wre(HsTA`0;R`2p2)gaQVX5T7!mc z1D6iIngaZ33zvcImaU&sf52B3edkN)s}E9heYs&<36 z?vQ#w>IG>KBrTIrU!ZU|m<`<_^?=k1(jdq8@J&6!csa~RjGlq{L!hTW8VuHouy+PK zzJ{;xpl1d<-i97$puIKpP5~{%!QCaeyM@}qcQC-=$3}UX_AX zP#_ScI<5mGcL9Hry8y{ufaEUVau=Yv3*Y!B$^c6+1fa`=L{Lx14=~mp7||D=5tI&A z@EOny7zH@YP)~so+k(VkMkNdoQMFVWR+pTQ~- zP>C?QDj`q_fr>3ELT50xu{G93(1MFs~o{Z^+ywdCzg* zj#xXO#nbJd%*Y0MjpHrIF4DzOJ(9RM8xc4PIEe#bIcq??J!moBB&?IyVoLMna$~Yd zoCva}Ly}*d#M5pGMq{!`B%DSc5Ny)K#FFK+e_VeYv;L?KuNgEWX8G)Uq~F&tmj-s7 zlOrd{-wcu$$hY>5nA-DAOgGF?42+rVF(wWqL=&523`k5MBsMwNXe7xqep(j0?I=kv zel~X5gPA1tD|wv!YLBUT_$M4^zJRlE{j{k)0&nNJQKqA5sa9u(bloetP zDRB02NFqq$sv$PBLb?HV5K-<_%!jA zL-6+`atr;|TE}lV51j`}L^vf@19GVWxh#Jng5tg8gd`?EQ88=V6yXx}#`spofLJEE8be@ke5<5n-s}3k+c$ss z>-X zyaQS>#R-`JzzA;05L6JIvOE%~$ntR|oMHwNj<&XFX|WoF#0K%?>JfQ0G1lYHuiA44 z#?Azhj|aR>pl#W3dKgacId+Ljfii!ouyJ}5{ghr`qEkH3>m{EGTaZcb{GcTfyXS6@ zH6fZ!b&M^1d{tNcC}&W?w1VeLF?aRDd-4zR9P-6-(qiGRLAmRT3(r2fRPvepnVbRe z4RhS%{s8!5&|D{cz5tT18@^Degi_p*FVj9K&h`nynYLXBPqoF-yWt4uO1^(;nfKL8 zIuKZWNsNL{0WpY<5UQ6VDj-*CG2m)EV4`;-;?`Ngkn`qf&|8$bfM=`~uUNfwvtw3K zsr~(Pcjiu*wbX&+v9jaH<^?OB+p%Fa*NUvj#c0*kH@^M+AH!`;W2A*A|9Sn;w1UE= z3-bwL{tM#MKxVzbg7mCISMz^R;VHgY$5Uu=TnSMiCRRvTFL_tkw4yiF$-b-?1wY8j zCOD4A7K4UcQC@z;o<#~z*%#we!T9zT`Ayt^GWSze8&XaW520-^8=3(e_0VW16c|2? z-B2(V(7Ay1CA@-!8edF-(!`a7DOv?h7;Ocj8!9L#0u=yj^in-gKmmUNpn*6btT8AM zrcX?4e6WkA)+mkUTu*Yx{#Mh8`DgC@^7)Bh4F?Qs^A>N|wQP23OY%9nykDNyLH^^$ zP1%0=z4;5J?dwYt8&X;>0~{iR60nOF@Gxq`xfT{62v~&$a$ymql9`eSl|%$tMP5@4 zGD=L;qXrzz^&q!6aQ%Oxt~gNOv@^%P`R&|!xe7mx2V5AwJMzWZ^NZFACB^)so6F>1 zFW!`Y#+~fl@Or#gu;=6s?sD+j;Z2)MDHr;HG&BG%h+w&E&wIua3csLNO?c#*@EBXE zUgaCuU-<{gsJh2p5xPGFqe&2%o!<2UlOGvm}|;_eW!-M+Wd0~F;OC;8IGbRzf}^D?%uR# zbC)|RF4!06j?B4tqU`>b?T@!?Sh{4Rd}s2?<=2-N@ClRmwP^Y7%=d2Gd^hh{%NF}4 z9lmm<>V-MmwmyG)u80p?IX!#Ts_TUy1*07f?h(T@8ayM0nm3^4?Zz_zDghKvE`UxM zYWfk!?gG@Js#f%px2J}njtj$y%7h_Ej|6KXXpIJ-_gy*=+?n<%FN|1lbZquV`B(ms zCHal$*l&NAf5O_4`Rnh@li!nXC&_?Y{CAIY2lhO4>*({F zPB7D%#@`XvfR%g5O`|?bwMd6i^9DT|fxR9CJ!7HISKKr#BE1iC_hjab z^#mG4ASBcSIn#jN8EEtJ_Mzx|=_S4b)o2|z!I%kkyNe=JL`pp^Pv}e9xDuog5HHqB z?K=nNmdbx4$9-(yx#~1&x`#A7W$%L@Ji_zjWrFlLjf9cCAerE5@c96XA4EBk;7Qlk zKGpWlgqXT9#g+IgzNz(RrU@psUcoNx!LE3NrACX3Rt!~8@RkM^r`ECT#n`a(h zS3uq(ARenNZPi|cw_ftEph9F+i&&_t3Z{rk7H>5pLt=svOeiv0V?dZlP*9+exfEBz z<(ogqvV3+O_B!xA4l$hweQopM^QUdQ_ebD!-&NvVoK*NBPIyJOfBWVR`NzsN_vP=` z9Rz=_Q%au(O4E3??O)KD(#}T#7EspLla##C1Zt4ia0U?mL~vGP_u}oxaP%&`OTK#Y z)AH*NZ(kOqJ#zWk%yV-2t3)tXuEv3mL62|%p_-1u(v`vD($q|_YFRyRUZlMBR!Nz} z>(xe3U!qkzmj>$Jvc%o6uOeSojp8=gn~{H+$hkdsI>>2Jx&pZlD)`c8dSKknf1 z`k&M%nFsyrN7AB0{eDoC)KkLM0E8(jn#6*&0BU6(0MQ?xko6i)_;4ZafhXL)j4kp{vSa3N@>ea|;BGsd zbQH9Vm*eW-rOK(U7BMB4LBObcri-&Z(BaI3pXk2Qk*T&K9rfsR)VI^&TqVPqYfH%u zf@p{rv?uIQWo6|03E=Ky;XyESOd$qv1=S>>E|YVOjGUt7w^8D4G%T_I!xd97O_5)XIr@j0T+tx4>QQ^9popDwoLLOs7!=E5QVoBb=Eh_}w^n{6 zy)OU0fvm^guOGnPYmZkPJ#?P?wDibF9NBwWKCx#nZgVc{0`9zjuYCLx!5j{f@BTiq zQof1(?Z{<2%2=Edfcn|I0)t#0gHMIRz3_BYZQdNNLw$29BM9(Q&Dn~F;L7SU$FUZi zRYpP|V1N1HLwPUG*!F+&%SG}Il41w@_3PP--xjZ1wPXi9YdP8BC5S-7AQS~~X|2)B zDbY)zF1QQ;ilM%TFxfaQTck3m&97EpV)me`M$j}6|BSX~AT3@o8}m!$kGrQ;(^mre zmVJEe?epAuJe|__Q~8s@AI<*NSWV-7@`+0rekMxe$MOvqjrV^5jnA?}(EzD1js{^5G762+L*Py~pTQGmGTjZw49+>V z!H*}a@$P>M_FMbx-=25yC6CjbI`s+A_xBl&8FeTKl`>ULQRXeU#o8Y#{!HIwtXGWRlMwkaw5i56j-*9#v_j zliaPxX?%n1?8+~gWf}~Wn8UPxSH;TXUs*UCkJx`K)96bCMXOHGIOziBFOde~LAVXq zsqz|Ezv=<^u()_Fzhvhcwx93F;Vt=fzVFa)=?Y7)0`%NC~T?s0eczNkKG zi00W$jT*C1NH3XP+Q9^an8NC^q1EvdF)@4T%?i-U@VY9JGJ2a_dO{i3gD+}TIbSic z&X9jTIzGO7v5yA9!6rkXDTu|tRx=HL8|u9lzqR{gjBg*DK6TWJBhyah9lglM$lg!y zu&$F|pKk8I;_cOYj}96+ZFIM%wxl0@S@zqMu3s~x`}H$VKT9`1_(L5jlJQEYp*h*!IB$}xH zN;Xh5hTl7WEW31{F8lPm_e-~~ke+`U@Ou7M67vU+TS5{Zqv`oL;gRNW#ZLUw^A{-e znE?GSK;p4CXawuv6Ns7aQ4-Dm`{PO z0lHUzENuNU*(Bm9QDaGri6MQi$@k`dx%ksNb}Ro@!L#}CQ}gAkIa`gSzBYe95LnKVv8qN~T>?caZ7U&jt!afw5o{q8$%e^K_E#|)cw zSl=I|7Nm-P4xAnV}o;rD^P8Ks-=SHC9evw zvn8T(V~s|^9Nk=_duxAqP-*E0$&*^Qo|Md|;K*j}+Yf0+h0<|c?u9epi#{lr>NHb` zb5BS@t}oVB#=vIf;tc2oDX2mUiYw6zDo;jliHc2h`Y;?@C1!B+lD~Z-!JN>(Q$TWJ z5`dG$r&RWkKQM08J~@CtiX)qLa6*PDEqEW1o==;haF)$VB^7_>>9(mOYAuVHgHn)Z zOkIw=AfR?Vt{qUH7QJdh>SPvE<0I2cOGn|SZpzQ#%UAJlv*l$Xsv15MkCxln3jo?3 z0P-Lad8|#CJy_*hn*e4w|LSWs_*Ao)J(*?W74}3m(`u``Fb`B&B@ils?n*dR!kM3? zWxGfME2zRyuBd;8P`B1ZwM3FjUK8B%nm}zNgxo2@%<^ygC%ut}M~kHs=8wzwKJwk6 zCrkO1S%q)*9U-r@HzDQIr_CL2Z$(bs+g^2tPeJZE1$Y_IK%2K~PSwIog^Js>dwPj1 zgaEDJt(sjX&*_ERit|2DOfNnqe}{5<0aye*1HMNBK;?gr!cnTtC!(Iytbx*02$-iy zR2e;96<)G45I{WycA9P-Ag9rD?Uz0?|Er=ev0?Vj_1EMFM_wyj^XlHhReMP6F1bKH zC;RTKEX1v8B18U-N)l6iugo<{7?bQyGP4MyX zk^ahhJAHp7D)1&|{gh5p{jX1)np(P7H}&lM-<0mi-!pK){^iBQ@KC-m-~Leed{&|S zx%`-a=i(-N<;G8$_aTqq9=I@>?BRXnP6;Mk00&>x&BpurS4%LP za&^wkYWv`=TFbWSyj^>FG0rK)C~P8I8n-;usq`TC%xg&z+(ylIJK|I3uk)j`hk9>E z;oCI!)+u6d71P~Eery~&yCdoJk}o?MqF2*Lxy%%ymn;?Zcu%y7_X#o4)dzXh(YJFy z%(;J)%aN(_cdzujdEoH3M;1RjCU*i3dVRq6rAt1TS}Ls0&02^fdktteaC+ME!^bxE zo|4|}$u8{&&whH{fuXOA$ecWg;-z!kBZGyG;02Ae`6;|07NNTFVw-vHiei`Ac|L`1 zWGFUD={lNLg)iNpHd3`_pdJrne-Mjps7HTfz$?qklRBAO_eh<$;M6Ihqx`tYKC)9M zpUr`r3&^e_O#hEXK2ZM}=nFmFM>81JD<3Mr>NGzr6mTAAAa!{L4VWWC<9jNZAgNr# zN$1~q8<&1?v1_R`apBohq|BcB`%W&P@-#qW0Zn=Yps6#eSBaiy#AHK)DyqjnVV{5Z z^^8@LtZR87M%r$s4=nWMCW2I4xoRAo#Ozcc>M6kEAmb}`SRn(pW(^!&dcNgUTwc^ z{}OMKClV_$0W`sKFHQnz{J~E|dPCimVt%2DErApcKdJ&$=WGz2u1+9`H8wWU1fd3X zHGZf%E%zC7&6?V3SXNXcc|ke$=bBVT%0F|yoB7^jrtr-XJDrHQw*VIP3WtBEJpS)i zI8w;$s#nM$`#~;Y%a(jD^!cUqiwESNahE?miG`_G(`C~p`DgJM?cJGdC;Nq?;8PB^ zX_-%nYRIEnat{VDgNgcJl3y@|)DNb%;(;GK6cZTi=h}@<#5L!VlFXp1{E3C^x9`PG zCwFYut6TAFSi5cFKnWL-?UR3S*x1yTPxNk+yK&)^@e}*4qyGtptR>q3!WdL&Gb?ng z3PN@?DVQ=a)X#Y|=}8%GY3qRS)IB@@ZbKy|#9Fa#V9)Lyy0+<6{L;KtJGy^%-n1`&*{eJI zJ=wL#j&y$P6D^vh#5a0&?(Ff&&xAHAnlOLC#AfZ<#ZRUGPhbw&jvug9!cI1<&?mKz zqXnyvqbU$`A4dbOYZ4p8;|Il8@F*j&JfqDby2jdq560cV!PO#*O{?>&{)XFuw;|`r zC&h6?QG7ltlY0k`9Rz*>MB zYwf0Ml&gPqrC#!@aJnQ;;H(T}>dXpYky^~_{lRzNmG0k<%Sy)JCZ)otzzY)rIsi8B zjl)koW@obiO0g9{84EUK7peh36`{E+W~i9mKr?hyn%iAz43)<2N+YN=a^q%&iq&0- zg-R@~nDr$V1!jK@Dj-t!GrxbJN<8I54a%Ea7hZ)<_4^KBa;_!ZPf-KvJhRV)|gVG z|3$^|8z~07eUS-uw{gzBJa9Pm6^f(AAxb^tI%=#ZYKL5<@15&fPUqVcOQY@}>KKyZ zt!q~Az}tUUuh~k93zqY%m+?6D#W!Ey{oG4$zFw>;JNVW=-lkRzVA{sf|LHZo4kpx` ztYyY#9&jb(&?2-J?FN%o%UU6g+gcG%Yvp04Z1rNyt~06sXKRH&{BvtXfP;t}1zvid zr43Ok50A673ToG!rS%p)&(a226D_geaK#%mByE4<#A11sh-bebFZ;@Xn=IM8cPtU* zU~Gv%?C(E*Bd-Az;i{9gZWvT2X?1m-qzzS&PSAv^PSOS_z}4uPvSKG`H7;^GPtsN& zq|IrCugfn5cj~#QX!nZQuZi2e7I*62w`Y&Gcqv}LY+t=qv*)c_FlJP*F75l!zpEMy zknexz>VwY~sX9OFhP`IpA55D9O3{b0U5qOURKVw>F9}x(Z;+K&z)6?RlWUI8Cd812 z2KiT0_uRadyOynf?fSh<-qgT`*e$ z*pAzL#c_fVrER716fLsj1krJazKVVj?TF?w5BWz&M#sU8%@K{K9;7vrTVhhWMbT`z z+s72`T(vE!r=XodUlOUF_-vw>o#$w)kI`CP=V!UsyK$Ghe<>GC6TSh}zc_ZsVWhV|2{H_F+`+riLhzi-WUZg-lE z)epwn#o#YzeL_7BvY0ABJfuk1h&{+UvWfNnQ2FKR4fasl52617ZA}2emthhE6t`Dq z1MdWXoL!O4YQr!L$M1d$9lJw`oi^PDA<(o7u4IU_51I2DvlI2A*q{`rffIt}utcND!1(VXYJinMtl zD)vO%O`?Wq$B7;fk;GFGDCgpts$BEkvfrE8lZYQvl^tc`4UtGsUXw8|h&DAnTah|4 zNX8F+sQ^%ynmfBn3b1g zZ3FFpob7rEcvMBU@Tt0W@6F!b>7+ZIg>=&-!4ODDB#nTOND_94fFS`{LK4qAxZq=!CPMtc-?FIq>kytUXj>^k_FJPxx6#(6Wy^BT_PMTtDC2Ige#{)>( zs42JIa&xg^0)V0iAiF0`NzYuKvi3C`-xtTvDO*xn&2rg22!D(4@5)vzx3W|H|Ab@T zLU{7L>iJ7*e@HwEpgw_pt@BH3t04%C*iOUuVe>0j&I^lu@ghL16(C{Qg7PKxBZl68 zWB~{+$1#@|RFsytAAF+%+k0_*_5$n(JEU8Pa6Q6(7A#p_f2J&~2^l(uYgATNm6hhc zJ$es7L_5;ovZS=WnuSUf#}CHw)}^IODxz%ZQTXmL>`Se#s$K3W1-@1>e_vfwQGNQi zGh0wN7qBl62vDS#dOV=RHjqEV4lqG~5y%|ED*`zO8Vd@-5`YJ#;911+UFRa4LU$PQ zX8LikyE1ru5RhjB2K-rIrS`~=x7~ZwY~8T$z!D_hocqQwfIr_RlRx@#aL3y?w-y%; z#@l+g_bhA_RmQA#NcBd?sNbkb;FEhpAW(z(ODc3jqfV#yTIy zVm%%vU_A+@VqF9?u%3y9kW=J;_nn0DTH;a=EAuCV-T3T{v@qZV-hj9>VG!iPNGL$8 z;}P3DSP0c{2dqR5K>dKeI3^=t%oHev1+W-u_!!Tpzgz<4^s|?W`-fDrU~JDq%-%LZ ziOlP4bLsfTNDvD-oo(jVmLVA-Z(G3@o=2#Hxp*(fyFZM#vkF|N7TZ;@ z6#2|VJ_kY;%6O=NG7xeE%(n*2_iy`;8i{u`tVG-kVLr-fc^9^U*cydztFXTkSLgVa z;_Ly~%Eg{ad`|9~RV$zhd~!NhU|o(QK@01rK|gR29qmV4dV=){{g8~LI6VaQgA-)* z&;hn6Y@VRSqX+jDEot(9$QzSPyv1fs7}n3iTXJ?5 z=v0T-f`r#@!YU0&1yz=lW(L(C@ zj5+ifuOu)gjdDX113xwkM+ddBCID*nt=7x z$>Z=X+CUF#A_$v*DEmP)0AdL77VnWnj|@ur(yApeab8Vn85C45oL>q#qP|hoX-n&t z)Sy;-XM4{yr=E2_y|>qTP(KQ`!y>d5y*n)n;T9c+10(OjDySuY^6Tx3z30da9;;)(%ml&1SPjy~X~BiXPC~Yqv=GlmEib_tEX|(PUn6N&YyQGKjm+t<(KL;u z+WKo!nzcZak_sjl+e@sC*2XdAjn)F|g3@x0C5b1#sAw!nw`wq@cp=tPi)~s?NnBU6 zqNHRKn${N| zVQJ13vc=jsrTDoV+@-RXAlNds_&G?CE?1YtX?8?z-O{3mu0GCXc$${8rNs)F?DPaxpl_r>4T8N?u1K%iO8@*?WcS8t;&O-Ln5{K0%gIkx{2<5T7l{ zlFU?p@9DYbk^&yTUjNfemVBGgjEnSYbP3J8h@W#tAF4 zxT0n$1cA?1F`*okZbK}T?B-)>FM@Fxk1TQ4cRZ%#H9lYStob=oJ^%QhvG_~#ysQ4q zyDQg1UR>Q6JrDMn^S5iT?8BI7C)U65I6X~&o)*x1wt2qsBzyGNS@Duz`zuj@DeCux zUFNNgKTmJh%rl~Xi)SF7)$XtU>lpyT@<(DMnj&Jq!5DECVB|6eW4~K5CYgd!ViCq- zGjS(%Vx%{2RYcrMMZ_A8v6BNraqeJ@+4Hfe0s|2kB*ZZVcYZ1s38rBQff6h-Vx5kE zy22w_?kDsDd$_lEh1t$JjNj(s_=zwYZo!-2TPCEDDx@(MqwXRoMl3UU#0`<2 z4cvR-C<0S(kGMzE;rmQ{Z$M}i_Kn7Wdko$TM@3=JW$d|(J(ux4!yPU1G{X$fi-=){ z=W!ep=`lf)rw9hP|A{L`LB8ihob?6H`T}Qtf$MyMb3TI-)UoM^WhUN8C-zV%_WT{O ze1z~|#QgJD2F9sOp_yj6i^oYT7E76U(1EC z?#NVA$ujoFTkwr2@@ENne>D>+UEO}ewry}9FR`|IvM z&Zu5a&Xc4$)6jW)n%p;k(80=LfnV*$ABOmeLP1RdV|EHnahM__RYj$CdyCt%H=azZ z9YE!OORwHDhDl*`%(w0d?zbn_5=w`D_BMIyWc5UMhx9v;@)MJ{ct9FDFl^Qm}oH``hLS zBA?y%RPTQHJhSnCsiY{@@%7lzSBQgT%It?P#*O~MeZt))ZCp9ht;+9Tc7M2hjQa;w zY5N2vauq%LRQUvEc|-g}(UWi&1DP|((w$N_!7eKC-i(1ZyHR!|WzpM@zvI3uk;Yru zg)Q0(h#jLSl+ue}fg+a_8`mXo1L8IGT*PVd6Af*1Nd^mlU(=v>2K&7*=(Vsmm)TK3_&t|4HovViT)5qxM$gc7&+BV&Zx_iLo~6aExL%1}R1+kW_^1v?Ae`?h(Fe#x zCE=WEHQgD1>(?u*vAj22uNm5~c1HPe6sy+~+VBV&ZK_SmHk(knAtgCECCg;uTkhrU z&(G0!;yTV(FKuXkKGNvE{O?b{qa0CJEogW~AF*o1m}P_MU+9}h-8H$Cy05fdbbrI> z2Pf(`Q1<&rHb28?Mt`6@E@k&1Un)kQqr5CJ9eA*{sudP$NGDZ9ef1mlRQM&^>5e3mqBPyR`^6hc+b8aSD$<(2-#2+; zJsC|_%gpWhlw`(G+5MOHhl*R?XY$^skPD31+2bh1V7TQMWatW}>{_vDOz%_z=tl90 zeYZ&`I<)H64yiJ}qp*nHO4oPXC2RZL{1?!F5R}_kTv3OSd-sX)t?08|T5y{t>z!c% z=(8k+p)NVHyn>Lnw?32L{_?f6Z-ku+t*&1Eq*2y>y87C8j9ole-$dDO*MgTr$%*U9 zaKkTf=+9Tiz$9eCm_>|qe|-C)j??@0;d}xqp3m6r%& zB@c2aT%EG}WSIkvuB0kvH3?PBk?;9Slj0MJP+y-&R0LEm5+$4o zk%$MkFQ&kA8W(6^C^DX+qOId58V{3K!BmN#t8D4JsO_(;J~un*FbQp5vhL*Gr)8o( zEiG7lr0&*X2Nyj$nZ_J)f8QXnrn?pBczy?CAHI+?Z0h}c7<<}%!$HP>HvI$jr@-^M z^cm*jR+!)dTkk+`>0>4cfuJ78&&3QuoR=u^;2tw3;B4}3@ty&P*sW;pUijWA2$0LA zdt;93HomfG^Qqzp*|_8KwkIzfp*5xVo-(8LP*<#@b+gI5CuT`>>vs=l?)`o%V;>wL zi`Fygz2{?d^6IwmJsIbJxy$kr zx2kB^{>2AwqlpJe$Oefu&_O@K@@`-tSX!iBvvi(2u@#n{M=d@Ggg&MpI}`tUJe}!`2#omrtePvzJ2t4thRMmeQ-V9L zXsS)HWmXgk_e{ofN3Oi`X{2n}_sROhzYmtw(2koUH*R=r%YwXj4b_JS(g>zs7R5;K zPx}3aglv}BJ125~bEoWljj;!c=T=FtO8fT`{oP)VjF!Gov0$c9;Zn>oT^c8%*F=Ah z>|-+$fykabb9YSqxWq8mpJ}4kqS~}*v~yWTyCaLoYvxSM61b&MvsAlu$K!`BhazLk z7aqu(Xv!Ekt1d!+(Q@&CbhN4A!0mIW;h_*(SGu^V{Wea2b0X4wNu2(%F4CDLM5cF} zSRZjZ1a#M&dZ0QkaoW>SW(y-`_r}|*h-sE>e{T0q8PUfF#WZ8{qSWMBF zZ)9g*I@WrBEM>sWWazA6bO;+l?x907(uc7jvxbBC{}ixTh5sL_&d)n1`kM#K^#Zz3 z1VV)ff_Uhb6FmgR!gN>!tDq4cfhXZ4yaFLJT}tQcY^6XcQsyZulugPm<&bh*Ij@Aw zL{SOpNDh<`hJ6RN=Ww|^Rz(`VaO+6Xd2(fqdz%7(?Tf0(9Cud7PNbO2=4*xjIBEo> zDL{2N>m=*aF%r_OfcQrRD2s#*taq9GY+!&AUVHF-fEfX^;d(Zv7XrOF`=pnMD;3Gi z6+sFx^jai$#;Q1Y0UDu*mRB{5WP^FjALcj3?SB2Yk3`*ZY=xp2A1(WhdG+!7@R@Uu zly7Z+Ze>GP?qGEKWEW#^I6H2lFW=a2i$vGV?-)p5s;Z}KfBWZbh)4hwt~P^?}u!IJH|JW9&kgR!h$Ib|g<& zz{@NV>C;1R$ak6TeR^cM0i+3|!97!t6gM${fFumfRIe{W11BlM#ATyJ=yXZ6e#`SS zb=0`)>+PFgm>#a%{r8Ki8nUut`tAj~AUSMR#kO;1Hj(b=*k#)9+0N*We?IsG3ESDx zG9qsUQa<}^-R&b*Ze!9XCy;*6yY4wsyO3`$SmW2J8ih#abs7sAYF-Syl`i0d1*6Yk4J4f#e)T{jqXGnUqIhv819f`X_JP=u#4pp%u zQ`}h^NymUcTFxz#s5;T+h{zp(Sy>sj^o-@q06E9~V^hcMSkuIiha%~o^>lv|5f*d? zp4nb_e2o}IlBnn|nnf}aU`DR%CX5Iey^bo-m?VkFAKjGq%<`6M;EVW?49T6sg7IHQb$jglmk-KPv<#hOVQeWg_J2U*ad2T(DkJ$@)sY_ z{V_n6gpwxlZw*owc|5%XY+%j*J-l0PZQHiJ<+fXGZMR!&ZQt6qZQHhO+qV1m`~3cS zlS%GLW-`fSZgTH@&Y5$3%(-W;<#shH;ExY7Ctx&Iyp|JjH1rq;$zIcgzMXxCrsmb3 z%m)$h{8?m;Uh{~Ae3I|;gPM~_?9LA$AuC)PNT0t@;yKM|@n>C={fT`u>q1rg&c>ei zE-TOc+2Asj&fpO|cT6}4?g|KFI1vAa+FGYvLX!)TsYHsNgM>^2*TjqG@9$=Dg@oSy zruHg7xSqNpj$JOx&_YAZ4;Ep>+KL#F=@SFP;yih{?V{&hzd~Az$ic(t;u6v ziyzIx-9HWqBJ8J;lpbg7lRBI%g_#Qtz)?6L$h$ta%{v*b53=nG=hZ>8n1b7C^~ow! zymMmVJ=x4e3T+Nb=yQ}r5`I#9&wrh;w{pxPy zKnJ7c@AC5+E~F)XKLEU#u5i#S)1xW!d2tt>tq8@sNhlF~u5pXk5`qbr0*JQ4Km%z5 ziFZ!^Wn$G=6I!Uv19$Mi;?2Z&?kDF{o3H?h=ir;=xD|s3W4VW8R@fl_0|V5_1L|r- z(AuojtG-jN?>YqzaNBc{)@Y3@2(bTp@udf)6>HWpYF68$c>&q3u^25^`}3(9SFOE4 z%z6$t-{(hoI@9D`%LE!JrP_bd@}$7{c5GaM*!vQOQ6wwPY#gV!w*h1Z|oD6bwKbqidtCr+k(OJE@LoNF$?DKOVCm$d*l}wtztwU2 zt<=oYLd?6&eTO#xWu3@=x-1@TB9TfuVmVgym}1tit;I>j1(Pfu`ceDWFVU`3(6b*) zpnHZ*8EHF6L5E&^U880m{w8Ox_P^52PBZ(H-9&8Hn*m&mfOZXbO`@=2M}gzD?s;xz zz4^9t-+|;ZPHuw7N#Qmq8X++=p3A>=r^x^T&teWPSbr0r$s}imtg8WP2c_` zEjoM3R?m`yR=9p-X@<1>3~7(#4bx-vtVAwCE;`5i#n;jca~rDQ?YZMwF`>%v2q5Us}I z$lyI|rN=nS?!SgEFk2CJ+dqse%0BSV80g=e zq!FNRAg0YQ6Ig871fS_9mh3-+)+UrD66S+me36mrFn>}P<2xQdTy@RyLHwLa5DB6D zNF|TFotKzFype>ECoz$Izk|XrEs?V?4fkD>+r&sOdYnnso?6z_+N2b$&p9-VlZUsD zv#y8nIn41qnvU3}%B~YT<}7mgdZA zDfAzS-&X*LkBWl7PPf5f!Y)$)_)A8{_C<7<(l8Gaar%_N%x1fdpPBD7sk7KULU^TT z=}Uhh;%^y2%D<~Wb)2k1Zt@ivJK+w_0Z_&&Lg^Q`quF~G(B51F;Z}4_L2=N3JF@`` z_x3adQq^7RN53p^F7R=pS+f(p1wfzX|Fs6bhU{e%`{j8BibR&Ja#Hj9dJ!bfK1aiO zkbu@u5O{wOAC2mC_mBugyMwm;fB^{+o}-hT(h`Ty1h2!8;}k3Vv6;(kOjYH>0}zUL zJE;ksW={TQn2hpnYFrja6)Ht|_H1CTcthT4nzcV@_jiZ$z<=Ess`OL#6mm^Y^{Rl4 zrdq~anAS!vy+vGJ6JY$^4;SHxuq~35=vA34M%$msl*&Xr_Bh5)N`#|}dqyG~<#@Ch znE8Zn*!_^KnjmJc?r!O){p*B=69|)?@iCbH0VGZ!Q7!*!A8iv(QZ^$QWF_~Ow(4O4 zrQMw(-lG1AzbEQY^d0;Uij6mq)&X?Tws#OYJ58EWzsJ-e-r0eNpy9DoFuQ!#5P>=B= z7o8BcW$`B;v|o2XV3sHT4_`93tPKReX;DI0_HKF~E$X6LMsd*7-`S1^9CO;R%r+#J zel2*7!t35VS=zxWLVRA3S%9{$Ack%e!b#zk!k^2Y)+|qS0hoL3HjERMFQ*R$b4-GP zz-<0-0mC1Z9p^`XICc5hI{vawv2^JDfP;02tnkOP_$B`sV#cPfjb^5tn}2_SW@Z>z z`ZFAMJlpjESdu;=I98Nop5G}@H!Kk)!KlWcr^mrQyA;FcJQpsCnFnN)HB>Eh9lV=J z#Op9a-NvOQdb6|w&J<8-BE-5WquWAp06%2g0}63!>v_8uF)P&{u<}BG6YQ zri85N7qay@vHoqRg#kTwKj3okIb}VHFw`HrHF4@7F8@?Cetn|+| zX)KS49m&bC+4@NT6;shLLhR+|Of}*lWB@z&G=Zz0<-zH6#RkxfztkAn~(2IK*-N(M~am*=CqratQ$vTYw1VkAO)w?qjx+S4H6S zj9&ta8>Aroy$MY1I%}y+JEp~S5#k#PKY_%VJ8AGC33I}Ay9ds~*P$bf8mjMyNXFf# zF5k9xcAGqLuz!;H&sx;&O@G;?+flUx{>+CsXyY!NMXH{CE@S>or**RL8$CVXdXY;4 zxJ4-l+n=yd z)=-KN8cvP{6{ou?d(8Ii*@{+sQzvTT|teD7vXO=4LSU2`T-#AYLb>PIO*5iH~(6w zVccauu)52P1O-|{E>TuhJJgNethG_TN;Z@s`xt)zHLx;!V(?MsAEV4UstHK_HLwvz zST?kyLHcT9sH4oB2}ahmqlC1hTdE1&)wBix(kQdOY66jw+5kv`5v{J87_8F|L|-)V zUPei*1LpuPY7jf--ZI@JsNS?LMieIBoFpY!JK|p4amGQWF&M1B5qb%XW1*M_m;q`7 zjD^f~xV;62OZpYv8# zPn?`(up{5K_#55ID=JIWUB+GXVx*gT@s|&kg7>4)W+*!jDX7{gBN^-#x;s3v&NLan z)WDbyWV8)bxHV$FU!E8ens2Nno#5Ep+Npv-P*!B~Xf$cGwlH+?_aO@TSGK#zp8}cj z6C3a`Cs;0jryg8P9$~qiW9=1P_o;`0n@ZtOBQ&QY`1R~go0kWb9E=b0BL|Tq4(mP4 z<-olto@{*ce(WbsTrTP`8dvLmLO^IR^H1R}1@mwR6oQNM&Ih0OH$x8JstY*PLN9Z8 z3&lOvn0N{104|tJjT+4GC8}=UnpN?Ja zC0$KrYxA5=k`gAZ&NPaBf(oav3}uvPvOmLc=$;BCWcGyKwF<~&^RCA&M`95R_VZlGU$@eSK1m&8~xzQXCjeM#Kx4NsIHI?tj z-rj|)s|gkl9G2<Q7j#}>)`e22i_>%>_PoxD!HdQtuWTV51vrfSG! zHh*3eKK!GK_SC#(&@N-VX^>q&F%~cCVYL5#@9Ob>Vr$%)UAK3s;wY^L)UDFM)T0`h z%BIWYK4OKa7(f9To+#hZa~hNUy=F@=&+=2T@hR#V>ER*|DIwjim6KNI$t!k*7;y&w zn);ENaXu)*22_oDofED3E4`_a0OV-O=@igE;@vmGHj|$S!{Q{r=LL)71hc{r4j`B3 zBfp3-LtzPEIOAGB@T0>5XGeCNFOFcEd=9Q2T9Kt?ftIGSaqVty!o3fcucRBT_70_* z6-o{*!-sp?ym0J;KP~Z_3$X)x*wNA=1j~-rv=wUGZ^dn{U$yx7v@S7XJu2$?H?5O{ zGn>qz<`)BLx9F(P1Eo?xm@lzzZ0nSjKFXM{ha?|A;ugmc&zWxk6kfo^1_edtv&K*S z$_of7c7m>p*xR$-!pd(zZuOuhHDtbuj5F(R=xT(yb$C=!db*Lir{O*c&rju{8Gz;L zZ!ciZB%k5z??w8!h;v@1 z`?kc|fSWINy-We*ouJGtF0fa_RDZ@1+A@w!(`_IxjSyh>9LICkCI)7uED7QJ>w;`* z_zCEF7j>z)ZZ((|>)0CE()H#jirc|JV=|T^2gFMZ#~M2~&YiNA4=o&X&|_`%0dkIs zYJk%&g5#n(HQs}+kiPz6&d)%9b2HDh2<-XBT)y zQ4^l#rz%~riJ>BUg8WEBkfTu{&rOcNZf9o8jDHWyV1vML8#zB0cKtbrM)#V`X2J|! zj;=mRJ)m5MN%I&6>8ruZY#RgoJzYrmGzhJ&8#Xbgc4)vnrbqWVVEviSC4D+yE}7BO zO#7s3aSr%)uiP&?nBI$$5!G@j$}46nC$?)V*XCE-NIDdM8IwZ}=Z_D#mru((%tVqQfG}Rq( za5j@S)&ydd?fr%u7_UNna8}eg;@ENCluJ8{f)*gI%pkpByDiB{_6p3&gC_=npL3-H{ae$T{&ZVLK!ko6+M2Fz zFXp$m=U|t8)}naNp4R5HC^GrPcY*hgCuv)=n9SFp8yKG|4eOjuMlPpdTi0S-_7Cna z#c5HvOC-0fAYb7~@t?oO$uM_X7LYr;iG?X)eT>)I)?_?^Ue;`caXqb!5ZUAK=0N-? z*Nf#g?i08VMq~z+ODD|gMsc6qYJ>i~gs<1oa4@SB_EWpULS|Ui2WjXp%tKGO*W&bX zJ0yO^04p3c-l0NCl`j+3^#gT_M5p9p<;8idMD9Q58l_VOVdHnFN{|%pB$a(im!Xxa z5e1G?Y=aS0#%HR=YqUHGRVeIXVgLu9f?$;B;=05@+iDhYKn(ueVExD94d; zBbFwcDw4@1^$eP^5t+)>AYd)NfZav$Tt;kQ=AaM4{{sU~th}nw!TNWMs7@&H*;$c^ zxnj)dtPb?Go?6A}NsuH?l-kR?GZWBvxyZrIls29Y&W@4BfiK1EOZq~8Ksfum&Xz*< zvBSdiF=Lk0TV;0_<#35(Ajs`o(@sGXCdHo7TIFY}f$a2XcOvv>E^t3Samb?mqY}EZ zkKuNd=u`l-k$ArQto`JYjC4B0AQ%+PlCns8mLhqUZ6Gi0$mwDmT&cKle|Do0A+KPL zoO~ba6n$Gjs_jHG}LE>HHK5}@U@h!qnSGy9wby0CE2M_y~ zM9XmLd{a30o5_U_HpuVFnuV_`kJ7}7G(@yW&}WJHSd%|z#(sUQN?API0Wo5Z)8w`rm8 z@mDHzhBVlFq;{*EI^7SeRsvA#Nm3W}sf*+D8`u+-xlvA)E3zAz1Yf_4pJ<&fc=y|% z@t8YQOn2WJ|j1bp6>;fG;`!dZ67ja*YWHsxt zdzXti9EQEYJAhQDShI;PzP-1^okie# zHUF>ze?W@Q50tj=zB{CJ+^eOk4G~U?Rz}j#+VQm48Pf^DyRF<$@Q*c8VB8*F+oaY7 zB|(|BR4*nLpVwK8OF-fr%h0oj^SES5e@^1RR`piDn$fk!+9fh)yJu5^lSvg9vc*#W zL{mucGAoFmoMA+(%14g#CjJ8&l01U#=js41FC{&e2dH8p)f9o%f#*v>m6W0lxz(8c zR>=ZU^!bfgM|lwx_gE%)q->GQEG1+E)CCxm3l1gQ0E#~y2HxeMjIb0F{~;ogM?C*$+158YGn$bs;t9l`8fWN&mkvGbhaZ#0AlqV_w{Dw{mKm3&4mF-`>TZ|y zkITmMRLF$i>YPe|Wv4zrsZ+L~42C_LsH|2GPVib+yKC+-M*1 z+1NQQpD_fmzfLTw71%nwH8t+%VOHOqz^6Rdf{@Dd%LBjwAMg(G>_K= z?O@wCkIS5JNepmy@w&h%)`NSXLDf&>W=1r~0axP4Vu#&5Jo|~J%)FKaWA}I-1$TC= z2Kl7GVe#+-To3r?Ihs#dvwL?iySNmdatmt-^STh4*z9U~Z&;*&KA8^Xu(Fm?nzgVX zl>y`M_r7iU&!l6_0Jbwr&xX@p@|1>jo9e{Upaa(1)&7+`_c#?!T$l>bnT#rMhoez4 zUexia`Y6Tc(e6IfFq;ab{0)@e3@)nGh6bw|*^`$ciSTdh>yyFTJ_-4Fr*HbH&Gy>m zlaOFBSyxBPnU$8|rb}-p#INxA@D(RqhT3QwXnp{9&~cWG{X3q+CSR&5*(j`^)Pc#r z;Mv8LUAVzqjMlcuM!Q)17ygcCD$}VL!L`;S zPmTrhwhGgsPTmITZ?z}3g>fvkZIM7^fj(?`fgbLQoUF|xMTQ{}~>)~8{m$iV| zdT%aDJ8qgXxkLrja=OCtqYUc@%lFCQPra>3 z*4b{^4kW`Z(Z7UlGq3Z?;S`?>5+ADe$zARl53y?t@_xndmOaNkWH~}p4gKxY9C%-% zaipdbptHgnz+ogj zWL1M}Rc!83yg#0BS;u=05q99BDsySo%crS^^04ip9cZKYrK&R-lteq$Pisn8l((sE z(lJMl3@J}D>g1&6$IuD2>Wh3i4XqneOr~$Wu^n!<&DNy2On7xZPt+MAh$GD}jmf`L z37`hFjo{l`9wwK(YQqc_b+Y?gAEPeC( zNKQAd)q=c+Pakp45v_L>oD!M4dA(Q7iDv)<%s!>I$`H0oeVbB6yvDwui+VLR)9IU-4G)!0n9GG9EBJGaQFB^Ek)4!OPfPvP;gh z!);-L$tdk8Tte19%_;bT`@d#~x_jGG>{IsB?;2>bhxEMR#uFY#qO~=eRB{;ubTvRF zmFPvhn@a|TUJ0}OP2PyKetw&bdHniVD6Q}wq79Wy^4i*|%AVMBIc`oEs*yhJ-y#0& zX<9t#NG2?^6@Qe1!={FIT$gAvW!iWOy6PW4h6K}Yjq)3*Bwg?bCHwuj&BW?b6-IhI!t>#E?PEFKhOUC+%&G^0v4_6E9m> zphxM3FKx@N4Y@J2xWKdt+@l}aJs|K|@s4$}!BCw$cyZ5O!S}4I(ZISTRlOj`IEJY@HFi4&M`{Fi)W;xxUzFqz?9TNZ-f*A>` zz>>R)Og0%eVULwNA~H~C;oj270*^{bq82+AYX>#i&nXrJ*LIQ(SyXXtx(oYUY)bA-hq;TJI?+z>u}l+Z3%)x z-hG{1DrGO%w7HhmlKI^1os8}69Hdp!O|@`~(-mT3k$D`>qNXm49Ifi3K=O${+mlg3B=8ROlb$`E8M%jyKy!sA< z)}Pfs@=9ad*akVFnxbseT+1e55qj(aTtG}|g&gTV3<*i>ZwQXxOFKt#owcP+eVIGd z3w&2JSY-1G@B6tlk|7GSv+Z2Vo^q`HY|98L*#i8djDpcj;a^wH_ZqQhi)QcVx5(?6 z+>CoqvhZR{YxE0S3Y2Bb?r7$pHMig0&Uc zgztYfLw`k*vH&H{|F}7xnEu+hX4x6b#x8_SkeLaK=F_YT(9Z9d(>t;{iu5M+YsmAO zjXcwFEr&lmWQSXrV-QUA4Wy?QbFKc}gSF#RVLv#VfLzax+Tgta_CqyHn2*h*{#p^6O^EJ(wN%XSC|pMNGd$gAg{nO<`fZKwtN^fHc-|*E zjGwe)Xb{ZqeS1;*x~r5;^wP$TUq9uC;g6ExtOzI;l!|(W?Zzf|XJ$3nWmRk_b_QxF z=iywv`Iq$c-@+>Nx-f_eq;oCj!`j2a<x$Ufd zRvuF2-}6h`*Gkoyk`Vkw^l~N3aMzEJXa;49%xgeTMnXosP-}`xrdF52E#jrAx0uZG zwSiKV6L2MlEGg^g@1`tg3aPwalO}9fXksqE|8y1ArWd0mA;)ENzb11Jb1M{07|b2# z3?}7-jM&LWUW>chd66qp@-;NYroUz?xaK5N$7gt#(NB=)x6Y6;_8mh}SI|MF-|WEH zqQ=`DU@H!D&5h6Dg?wB-$HuWPtPUF~5&#Y?4v-E4^B_^KrN7gK*TpRsG~(z(NV2%k z!PnzaAEdXjcj8IY^2`*$WtbDWL%4%m0$QTYn9lA}xaN%J@a7c6LVrm>mz_&)#)5EQ z4JTl++=l5p6meeL<~Hp!TT$Y1amS(Spfcm&GM~;eD6W?>#yL*H=R;w+@biU7i~_4_ zQAMP-(ZTj@5vVt0eK6gX1CP|{TZO;-kt?n#p)^{WZ`m*YNFjzOf)(@>pDT(GR(NO& z*3IonkakgZ#!(2--Sj0mp5L;gYtlyQe=SBS`j-n{^sg!@_ER?*_*~1pi>!;>j68Ki zmdf5X_+jCoL;{jT?y#?gM7Q|50x@Rs1hJ0K(fFCLC(n9{R0723H^TI%!pz#9U2Bjx zpe+xMx?NdqvJ4MkkhFr*$E03wt&|x*nWps>y%m)<>N>vNia{xuMV?3t09%JJBR0*=#Bx_@MFv8 z--P4AK9~)@U!se1DZ6FM1YmWBuDckmE|I6n>3_Qw_J8|j7R_V0*rjOvb&nLi)gsI2 zTPDtNZ__5kBy8azpw$OjbYhLr5yhpS+cHhZcX97jQ`GA*s(xVKRH-wb2LH%5nmoIm z(d@;AcTvoe^aUA%zn~o27?PmNB+GgW4`f)&?;`MPTOudZ|JS5!vpu&VV=q>)3Kz3k`}Hp8@-f z!1W&E3F(QF39c_6<9pdgm{$;SOrdT?t zx2h_X<5@tlx0a{VEudS}F4MBdO0VdiV$P-Tsl8lw@u-LCtZ7JbON(vLJDhX|E&66u zNqpV1gUpvo2&Y3e`bby!!>)D@06Yt5sMGEmOs&xV0@<)eX#OAGYDR*k>;nRXrDIlf zpTb7Dh>gx_r-?MrR9bRas43d@#7dvqQ(#0Zl}%hqvTkKf%cr8YJ3e~Dy~sDK2-I{R z;EMjq_qC*%iI+P%I_wQIpQ;#@0ws`5^9ZxNW zVcL~@7;f!Gf=nA#zSJE#c(P+E0qNlcV=Z`!8tOxq!b9}F@1~2=vL+a4{;<9DB-A5S zEKute)g2lVHU^EB0n#xcuDu2P5`2q)oggfjnPF2!2pnmJZbjN%f=Zi^ zP$a3TaVT8PLO_Lig@0?#_ixbkj=sWiT2&|+AD*au!1%_W`rgk1huHjE7%7lP??nc_IWy@Eu)#Hc`KEQk2iWm+_XAuoCEVH7^K%H8snvd zwpB7zJv}0FPo%lPxxigfGO5~&(?7EbaVvhT> zGhLxe55^Zcc>BtL7af#__$x_Un|I!f2DV1&ybnLp}|z!tsX@+ z7&MTl@gcSge=2cG7DYw<;WRcspSSD80ciJ|WxAeN@`LP+(x=%GYEofA(I=WQ#}3J3 z0)%^Q`YLV1;1?DHzx9a`p(0q1abx?9H*5MfjN2a5B8paEE^|4iHpfbNVHq!V@VkRt z)(@?*5Mojtme_HfzO%kZb~spXb(kE){P(=i{kUtMJxpfwYD3(eAxDVa>4-X#40G9! z)XMDhVR&&uo*dBS;5Ve;BXROxUTqBcko2Z%g{SKDKFY zixQS%l*tD-JhYC1X<$oLQ%X5YipSdqQ{sz%!=fjnVfy_Fq8%5DGKBI3D#jv!WH3A` zC#bDwjXYrbDTFoWgMIc^(z951hd27NrLpG0{z6AqVxl_H`rt3 zm26F5c0;Fse$n^OuTZG|oeFfdV-=k9%tLV19QLX{7fB}Nx`X`iU49!Zs0dC($J@96Hj+jOR zGL1_@gk703Vva099=}#=6c-NVSb)tL!IFqWAI^orlI)U1VBr0U<@wt}48jh>p0H}6 zhhLyg>H`sex2r9RB?ST76XpdW!C?9xN>ix&%$7n^>RMQ5jOUs#dkg`gSNIWn)W`LHHR!F^qAI z+6PH2Gq>{;EzfRNq# z_DlwEX0=7SK_-j!27MW=^X2X=aP|E;6QZ;G*UIS=IzjB_HsUj1GmgL(qYHpNz8A?U z^s%}n%URGKfbK42_7oS^clY_q^j^B@BK5gw6>*&T`CIC-+!V40Qnq4paMb(D8U@Z_ac67NhZ_LMe!dUf>A1;8_T7m~eeNfHoP0tu;k|q^AUgFenSa&-KT)GM36=ZA zMC;#5V%8(HjfGHYh8-gkWM~M1keG%lKW@@pDy6Vm9zDufvu{x*#}vpPzkJ!v!Ay z(!&V_hEL&1U>C4@mKpMpTye`$M4<*wnjD@NVxfhY*UIhsiXD70l)wqC$|je=f9A6gX-ncEn(ya7;Wr*xuMcN&I+(&Bq{~h)s<0 z&HJ&iZ716uD3X7hX!Z_z_C>^SyE!ZN-y0unv{stOw5E>t!jZNvBjQUe@h*Y+j?f?= z(*5|3OzQVzJDP)tP);yzQb>VHzMj8mhXgy*`4RnhUA<7~!c57t8mfAH(NjW5h%BL# z+h0eHHLcysm-mj3>sS7Z=ZiJ2uLRaKF1v#?megtemcE?jdE z;Qi!H_K!z%8K;l$+aBW1Y(hPqRmJ<-Go{zIg8A$FP0PH6t`At*p>C&xi^5?|x{(S2 zsJP8{PJH$1Iu|XugC$`5Tftz|!BfafOTICDXB*;ar`Ssl+7e={kvrJ6Ly&QW$%U%Z zB7y!TNL1_hFcr3X`r_B|xsCjx7rZzZ9lP}wb|&pAqIc&!r}{az#nsHw_3+SNt}zP> zEiEKdu;Q{Ms(^-@$7)i&sLQvR@8&pgV3Z@0px=WAxuZOnAS8e*lqk#qS=_ z7|t+Y*qEI}__%uJGiBcnDimB&Cfm6Bc4@oiHiY;d9{Jy1OY5&O+@TJWohQ9zEew_) z(U@Q76e9Ny@P(5cmzYgpVNL$TXyGwwavK;k((qUP0h3m^hE%t)VP~kR-c^ zEWy>}yY$4pMQ#AXCD>QOi7A2|(jdOO$0qKmi#TYxoVzWRCj!-hA0~cHu6gnGSdbw82!kkiH3#!4#SAt2j;gN) zduYIg=iQb61MDvmVp90eEM)I4UNDgPA7EyPKDIT_aIwtGmi-;D$vU}#GnT6&waf( z^fV`=p#1$rMISo}V>cAe#KuJqpW5PzT=29eE^~UXfnBODV3y*U6l8sg!etSlFCUJ?tB?UxZ z5gr)V|8D(57?!MN-AW5~Hj~%Ig#EQ9ZrN=E^jvpW>s5$LRP@F$etr{E?P?1CTgKpH zl+7(D3DsB|%f+LJ5%me4-BMI48Rf59W!Z(j6{Oq*fNa9M+v!0kNIPpEZhzGGnyvLJ zuL)zQ_oxp23Z)5v!W|VZyofa5Z?ATY05u;KywtLrsi{Q7 z=!97hpqtwCKH^V?uN=ETpCQMZHV;cOqhQWd_BTzQl{`F>G2WR)en)LwGY+LhjXqP3 z`G8kBlveF<3qAgh4gPJh|SC$fQJ7ktw&j!t}E&ajl5W+k3*xaFY1Mc zf|b5FELPQX+M`d5-n0$9H}+?&w&cz4EvF?B%<|9gz}Io1^Bhh8y(Uc~8cDPoPL*sf zXsq1{B|lu1X5ui)Os)N5M~CK?0)}(j_*UgPI;B3Ow@|!$t$FQ45W5m(eKoaxWpbrL z0ABgDv{cd-ExHstarD$y-x&BzarjuS`uTQHcsiQXyU9FLR3z_2CS*9cpiqWx>ecUf7hUWH`px8R7U&)c>xU06xpOsuoriro*u$1*HJu7C8~gh#0wq(!M=P z{5Ms*HdFbl6>pH5Q z<2gALyBP^5_%4UK;j1PhyOrFP0Cdrd>~|He6ne|)xjY#xMxzAvznQU47ORS};olY? zW9m^efh=Tw=ywO`ZmT8r-7w3g>pP-?sw|)YSxyyC4AUZzQf%ndosxTV^LB-RJMTNktr^iLN87+Q^Mg0I2PCXb#L)uHRf`` z^_b>1!MFWuiT|l|_p>xG!$;qpV^;&I$3yNN?Mdc++Ff?HX;!YSD%_5EN=Rnb?U)A> z;VkPOjMhGX%!{alHowj5+TDgXh6xeZJ5lZi;!_N-q?kd$r5yObvT;v-%0J5a zN$tg+wf8w@ow`$S00X{?qH0v!5u-D64f|Z2${cN)a`hF4(d|Ke{6snosWo%e7Xw7a z=>$@9Z7YMyH60gfZC?|Jiq9*h0AG0s*n6#X*;K1?dvWkmNGbTw>2bCa4~481#(w{0 zEAmt1r#EWtS>hx;)baZ;5=~q&g)cPw@E6VtG*aM+(ySP=e2T8v zd6Wt&ggl#7UX}GH*dJCUuwXjDyBGgj;$lVJa+hbzM(LYyO4K#=&IMrxSquzTPj|ob z?|<2L?B{x20PAKmy8`$NZ@A}`9E$70BQ;@Y`BIRLS8MImGmca4a$SRTiMCkjOA=90 z{)%Xk$EKVq8SG$syV@28-#3sfWWM6*woAxq3^>=I#6Y zUl|szx60?9o{?bH=uXQZHrCgO8f3)8%pQofLwm&9fWZ8DQnoBn4f1SZ3M`XUm#U0E zk4n-}b+g4qbf5GZd+ya7D1ym5Xym|*dJLB}Msmzg7J<18G89i5Ub_Ncc@A~8C7&2V zP^*3%r9oAO)F~pG34Z0j{^ztb4Ngw~9_p9t{yG5QrID`98r zb}@%G&u#0tGv|33TOhRD#H?^|Dx(ND@gyP`g~+Z&tlql66~cofN5i$j0s~fEB^SevIy6W-;k$5-eN;Dig4xC za2NlI2f3`XjV@BUNab9`iK8A29mD99jL$m^xge93$|)6uUoN?*2>$dY4aZ>YG7 z_4Q0o;`D{0`r|w?X<3R=MXvRcma=GcuMA};<~aN1%mNHsKfyag!!vGN(+IHSDHtV;jH|hyH^~p z`i(5}^>$@s<)!nb>Ub-GG|xLk#f7qc{Hu#O7Ce$SSr4Br$0_-1y)Y?cu+3Ugm(8|D z*+^934mzxvf24SD4J=?Dw}A%%)ZI#DrV?lqczEw=z8@?+vW16f{o$}m&P$61K7J1l z2I3@^TfndQ#Ch8#ZzIR6>O&lc{JRGjLM~_;}@yb0MWwIL{SBI2rZXQR}HGAc`5NBhFJxQr@96 zH8(|Hw)))Q{dsS#PA2^T{C@!-JK)5Rh*;0Ktjv*FA-9!;VKC&Xl11jWaiv+f)oygt zYu0JcU;fPv-|qPJ7n`+18`@j0+V*n-A8BuY{*ZQjJIN)k#&u-F+{^3pe|l`~lPgxe zxM^u?%_S9!$6Wf(BTpZ``qizU&1bfUzTqJEPTnDW!=P`%^B&<1`hrK^hKGMfJg804 z4r$ZG`^2YDPZgg&iCjBSYkl0JFI2_vv*-vb3vYLndD|S|&VZ3P6Wh)No7ktlq74MJ zLjuY9S?7R=wl(>L_7RCYE*v~FaoZ+h5&nXfHVx-b6MuqnW;m=>lhV>damEy~G(NQ> zIyrKhc#`7u?oM}lophDD&53{hrq)ST`K_k2i-(BxPPGGfMJCywq!(Sv03Vtp?xNk6 z=uToTCfQ&R&@$b=tSnmhiT28d_is5G7?>HiwW(*(FD4&-XkKGH`6XTIAekqJ-A~BR zwGXtw+J=ptI~Oh&)^#)`FJ8%FXfv9nUwR+COdL#9jqx&@-6$*2r*nTg(Q8wvti<*y zv0lGHpDlAw6wa74vdBH!QIes(Fn`9yRn@<&7E4IVcXJNy z-8iG*U+qz7F&_8A29>JSo-k+&+?7Pg8AgnV7{eYX9+7ySs(~?>efzBuCX&p=Peu!2 zC&h?g(rNDa(_;@&t$%-3%~cm_{bI@b?FaudP)2tzoU>v;5=)pCTeZdFg(y`#=Co~U z0?%oc1Q{(`=ZhSAOLgcSaa^=NluRsEsTTejA}*yw`7BQcGirA-w~rA)(a}c43y77d5|yf;lZfC{#G$vU z=p9udo@GFh5|9KpF`^VBeaRS3iiw*F&yynU(v-UXiIa0?UzVJq-9U=T9rWJQY3CnG zc#Ra4RErm~|0SY3=pN~Jkc@XGQ_6XRa`34mf~$;fFNuHZ?o3HMwhHmw9mQj+rR$6V zw#BL=9zvO5@Xo}7geQEGjYc=!GjIz@AD>@aFyX~VH{Wvaw5D4~E#1*YNPcB<d_6B*~9%rGMVqe2Lh83Gn~F0=h?V4XrbK^gS~|XOP6y zl9&`9R9)f_s5fzrR}y-q ziolmt#r4NR3j4j`JZIGJ4Ls|xNBJI>XUH_d+vtBZ!|#0T5Cv~~i6e2@p_G@Z_uhQ# zJ+yoKFT4NNutY2_s251lojniU{P>PX9=pT*tIf|=PVPdfd??yJA@Mu6X?s-c*59Ue z@|?X*#~7k-(}^A*-lhvlq0dNHR8_s8J!mEMFKXNGizDSdJ9lm-C$#)S>_4o+nz6$$ z$b^5JRO5)OP~1!GV`X|sL)@X*qXLQQG4d$s@v2@AhV+RZ(yq38@E#Gs+HR|7n1|LV ziA>}psjpY7Pb4A{#k)RAYxN`sC-OUWYm#MudZdnxp&y-mKK)YMfvJHn=q_Bn1J6;1ni$NS6QlAOd$dobvWfdt@9v%S2})~zYo)_z4i##c z_%^*o%DTlrgNtX`j5A_=!KLv~%hu`f6%-YX#9I?TL=N)C)LB>GsBXIH0rJL&wuXO2 zMU@lXD|03g@3>8y*7fwvsNIoIa_R z@rbaywU6FT_eqZ<-E(@n!Ji3YLv&~P9prT9>5PHVp^eDQMuOB+>5X(3r~a#+>tH_W zWOV-qyz#t^3T19&b98cLVQmU!Ze*8l5(5Rd>>>m^1Am-dl1*-dFc5|JoWjd=5rK^f ziG+|^l1ME2qozFov4<3?7|W0ax3BR_Q>m6f`aCnwZ#<5xdS9DvV)2_B)QKk6c1AlI zhpSV>&UEQa#0Arxnr;;Ss&8x*`{L6)PSn??9ipOOEPnUVadI&{GDkC!bUz|&nom=(QxR5S=dXk8wT!?ef9<&XV%0MCuBspjY%0N$` zJdi|egP7cdc7d`4RDlHO0D_ksUa}2HfS{Q}GgE_Rz6(v>y2*ZfyWa&*LmG#YIHIcx zn+G(vMFS8N*p%>^!d(g#36p7#P58;un**G=-1zb`?&DNf=lmqY^9dtdhSwRozc4%4 zrE2+p0Kk5*yqA+G1nYmC?OO|UR7IMus@v)AG$EmrbQ<#PXF8qEvpe0LPCAcHLOM?p z(jg$QU=l(?3=qOY9*PKoVNga#0o|F*sBs1z&niA<=L`-yv%=1bk9E}JjH|H2Dx#!|R(>*80v}Il!EO5PqYlP=@Z~YTOW;ayFb#=5Zni}`~ zr_jC$+8td`5gvaZwgbwvzoBdCsOGqw>~S` z2}Oi?9z`JvO9{FK$>0g6rJ%quVu2r^V}=OOgL{<^Lr8y`%(q*F%Y+&)yTo3 zeUZOf80G#3aolIL<>4HcjYRE=6tD_Vkj z(YlKieL6xK%7r!$szi0r){bsNeYB06!{w56XevsEGzYm+rD$&w z)EJ@UMGa^c>PD;38gw`M1=@?AK>N^3=ny)Br(l0IPR9Azg+17d=i!C83wPty_+k80 z{5XCN@5gWBcko~E`xHqgfrdy{LMVbgnAxpoGbBjGAlC@77YKv&28d??VbG!*;#EKx zv{?i3-9VV>gh8u)5WfV3LAyf`p9R98CCn>ms)jfj!}y@D3t|uUK18Ays24(nrc0BHK+`>1r4$`H`Qv8 z4ps|KJ&qwJqn;mBmX0fjjVnvWl{qL&*b0B-SxW2VD16bfmL{yiPmD#cQ_UcG8AlnneJ>wPC|ntv;*A%&kR%w z{wHwD;fWX5Y6Ox3js)i8Gl;1#V4N??p?n(tJd7ul=z2+nCtB2k?mrxt&RMt&meYT5 zT22?#H7MOg?gQk$8;sciFw)RIIu580D?k3mSNe1mZPPxzL&usunN*1*ah0r zY}5g1C+dQ_df-?F=}M^U18RkQCMth}+8(qB_6=IQ61XXs24*q~);*2sP_Mp{}c0nDr zi|&J6Y>()LQUS^a>I5m2V>N06E7}=?*{BA}6ul0H<1EOxLTxCSX6Dz4H%NaCX!97_ z`!~}8bbc&hWe_D@Gi8LJTA=oj^t11T4&g&2mXwd9{wvV#G4#T9(&6hNPIklO7(;zy z=wEJt-j*beqp~2HA(=ad7EeH1M7r-XdL8IYC<@bmCv+>L4dZD473jmUBt_RrF;eRY z&6KXc3T=}oEvbM1#z+<(0iA-HWtv z<_;0~3;ZAWAu)fJ#g{_zogbUyzd~XB$&s>*KRe1XQ3yG*B(#*Ey8nL_(~DzjzvRD# z_zZuZf0>m}!}C7Nu^R&Zb5YNWbX3TzS?M_RI7(~zBk+7cPuTo>Y(T|ja?c3*@Pi|z zFN4Paa;&bjUCf=E(AK~>mzXA}1jPB%{3U*f{|H5iXvB)R#E#g-uw~CjFkhd8=7Mb} zSvpx9S{^_PZ2TJNlAwPF^tc4te$Dbjqn3u!aQrNf@-YlU@{76zp&iug41btE3VQyP z|A0RXWo9$f9^{WP6ixtBGP6PS1OCFOW(=3J{C<}I8p(m1e&K%3EdP2UghzrYguWN} zZz&p(dzb$&7$FMm`hudu@}Ds+JmC8^|1ldUOn9JfWc|=}z{Zxa`fo&k zdRJIEfceL)d<=i~pHri@flrM^R}nyA#6Kr9Z@X#`@tdgi!icAyN0;v!O7PG$NYfw} zc`eeeL7xlbDlXfpf_R67hwaZ}XYZnb&q&>fe+2f4!2TZ;Fnpa~)6F0{JMM0<;YzoI z_@r?2!c}v(aC6~(mBa3nq#!8?(qtfscqdp1B-{*2uHk=XPy$;0g53}9h5QpEw}cVw zmT(fgB~*a6N6-{@S14n5g@oM|5_VTez=C`f&29_{yD^lr8$&s}G33~dp`6_q%Gr$} z$8HQcc4J7`jUmTw3^{gVIGNoTMzI^iFm_`Y4)*^AMY4OtaCUDP1y~Ri19)&q4VXw! z9No7{e%0OQjDfC zj4;DU6@-zJVI*T1O=cKz45LVfQ53^S$}mb~=m?0Y86r`aAtGUjNEjkh7$TDxB5@20 zIm05HVIjvSN3cj@SZEj)DGZBvhD9>NA_26HWZr*EV3ozO`^Y1pj|8+)z)UGX9|dTm zpm&J;MchE&7o--Y5kK9TzP~_*k&he=^%fEWSAcxqr#_(qxeNIK>j`zFflCXmC$9SL z^(XVMZA|WW0^dZsh3r#zWjnvmK#qv|gHGhHSGIv{M2R;fqx`_G|ign+e)(pSa(58SoY)CkL)9i@boULiWu>c6dUziS1?A zqYK$JcC0In9SD+X0?$M`hLm&P_k-=V1oHf--gw`YZ6Gn?7v6OS{DSa>H{rPZ(DWM_ z_gVvK;fJ_ijsF`x)ccSG+OGQbf5ox)ga3c-zp{Nd!_9Cr+zfw9z}u0G%s`klvft2r ze{!Ee)$l~q=eywhPIZ$C=a)cw!{c;-?u)Nk}& z=($veCLz?0ZCDSF$*EO`nR?U`gw%~cV&&=-NmNn*dvl-4YCjJ~bNM1!+gr@7Vh&`{E*sO7CS!$|Y z7fDpH$xw7S)lw-QoO#b;m#cF})4YENtzCvWdAUt)t=8R?n>WYMWqmNh-qzpH(BEb+ zDZ15c*0`Ij)+V>coPKLjsbC8i1GXrTO0-2Vh8jVYXWAF{J=50qOy9t+%1)3|xr-c_ zJ#bt1&t`A6x0RK*+L4IKA{d85;RyM(Dy>?tg!m+G^gkOhNR<8`8}_AbH)j??XfBKTD{VSwRSDB4G#KW863nl{-eD)q6pc>}SKxR3x8ooBGsUr~rjx|pFg}bxd;ZMx=vIH52l~kI5cC=H z%LOz!BcK^W?+-@NOa>SuiOE_F)!zEdrxLO(Q%irXRbKxunPKjR?Ci$Eu?DvGGXr-=r&U-j#*FB^mKL0%ar<(| zS}XX@@0qnqde<@5UaiTdHionrC+vIrIlp79=_}k`|9QWEsLsQTr@s?~)zAjkXHv^k zP0qMDVd-Us+4CHZk!2y3g1KQ-Dt0yhB-@#}p(Lj;F{5hs?5clE&zAPGO}WZK{VRU7r1C^Bo--sl`TPajJ>NzvdJJ z^67Up&$@r3!o7asf(`CXhVm>B2ST&T4QrP@`UrLn$BS0Y2CFWYDTA#~77!V1o^Sp= zb+wzD8t$qg*k6m=-8y$#T9MA=&9QhAe8ygR)t%JH@;hgTs}=JS(u?)_63f(#a(#UK z-1JQL_kDy1$tjpc_D;zQ!cnDCD>?A6c|D7CC2@b|$(m@LQF0ouCaLq5Mn4fAv2KaYSF0eq2A-;2S6#iX zwxX+`pv!13H5f|GW;%bb8I8S(+M4Q_KiIy?U%KZ<$33fOG^{RluAFPJCE$@x?PUhX%g+O&eA&d->EiWgn9h z!|@-j^Z#;G(up8RCz$6zJ@+19Zwh5)ki9Blb*dpD7fRb*1CCssBYD8i;@ydfon}tg9ZijQR*hL`40*noJiuhcg<9ERptDS^ zj2SO%Tg76RW3jhxo!7h0zh*b5_<^a&Xe=@@xpMc01q;`^g$4d1IRfk1|28fdBbp(F z_b|zH=GZ)_#8p}ve!-E zZ8JRmE@PgtBiE6sFPL6gpfBv5;p|JzGc_3Va%hdq;9eouPU}@C#j9gt6bhxTAj>u* zbEoe$l$U*kw>ez�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 diff --git a/papers/whitepaper.pdf b/papers/whitepaper.pdf index 0ba133fb2d8a7b8a629a320deab5effdb10739de..fb9f03c7dca9fc3c66ef6bb8d0c1985eeb25eca6 100644 GIT binary patch literal 6112269 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

Yeu0)= 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℞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 (z);GDEq0NGZ;*y- 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

(( zrD{M;WFBOTU7ZsyCjvoC%OWC8O6s6z*x@)0Xzr89blGlTL5F?WIN!lrI5)&h#sji(gvPQ zrw#DV=0>p@R~NxN(FJmv24fgkJ2LJnXM4fbVM)nc_Q_XH{{jW@^>4svIu#-d)STeT zlPU;MrNS&|KW+m<0r_Q-2ZsZXK&DqLWGdH$95S8=4lpR`N~x>N6u@A59_LVG$vFvv zBHE~T6=V#CqOi2h1C=(?-Nx%%iyV$(J4|HoQo0TAje#-ku`W4~XtWEz0#iX+>j1f! z3I`%K*$sr!J|%e!mQv$q$xef)4Ray|WnkVMI?@9sU`PSBpZuVRyC#zlP@6_yx$pqk zKtXx^A`?KyaIs%ceZ?m~*G@52lSA(X&fNocnabAj=^YT0rD|V!_BEPO2iucQeLugH zm#ECsK0Z<2Q2ZWG6X8#*F+@u%EZR``Z-5!-SQqZ2&jZRutEz^tJ?_0ej+QUJr|iu0 zI~1zq$`D@%RrNTe97mbq3pP_pL#=aQkTX~Ws18KGbPu-Cf)!%*mv2vQ=q+Gr|m@fIJpWQj{oE&UR#};fFKg!EOord4?2nH`0S6X!$RFNX@hC`5|>e)$HK-XmN;?C913n>E)$o=8v}= z9ULAF$<0M|At{6lX?DVA&x-TNw3w!@~*_ z+_ZP$F)$P4T*)kEep*Y^=_xMeN=6;9iXH-|O@S?t9hHrP!CNQ-D%~}C-eBtJc2Y-o z(?kc=;WtsRoKT(Dln>MB7vXyz+DV%TXbaPJtT#iri7iadi7^bWSUHG0RWG;sW4e>> zP@A-d*jsgTq&kLHJ-nwqEMz1vM2!Mm>GX>B%##~j0G(PZ%EEyfa6!|)sa9JWd}aX+ zbVJ6Q_VoCW8~OoywI7n${`ra9Q)2g65(XOo&j+F)F#U$-G)`=SKE!2cKEivDn=S-> zts!6lbqml~#^E73mffh1NY9);%ffly@0r6faZB$t9*zG0|A?4O7wGeMjbE4i?@dkC zZo?an;lLu^%KrDxw`VxrBtG}{>zjLsd147E9LRC9x$??v-Hj5)|Em|iPG@K+2Wh|9 zLD>`-Wwr)10HL4)-h&F#_s$_^hyQ;oVs^9912RXoZ^r$1!vkk?WHMdN4FFH$t`iUl zwj;TAl$0=C@>SI7+f-a@?@a9Bor~N!xm)-5Xt)lyLbcYJ7#CzukLS((Ut~c@>%BrH=iiyQs`!r7K2i-%^RT=PKo=!y0x#9zA6+c z3{Q3&c&s2uih_=8y@{O(d|eE10|)ln_!+96GOSanL25eB*QH$old03V_HY|W@hi;H z+GAzgx7DV_Y2;EVH0^;sV-f>^a5pLYvzFdF0g=ls0jWE#ap{fY&7h#lnlG3PpeboM zDuwWo)V*UKqZ~k-T|5>3{>xxGsJ+R{kLh)DAtjiv#&iVmEr8g?K!>2+w-RRh#Spa) zzNk~KA*Wy{7`Rv+)@%uN`M3M;kS5+l4sD)~DU4UWRk+#`)5jzj#O5k2p)2;k$FIL+j2f z1bHegGm!`iP(;#oe0blq#86_Uh~Hzannp3k9LzkQ-48aqOwpGqfdWAN6HlDjJJbrx z=@b!awDI)DjLWx9e0F5l02!J5*AqY7ds~!oJb5dK#^D|PF7)S2&_)7=&Q8tkocaX% z3soZG7IOL*j0-uY_Afo-UB-GV(cwe|u{ z`!knD89l%Iaye)Z-ZDN=O9lnUZ-}7t4QiFH+6n4rWm3&%88T3|(=5AR0v2{#9jQ4y zpJkf19Jb$-NBL@0P;mB*xu|WuszOe$tNqGgiX3!#O80~^NwYS`HQk2SyAZ}x%USbs zAXA?bAvJ*5Qc*GlzJ2Kda9~9_55#MaN>dh{_@kfYyT$X$V|ic+(qqou^-8?YyS{3siGTI>y;?*ukVuMb$*mO5cKNOn(L-PukXOrjt4&|UrHWGN%ljWs@Gj)rw~f=(9$hVcSD%$q zxStf)`Kc+cF`#we>laWkSCD+NxWN8ku1aw6rRj0Kq6^kF5II!9yORp;?p)WY7b*3C zj%QPEd)*CNpdX-10^Cl6L~KNn3R1gB@csjH(m^|Y@hfJ)0%_RAyHQuF;Xcmfosn-h z9AQfMruFOldzN>H_Jue(7uU7qb?vP`{PcEZ0W=iEML49Rc7YuP^SY_lhQXD}#Xy5ZMXkTJsAJ94o79%qFM~{N#OZC)unU9z#OA?1}?&={J zz`M{8wHV`9f6)YFk6e6kTSV@C|8dXlTuwGOd(9SG5VAlW4A4WZU>jDJjyJy=1{|Rm z89>Z_I=HlrtG@;}KFf$FQ!BfwZ6MmcscPBqmLolGkRWySVo1FQ^Yr!jUw1xy8@rjI zl`0|8Jd9mIxN>(IZ=o&jx$cdKhoj^&V|uQlkrVUfYZ#r9Mde{)VfC@@i`9 zfFv;J(qglSv{Yn*DHx`uITOXa4Ru>LtCR0!~?!VRaV{OOu^XNi5{S{E@W$NNPt0z^W>|}}qZaz)s1CkDtt5j@_7q&E_ zql!y4wXe_e)@|>(T3U5FwfY$UA^4i+>ZW{i>0O-QGUxcg?W?h$@OBEge#4e_+Zi7b zPHW$o!7zUZY2fb62o47IUwcLx?U_9UX(*uX@gN!#;9>rYm!H0cI=WS?9*al zI_HH)r8iQF>ab6L2FXxgf2*jiwc*`MuK~0iwjLl+tIOYeiY75poi3e}H*S>2$>xJ=fmu*=F+d56a^HQPqL=n;U{_Rfx6j{! zB8Klz0ejv{SYSZ94H#F!dx+3FFnWNc0gN;b0^%LNeJfr>3%smTS6!I8_`;O5*6;Z` z5)sc!1O%4n$?#Muw6`~@pl%Say*Z|mp!B!f4l`;1UrUp6)zz7f=6KMp4X1r%BPY^+ zZVOR+U5qkj-_-}Cr+^x$0xfqYX505uFS}5{X;0J7zIqLeuRd<6Ul;Cl9Ur|54n#;H zJZDEFNm~XAM%;0=C#*;_xcxB0Bf9VcPql9L&Je300rynk_+Ea7ep*9?bYNPt(dtZz zU(o*sK)^OA7St(K?Y}u7ve%W9+2068btHgv7`OH@gETP;fYj?Est~Oz+sP0%0H!rl z8(z{VoMFeTVUAwyl@#a6ARn`&=LhHm7W#A%LIdd1iFQ}zRj4Tkhr}Fk-4=#6?VCF& z`{Wf8B<+P?pSp+3LBsW+R<_igh^9ua&7`I}dY77n<@=8X>nFJMKu{pf03;p*d;jNP z4%J|!`g$J66=^?jzizgs9@UOCqftVnSg^0psk@Yu9X|JHw_zAP|%d2G)S|%9bo|OTo)QlfpX=Z zt`dDeKu@|&+oz9GQ35InaJ}|2IO923C2DC0w;T^Imx?tC?faa{EYpeH|5mn_`NCWf zTq>pZvrpq1q$y}7c1omMr9O;u>(Jg|y?W=C+5cGZvim>`B0;+yr>68d53vBm#c@U* zpaURt&}Fp;+M!&Qj&NN&H;lJJ#;x)58FhpdyEtd2JbYIVs$-yTU$EKOtSGwU`Deg@ ztG7uRfr75G4%&aii6|SN`KcTL&gj)aHxRg@P#$9Tw!OdJ4`IiSuXi}np}Y-$_=o%a z?ZZ_PYLnhu->*1gpxM(*gHWaBbmZh2AXk8L)54^cVcsqx_zu6*d>xHN%mPmO7zR4c zTA#xc?euz>5p6q?7judlCldJOyLIt;!G2d0SKw)zug_AH z>P(5FRBhGqGw7b)+wCxdr|niL$dnj@wfBR!d(bJM7QGo7%oBk2Khh>|kVc)ash*Nq zX&T&d`)C`2R%fQI8zOiQ$HW2nti}gLzxlDfQsEY39Y`mS)_XJjM5H#%F>Ue*^JZOc zG5(^`802~n6C}VGI#$)ra7x%?TbIF1Qb3#(|8(aaBIulFaoy0Ks|l&ks(?9fU{M)Y zhHWQGY0m%mW6%G>yiTnoSfx@y0(Ief)Ob4qEQ4<7*ZM9cN!=HJYPW1w4*$0Y$g zNw2Q|!g%e~U}w5?3QyX2|JgZ+$EE6OcSwYM6#Z&`5VzOVg>6;;JR0dpM>$FD2Ykj4 z*4SW<>vDvyOK!!CZ@N6dtvEOUEbQyYGK{~GZ7QggUhsAcFl8xeWaKHo8U5dny=*df zf2s`Nc5u{bcR1OMZ60=)0pPTq<({tvWGMB!+RIp>O#p^F=dXj|5TiZaP;ctoqL-;{ zS8s)&{hS8ng`XO>x@Yb8(~FMk1DJ4YKu%NT;~AwZf5Ys;-Adc(x_N#HYg7x+rhTqs z+7Y{yJ*V5p(5v(Yi8>d=a2D(Y4835c8L3PggvPRs+3X`IIYD!%Ou2`_M?$$nWbhWH zz>8We1leq9PvC;I2dYofxX$H^BcU>i5dlO=aS(;;c5jc#9L~{Q($%qf=Jz7mdHaqg zRYShj+a?$i#)8`5L)z7?g# zPv1=ATGpjs=Wevfq21ZTQ~Qy1Mqc3X?oW7jDnH26VQ89pPvDP&flHSJxT%ha2yVGG zD)NQz(|^=NAvs@u*fujJ|DWG}OZsWIym&5)0bteG*-1_Fra-Vj)oHibt`HXK`=;d% zvuRh}+VM#S`qTJoQjjD?KjQ&t2#_+$MYZ#-G6B~H*rv4AbLzA}FQ`3!UpWdUrOXV! zV<>}v0-1CKXVTCC_ z;{+-c9pwDrm)~F-R(_@Z!#%2_-g2W?~1d&pru$>W9nDV}^M5?rT4hX7HUJwBsHLy-Wk9jDpG_Z|L_`fdMK5 z@I@s3ma}3aHh#%!hSL#*&1UyODgp6yyEC*5+LU6C8I8odo#H~S-Nogm&NOsidRgT! zs*aYW%><22bQdqFOvj>JYy=x;@;D4S`xe+97eg=o@cjo(r$iM9TH=W(W3wjcVBONF z^O40rKL4g(qi$9}+{?IMREB|36?Ex6EUY7v5mZ(m{iF z9NlU_6U_ur?}E$EdK3*u21@0+8JO-B7U@ueOWJRSwFd|3ZJh^naRw6Yp{%q$TK4tZ z(%FxKQAS;4_<)&`RyQZN2)g+cvb(j1?O+TO!x9Kkamb5W+=>q zCNjVPdH_%g+7V$pK8!h|{Q^=({_}}9bnl${vu#*43=re=?T;$}=IkIAS< zi$LWmy)HuMc0g+(L@FBv?cpjt@zvL7(ZY70i5?H>ueRr%DwB#JbG=CfCVTTL|N%kSEU2iJQ-qWM}uM?nmM1&}i<0QJ%ZiUf^- zjPJ_Mo_;3C{93#0e&+kO7)&Mq`T5707?^1V^PMTnir5vWgJp#5R1pRg(pe`6}B~vQC zD7a1ZN|lrO!?V8y4>ODhuw#dQO+R9~{#qCtM3pSjm#7o&Xvza2DZiU3H$?iUZ?R8n|yWgcq4^}-1%LnYGFPeY~`nnU%SqN!`8!xSag zhnd-RX)WazTfBHFxjl~oW+ zdjWG)@X#OMz7qvAEYPn)t(5n0)a~D5E@hbk46iW7OjUo?g%{8y_=MR2hynSuefG{_ z10^6&3UG#W^YyzZ<3*GTA)fmN@WJg;p5xrJvbyvB^~t-X#hg>OOj7`paSO;rnNM2J zKa29_UXRXBbwL^5r8Y6BUqwgMv!VG})&I=L(D{X!E1 zN<%p8LeV<`~WaF#dD4Z^C}m8jo}52ehY&p)@U8`@f%* z0_isAb^!N_b(0CD5j-Ya#DrdyJfR>O#g}iGTvA%wIg5tG8ma00 z<`$PBwgHFru@D?C+%MIB6eY}EYH`ljejWDBBg&c49JEiy1)`vTFq<3&c`1voZCrdF zRl|@{F=XJ-1*WiYtGv}(Q0wS0UtU$2=9pT2oWuQG5e)X|x0XHP<#ih56o zI~HE-eM?Q@kbW019@^f}ykib#|I~@@Z0!RY1Eg;rTT*#K1?ceIY2u|*=mVN zrF^($rK?~|d&MUsf|r>TbQJHAJ!B9s0u(q_gYyOhh~!dr%xytbyEc=HAh?s30hCWc z`dDT5%y{0hJAqdEXuAGhu$w`pf?FAK$EsHKldX$H9bNnW$=f=XPTpf#_4zZL)5#y| zqjbS^pmsZqc50KmT6sq8r4#FF{Ud1D{^~J1Z~f-#2Gc8SaCbNy&s8q-HVBA}b{Ti_ z=~w0q{P?AY+4hx=a)bmBq%1*UvLgR8|s+KdGQZk`{}>7{+6LYt5} zPh-C+1`|nMLK)G$TTyvgMjXK=~3+?L22MBEJdV_fTKBk z?86++l<2Gu187S z&jl+ezIe)gPt#$D+NO()|CSmdN4wGm>RqSnr8pz#o42!|F&=9H511 zYjzA39byM*CE(4z0Aea;sTXbr82&m>n>6ciXhAkh5mJ=8-LD43mAVY z%AFk@Nx5l|RCQh>(sI0%H@{Or zKi-jY;B|rHT~bEZ_|U1dK(4+P(iSWQ?Wvq3g+4=P?B8)mj0R^Au)RDZg3h@wruBCA zqS*04NeJGq+mun$c{IG~2a2c^hk&UZ{?(i7AKxb&)^-f4*Kk9_nU%bTv1Ko;+@?)1Y0zXCd`l zozl4d-ruc5`t;2_RY$QMIXiul8Ua3d{n8ygS*cWe{`{-kZ$1HsMKy0G%c3gfel>I7 z&?X7nv5XYvAVB$&*<0I%3~!)D?Lt&TKj_jsVBK|=VFA^iju6{9?u)1TZX7|9nF=w) z6dL~av?uOQl*322&oj76X?h@@i3d^QbUysrNMdK%hdUZYxE1hDt1SF>yiZNMO>`ao}6c*HBj$gfvTKs-3P$A30B_ z0E(_Y<$46=*Khv&qc2L+g&)zt<*s0RI6HcqLA4;@!n^d3sh&kzk(vP#K#_4~|3`}Y zG3f%IfB)|MGjHkD4Q13(rLgTk-hP+f31Q#PoJbcpn;feiAmumQ0T}&2qzbiFF8!EvqNRTb}LHG_^Ssqyilll%=<~VIp zdjS#>B~95V8aP9x7y5sTbbDseJ=P-G^q0lf-A1uyR%8QH6|2~-2X zOt4#draLQi`c6bS%TVy_)`mX%8~sbi3MB1e3u6Z6kx`Jk9K8`xu{@e0RpF^9)Oy}~ z1~Qj!nsP@Tstwvt6PIfmILQo<_U)v-XS|MKg{I_z8Ze%2EkgD1d3qkeUCdXi;eZR_qCzy1r>m{Eq077OnH186!s(ECq=G1dSd?Rz3UX;Rbq3M7tTU{gsI+P68h@AvWE zqaT!U_BY_YR`Iu-OEt%V>gnNv{U{9CskE%qLPJ#m%1Fk5&$fzM?Q8XD;L?HokVz4Q zQ(eF`h}si`P0`nMbnb1i9DN{!AW#}FHEVzNHS>;gRH~cV3gtK|ttgMyqz?#dNbj z|A^_OW^WH#>SfgSXeT}9(-UCy9)I&)-czl zH)Wa95!x!aAqujk=u^&JSE~2W-#&Rus;RZgyt_H`rs)pVAm=GS z!DS}oW=-ysCh#$k+8w=>iM&-9eEv@Uq$j$gbK3Rc5SrBal*6}cUnyw)^3CGi(aK_?~s_90Pj6+*U`<; zagmYW=YAjXr(Zt6{k@?DY+X8zOVQ3r3%puf4a$o2SwV#qbySEsn5C+-+c~qnEjFz^ zv{eqR^St^-rg#4$_f&e8u_v?p9C+-1&$xFF(UORR(g@s@OMZU7pr3dt82yRkI8&-~mDwCLf{nfajd$H*Y`yXd58M zUP`6nQ+J@++tLeeu9cYt8g+O!fzE0Ebq-VkQ@%!}zF@QIFHbS#1->XIW5JXf3mBL> ztW|`g;o>{oIb}mE0QGD{c$l&IaGQA>Dt%dDM(=wdNRcWnEX@_$WFhc>1Jcbfb zWvzX!QYzzrcyo7B&cE(@7|O)2{ZqFgHM<n2qjza5&#mnJ-5N8Uu8(W0IPf*V9s1O*KIE5GH! z=qJFu6yP%={pBZ&VtU5`&@fN53z56(0om7?f$OGIcsQPaLq>D^5%AQ^8i1C{4ns)L zzL}J$eJChhY6L1LRUBM@aJxSNozE!qM zf#!)2Lm1yW*1vjMWbZ5*8(@437J@59s6esFEdn^E5{rtRgy}5i>b>4arUPkjSIG&4 zt0bF_TK^6=(q4FSmjkxa0z?o#j$%#3v^xADg~xo<48~X!!zI2yC8Hk6kR!o>#@pQwhgkQt!{33bULU_ zmDU6p=fFV_(-m)&%RmCnF0BmZHF}z--XQ`ns^VK3D!E;a4@pJ%1`mo14`3j;w7KsQ zZ5R-4yl0VP&AEyK>VTJJRr@hY8w5JxEC~CN2gB3&VO``FDgc$aEMi5_5(Ja04NJ3d z>UM(Wa4;>we~&MfxmCtvunJR1hd@p_Ob)#TAN~S`j(P`Er0R_j=0NgcEd=TrIKa?S zPSF%BZE@C87Bq7w*8Y}ADV}q7ZH(SquST^dV6fV|Tyx}%;7yT1%wyL>sc)q!&9*TG z-KXx}HD-Lybbqp+3GwpZgXM0vfOF<9{_4h3?S#Jhc_q7VSc`IssO2QunAeHve6GXix^!I=R6{bX&xt+}=^ z*U2(w`!LFC(B}`+VXnO^&EexgG#A5R`_i4@Ci}9TaSb@_;U|~wHM)t6HNG-g^BFkv z6Ewx=aXE&Q>Vo|}DvHvXrbp$NNGZVmK}yjK5V|eUdHVi-k<9sppB*@c`dNky7yQNj z^|`aBejr1%e{a9VYh_23)8q(KLS2gp-Z~_W)IDv?%SRo^nE&@jehcZSQtfhsx(|x) zN#rU&y$@_2B&aiLxm)Vj-qyQxfgS?zIzA#^clU3emt{y43Od7fOFl2#B&|BXaz{VY z)%8%x`_!w_)s?9anWqN?t9e5F`1@eYmcbxeL3sl8Kz#soc^xZ|mjC5P@32e*x#s=p zp=Z`1@OYIFhTp&E%Dt!pyQ5iK;>y~0yIe-y&!-vc}K ze8L_MHGmPu7w~c@xIt<3$}gpf8BRqp7gQhj%}Xc(%wFRdUuKwHskbUbjs`Dac3D}K zdc70MoJOgD_qH}O2gOK(^Ik#w($1j85%F?VKhGV$AeF2C#o6H~?V+P`beS(Td312H zo%^D%e%Eg9&oW1J_Zri-9INw#6-(4CP_MVuKH zL=@Eq1bcx^f*MXfrCd}xjH+OEIr7QRz$=rA!Od)P0}%rpL2dS69L)P6%7!Zs(Sa}1 zVZZ)|1jgKU4w$+JJ^~S-(K1MZC?IyJy)K?gu`rcJ@ToY8)gVSHDZ9uyde<(*U#_Lj07>4 zk$m}aFdzbSKt%9yk9ikrH9M7K%)#Vga)4!ZbMocy^)XIG5NXfWhW0%kf`o64Oe(u^woebJmEK!lyz6&-F0{WzIL9x?hJ6sXH zY8!#1(nNtAnZh%#sy1l?=h>OCf!*$~LVucL#$+NdXVj@HvuZN(G^*zK{9e6QK{qkS z)*=(Tj`9g6Wx)JZrfy~9$~GKgX+}={pP%`jS`I3dcr&Bo71Gkhf4F*kSHhlmS{Rn@ z8MUF(Fs=IkQ1%|)aU55=H~=CJc#w#k1|UEpCnASIP9y*VLd*15l#1=Y03pty|UI z)i+gRFkt{B;5`t%o`cy5We017_`M6bQoClcRiy_(0d#$gD@CG zuK>N$fPc3ekm=26SPBGnv~2-T&c6jbK*i-Zo<}2S^PEXfGJJ>cvDUspHbp-ULV`x_h!=PeY;s)CmG#LK3mims3!?qr7r)EY^|J`GIJEi(^pJbAU(#k zA(G{{U6dExw_Vx=b9&UP%`!d3i?x%16?xM(3MFG?b$cD5?V0_|c$Kn25PLHJ{_4wU z0d?sj>CxfY&28Vo9nsw3wZew>NShqas=>6}0guG9Ck)eTqE+JuT5rAePGffa0P7OK z_@2oEbFvn9?GGWSl$GgA;Oq&om;mX3^Y$2f$^@ z0&n&D0Hzk#ow);zfDf?8s>1TQ8J~LAAj;EEq3y|Im;#sI1v9q~N{<<^1!5T}5*7IH znP2EK1Vc@pbQ!TgcI6T)?6k#w-(WYG5HlDew&2yq!*xxL$~ax2HYC~!h}jrpq#Ti6 z!|JCG&xr{B53Q2Oa~)XY-bn8;&+>Crh(W&bx;ianmPLaJ44BMv*>n97k#%kx4*`r9 z;84ISAB~7(9x0JnWV)q^g9J158|e zG>CVz#*i|o1cL}ng1&x$`xe0AWjB$*3x-7uI`iTZZ_&n(JH==}S7oIIImWI~+NLVB zeD2U*AwN0GmY2krelrfv%xMDc*UOr&*3l1BtS)eOz1#7KqW+tbO z*be4dpG6lt?PY{1$y)%nI~IyU2R=q5$|!i9wOXK;t2_yj1#5TsCb(w@*!-2}M?QNr z8xn&6xaDIE4{l~U>YxdE9)M5S=G9qnUd`8^X~XK#*2DO5n%+|L(Bb8&bJxCnuPzI1kGnn9SFTZo_W4tlE-CS{P*MJ#XD$zog0tJ!&1`0xW8=WmJ=XtqNYpsys9Xy|bv2Lr3 z-}#4??WGX~jc(1&^w%bc4&{@F2Z(k*{o=#~Lntdlh1jt&rVwKTNK%=|BQLyE!%d*{ zA0=?H_Vaa_ZM`e)gAH;T;Va#GFDoM>dJ4V8W1Vfd!9At7TYjak16gT;KIX^A~5Lx^UV{|0iSlIK|ELNn1jHT7s0B+{1XDDuL1`h znnW=5$%DJhJgn{9pLC@Ne|hEJ-H?VrjdXehhzHuf|K+AdV;qQTU?uAiCG>H zdj2UiB_m)oFpvN$bD5D2IBN;8zrt`Bjap&7FPCub1sMbPb2bL)9SBwC5UyTOkQ{aE zYK>_=`fLWXp!$HcbgGW4T(>~`d=M7`u)^r*QxUH#x&qZBTeqmrecu-X!%0wKDV^xL zI&zW`#CX{mp^Mx$xK#q`4*6izDVnM(=j)GWamX07+FQjGGlTky%dY(5#-qMDd#$&5 z=`9R2f>f$P+Whux{OBhbuSo$5q|a@^OWWy+kueqoKzYgHxgfI;Uwj!1;4b(LPckwX*ViI~Er*9p4C`;iN553@fzf;?ZGjs(W4V8Ae>FV_3}=GTyhYLnuh%6J&cDb)k)HMKo}x+B-U-Qk{43gZkf}Zc(viFw+?yKF zr5?$uOL)lcGDb0{wM>P8b1)GEZ39tvymzv=;JIP3}e8w{g^4dhyE;OGq z0D-8riq7#s?Vq>GT~(F+(D!N^Kw`}5KX{<&KHPWa7w`WJN4S7Ic?E{#eh^b}4FoU* zz7bX%RbPLDl^2+9?7MWoh+8(>kjXdfAAW9yrdUhJnbUskj5*j>JfNz>w*3twDy!R$B(CQ7O)v!MY~k>a<4$w3)q)qRipy z{^N&C1)xclo=n>|Gm(V(6rMf+c8g9?}*P z5~RJg3(6jKn~7WsDHi1JVGMNF-n(f+4=`^qI{%TcWUlZkqnmS>h=KG*n}1wRg6#x< zbb9@0Bn~s%6G5FIbr_^N5U}5~&8Rb-_0^tEkk=#HG@1^)JzHW2*x5yG7rcQ_#$XIL%J%xnaDui0oRcpw6}ig z02BOTla;mhZk2Omw}l$X9)$Az59yZVx&WEL)Z4i*%eR(bDAEXKlo}xia32JeY536e zE#*SyB{Z}`pnHLcZfR|K6~i6q;Jj^twGKtm{>ItT;U$KNAgr6uA~V5Y+N)E%jchvX zIA}BD+ken&P37zVDuk%_4(qC4K%iYPXvZHI{xL|C(-6lfa%ELo?(s$ zE9|1A%9I)Mxu1Xyq=RLFvYmE;TSLs*=*Pgh!YyFf9t=p}f*Imv4&AEMpwkTk_Iy*_ z*S;ecgFZ6HWHs_8G#wxshc&7Qq|(OSxmi`~p&9L&`@&Ng6iiDq<4pSqdeIohCzR38 zJ*Nt28<)@Gc>X?_ck})Pz4k>%Dgm!P1Vz3&55##nPUoGpl|Xw9i_2XBc=WQDvM7y*=Zu|LCDhj@iMrlu;R0r%FSGK1b~U#`wSn=$a3LsXrn1 z@)1o9GoFEPX{aybnRw@sywPM(JqWnjt2TLpal_=L`vcL=&z`n zB&gLT5&U;wdKglh^a8Y}$DyNB+&SD$Dd0DL%Uy}9r%D>(te3Z3Q@2CYeq|P)tG}s{ zqgcFRM2w;r_d1mwV6w4NSRLxJ>U;4QGVAaE{5ug2qgh@Nd3Zzx76bZI?R5tTb?NzS zNlOV)Zd@)?%{fF}KP@+yQdABYvtPg|Ks3Xj@!)-kl}`|ghIg+0+Du;al0Kkzf3D{L zy?f#XT@T^IN5On)J78G*{wN43wX|-pXu-Qd$HKsP3c&f;KA#ACpV?gdtt;=K&y{RY zvjb39^nn$!vay18m&Ah$7+TqzV0CG_t`w3oX^6^@`Dm5&ok0`&JX;}fZy~xLzR;47 zhEL!?wrBm`n^t49xGJB~NlY7&*?wqzKxKxr_eG=q@L4dLZ-fD(R=fofu$I;#QS4M- zd>$HQx=$IX*I1>2s}E?89BvTpzB6m*wtwk4WfSfNGav!YR%vyTDEp~U_r)-czc0S~7`pw8GC*Z{04@5ysvr=38TLJ&eJ}RRZy*4yamfj-jQZ+)?QfSr7geXB z`tGrX$;E*VpFBjH1NmKG0ibT_*P>A?Tcg{6fGTfr6KDgZ!Uqx%DviyP-bx}3IU2c3 z`)O_#(K?6d;_dJ0yR&|a!cfNTy_;gO!!s*mbIk2iz3 zNczf&=roFg<{bv9E35JPQ@lon_S>@OZj+hc)s&bWrp|WdDSz~=(I_Vx#xo*= zn~#C<;@VsE<4rP9$YAqi{mN?=4R}6d8CY0f<+RdFFiug?JpfSR+}hS-e(>trKr}jDpYz&zhP2s9_X%%ii=~ZQNh$C+A%cC ze|h_M>1qG|RRIXicaboSw+zs3Rm_)tpfu3u&u)U-VhbHJ=(FFMz#Gh`9!lRYv!*b(geO17&c8D`bWwnk=ij_&a8n_Nw70 zk1&eWjK68$xiT4?%ALnu^k2Pzb}2FI%st=5NRrYx0(ni&U}^`Q=OtJp2N+c8RGUBo z>#|ty+?Pb#)<2Ou;wbVckK&@vJ_yEgKEJovQiss{?n{eUaQpgCIAZ4dufelf`2d^m z)kBYt1J*q%l(VF7P0E2D(Ttw?4a?6y59#jU4ueqmm}0(tdmUB9HqZ9Rjo#3VPF;~n z?+J`()Y29TAV+~VLA|G#C2EgbPcEOxLN~btjI)3}pzANGHA7}XF>AhS(UU?l?9EyN ztPD#FKIJnOhK9KXtZ{`jh>rItHXV`vTC24C(pXJQ((y&p(dxQidj&>RN16SsOLglt zw<;o-;o7$;#}tk3s}MrNgRbf&et7%`3KvTvnV6 z3Fle=hjy!o992 z{`_-(lu!Kvyel{-st_#@{Xf|^Fn`G*5S&Q|m_W+qv}k{qsF^x^F36TH*8~K!E&}V! zmich7>u+(!(o8GsG0&qGT?Wx{KUfo}`EPGMi3a!|8Pm=!BU29h>g{C+mQPEuj?hg$ zn=&e#>$v{?2J`ucOpvTDUqP=!d-?9nbM8!9z?#yuf}JQUzdamff}=FxOQ4BOx*0gy zO~xBGUwFIx#;-&RK78#}kqy0Q8FL}jn){iaIzE0EVi+i)#((VME87AW+V5_$K@~$h z!!a%gpf_2Vo%VhG8XB$x80-d9F&NXnc=;hwgLl$En;dGp{#$1>YN<;Okb!N1D-T&L zRMVjEy3k^0pPV*1TTU5I&oazEj%nWUO)!9&2ebbfomwN+Uwgu8Lo|~@AA~3C; z4uf5KH(N#XkW*-Q;~Z3LW%NG~FyCBKYh>uw-ZDeFw6d~+c}I;V@Y5$~avjPm(pUan zJH_V@fC&Xm&8Pv$XWr(_J2QX5mcCgk>eUnw4hp)QOR!AU>%A|Ml}n!O!0vBVC`Nvkz%y3Ek^&Gb;W^ zMq)bh@>iY*1L|3F^F+S*W3+1?(lMbq2x2aqK`M|S<*{5$PJjVxru?Mrkb3C|FQ$bK z=o;QUFsED^Q&4)#cyo04@ZRwz-mKcnZ2m~^?dfSNU{I@ z>>b7Y1K@xUcoq@bhGst z{YO4}1)X_N$EdDdh=4du!!pYEx`Jhgf&qTgfOq+V89}=DAiII$N@#Y^g%ozabr-`} zv8qxKc`i3I7z2L?tj=N0v;|l9|L)OVE81r8ywDn%mfU`rw*r*1@Nq-G^ja1;?YU!V z#lhaA-cYj`6&)G_H+DyE|7)b$1TCPlww~9gcNnVv4q!kV(-x=%nLFrE0k7|)_aI#V zt@JWJxeJ2!CUpl@s9IIoTrnl-ub)-tGP-~i6-TMTwtv(@##p#xa|?&7X(=_27BzqX zE-^(!;RSlfeECI{NS{0rlGB#eAFmG$>rzMSVOE1JT>)XVontM|CA{ugJZE+I~eKi6SOh~iQ%WEftXsLNqK))J5uZfWj90^yU zYC`7ji5MBux?RvdlS^9(GY@~DBjav zP)HVwe_{5-A{v@R2XEv2!$)c2W^dkd+x~j(87oYt6o!wv+nAO9&|68R9z`#S$37!XvJQjNxD zlkJc2igffUOMv#!_S-IIXmjNkeh(&yI=Cl`JNgdrk~=`RBrynqB5B_LaS?q3n2kN) zT%0ZFTHuSGG2R@YyUF1UdQ+MF9$X8v|JF0X@fotxYh7PO9|HrEYZoU+?}=g(w)U0>-^6Piiu~G6zy#mT9zOI?wvS z!(e@)WIFeUg7FZ+VzS}$JL>b%xyc)Ps$-B*1oSZQ4M{g1YPj|&BzFgc=yl#NQbX;y zu9|DS{$^uflk`n!3PH@a{{OuFLCc%&WOSni?Q&8RX8Y&@`B<4Aa>k+ykck zYB~=2{X6&Y=0bBnwSDytnp)7M*H|A9g8)Wse_5GyV!Kk}SbMxC!IB)OX?;c!^Z4Rj zU<@SJ3@%#*7bIS{00h*Wc~^w@evJ00$lNXjMd7;Gt*R9i?h|?7yd$Pyg?%t9KCo7n z|4lIyT5gBI>bg2Zra8NYD+E+vMJPuo#};nNsBl+D7D4)0P~7OMy&{O-mv`KFF;5+| zyJmXbG@)Xvn>P$xcnyq}HZnZpK|D3fhF!SYhUU>3?gir-)P)yZccT-|>t<%|`|EAD zK>+OB99?Ibymszj+cH4~I@I*K4%Jcnny&WtfM|JfVmbz$nG7zFLSCiXWzi{}0ONH8 zSzBn8cOa?V1`?g1gC_80G13t#5-SmdtdOUeV1{S6mbszsOP!fy!ReDIyIH# zXny}4^cZur1WhmsGJ^!WV`g<3LL_LPb1s7sh~7i50qU_95;u&s!$&VZqJ1xevh$Hk zZ}vb>Q@DTxooF^e>nqaF;Ih^eTJm!vxId}fDdhd^*sk}fB`sm7jGGu&CD?Ffeyon# z9#+obb{V&P%+ttA(9$z>XL&JA2khhW1#Xjhb<&P9d3oc2 zHOHFJD>@+B)*e+a(dAJ*6_5eC^n9Fjghw|p780f7RXkoe2{B=(t5tCMVvL1=?sBOt z1s9aHFU5zg9Qz|xjI&SzJeP-BYP_hzx0@@4K%@!wf*1p45YXtqDer5MF2kND2JBKb zgF?E-+@ejqKwI56epiDQXkuRWgOsb8`kNqwI~btMsQu8DXmq~f2Qgi`DFd~tmK{IY<&Pi5r{G0 z+X_Y(^*a02q5-~o6Kut$S9&`Ck7wT!S$i-WbJ1h8ICu{Rcrw73re<0Tg0xS%>s<(R z4^KTmsB39@AV@zWI@-GplDkj7o}*8*{A7kIRI3=^;<*Kkf*8oaMaG7}E9=@zHOI#{ z84Zj}AZ6Vof^eF47f9XfN3TP+7CM@xD-cZ3JumH0x3rA>814H5q#w%b+;~c5R?P_G zUA%k%5>pf?>bDR2>~6Za+>Q=OABmWVa8wn+FCQ9Lkb1QO60lF2)dp!3b9v{2k>xUn zsR+n@pbIbQ`pRL5<)I1oyfK~-h@Dr0bh8ttnNFJ>b>O*-cYjb3NRUL^0N%VjtKj+9 zL?L`{>Y(KdIR1RwgQBzU<;ANGtaxVqh&f2K2mWuB>BcMCB0)OoYF|XJ-p-xYjia4* zfYrVjA!h+GX-Dzg|3)+LmMgE&BU`>6sg^qHw?u21ozRXo6Ic+ zgiS7@#|Y%rf;p$e)oyMU8d+n67-i!sC7+Fc#wYM%;$t8#Ax zv+mdIfZ{=b!`E-kMX^``lOV@QAL-EX0+08e?N+lz!NL&+;_bGJswu&o5!6o$(awF% zV4a{MWzSgdEx=~S#h=i6z|4@eo;(QHx3YB%&E-GjOFv1uM%h`E;NhSy5U*p4G3%d^ zQ1cFfGLWZ;bZEd48YfN^=}g`kk?qFE$3@~1!09_!0V-B^1al@W)$bv5@F@GmiGG$a zUahnbOpQSLmlH42VWA+PcdxYIN{aD?Ofvx{X=2fIRkuZ=sn{YHxYE_ZTuvXQY0;V! zy>C1vqVTx^X=DES^dll!b0|!oX!d5&j#IH^T`rSUrA1n;WA((DJI?;ZdVF!G_DbG* zOCs+dpaTF#*SUMaEU%P`+TZd@q;##tR{H0jLtB*;rP523g`eG{tg%%B&4OroPs<{L z4=~={3vWv${3~JwZm4v`Id6DqYqfiX)lQ`fX*1z$;GJ zkEE%973F}ZwBY;$Z?H23p;C#^KMSyggcn27#I@I`%ch|bH?s@+AZEt9wYb+{U z_v)1AQK)xsi$(8PgUU|~jnQSal5$;eFJz!7lI0WdW%SVml#|kabW{z@h@=_<*Hq|Dg?H?DMpiPhUgyOb+JV0aYPj#yo$Tc~-?yq#-Bg z!tEQ-D66gSgREmMxYgbtJ*G2YwE5o%x&bt*gG(Jai>Z#XUdH`C^{`Z8$5Us|T)$f; za5bYMn$biv&zb*#(P$C@Tr*Nk!wAG?&_RcT+83ciTmu~l8V3i;KwMp8us7t)8P`p8lY`_KD5!Cj0Cq-LQtu`w9xnG2kw*s;T_t8rO46$`~C-e zSk=^@-+PC6-*l^rbV$ZgKXAZmog*C001VfM8Xc z<7lqm?jA6&57-K_ZfLwzG(eoxC)C91B7~CShmXP$n-<_B6-xTJ){xtpdJ(q2Hqi4!n&1gUiqW#RLIKD z+RrU;=!F+$LZtq0LoX#%S;S z;3QQIATdR^_AnQDt)>t<$=GMGd2G7+&I)uuA!yXo4P5OdITWK8n_PC*EsZ z#oFm#@;o&uqbl1H&=Xia_W3UsLaVMkY57hx3=daDxEG_n@$M$$Yywne`M*CyhGT-- z$gtL9^o}h`163SDscxf7U7vmuMCg8yS0wcT2;N!2`DnOUI{Kr#!J@q#H#)K*0Dph$ zP4KBE^|S}M9Aq?gU3r;)Yi9-?1hHmrbaS(_1)oU-tt)6x-lz6y(J5Ezb0CCqA?Kbw zdi@c!G`98r8Ex^0sO|>K>i`3ovp%3*903Aq0;^T#&RqW!CowFnTb3qKvzJ#opb8Kz zP4fc_+!c8YkSt9c8u@1`gg})zGE|FZ4P?ss`cBdC;-9@C@~~=n6ASIWt9&Fd(tZv+ zPQd7ynfC*C1%->66Ody909d!9iNk7M(b!@aIvWgdk3+{Jrg(jTlX9s8&9hJd z%gkMX3*nYj9|Tqv#!yY zbXhlV1}J9`>4^8+lo#Wm$yS*OaW$A{19)VQh|!*LZS#DL)czwbI^pyb?<<~Jru}nS z^fz;r>@Hv3=5ka{RV`PLL7zHuF7!CBUU=~eV0LOHw z{emNVhQLZ6w5ierar|<8%_RJ9LoQ|;=5w*wY&GmTc@wx!-B%9t*YSDtv zfC{9i_7ZgHN~bmD%wcXcf)Z&AN47+`{5v}Nv`Q1m76a1h-PD!Jb^}e;a-)yU zY@WV{8E4M`XN0&%)#!s&A|+><)f#xSzK-TF?JF|qQ$Y!r%DdsRb6l(ZQ@(n2ehxCr z)9DAnF1`ZhqsoDS)mh!DCMmrMonFvEP&r7T9L=@K<|%4NeS!%4Sw)(Chrak#MJJ@` zQ+y7fE|13MEwU_YH!uw0W)v{DPQ42D@q^|J8D~f&t{(tj$P|q&-_pL2N;Fr#hxW=N z>A}+F-o)FX@^@Sh(9xlSbVZ#Vx{%7#uc+Wc?~50}rfB~y7KJz!jocb^#MGaCvPkc7 zLlW%TmbS&Bq>CcE^*JJZOZCDaZMt5ROdkl;0;Kct9~YPx%e(D!n)MkFCdNO1Xo=OV zi8tEKc-#a53x(MtG)E5f@-8N?{wkX{&oaU|)&4#~3-AQ4E?{E=iR^lU8I|wzJHxW+ z9hH9h^o3_DO|;tyjET(fn7n*D9p>cj5B~KZ!G?H3^^r_S07EScbp0n_Mvz)6qyXjO zFJD|`GH~4TYO^(1)9qyloHx-IG8YlSw4xJNnF7F)G~fpMk|EIwIv7zx1N*UfDxWtn zqk(ErI_nb+tS){GqV{yYKuQV z{X-5}Z$buLRgkPrp#R0|wnwDaBkW|<4k z)xP*gc@YZwoO?VlCryy{Ro@2bM6jG}fYc3biu%SMXo4L`)%!;Rcu2SOOLpse2-x(;_yF4Cy)uLqqC?(`xOt{pG0Y^g^1&f9g=J9clJ?ylB@me#v!M5W2&RK!%oVA^1}W1W zEQ}890s(7_(yBXh@d!mq za*F^ngQh{f|)ZeHGwJ7Ppxe3Z}+?zpAp5C;i}_1O_?qx7(E3@@xQ|kAoNZ0B^zDni_mG0uJ-! zMIertM|$eo+F5F;iOZ8WdqC8R6xwbO?;x^r`syF1KK?0#)P;4z7I|&j^A|6`ijsBi z2^nQRgo&vAj3q=mXGystd)s-cF>>yivISqXTZgpwtef#4S18MEd~S5-ZIBO_z5L`1*WaW=kUkb!BU$*D=q`pn1dbT94)b{?(r# z14oZbd+ndlUiyvU%Hz@pXC2HtXj)9wH4uvR&d?_>=rV+Z-e5)AmScSya11?YXUHwR z`erjPO^+ARraTD?Ng3#7)Nx6nr+%c5a2oH#eZ(4cJRIN7F3$%M_WIma-Y33Y-$nbU zKmKKie|*sSi86!5M_?XBd$0to#z*^Va7fBrMN8(1eM&n%>WIjeth!x-WhPRu%*%U=V8`0@XDlFkGyrWk-8qrwLL; zbcDjBX!1C;LXWNLEN-xhrs`uGt!C`KCLZD_i5g~~zR43OQk z0G<)d5ELx#wSz$KZ-`>Zd`N^3->~1@B_cS_s5xp=EuYtHYTA44ZN{|@UZ*>sF*KK$ zJP>FtHvj(UD^bv@A9%<|kQI zSEa*1_7kyL8HwlEPD~qz+Yc| zN`%d71~9P8u6ITi2}b5(99POEjxK@i_;e&RjuD&MF9|>_w<}PW=ti$2Y1bY;g!1-l zK(u%es1d|+UaftX9#5)6tcI@k6M01}iaMBxEYwz8qZ7x?V9t3SoOKykXHEB8PXXUu z1$JEf8?euh(V~N4l}R?Cs~{*_g+e^}oIY^=@qEZL^qB+AAo%Q!WhXkJCy05~7YwF- zvyFcmE7dxvb)IVgDnUxT@%oVHsu`z7)_BWDFb+o88G;ym@7)c?n+X94qIId8fy!fn z*m7x4J++&$$Y2u0bmsP(#gx;UAw^xE88jW@Trzd-?QJ$UOz%4Ndv)s!J;2mOzd3*M ztaSYyRy-P6^nk0cWQqVD#Gw7)xtMy#>0`An#RrTsa`F|l8|p?Ox|NBZL6uey=9J_o zn!?Zx2rBOQAeEAF?wwlRB4b2{DeRL6X%Ow#c>5q+`TfLaPnbgJ4IhSt_96*er!H`s zCkwGm{Q#QfNp6mXQO!%WFQ2QYycgTOH8 z^l!jArLS{!Z|ZfZ9O!8mpq;0-{HvkppeVslpGfnPP9&OW8kmVvEjqI_%trl%VVi$L z$td`_pB0OI>Mpc4pBF$cD>fW_O2#*(5pIvBMMORT6o+cR@hA%L0FZKtizxT%V12c9 z+QMY;2X%w?@(xr&Kyt5KP=;m1jh_BN(bOOW!5rhEQ5lrem|JO+41LZPu!IYC)K)0> zPNsTu=KJ?*Z=sfH)qc|h7221CqTik810J|k9rx+$+Fy{$ULnvngXTcYTSjX)18=FG z-Tp{B7J7g?%?{A75j5=kZ-#+0V}K*lbY@LJ@Mh2e>Lidj2Y_w*s_GgB|tJ-l#7coipngi8G*J-gI_9w*X)e7wcA(*qK3f-#4=#y(IQzppASI}>C`x9~rij8r(GBb;`Q> zyV;?{KbaUwt*&4!I%?U5wDMf^xWLC5PfzDe3HT?Q1pWRXm9&U1y`_S^1!7caBX~fX z_VyK~KkpjoNZ17Tps%-CuULl7VbZ#c=hAm;{biTmie%C#=R=w*lPS!3K{}cW5qWDs z6zE%a@zAn~epNbd+#8nfpTug^Zl_#+{hyQ|=K((q8sPbW0#GU46GQ)T$*QPA;vF%@ z$5m`YbmDzau`X$^?|L!A3PFG+QoDKeaX;l$$aKd#tA$b}7zWT0(1flLyd>99{=xUJ z-Nn!(0rgB$`A#zklMbb#2KU|A)xRLU-MVtGEnSt_%bE0?sdukVF4drY5N?b_VkJ(XhMeF0{cd>w^jjmo^1k1AE2e;%W( zdjQQR*dHgrG_%-N>}^r7vRZXFuBM29@m*lZ~nsXKjQLnbhL z{6VK40Ap|iqaYQ-kj#ft7#J*-0w#lCTh`c#E@zufxJyQv_+aqqquC5e;QT#c<+Wf- z*0?|~%~5-LV({KIf?YXUVeezmXnMGGt~ zas5EYacRMOH+3=0Yaa4}k57Qt(t|YZAv#|fki}uJ1q=v0eJ^iZhdQHjSS0kHJ_2Tv z2`m5S?gzrSn=~(|gdad>&JeOT8|e$FV9jR@4bMo2&AE8B$3`|ls$dGQYo8}~8ieQ# z(jGd{&Wr~n(`-Ax_k3|TV>AK;@a$!5kJvG4oj(3m604;kF(TG$zHD>yOFR3QVbfp+q4giv+Y8%wQmz*st8=9sr>Bs5c0nKQ{cG=tNi2FGUgm<;l`|a z`bo!szWliMcPJEx8FfZ|B(pgS^%$Y&F9&V_!X8uv8b_Bz;#jy&yW@Hzi+t7?6>+Mzof%=Fy5t zF*CRbM0csWpIC0)vPzi>MmhkXVND?GFgpL>S%WSFxcGDtX_BnTORp|Vmy14p`A6Cd zPN&{NNBdl`_AQn&;ea$Je}I;OEa>FMQ#dW1JTzP!P<-W0Wrh;;f|o=K9wrix@ExI< zBN(v$tf0q00>j62{LGDe6les zL4Qj|jl(Jz4;UF$^d_Kojtqu>ji^*<`QV<@C!k0fvivj+I+HR3{F};mR^ci}7D0PJ z%%q`Dem-^ibqKa#DEfW!`$7}%<_Kso7tBqi**fG5+K81D7y*5GKiG%QfDIf11KenY z%m2g(scBHRrOkYXVQ9517XmO70Ofl~evy$;juE>Y(;-icbT%e+Kv-hbsT8I?Se!a8 z-T|(CjJ(#6R_S4n9%~m%t%}cZ>VWB1uu<(zDw=hQ(bfL{DZ{p0`&(L9Tzh90^2ry# z;z7K5-ht(FpiV4Lw3Q%osTl&7s)Ae}VRC1K_E-m^wJ)9AJEqTxbBE}{@B?~uH6@x< zM~X5T6bxqGu9~eq^=Q9A0NoH%+o@RlXN$@hC;;tm5wsszKJgEER^0^tW8B3X1tyi( ztSYS%QdaZr6&0(v(_ zd;2gL4L6;r{0fz1#!*_F0u z0BUciVpS*5@d~UDMWgI;`n4N(%7N#eMr-vSI*T%pW?0jn22UcL}2F8O}S& zVd+@`1%iOx`@!hiavlvZ3)DYN zo`jYza|q2F#h0f*3T4{KGq2@am`b481p=5}wx~3PTFSNjrKS&F{V5mD*aK9dje>a7 zpK=46&~nvU{p~f;sG%KTqu!O7QK5bBJq?-Xy7~%OBxnchq~BA3c8Y(o_3uvO1%vtJdW2pkk%y>SIucGl1GaK*Zl4z1uuK-xn?2ru8}c#^5AfRbuPV z<7T}7c(&+;GjM@Px^!5bKvdv7l;s6~0P=lekjzZe;VC|PtZ@rj28B}vs?TAHb@8A? z)~ChdsY*1?+*aggYg~)tvuP)QvyLa$9#Gyv&&M82Jq1AmSRedAv?Z6e5XULNF-Klg z-gg)Q$!nXThd;dCZp*P7`bBFHvI+>a_nCGKN@qY22uf;!qrXq(+NfpP$G@a$06|oK$6;SR09onDHEt4)CHQl z`YUijj5OMR>$oDi_peX9CfW&})~B5J9t~muYkv?WX+NEq6@vaJkAtOhtpe&K#vwS; zF?Qkq`OEuV5+Kp+IgD`z#o(+9_hx2*=N3cL0mPLGdeQKju8z9OdsRew8ZX9nquB&; z6ErA71H6AHtG3GwBh+Ks@wf`DCaw!mXRPAs{?}7???uyF59SfZBxaqx@DjbRWBufd zZL~yuSdusI57?aoHtsJS@GX(NR1so=#e4QQx|Tyw(RPS(?0O)05vN<9Oz3=7&mgse zfWoX#-dS!gl#cLIKUrj8&`>~_YrA8wtH|KH?P-XH{a|f#$=Q}S+U{n&TT?O$Js^?+ zHTL-R%WFm>U#9ol9H zxt&Hm{b0hV?F7if^aJDg^8H{mXgFQ+^}S#^Y~OaWj}Bbo95;|dBCUHf?3C@(F~mp) zR31VqW!bbv6s>su39v7owAC+iwJf7NjgE6%DG;1fdGg5|2t}ZVNgt~Z(KmzahQNSo zt6@bUoS_RGSEhr=$OTS6Lv<_|&$0>vveOz>5?}Zu*H7POuQ6l&RIXE-31Vmg*1s9k z>|?bL2Pg}8FJtsGmDLdG=UK}?UbP>lFB;3vWei^Z>2R6zGSAn0C{Kk0V?m(os`qta zQI3>zTfsb#-(%Z{Y&kFiGK&E~gT{e2rK|mOCNzI}65p2rO%_+hTrz>$ zXlsDhaaGF|O@@P0p%YKKmED%k6#{wV((+EV)0j;iG^pi9sc+q6G_zcn)l{hm6K|{G z)+@@cKa9bk(55O^IujUk2cs)n$LX&u5YT4%gkE#VCc5g7`2ppE3XL!~eT?1hh#M1&Z((r(hS~_si>+lAeEzyI2@&*{= zw9hQMTI~&%wMl{X=xgsoAJxLTDP>h2L1Y?uDafw1(nVJkK=R?@0}ASr(J%y^IykPb zXI@N7D31*c*_~XKlLoaH*ADdgo_t!QGBhPasyx-Avzw-xlR*P_ZGdIMA)Yw{Sboh! zdb!fP|A-y)TSq=`ZbSPuTL^310HZd+X!)_Uk6%IqEIVwj$7)}S=(!%f#X3{k308dd z?c7=KIg?B}|6>M}p-6gBT%#=xNaxz!v^MJsQ;L)5S(<@*8U{#Fds%mDsETFL)6K~q z+OJ;qR6}OEeg0zG7@8pvAN&FLAa}2e&p>FG{w5lpFsGH~lb8Iy{Ha|tI?8S{bddJd zmNbqhNI>H-TaLA=1&LY(RVkxGt#~G$%LjNjXMWpNS9Sg=QE)o|{FWINbdV07T@a%D zII}eny1)PtFwg*A;_yem=8h}qj~RC9%V(_<7}c3-QtF_{G9-8;(zq%PAVq?X<$(b{ z>xmi6>T*y>wDt{{*$}xE0QBC5JkKsJMjrR3n$Fq9$jH~eZUh1gl%U)`E3nQ-WX5bT zh-Yq^HFzX_)^-rUN3VU`Q_(z!RDrOPg;Xor{%>I6-6=Yg9*tbDO5KOh43 zo6;tPqW$!H=|!ISpbtbl?VsCr8G|y+%h4kMW26W~s~Nes&=~^nQo9^S9(^RBLi^y2 zKC+h)Q4C`Bj0UO8&S-CIR{1d*kAY>-%@}0BgzS-lfPjE9MuLa-Wn(i5U;m(&JI1M3 zxWb8n2s=wb_Llh{Dw8l`x6Q^JmX|@JD882WwV1Z&c8OW?e+9 zQXdt8VIc@#uXcrGO?*-N2HG*wkG%J^OZX}T6~B#icxvN; zL7sFUJpfEdBV6gGBD>4ny`YL@m1io2$+!`X_dI<=Be6+LNC-(E{`5`Aj2oa}R&A8w zrYq0X1VGc+(IG>&d})mf1gefWo6uBvGih`%RJmHUB1n#^xCdoT2Kq4nLUX@-OD*I4 z_h*$6n8eDm+NgYbIg&q3N9-*!dk*o$$Acu6X zno_iOgS_!x5ZBD)Ew2Ita@-k;tpB6-?#JBUyPH>FNe7g%AgS=`VGv~Hbd=fr`cc(KkBl3v zzW=w!9#55d)pX0$ZWfybP-&2;?a_>j7>OowS^Mnl3Kty%^3Kcc@<{&Z@f>Dlq4EVp zhQE&DL=H+fSNol`6Tp7TE@QoNcVJT`q zI7`{r4}+-)gam|v0$kmdNqDjLa4;@ig`D;)&*&OKgI!=WCk-qZMdJfnbPNU`6Q%Gv z2Wd-K_yp6}-WK6+Cw}e_2XQpfF>#`F=+twfzV;4UgSWwqW`&HVZ3wB2w9A->1n?kF znjyjC7`Q1ktyM+jT;AWm_xsOZrUybmK*1U<1I#9^7KlVga-j??=l32IrSR~*Mb40T zY(I#BW&Zq^C1?Nx=*IKf7tBCnSmDh`-~x^U<+?(IlaCKwd2)x2;kh{scH`N4WBI<) ze#c}Q_3Y#M`b0(*Q*{@2^#pa_G{(a2^N(guv_i7__~Zj|O`kum@&qG&pomXSfL}ck zlz=87O0Cne7Cj&q#7L}6b80&I`v^$x0}RT^Dli~12aIZP{&Cf7i+7sYvRDD9BK0IW>Sj zlfso*(YmTuf4o|zfiH#WB7_4sepZ_6x#E}C7O$&$43qT`h=H@jj`n|VwBy@?6$)VA z>0i5vl#Yg5zR%eQcp1yzbP!#O7cI{W=$UD{Kqs)K(8G&pj9F9OS6)B!vppNZljw5s zy_GJdY-x4i(l4YH&f^8mlXPpF-rsfV8IgHf-U6_o{e^k*35cEpv&;hq2Aj;&ziw<6 z8GH~FXg9OlD{z8A&7=T~Mc3a#lQ^hqz%J+A=+fUhOd>J#06ahjuk2SQp9r*8%n#m` z2}UMgS}vH~R%CeEs%RPH@icw`V;N|W<}$AiXk(XNA7V{%yz$tjJ4FqiC|QJ}?7K6n0=8d=vz@6oW;97){JVV}=Sx$U4-MF8cX#qC8y50L=jLyosRj z+E{R&LZA#K9X`AWMuLt)u>3O_;vC35fZLfhl8+^CZL*Ru6Ouw$VrgxF>Axi+EdaD- zgY|NOyaSp*uuB^49kthA;+|9H!1AS|pi&n@`g1(dVg3n@@#HjJU(34hxyK=JZL3@) zP$Uib5s>!IY`P6trXlw5U_MoZcX)y4f$#(6`5D@;{whNhg+bd6vIB8Gi2>0(bbJVn zs=4Q%gUo4`cc3^qq63s>sM4h3s!ZJ)gU<;R8UyA4VouVbAN&?fKyM3tbqNAH3={$L zVOqq@TC}|9#zrtYqOp^YQ_L&h$o8=dWy{{l{4OGCV4@cDA^2C^7&uQk+|Y!_W%Wq@j%gRtdntE0QUjpn8Ss zj?i^ccST<>M79njb5&!$etz5`vyL`4s2oSnFyeIMHSHZFni-)H(EMTQjN2dec;|rc zJXjzvt`-MrDtMRYq0}!QhUfy)9!lw9bplAdHBYtv%&yk1F7$VE8`t5lec&RBi4LfX zO*%T2GueF%sZ2V+9>mIX`axGyL_LHw5McS7w5q|PoV0Hf0h}?K(`QXZbiJp*Drg&k z)d5(N<_On1tF9@kK54+ccrIIn^A9u8fc;E1fZ1uvKl4X43xl&`ZvGH5 zdb+_I^XFO2azVWyThI|H%Fza|ty6cPpX_PSr+E9(qd7gMRZ-DafHx=~#N;vXjy!`0 z*FtD+UZ9;N2uLmBym(Mj1QUpH49pGhZ%hpctc%Y}KK;0;I(NG#bV5w#8pp>M!JCSs zoj!OplxGlp@HATI*a`62y~Xp%-p92U*wJ;2*ynzbaRnIX8Ox>CM2Uxb$a%MxywI6t+oz-dSTi>8- zx2K{tcy)shfPleN?gu3)ep99O#SFuUu&5w3X=c`n=^*-0Sr$@3+^4@nBk(M(RDoA5 zis)&Ko~EM{gXX{hCMqza@=)D7G#!nNd(o7n(m+Wd)@Pt})iBhf zcEdteG_HXe>cDFZgRb8TR(K%W>R3*3wiF|^c&G$*3}RQk+fclJFQZd?ly@2xeXRBa z;*h=9i`|)+Rcr41dt}UL?t)NWAU!I#)XhLl6D@cZC_-6~WzrVB4STMu1VqnuEFVzI zOe^BOIr@x7qKPqYfD6>A^#13scekLk32GK4H?=_?#za$#&4!rJMlb20|E&1qvrIgI z0mFKv0-2hPpfox|Fme4(5qg>RH{);?gQXM_I`sw>6~D0HEn$Kl#GM(oN5c~(f%1j#{{H&c#nz>^hPVAxc-A6dC+Jq zwu9Wxo1-ZJ<1{OTBOPS~jmM>`0dxSvkzNtNXP6btDobE zqFV$Dx|GozMqg85bjVTZGwLJbBO@cUWsmO`_+fVzS-kI}u}=F8Kmsr19u|1zd1h6C zKNt|fvxU3IF)S)J!E)8Lwym^GDKjwvI0W*dA%PrF@X$xEqVX1uDO}nurlxrjY-n&u z`w|C+G^;gD1Vki&(bRpk7hq-pG6z)IbB3tqLK5UPGKItEs(E1@nXO)|jZGjPl*(t- zk4{9+)U5eJQsLRK1{pX=-?LtEJzk*H%3?dm5_{eGwK?N|O-2KIdLy;ZKLg$L-^ zD2I4(&RDvemQ87p0bY@rUL37Gyos`hm+c<`;|mB=~128!^k47`VOf) zK<6vg^;!F|T{J*3NTo&xM1Xpi&RxUO{3Mg|*L0EnCek%&M5L?%)8PD^5YwjO--*@&wH7L)03*X*npM9#U&e^HD8`V`HKwUFt zHxUgq1@bKbt65HkzvQV7PLFPnc(yEdocA3_ca|X5CKb&U)OQ8u36F-Zr`McwioE^Ek%#@ zccO%j093se5xkv+BG|>9S$Fm=QSW0sai&&=l7*IIN{0?;|3Vh%^|eK5{50s6!=|oT2B@G(nt^R5laBmz&q7YmQMcS5psK_rJ2&sK0GklNKdtmigpAI!)ZhNQs*KYiTT6l(G|2ZinY<0p21Y#{#}pK02yB{KNg06 z!o+oRyZ4{TW{NOq=-={uFo5%7T{9=p%^$pcbR-BZz(@qrxje!9zcECH*S7RZb2mLt zLR61>6IHV`A!wMLD@+o;F9AMym2>e3J0@L!-*xu0qG=+5_NPiex{a>-+s|G|GUo?f zdJr-fVZi+q(>0S`WhMb!x_ODa?_l%-!=P$VWHA`yjg`y6mBwNmoqPCbEQ`9uOj`qV z1}D|2?v5`y@N%AS1v*A{&|BPnNb8xqjbZOvebOE;4j1K7RyDxFaP-!}0#RFGeWv^$ zcfExE45wTO%8DfyFph2R5naQK96&wR8SQ{{4c_n{Z@+1D41rsfrGbTbpZwo1JZk9G z7pZAXyRH3DI9Ta-NZ{yavqfm9c| zjpoy-t?Jj1F%Dt(W8_q?Xc?L;cRZOyxP_gH5H+~lQ4!S-6&-vmTz1$8zYB8__1NJy zret>2XsK5~Af!^!gKsg|eBQrZ6qO@mjgZ2aSpb9T`VT}Nx%6~4q$Cg8ghpzrgSnnUtvlPS)96BJU;?E<+0 z>-!Q2;Om-nI&^<|yGMu)YpAUtb!XlPE;J7Wc%J|LdA)=hXKOyAf{_f&r_!(nXl~ln z0t(^k09TL~Lw3bM6s%u1p6wf$X&m;kpMEdDzOoF>f4_MDuhHn^bHPKMVA|i11{_WG zrbH$mz@-IW{GN2c&%X}FRMz8==#(x{P-bdHJKFrS_Xefsa>tdGl|HQT^B{mhz$MIo z_zrj`i%O5q%#m(p-3}-L1UN}UW7CIGAmtmh$NuSx1ouOutVb6g@*MCi+`XSO6u`7O zOa$=!@yHaW1pUg`Ytm`LVoJa5MNnX1ou0~a6O)E^x7*V1-4}K2aX}l7nfY|diQOyE zxio=GLywQH(HFl1mHJTC1R*g-Hc-!U+~+VGnDy!JXRqJUWZJCS#>nT)r{%2A?xaO2 zN(1gKQhK$afxs~K%H@>k2?I$CQA-(wf`_^hq=nkP$Gw8?1t zMJ$s>{W1q47Yih(fi3#+d_%J`&49i>umidiN>}baO(tqeC-7zhw0sHh#nY?=wkR5@ zwe>_Enp2TrfGg)}8i z(<2njlIr>OE8qN-JLN3&iz5hp(TT?>13>bVll99|^7l5`wr4UUfq@ zrjxmIRzp*CG5FyzPHHbMKh}co2R{PK){*K=Yq1;v!P)c#qZ9a0-N&|B7guu^RMkW8 z-nCywb<%K@rUsI8FF%aNY#Wk3I8QM+UNw7&0c-Ykc4jsLsVryytfTc65u#${ zQTI_onQ4VqsfLCc4>qH}HiuPcl9{u7E+HiAUKVuFH-E$i+ zi~^x?I;QC_Ku=*`_GkrPcQmIcTHLtYC`Rg$^AFi`4Sl9=JSd?LjK^h=FN1Qo!3=!%2N6#inmk6!wbzY4 zgm}A^=FsJ&dc1koDf;vl9z*93q*0K8Qb?Xhzy|D2X<*I(>Isv9?9h0uE3MrjI<-os z!;?7T4+89a?-s>TuGc{I!6C?Bs|!gg+jNn+{B-azcY2KbptsHL9+Oek>VNs@Md*xx z2z05Z>xrCWpXx9)I`5Kr2%pWC_aE_47b!3eIJ_6?x?1&N+|YjX1BemP(qAwyGC>WL z^gx`ei~x5RWfU4KNY^JOg~!$B7{JG=j*ioZ4C6NWbLZ|sTM)Gkz87a-sr~3-QLuGj2Sc0v^X`sx^jPK8SXzVruMX6jc}KDOI2|1`=>zTU}+`4A@!RZgK7D ztsV(-Ka6e*$Q~!M2{^Fw1i z&tZqzP6v4NWC6s1_Gz<0Oa^h5dVw2FOqO~Oz|!L_qCZu%`CixuH47>vfa8f(G12qLXOnK@f|u zcGQBog+^j>)9y63sRRt*5e4ZiEg9uT9|GS{dS&?!x*jZLq?MTtfETrb3H0ub{)NY; zi|jLJX6%IzI_@RGe}CX1(fX>(0|ug3Ik3VNX%7xEkEdD&^x|woOcXPN+<>iQ1M(y& z_`?Umb^7p-NuUUjz_&}*|w1 zZJg9zbf==n5OW045+h&yRF}L$^cWuRKck-Fn_Q6{MgMW}U*7KR%mgyP++%_;I_WXm zw~R3%VAnEPfv+&b~FTO}b26t+gkgQI<5Y9iyzy}U79IPG= zHE5be1wK!YshcqRLRbQQ@cAGZh zofOsi`{&bVHYRkn=eZYPG_$0i(A~Ki2s(0Z+%L-9aL!->#AzM_Egwt(kLqJ#SkM#T ztk|z^RyTixvs(HU(VL9o{?kE~#{x&tM6`{8*Smvlg8&9I z3CQpSivellvzbYabwERd>7}v~0O~nnA_}J$fy`(_$@v2rOFSIi$2~ClBSCbJ!mmx7A-gE@jYgHF(1cvp`xd(+#rnQZ73#engY>SI-( zQ70Q91H;k?56eT#`~zrwfMJ$n?q`qF2F^ap-~g%}hfE@Y>$1W_?Y_6mKEQfI%O->9 zYbTH(0F4LdE}(TuKr+h=klqhQ^Jht4&j+18^*ah}PQK+l|4?C>o}9XkAXGXW`Fc(X zV4fKm5Q*o`6cEjQP*mVv_FmDHq1B6yFcc8@x!*j$?u$Jm<3ZmtK`B^ZX zY3q&iqBQs+&T4_hCy|yY(UyT2YBO_BEROc9LT7q4m#_Ket{g`+0OJuT0rAz0=KvnN z5ww!A=i9vSWN1!#mgL2wWliQ`H+R33fy{td1?7U)SYa5CK(HHF6i62|3+vd~`xM;yk zdtJfP)u%C&bAk^#86bvq4!4YLSOy1ne-9f)yF?UnBTg|11Y`tD3%*!0(Y@gAApONH z_o22p8pb4w40Si0;uAqSZi*R|e&b*{X4wKf&AR&DGo}iCCTd_10b5L5z*U<@dT}uc ztg1kLdt`CzjaR>T=OB+24I0m82@&vQVSvHFuq-|?MqBUZ0&5fyNkf-`V(Hibb-JSu znKAYlMMuEw)vFQ3rRVz~eDYK=_sz7NAMua&?dps=^W=@!WE1d6L)vjPLUg$TB;+ykKolvZZC^lXcsyGm3j9d&pFyJ!Pl`DN1we=@5}XVWmA zy0Xb!_W>EmG$aVNsN`(tQxN>xDw-G`8aQ_g7_EKf7p!!E zx{F%$37)XLk9aTvf<_(Gjn&7l{@gTRjr5~Izqkv`wB$S#-VZ@=h|vVBO0zE!ty3n` zWy`s+kqcMJ%=0N1?eFuyAN;X%(1L%Kd&Us6-0O=Uf^(Ysv`#CW1ogFmaeAy60IgmD z;tJ`#+CzM~ft89VDovI&pZPvWll#kzF$fbNZs5eo6jY)4>Zff+|Fb(bw$aIDg}(Fx zqkKCi*2BvfU-ULao<%l5t)TH0Q8Pk0?{v@x{T~YADQNd1wh{BYkD?2F@gfu6JPF1< z01RNkCK?^AGqeD(`pugnfM1}D0&B-4=!_xKPebHKkYTGibuhVA;*I&S#8pYy7l{5kqy}Ax578m#+6;is6hrk1^PR)TAKC z*a=sL12v4o);iXvltW+uL!J};>}9Y85WsxVbB0tz3mC{N&(el;%$Vp9wKk7>1cxur zeXD^CB_;=;ZrvziESe!bV{dN4d0qXH4F2V}&s0I`V1NNbH(m$#14Wdi(&k|x;PTVe z>M1WAao_}4H0J)_H}7~3?H1_#cSqO%^Z8%C`#j_;PpKRG*&vo@amRyR2~B7=K!7i3 z8Fb;d6BqBGyN?xs0ezsc_BC)0*VTa~FlpoBz+!t`kE59@9tRIz0s|7O!5I1i?w}mx zKu?i4OW?y7!RXb@L0XNG3Gi&g*#WdpB8VlGOEkdg(PxSDq568La)F+~l?pZ9XgQfV z?vM335abV9J~I8;uR1ssl^U9T;gy|Mh_r@aNSZ<&Eb3||JyE*KfYrOd>HvCI7@z^E zJY1~|W}!)CQSp>M4byjcFob(#_Dz7c1ND0m$XX@R3fJA$1C|Ub7NzhLdpm|)7qn&e z_vgaCg(UPdKp#Im3?8(512OLbePmj)aI?f7)D4XLaJ|TKE(nN_hK{DSwRHj@R??RS zhR;84iP{`NpL0*M^@5-K4p9MmH;_1Www z6mu+=wB$lb^0^1lPJza!OmlQ3&rLhIW7YyjqWWz-T4xYYl49kGY|Cb@MDGz2^B`xC zBcKnzuiwl}cyQxj26uMRsS~u%Gzds3Yy0Ld5raCV<*XUqH4b3$6=qYb4oq|xKmZLy zbN8DU^3vND#~>!gF$fQWSP{84!Ifv@{dru*R);$|gP$G)XcJ%^#O&~`*CEiIhTaUw z0!mno2M03f1He4hO0(5TFO|W*Txq>=TT^x$*SiVwm9fu$R;!+iwSq3ER~fi01GRZv z(}{hFS06_k?4{Sm09oz>yGCCEmC}H>ae~_T35~PpWOCV~>KSbbkV-)@vHNEyyJuns zvUgoTHvs!Vt~AUM)&?Gi_GgF#$Gi^E-g?fEBI5I91e`|#axVSKP>DdF2Z?B=0Z(*+ zt)1G6V>to}qyhi>r-mqkADRdeo6wwl)sK@04ui^RTP}3x?6W#=nPWiMdyj!rr&q

A|SVR~PhIw3~)fpaQJNIL3;>1#w<^AVHKg7S^gD+KtK2NC&JS zT94I>Ny$@eoVq9?if&^RIf4L>>O)@M1L_wY%HDdVT(!GwA)IpnPSt?fR34cR^#(Cw zIkOoZjSzw9)u5e|XroyV?PduJXpf=I^~50ooT-66#xijJ=}d5|`jG3{nB9S9rJ0jK!^{i4WXU;2%q0(5S*fBrVwZYSrR^=$|q;b2>2 znVu7{FomUj*&&Oh@`tucJ-20q-wfrf&hR8@T?owBR(!y!3)b7~L1&36^dknt!|f zPU-MSE;=zFHWV{`9mh)OX&nNt5O=S@fe2JdqbKss!%e|706>3EnR=yjcx-J6Qa|W` zXoNGU-BP$|eIFRR+ui1NG|Ii{-b^xJnHBt>QAWFkM`jMl&_ock#j?{4?!%ojAOQ6> zD8pO{q6;h6nT2jqH#atI8plP?CubadAC0+^z$EwB!nJ6dE{1O7EQbm&mrMv2ZQXU7;Ny7>2=$nT4&68ks zC#&5z&oCXBgp(k~Q#?q(siltSr7%Jmxq5235C<~B45*5be&KtrhK8la4HV`*T=mgy zbpe(-OPmZ2F)j+}Qawcz%Z#9qj%8s3j)A^>D;vD@6kX}V8r8%70yHSVR0?pd20sK! z1AXzs!&`rO?N6~$Tu#Ku?A2S)3b=ki=X_MUF<=OZ{bmnzSlgnDmKN8}{TdRB12Evt zLz|cettP+d$-lq-9f&~;j8#w$NYE)wELU%t{qlEVa}a1~LEhJ|>jk!oBE%T#I6^}o z2RVq2Gfq!TVcOFU=Gc;PH}6Ot7BxKdp;509^`#-?BWZ)l@j9HfnbIPlp8&o4b1=Hh zdp#2Tyt4i5P_ZZ1YJh12=+v7ro5vzKBfcFOW>}HT-Syxp+L;jd;`}3y$tQ=n*c`5U zgYjwO96r!)D2D6}5)7d^0b=+ayL^9GDxC(n(1s}@PoZJ#2`JGVz<@Lc4`LoM9q}V678^Q+6v6{gwN}@>mr9{L|;#+Ji$}ogg2TA#i&#it68s1nPE(Oy>>`9IS74*oS=;^N;JAtkZ5*S(J<%?M0y*d z*D%DI>_}G2{}K5Xy$6gAWPz=?jCs_crJejifCpVp|C-CxQ?DVhw5Xf(aZ?~jnvrk* zz^E*v`OA4s?I1{Xpg@n~tb7JqO{_xc4Wejd4ZHp_STCrH`7bc*$O%Ei<`I-P@IJxb$|cO9)?k3}m$j zLmRqB59yuqtxjvV->3&#PY@6jpZ1TR-61mg7r#}{)U{QJrh4}(!#?!s9N@|?Kl*i8 zMiQh2x^?$`EyO5YzK%JKp$B~N+X;G|R%AZ!1@*wEck85-Zik<=OK3v5Kpks7qdXo1 zUZBpzg{$a%dY5RpzhgR*=5=!$Si z&yzs|Ftl~?7DdGu`dB<`ABz9--Wbsbu)3(9bNW*<{o}r0$-qf81zgyK^uZnaJHW>$ zx%e?%DQNPjEOkq|xoeNp8{B?LmHQKr048#@h{C7X(^k@wPRmm}>f8e*>yH6FN>fja zi`H_47GQkZcJ!JZ2W3bX(y)@GxGrdllbf8l1(R=EwmADEX{)3$_!8509;Em9{;e|w z=*@y$TN%gyj5EItwKC)w_jFfiFc@vDZtSryaX*X1*fQAu=v6bC62_GvMmv$A@?|u{mw_$zfsufVkAu-Xg6^;1g0R&sy}GS?-4zGoB7qQ)Nkj(tq`y4`yXd%T9?U>thrL|Wb7c&Y0Am;ecl+0S z{@BR31c!}*b3flnmyQ>j(F627U`lY|v2C3@U7Vo0UXup}xNcffQ8Wbk6nXJwFKugU z2ZzEKyTF&P(ZF^Ka9Nz-ve$mj1n8i%TX+8n){}qz_vqJ0GSC+3L%85<7P zXy0KXx(iV;e|`2o2(;l|xH5>!=#pA9-Im1g0`#fkc$J<5cgI-+%YVD~7T40#KZD4i z0Tw)Ra%csBM$sn>QFu!u+`;Iu3|+pHeV!hH&+cM89g|Kmng|Af;FH_Y2DwQ`Pf$Aa zMhj?roq-|PmPY+N7~%>@U7e4%qJsW7o(#staL?HO4=`Ns#wM%(Ad-kbxD5N2Hv2w;i}mYcaoUg9tOtn7y}i81U!6& zkH|Hddddln3((Aq7X01E4ABs1JPRo5+K<35-3F$fi!j?$4bgkCRBSp~T!Tb(kt{`UI!WW@J4iei6z`(yNnkM|h^5O@SH{U%TJ+C0)>2zQ9c7z1eRE#_@VKVKWvVK&v? zWR`Su8uWsItbN=D#7*>OON_pMMjcO~+4Q*J{3Ce~I*x*cgSaDLJiuXsD_=Kv@+<&2 z@I=Sjn8xbOu(G;d`$Z{Q;KrM);1$ww(E%2TuJg3$z|Xx(g|%{B-I0!OAKLW_3Lw|9 z3haOcG4W{W*w%hsUPXVHVaf;^;av9OZ3mttZQG1}7v5LGFYdug%J1M|A)S-Vw+g>)INdQ_}aOKx%6WgMX=$JX+ zHs-$0nH^7HFfFkZ83-Ld`^?3k8C{MKNv{bFPXPkXgHe7WKOcOwOSIseJqPA#N4f@x zZSzes)i@Mosh_zeLQ|cl^NZ_T(`LJNhtyP6RiW1rI{nGZ(J6E$V9Hyi`NP+xEBwYI zXz7b43y-`uo8)}%XQtN4L94cUxK1hcM&_Kl>L+bLUYjM&BpR-B_jacc)Bk+uA7zlX z3Ut2w<|luE@Cm1}!6Y9B4UD$YZS7Ml#b{_A8)z?Bvl)bpWZ%65I$$l@(-=yZ;YKu* zf4}qRH~vV|(rN1Yg-;(U;t_#4Y5LJbfv&$3)K^_8Iu|sxOt7KrKNOAduO3G`St6ZL zV}x!Sr{%)5tuvkDa+$qclnO|Ok+b?w?kVrWusqsVpx;!SIv%eV;0k@bJ_1D$i&LRzXq#>1PciW?t zLCNu`?g}2|n9c-!MEQrp8V2grhXM$f?q1&NZihhMb17WiUQ(CXK*#AZ()&TIO+XHf z2Q=A@VSSh7Mf>;Sqo>em(6j3}_aJ)O{LS8wH$nR+z<^#*N*);J0qEs&@iUj66CL^6 z_cCgLY-x0<8$04Mdt8SG2Ab7fsu}Xy0QnUIhtX?H)Kd+VSJN}V7|6=R+ft8zDTCz2 za}7{`?Frh8;Rg(W?2hQELbot7E`L%+L%8!V)YX(NE>4gGK+&Ke5b)(|$+{RwAH1lJ zwia;5dgs04|M9c$p_^bz^-4m^NCj-5%-zqx<*erUQ|ZN{MZvT z_)00`>$6+<2f+%`aSI8sja>WjZUHu})&`~ZvPjHDl>GIXpF!X;4fKh$V<<%MSm@6e z>7#p$A#J(Oe%*=RFha{(#w8MO-%s-npNa(!&_r4A=n>pyQFdx0@cF+?#q(uZQq%`ZuO3c zZrq-h;XeD~EusPEYaF;>s^|{O2p9w8D3=ZdSQA~EH+fvvNWi7WOMNL`eBt#L9e(Z1 zM)eUDEjP^^1jDCX=96G-&THRi&*?MCpra|L(-`W5WaG)lfTcXdkVW|H=~)&WfsVTr z^y>2`b$M?`Z@1(Y9W}OvP|#Gx;?0oS3kH`!T}MkJ2;y}vnb1u#XD5-xL+OLf4-Z?RQH>?@_-DtNdwMO4sg%qVIqU`Af}CC@KhZ!TXcSSwiR4(@sHBp zv?LmnHeX)^i_)frXwl2efjsOrrhCikYbL0G@`CgQG=IM3KIwxW(Fvosh9)QO-(R_f z*3q?9`&3?$?ZC+$QNQ4DRgZ(S>a$o8m#gmeH4`G+f@c~Mgki>;$6gKOFYgq^m?`mK z6hxan@X=H6OWPA|TrR-CQ@4lYDboPWYQUZxZhVVWv>&WcM)A2R)+Hl}!P%I?s7zy$ z_m)zc1+&-7X7zsyHI*;b&G7=fmO1K^{q*0m1rvJ~`A>6tsB z6H6~dCz+T`$Gm9~PQD%l1om=q!63FQweuwmS9cK5*l+z`Z#{lcIs>a{*DT9s=VAyn zVx0^yg0dYJcmUwcuiK?|L9U>=4RH4WU1`8_N<;=OU^5079{LS~uFkfCGWE5x<6uS0 zvbsnsZ7K^}(Utbd(5C@oKYiWiF8u8+;h#Rif@+TmbQto0_8T7Gmv&y)C|A~lHF~ka zO*R5Q_SsKpjO{-4ACg>%L!kVc(Tk54b5oXpj;)DpG!5)~x|MO3+J!pG#@u6AXiqYq zd1f3w!%TPAN2yl7r-A~|)$w4hgPtdJL0nPyU*EZ#M`ng3)LnamGXdxjfeu{;h=C)J z?7?TKA;cVc@AboIKX`M7r2$CfY?xEkpxyuX>m1vz<(bF;V|={(^WPc@eQd{r+Buvs zCt?jx*KX$W>&)sMJRJ!zr*zV;T>p6$jiw%aQP2RX_ox>*z*4OD4k-$BXwxqf4JXtG z;;avzc@=y%2n?7=a~Hv1nq&qX9igYfIjU!i^kyuzKu!noTnaE)uD=Afd!degiHxQ% zaZevU)I5UZr+akyTEHR=%Psfgs>=q%tceU= zVr3I>Cyv%jci+M%xAJ{4CmoB^|GN($v>xhKJKoZ!ec zdp0O9bT#6m-`!-xtwiVnbq6i9ZPEq5Of|612cBdKwW|snQe`07?hpFd^;^{H zB%8UR=>$bc*XlAYg3gB8JqaCz5s%#V;4}9_p!t9uP=E^Ki$sMm@i5kzx)7%Igmg-ldwJ3@xr71m5eq|V?>0{Us|Mv)q@MneUQdPALrse z3CUi7ZQ5Eq7El247I6^`R|-VaVPhZ2|3RsZJB6FsAnVbc@b3U2aM2V;d{VA2?XyDBLa zj0j*(hme0MIy$yTPCq4s!s)`9#&$Y|f$c`aH{~Cx(-j~(opBW1SqHusG^1Y7_#otA zkUr?-#fQ~*eYy&;VpxjV`RkoeTjs(b0NbF62$8oKK7x~NNhYQ}YrSJInBHd%L>5R~ zD+3Nxf_DF9@Y%0vMSvcl9lStOAYW!>ADu8oM*-a8vnMR-GaUUmB5Lp$y&4^z&@eX` zOu)D6WxS3e83j*00OqK^_z~Uvw^%~x7J%DMx`Q18ouIL_!@2Ap^*fC(ei>50N%zz= zGM!lVJCeaXX;y$vrXSL`g7lk+*kW|oX%hACC$#m|>ENe83>Vr>{eTNCHwDf-dgYf+ z$t?k%)97%!u`IB!-vk3JJdLHrO9wnLU9F};6psJr#XsDm9uMD3ORC6YrmtxyYpc;Y z60-jf2Y5e#lhaL5}1?~UV-HQS6s^PkU zV`wOW^aL6rzI=7JY(dMj(c-uBiZf?fqMi1_vir$#_lqhXl;#HNbZAMhn7*_zK!FMQ zkmX#-pc3${(4e~Rm5~R;)H>wOfBhE2jQ$0dL8~AJ2a{Pa-^j_PfL1%&Ev!tHJR$!x zilK61GG=7Upv!h2gc#|JP-Zb>^aClKd_&MhdjnDFLqllXL(Hl$c@{AUIG>8hGmkcg z=@XvaYL0)t?H5fa)3{GT(wWyF6#2)x2N*gCIk84>&5*neX|J%cw-f)5H-3wL3adGw z&8WUW+0=b?(UJ^<-`s=3#%KaEn7lUn)us(Eda5_=3p(Lqb%sW})`PJfyN|h*l)kWK zUj!8K9(~j50znHcIce@~^!l$KyyWT|v32@UD6V{`vWk20U)J#n+1Y2IhCXJQT>%-` zpUj+P@^7E`>@75O`#=Jiz3%Nkgo2Z>?-CuJ$-V_n*tYv^8nYItHMU{e394F6o9b&V z^=%h)nVi-ZC~YjPM}0xiWp-}SX1~grl^r_(4z%X*1SrUvHpB~izQ+g?Etku91-zSF zz~dL})soXvqD~F9iP!1BXI2mxUmQ14K zHro|-)4XPkEm*3YJB@A;B<3Q8s&EX{la1<=i0&-vfbO8(4X z{%fG-gi8iQ#~KFS?whqSb@@gkgTYi}i9nP0_c!iD^OtvC1rOutQ82B;m`hA@pzSZ- z3N}J>$;Lg}TTlS0ApI`VTX$t(FX#06&Zkn8j2KHc_ibSJZsno~`|^2z)42NH3JO}t zZp(ntbzMBTK!a!ryCdj)!2xv{Vh0bI%(KguF;a3JUzn4whR_uQ-67L1(Tx4V(a zN!IZc*@~tB{OPhIo0ffOER|osEL!&XdQXPCzyS^Yoskvisva^wh>m0W^74#~pC}C! z;k_TC?F{rY`32Foo}P3j-y@cM!bu8t&rHm7PN=^aZ1>+-uGzAY!PUcY3#!oX$ug88 zB%pDoO}PWWa{e(9z_~PF!cdq*GVSmH8@-qRc;og?NMp+^h=391l%p;3e}uD7_}NDx zX)n<{H~x4MoaufL1WYmY+(ov>`GIksZ%aTt?mzzY0(b=IpP~27FazTEZqUWF0@(O$ zg6(tD%UOwz?e>O(cGjs6sR;zo2HtDm{O~y1PY9z}-omhs>Pe|A;PV87Y$%8brM_D3%RB`GK^Ys$0e9w@D9tf+5aI3Aizy zfdsvH#skCBL(~!f`PBCl-hELILRTPqt}*Y6r*kJcVrJfQxn>8w4hHu)XqLw=@IBt& zj21`<=yv2wSL&qCXaNSo9Q6?jJj>8O_mJqh3)VCs^ZoDWLKFSBH-0QS;pg5$d-_>0 znlwz5BWR*}^khW^POkzMy>{vCH!YiZtriV2p#IeWp-skg;Gn}YHiKVoquEQ<#=k#o z`P~?!>3{;dD>Xqn>RYOC$dSFG7rJ^ftPUm*>C;`4jceweDXS% zUQwM`C`v1uJP~<*PD=FzzjUW){)cyIGQf?v$mO*`@Z+Gkd9Y(+U;-Xxg0pH2UEBTN z!scNcQ{0nRoV??&P8XMidVKa1k_Z z0>1y!k;sD_yYT2unW=siT8aU_R6RpYpZLl$YEv0ef(Cja!iY-q; zJpI#H*AtnxfiJYNboD8|_8kmba~VYd(>zf`Z;vo9NIsuEA$=}BM%{f#`dsIP&P&b^ zP+uA-rUJJ&yo8ejvOwdY>u-;eN&rt{LYo~nxQ;E(;$UUGrP|yI)InhlyuorAU z^OsXQ6iHL6wvAfbwz|s=9Rzb`+{BEb@D*uXzpQ+TyA|}a+*i}99*lK{)o?qQddtxS zf$1yYmjCCs58PuYAlPl%>~FDq#Ms29zLIeAI_0oikZCvr+tm;mk#*}aJtyn|KA^)J zBkGRy*M8k?cJ6fg>VD&uB6RWmGz#J@k7l0&XRtPPs5@#xs>>hjRF6`#F9TXZupzzs zMg-)%uioB9^Zxx|Tz3H{I=ph>-n4^VkN{7o&mR>D{QM(4&=%(|NNuk$WY$C{5WSn( z3Z~yxKmt-hNg$>VP^?`J(Ug(?{!@`UCI=Yj0kRFaB{!n=IA6lh1aj-7RhNkmwAgpT zW2vtaLLkt-bc+R)AKB!+BtL~f@BD3Gbb0tDGYeo4Fy#OSS$Zv42Pi5X?4RMsk7Ueu zyW925p<6#$s$Z2hxws-PKAt)-6>AMmF)d2}%-G~WgBld zES%PRFSybc4&h*XL6-pYAV$m@C~}eY?8-0l*J4*^f@Zho(|Yt$8H)!%K#Mfs7rxWk z`_*qD>FjE{L_!HBfzYtLS;4#UQ>V`XAxv!wK4lFF$nV zG4;6WEP4Sr{Qy`Rh^HOKo_AhuF`927V64p^&KSG)ihH4siM?BPA4PA6!Sv0`qF>%S zEONA=8vpuXJeqz?`d7c-)!$THDxG08wi0H+#dky_e2D{qMH(B!?WXc2dhq(7I&hOO z7~>^?)?>`=mJSo-MiY&k=g1ts`qM0MpdgBl;HJRmG!GE!W4WnZO^8~!p0i%Z-VsC2 zgEVRM+92(@q(`3vX#GymZWfHHFSWMx>GsM)7}7BT$sSHY=ov828e%*o%leL<96Br< zK)r+2K`&Jl;7m6`SqG=tFffscX6EQezc5C05LLACBo@U{8H(5IZs9U~Sgly)JY`UL z|Bj0*Bwf_@ju^7FpT{j^@dB>C)CZ1VxPdQ$&ish0tjXV?YiuCk##><9cB987i@veg zJ^RMnkZDWc=&55O_-Z>#uf~3E5JeN3BA!<^a*lb4%HZ*xEF&~v%Qo1$gE2x&(!@MF z7Nv_igOg<@sB4faA+S>L=sXb|00~_3iuewWCl&hMfIhkLaLismV_?~kAlQbZa?m7x z`6RtpD?^oDDH)L5d?WbQ%ZqLr1o?mf+nyxWODt{5ca%YT4G5OT;LIDkpr;s&>j0{y z!IPRGrkiupI++_7t5nnnQG0wGMf3p zE41Zy$of#F`Cs07F`^Ycn%a9gZ0zfMWTTbUE)l@fTMlvOKmmv@)vMbtT5!AH2Re_V ze^Ol|dHEJ&gTsadVWWu?&!Qx%?y9WZT$M z1d}v0Z#1YsSNa=hbU+M3VC*C01 z+CVxaA1jzG)6skVc(Ka%Y4pRgkJ3ooGq5cU(}1f0ETD2w7$}Nl17m1a-xOb5L7_HE z0OKPCL?RKz0UkMkj%+sY+Za3%>YP8lrF=O(Cl8M z3Xyi=M(VPH8VCX&wbis+uGScd>Q2P^T*KOyDqDivIHy7Bp8lQ}-yG(5SxZC#PDMtn zOM{_+Fb-nYFY&~&rM`%0q+J(425cf#XBRT37RH;K7_@@oO+&Oxjc4D`GmOG0!wq2J zps3z&i3&XN+}r9OQSlbL7cW1Za!fYJXQT~*Xgr!skjIRj1nIMRyt*2qAZy3iVq2sy zUz0X=bcxO@N^0X;PT#I>$9nD;v`xp!#x|~&9xyP94|?cyGjh~_XUhliu#=lA3Nr&x z-?*Xm0@)3K&XH9xfaWG~dmWE8ZjgcfpxGEO-LLl4`A<`&r-Jz>g8_P9iCjcP$od8| zneGIbIY1|fFZ<@Z(ih&=Z4!a?K;0*Fw-o28hmh6=8e22e08WL$%p(E$AetWAhsOxvmtYBccmcSLFM@>(7@!yyjb0c2Wa^Z|7s z7Z7a(I1kRTR5zTt=K$AT4027bqk9$)9?q-dv28qW0Ic3E_UWM)I>n6L?^IpjM{^W` zxXj)J{~->zg9L+9XkFFS--ZqXZR=|&I8A_4_!f$3IG_*ox0l}pSC3}oWu4^+LY+-v+G?!jI|5QMa2RgLz!oS~n`}C>6$U+saRSSg-{w#U~ z`0_Q{t+*b{44UY)r#-qr2q+EYSD`)2VAU^%#DJO#(DnVJThLnu8R&<^({O#bp}O&A z+nE=$r8^bK{2ZuEkS>jU6f}3^L2!nTfUagh0W{}PZs)1)l14{nf`Bu3X4RxtG|bU6 zg6Yp+7=mCX}ENcWzz5AQzSqq7HauN+V!NPAJnCUp_WlkTQBT0OzA${tZ(coZ%75bUqs8s(p2 zfdO2lq45k19D&FP88B2aB27rct&hxocB?Tg0>fa*(DhA2wE4}knPsKns`}=qtY?1# z;o!8km&YJ_PRU?)6Q!!}7R$3oprw<>xg=m|ia|q-HbBS}lV$gd__3Ydn9P5B_%^5n zoXq9N=W?3svzrSIEfZRxF4sB1j5M&Gxuou%I15d+ev4uZYIib<6ZP~9tLA6W-Tn4Z zHXSHtgaaGW{Kt2mT;vLY1shljsQ-9`XwtjXJ%MTAl{TIGki+PC+bZ3#S?J-tg|<^W znlTQ1{*JWZCEH*{(q(GsCEDM+(UQd%e^)D;oTv&rLC4F59Ogrb4Wb8cvxgSF91KbT zMTLO@@7~&^bC`4S;$Z=u7=B;=LAjrD|~r~$2lfNr}VI2XS1CVPMKm~1E9 zNt)n{(hORVsgl3Qk24M&p}E%@Ol@cy^colT#do0_y>z0OmIT&Y`a}RPulHidqg|av zPC7BB=yD)heH~VlC_V5?FNl~BgqE)3VK%gDi>J^z2-=HcbTUCJqO@{-%OI9T2hlOT zwb?#->eENYrv9RCeFQCM>lsW7Zin-%PzDO>p5%EXj(Lzc)3|X0t&RBvjK23fxy>`= zL-9l4EPs39HjbW-|Hx~vETH$*8;#((JikUU+Yf+%ipKdHuhQopj3S@~G?C=az0z$R zJ78m=nnLw6$R3D5gf!gcO5>6PZ3Lu))_DY)$KRhNK)4ht2%gMMKYc8}pA(7)@qi2op8gqVQ6O$3u%Y47NRiBpYrhAh5f?!~CKor$ zY}S4&hFH7P0j|EU_Jpw0>IQ!KDX^qTumO;6IAA~!5!&)^^F}`pdViZh{WXrj%(^)>Giu8Roat>5d_3@m$Zw32`h+2 z!}uG`r)Pko0BOOwNS1)i2zNtgp#ty%O+`0{qL~$qaIQRvFN{h6=W3gBzDMPyC@Od6*ut_tvLDk|m4%D{Yao2j1%11t=l{FHETZ%`u$ z$Oh%jE&cmDw=gb&ZV*?WCS7puT!&7pD7BlV<4S9{el5RUez6(|P{#_l~HmZECa= zvIDuMlOUj+aSUW#e72!@Dk^i-J(s~jtFbcw<-vQ0xpYQ-pH=4wWFQb!A5C`y6Xq50 zd`=yx=yEMj9S(sM$y4(Sv(_j4_?Th=MxcKN1rpR&t14wWj4Lu>ChXKF-%o#NMKzW6w7A6dX zA6SWJ*flWb!wUZT>>KTCNh6TW$zXmU8p=)Y1tO5CL%xIs6S(};k+Nd6p~t|w`C_he zcFv8z?(?a@-SMhVDa|B;M;dG6Nv0>}oOAhm<)M8mg#f)@Q&q4cxopx_!vgE9!7 z2dd$2xrZfA7U&B~O+r%vQUa5vx-*rh1;GmIE|-y=%>vKY3M^Ds8(l--5dg-Aj%-M@ zO3*A=L%hp1^|_|jA>-0Rg*`WIWkC<%#!<(#=^*nUE8|>U;sG##7B_=k zq;WoL@x={jnm_*)I0IGCk;=g3TdHU5To7K=Tv-p1TQe9=x{AIqFI|MQZV?le-ht7fBN9RD^F$Njs zd)`apr{WAvA1gh^FcO%g(cV1C)irEpv2*~OhK(@=#H(LHip=0JU`f{IUsz`Ra!+kr zGP;B&vwex)-|xR~$W>hrtz#||%8r9z>w!ML)rAdCPHwCS!0xSu7{Y=WG@QJ*j%e-| z=**hUKS8F z0yIM2Xh_~%I0SViYbJv#JM73(TnN_$;FpPE*^@quT6G(6y>NDA10Gs^Z6sZA`aFO9 z+)pA3Pc8I`wuohlK6V6UxrXpGDA*rc#W>062h-+Z`lofS%Q*N6hMj=B5tO3ghCvJ~ z9#Idmn}5vYT(QNy4fnkJTQnspG!o!kwx6lR{2AkPSXstF2F|<%F%?viXg?OZbb@;u z7_bI%+7=m{Im6kc2bIMfM_Z$=!RQ)qPOIS1^(Pxxy*bwmAKwNv=f9gm|90shql!-Z z`p4>Vgz8SD=#DhB`Hpw@f6c$}5P+EQDj-z>+>=d179~Od|)=L}&2*&AtEi$d9l5a+s0r7hLUKk_Dli6%#lJ zq5z`-Ukdu2ig&~-pM1}}nCr43R-hwht^v6RkX2xC_1fqNU0JprKd1gZZ- zhUBzDWC&dP9W7cBpVnTIann(+KM%eAEgSd4;t$Y_d(n@ME&bDX7^hdCI&qUjY*m|F zoh`xoz z;1~~*nr#Y`4W{boI62bUxGBX1Knho%m z#)gLO(z{llV9;fis8v_fL7*f162UHh7Yr!k>5|#RS9A8=_Rw4IM89Tg5L_P+65t1l z5)ququr9quL)lTwWv7FBYYe3!OdqV{u31chxWoEn0NG=(BR>PJUN|Hh^Jq8WTy`8= zPN2{8MH8rmwxTC9xiFhM*jH~Xvl{cL7w-lW9MB$(M3>0sOc=~=;+vtH% z(^80NxLkl~J9Pjog9l6nEvC|vOc>z3dxO&Z(E2CkbH9%IfDm;#+5Np#@F;X@4rpn( zaW20YMCSqCvC=xZoAja4A1VOr4H|9Cb_z}OIC}Bkz(d14QwVs5DtFqBE*XQsr7zH7 zDIftS^U>&{;v1*IxyvaU0BB=_-gO2O@(%d8SrG;qEgB z4?<#M9rXbVjq^QpnC6T3)T=B%d)G&A3_}B~bk}DFJ9Ej|Jdgp-PFaO9FWB&GH8HDz zl9m$iLFv#3OQ7<)li*y=UUZMRP2~6tYDZxtFK9rOMK#IK7I@0Q6_U3hk*GJFq#ff zpQzLYn1=`HeJ&)E`sKV+XtKz7J^@zud^{2j__Ze;ywG$FX$$+6)$!0Vr{7vLwhmDKN>A?=!6Xe=qg{V^aA(f#^0T6672@7KleX#@*LrgXO_Mp50kqNz zCJ1IRq$RnPdjta=-}{g1~V zM5n=R2z&+veDx!qm4H!@Lv3i@oOBJoV@MG4q@$k0>p0~kJ$hO|kI@B@kvu0Xtz5nh zO<+z$3k!sR#*EZm^+0(!Eje~UuPp;B@aye^=yG znsOpIquFGmyh(T z|0Fw1#TlDGh<7XlXKp(bgXwdVnUQgv9;gHXYai>7cFc7NjrM0w23&iTCjfwHIMB?r z4ghJt?PTRL`_I1t=BFMn1L1Qn`uNs>!+$(@7o;=aKQLq)4TMw#3cmI@c>al4@F?{_ za`VIxa~2qj-WH)mnq7}BXV4=IRC@-<7WL9FnzATs|1cc^?nWEPYT_p@-)u%rEKj|` z3A8gy?d5y6xdv^)c!*peRW(`WPwqfVTl(enf&=>waw$N4nzXf1Xf5twm%cX{>BM@& z#g&F zSE8=5$(l9qhur4~#!a}z3$D!RlAp!jf?RnY;P!B|` zb=X)rS%aQ-5F~Y9_)-WJEC_0XjdWA#HrW1AFrD0-9!=)VydAvsaLb{{C`exKzPWqT zwmftJno&Ss>FRRaP)2WXkpL%u@qs|PiM9oJ{u4M$!vg?Z!hU*NztYj=k$A~BH5t<^+koo;fy7kZ9}L!1sH4R^iCzl*w*tyq1^e_TU@WW)Aiy3MJPE9o zmW!H}0_s7{+hAkT*CptbPu^swXu{M#mmpucLljFss|QfuwN43v# z{n2UjiBeypWwGq|k#R#0t~j1yqRp8UoaI*?kG^1;5jX0@i63AAs5^e3MLk0Q?U~$?CmYbuweLrJWGC;teBI@_cYB_@?eS=4 z55RsOSOIog#^6o5CQ4_p@%*icy0LCGxWa@{SQroEJkTTeQ!!ZQ`NyarYuP+8hhsjbLD_ag0AO{MgwNK_jEj!%t<-HA1`P+J9SlnzJ4a38gG>9cE`;r9G7Cx7)&$hz6yUS*$&(ELevE zRoUrw%L?a*Z<(Ib_c5~>_l?`$eE{<6i<}zJc_31~{7Yg&Hmh4|k!%7#_k90^{Y)@0 z=t17@L9DqP&d@$-3>*^|Pe1^4rgHX93B$*h1K?-DO0dQN&R@XQG_Po%Vbg7)C7c4Fd{py`VzVj%K; zwf`5NfttDRygDEo88-TyXNh(KO9gRO%s~J74)EN5S8#?x2Xp`Lk3S5~n*bd>%$(t+ z&3@CN5P~g;80|eqpW4@cCANbR$R*cWC+}c`HNFx9o=tf`c1dCXs}}t@A2E!r=Bhp0 z4&oQEjS1T}tM3#&Y3+<%^m8-8Qlnc%(Y^}9(%@1$>BOjEFa}q^^RX2Orky!A2K+ce z6M5=wF>&Gm13F`@Y9B06t;`Pw!&LUgZ>wCA-Mk_Et$E;;R)ebofbno(lyy&JdOE z092|%t5hWc_3iI~dC~*L7BJwTcB)MKtpMe_++G-Mjt;8dtGV9bb?o5w@#Em-BWF)G za(9q_4A@Pu@IIlvPLK^;rS?K;a|Rl71F-Pihx?Vir^{pC{gnv=(>_yB%|9I~5XP|Z zI%*~cj|@fwFpQSO7A-^Ra>@s1<~V==gNP}n_dX~Mq?)hVgV!kLN2ZZ@>G~%vaFSyhM>o)LCmueP>|{!+dP(Y{^0SNA_#$+wzIQ* zk5IQmnP89mrx;{YDQtM-2l`g_0pJvu09aXN`z>_1{Zg_Cynabn(>b|juD{d3UI*-_ zuV4KR*UAMbe|ti$?e+2~h6F~v&6VX9qIYe)ew)QZ9Sf6LO(83*O?z}XR~)6?^P%{H zyjdsdOccP~r5>EO42FUpQipRV?ej7!M4sGd<0Q>F)|zv-LjqatRg4Tzd-C!V;1?b) zkC}pGHupZZd4H=gj z0PcFj#7@C7+CrbPx|jl%(Fwn?6-Ta*2@?)d312Y+T?g|pYK%)7Re7DoeZBog7@W|k z{vx`6hl}jm1+##79RPoo5QPT->mXi(Yv&1>Vt{dy%Ma(GIg>xX{2;i;P9C_6kM@)h zXkWc>H#jel0XhzPpw>ZMLN*u!RQ5H>IGN{S+yG`GFrUd7Fa5u_eDhmz2Kqy#2eh-z zfwsk(V3l;XSQXCh#Z_m&!BiLQ0c6I~)dr9!-I7Bm_?3aJThy{rwRcF=446F3?c-1t z&Wm$yl)$dFo`nFMGF|>H#G#CizIbOIw{5}_qjraS^!20^=vmrYTIlKJvtUyp+JB{? zspUfh*hf`b@+g3}v834w2OA42Mr>v-k=w^d#o)tJCUwa`c<;P%U;A@bN|TB@>|5Lq zP*ayd#V5b!3lC#niHyO!!!{OT^%0a6P9ws>Uu?|~PVuSW+JjTHZ_;DnzG|zTfjr5s zrhOb2lKvNr=-M*07B?{GV6hEBY|=0RavE^FAtIIYvJ-e;*oNpeb zUcm$O#=n3C8cNEHm!ILHnWM~&?N47|V^RKWm|$m{2AM#v4q#R6MFO6f$1*R~F!ThnWKRUZ(*3((Cv(x7p+UbVSf5J6!TWzK%GbvKyp2pHxfJV8_J zxo3_HcpQ=`Ec(pwLrJ(2#gXz;k-Do9(HCFg4qGkop!Ba zS|8ec&(@y1M}{tTmsr#u34vvFEgNe!Q{4*UT?M%DLsen}fBiSg!%Fz{!izepf4B;z z<;?i;J+42*`f38H15F*n>G}>cA3p#+E+Y$k2Bdk6r4+?cbUm1k7-*_i+ppfCuFM;O zptJyzH7lrNLOSJv8AeChkV_^m-?ie*m*EC~RmO%lZi&ZOuoXtnvGjBteIp14UVI3& z$Qd5EfVH#r3g~V}o=N-Klh~L;j35w3ce}55$f(O+M{^Z0oqKhT-sgE+tjx0$pnr;3 zvzV_Q{n!A<+}oKMwP-N%{sD9-|F$|f3~OKfo8kITt9Ar+#mM&VY2>`!OThr1D`ve? z2Eyt6wjSN`#!sMf(J3xG-#;RO+Zw9oA?T``z)J${>^h!j)glLu?{wsUqgvtn)A$bRJ_z(-vV!FQM|f4$}BV%8qaR@^6p43|cSM-mm1etn5rV+hF-#3=%gBY`W&7629Bfw4r?i@k}-+EMQvsi<-9T z)Yf2ZOU&d<*QzJI_IC0TRU)!(s*K!lsM^3VbnPQqbx_zO{4&9Gv?Yd}#DKF<8O|HG zfNRQM0b^>j`kY6>fChHk3%>x1RKDO9!}6!k{f-j=MnG#FVELfkX|Qt-dVvG!1>6~E ziAcqZ&fJW#ISjJ6R8Eh1ulDp{3k+BbRWYqKVd(Jwohr|&FzW9F1GLAFKr)wkR{*MW z*G18}_FFdp&m%uzfdOVvqiah_cT>}ZI^_l49&{Y;oPusMp5!!0hpdKX5Wsbx0kL(_ z4DdeNz7IyvvqBO;It(RH{bb0P=txkZ6GMPA(?v(q4%8YD{hELN5Bi1}YiI{g!{YqU zKYp*I%_9|BM_r@6YifV=PKfl?j~V#lmBeu6TNtB@7}ufT2Jktqg-JjvYJ2+y<}2{t z^I(ynja&~SPkr^7o?h)4aH{-VVPmZecr?(i@|G?x-AV_qOKgo@ROj@NoywHcF>3DD{JId5FTNiI;tt7X)_;(*sFEgsHeFr8W&JAob;m~`jrH99~HmorWZ#-lK_XM>V zPDMB*a_V)q&SZ$PboRUa_OiF{gVd2J8XJ#0)4K?y+7Fu!Cl}IUz<^j0!kGy= z!h+5;@A@>F#K8R$MeQG0=Oo(u-nw55!adr!tM&jJ=10l9_kgc5i3F<<#t9dF9K{w= z?e20oseQXjw`6 z9l(eJHtkR7fil2vSkeSiVc+QGDP2^hm@{NIa7H};oxArd*i`WJJ=x%YR^$#tXHVay z>4qmYRL{C--#ikDWJz=K*sRU?fR3! z^jR+Xa_pJ_8n` z{cJ6(vGuEGpMK+aP*m56Dqri(-2U%BJO@(?XL9LoFaS?DOrN&0}hC)WrS56mRm2K5--Sn&W(_*3YLZ>H#4vcmmJqTXLSJe?1rI^7y z;>0d|?wvoen=;!3CH*|lk_>oBh7jOh$6<8RN3oknJze{o#&XS$z6nb9zkloTv7olY z5$G*J3}0Crdm#{3k?iHg4wDc1@Rr%olH840*~FCtjMgW=7hTmyHCye<39v%3_ZEo^ ztW|*Vnv*?c*#T{`$Jh`{h>o;X@jO~`a)Ns&!7>>8=qpS^Zd@7wW4x+P zE*e7_leO5U*h+sW5vl-PuKf<9Fa{zV1WbeCIbndyneecJH);QStr-!!&e;&sa(M`= zHaG<=732x(1GTaUHbDRObjiX2TF98B6LrSyrqXo~nV1WKM8W`9~Ssb`a5$mRXL+r?Ak(Pq%}mcIq%&MMrpsr9Bs8&%jCF3S#F!-=v; zp3&{SU#Dr$`-DEz_V)ME3KnIbp0NR2_9^HE4jtJL?tD?Q%B5)U%$V|^C1!I9I_&dj zMKKBuOso{pIOsT-m4HbE(aW7VA@YqE zb?b431*>CywE=qPS+Ka8Di4;TVA#+R70EhTIa3oIY%3Vtp^)jS=mae*VRs5I{;#5P0dHj7sV&-20hXDZ36g%sgMV z^V;-@E$4>xOLTXKkq0<#xr_udQl7Ip;J|?hW(|-83a~76q!e`0qdIb#aDsEsxKuiM z@EmXdP&aBnZ6%}g-xawsT9O|Fl@U}O0h)c*^|BkUKamyGzNP(-ok;<7PKAo%n!zk) z)o5=TZHN_|3j#(!wk^?xv)4`SD1Y(f36*DRvml4qy6GpC#n1rG&H;4sA+W$Suwamy z#te&V9Hhf%TKky+ZciFuOv6C^j3?`dC;Q+>Z1_OE_TCkgqvt=iLLYY+tAkLz3EFWm zWhUc~Tc9&RoO{GbU7&qN9V!>NzQtO6^J|A345g$!WfkPbTH;tF(|D9jN`f2zu~Ce3Oslb;I&s>RZ?NV7bUjf zOwTLdf}&gkji(dPuXCWT8sk2tYNF64UBJQ>9sQvgLm*-~51iLa>idr${9&8UY`I}s z9CRL~1Rdr%Sd|8mLv|D5#+qR9t(XB$b=Se*i~{`)3e zKH*+09vfeW9f$Hw`womshj!^vu%jQ)hFSmuR95rlE92NM)(H`+h&UzoG$2L|{k+_lPjZa_UFjF2W;238qS(QG2bh|?8zcoASrB2l4U8yPN`LRw z2A9yaR;GYJtt6zzcc%X|Oe`{hN0>$J2sdy8z*Md)PwcWg8irxncARI_c46q=I?5~s znA^al2%Y!r4Qnst4cYN7hB%lx#aexHwU?-7b-7wrMhu8^W6*++-g`B8tEs{W^s|lt z+fp-l49~a+ipv259Ot+WIts`e$OUIvYJY4oK}iES+uO4vgJyI&%xd(30`Pp9pfI$B;1MZNLZ`0;y$WLsb>lP|WUk92R{LA=;r;B)bk@>a~C@ zD`Hy`0j`!-vKC)-MmMTlancR{s5E@|(+sgP$+ESFfxLG=)G`o{p8~nE9p)T;<-o#r zr(?3X_Y?yge)P-Fjisfl$ZGzl6b2+r`wi1|2IC-t~^i&#~)=({u@{iGEv%zY&S)Eb)|m^FfZPm!v~)r9D>+7a2J zrYr;P3CU0g7)%|}X=846St_4l9pao@g4qlr-06rg7cjnX`tkuVfOP;|d?2STU(_|; zuvD_zPhJG$EQm?Q;@k^mVZL+k)P+BcGDEai5)0ac5HK17?Pd&U|7~VB0a$)#MFm%m zV=vguH^wt7xYVJ%8Y|D%WHGNBv+{?bdT%*t-+8|Bq{)OKz_bO@KrFlnvJak6$;dpY z^W#zmLE2NjAOTnHjbSJgOujwsA*N6YGt&P4G+Q4~QXf8(j|sG<-;lXy|MPoK9W{_a z7A;$I8HlsK`~xuFnNqdSYpPjb{MqlpM!Zx}s@$wfMj`&CvyX6*B=5WW8rwpfl9>V z)<6uRK{gPxZI~rB+X<$c&>~b8K7*ott^%^Op4oTwlW1382t3@y_`=V@{^Pqpo*s!< znSshiy3k4|T={`=Fm%4SAZ_Zuk%a-fQ4r{;#3%*!+vs6KsF)ZRMxm8q*1^g9oMpZM ziNUWu)XK;Q%h;zr(yte))e&r;5oWPyKduSs=r9PbgXdPB)NQ(={YhgDLzUxP*f?*I zTMJ-gC&3ua2}=~qB(t;B##6PctjXnl^XU2VOg0^Cw%WsMhfATQt$?M*EKbuYz^T(F zQCOW;QCXjRpiO#M`|qjtPLmVUI~D{a#xrqOtCZu^$zXDj?TiCQOyUvI!Bya)G4(Q6 z!I&Y2OddZC0?bt>L^;m0n4H=ZXd!2t-}!}k>iFiM$uj{CzOXRonO2lcobu4DA)Y&H zaanm41LYld!W59;5CV@I1lPVC&eaK2+zTY=Q1=Ic>3YjA| z)&cO&H_O3uSqw~L;OKdO<|OmFSbFFcK_92DeXT_|(ZcBf{55-se#!XvU#(lT^*Zt2 z4er4n$=nSO4clPBo$R0sl0oVw5p$S|K@SK>b2v5KvJp|-_|-S>$>hyAd-hZWM8x%H zO=jm7*-7{rwKN&|i6~BhWV{#vzyM-#2+q9sGmrP4J>$Un09*_EDw|sjQ+N)fJOyor zz5Pcz~ z*OI(**!14xvL`stIR>I*SYY&nJ)bcEoJAbx+_g8h5Kp6o@_{;CvGxuw460JsJ&zv( zovCxLuj=p(*{#N-7idQh_}VynxHN1#SyM?6DxsQ7S96$^T`42rg8I}E zwk{w%5=`Y3v@#HjI@CT-i~#L1>yuFEaRK}6nM~0caTk#NOc(@4X%EF?OW~x4KtSfT z2Sj0}+f;jiYCO8N^E^O74A>1Z<4iYAxfFsmUy$yEU4p!u0R~wTG2+s;a^U?J6{2RZXCPHK5|3-J;gJ za|q)CDCGpRWeem4VhaG`dETyMCN5AXLgy3E7{F#w3@c8#7g`BOB@8sd`_Dku2KRNw zG4XijzdZX4&v6nYNYpi+fcawK>e(=LSfHub!iS+;QsF+BT0FG3e>@Hju++jjCND6TS~^?c z<-xuD8^E^DIuyUleSlWFeG_D!GX2+WuY93>u?9o!!wD*pZ08@!y816_d0yD4Vy%6A z<@4Xea2)phUXCbYvApx0UGRdAbt^>Qz&w2_V5nw5A?k#yAKmxbi{|tLhDtyO1I!v;-7149xRp4zO+7lcG3@SeVycc^ZK#wxboIwj9 zzy|6yw2jB8bx-{3cOQgFdu|kD1Un4pzZn1~h_UJ_6wYbxgKtbim_hGKk14UCC1%X^F` zh?j1NS^M};Ay5)Q*M0$Z<%v&z;=)X`fRuZo#T~Qo!hrS+0!X?IsLiex1w2)GP7FzI z3nqONl(IH9SsgYtDmZ#iH<{7p{YSto2Ivm@m%-~*;}OU}5YQn4d_}Yg2quk=>Pk_U z*}IrnZ+(4SEY^LIF=ruNL%O=zCV;Eo0vj079;FRU%`+&ro^#NVbm0}~ndg4oUJhvn zMT7qJg~z~0Cu+a}M#45`m4R?~78Rfbw16)ki@2feHj9_5U}xyY&#t>e0O=(sxUQZ) z@@cW>QUdltBgV=Z&kag6?=6^J(SLbgo5ax=Fn z2YJ8$xNH`FCQ$n^KN-;ff*FWQe@tK=(_6sWlq1WDx$4tC#8>$I=X>n;&AA+aOFbf} z1}?7T-CMyAKooOe%^*526(pF*F-&_y)$YqF-n_Rl2b8bZppJ5LVGcfN1X(f$78B48 z&L&U-YF}ZvEYY*z{}=EqI+!M^DT?hBN2i#`Dh*jTdIucHo!#$xIK5d0QwD}>uk}C+@=_&mXbqFyp66HKYO@v z$cae?)cKZ+0zP61Tr_tuTVixuGBleSYF~t|WR5pGRLp2UH?HqztE3ApsXGT}wU-(C z22t!M#8~-LwlGPzN5E{L=pHfZ+_qmK`f2W$X0BL*;0rPNud$(!?&gue$fU?{2$F@( zUwhx1nXwN7XcI8`bf@Uf-t>Tt z_v}{{3mb>p1`);;g@KssEJ7f*`smGH4nXn#^>2P1(ks3ZoRc5la~v^2E~tA`R}=;* zeLmooAmEGNEr_z+-eVPQp)`cCsAftQoiKy1{^eUgmTes(7=PeI^ROsy{M5Vrzi+t{ z1MSHYOjp3)CptCKTqFZF2pt{MP_xzbbSsqC@0F3t3^U6gVBqrSMF-!1>t=sew7$U^ za>_c=b?q{}(v((ffEWRBH`QNQ3-ldO2cn<)eR{dCxNmzb(4GY8n1Q3x z31ERy(F%_)RHtb<;YTw)GX&ZIQ4CpT&i|ZO=Ig@VYliv+y?|SI)NEe+gKid zdF&_PmBnBoAVB+=`~XWeWO`I({DJ2<#_v6DW)v>}7>o_I4OF3eJ5;v2Pha9IsVb;wZ|YfaBC;%U}&nj+0&yt4*E?hVve{Nw$F7*B!6hpx6rRFW4~LqzSY;1ICQ30|8AUYIh=`uwVt;6=41; zl{s0+*zyJF0xx9?E5Gz)={{>DD1P6T1__jG<$-4og1LiYwCDan0hot6E>LAY3m6Na zMMO%odLe?L*9y-SuIdEp96d*OXn!b7H_t=O`jkhfvw&x^s~sQ!$Jp#uo;P2H!mY;# z>6s3>Ov&a&v1-4bt6Jfu-@=yUwdO$w&|BAElAVO-wS+_2_XeBi_58%##y)To6bdqm z4g8~@>#8UN5WS#kkn7U5-)etx&yj6;<>gQ=yyO(0A_ko^ik$_HWe_GYCU!6$F)|R& zI*j3^4^qXz<{&VZGxTbKY1?8neEOpr!_i-n3~n&Gsfy+fe|wU5m`V^cpqWK6$?54( z`61(B2-}-a$zYjP%)5`#;lP^cTm?=05%+SYN~88*VQ&4WsOr>8(KcX8mhFQc-76kr z&{;$R(>^2<0ocxrP!lPqlPu{m+;}3;VU9Tq*u1OVhYFizFabfo2}T?vnPTx}TsC`o zN!7G$36C%)(p$`tb}@bNhk8-o`xB%pVn%YsBK81?<}lGqgCUQ7GMaH}ZyXrD_?((- zDP7#cv-E)g#)oGp0WC#NfdkAmmRUM0NL>b+K+TIM%oPjWzR&z))O0XY1u;2wh0umT z>{Q!taV0jY9CH~^KLP4s@uU<@V@hRXYtMv83FWpr>Na*XKXvb(SLPrd_oE5X5rqpQQ3_Xp`U?u zkV|;Zy5aDcAh<^S#8+f5Luv#P|BP84z63Su_#YC57qY8b~A&n<8--8`$k zuEH>g=?`%2pFQt&79x-rWpx0Kk$?H_6I>9lOBrM90B7?6PAT`Cg0Avu)|+Pv%a}>R!>JJOe8$m3Q)z zbKe??iTfX>m4kR!t0-TrpNBI4tN$tq~8Y5eo!v%8#mCU>U6WFTl1v8IP6+J(d z)L}}3{QEPnf(L;F%t~gv4;2CX%SYb^F?+`0JWt>r-ZudF+!INV5X4VJWFNl#k&=+bih~4uh3?=h-%Dxb+_aHjKd%&-aB*z}#E#m;ium~PoV3#l3boe$VE8Us$So3HhB^g;Xb zUNH6yhRrYp#^npNzx$~5G8=ilzkmM@eft^Cf+cNaAGLr?bdhIVT+uQc@FB>VS7fAg zu*!Ah_drdTAuDUxg}&52Tb0B`%z(7N3$&V{bw}GXU=HJ|?%d2cI+WE3oZ9qaMDqJj ze*8;FE=ka%I7b$|8^P7J z8s<{6b(<&=JnF>tdy64r#dP%>BL68@7nE&I4Q*=4%pJ}*JkF5loEvALb4ykJLG_KQ zHbJaxf^jZJw#JZh+pJm`M$_zr+(yS5I2B)N+JHIAP`Glk`8)sfvsd!k36tF;w|L1#!OR6vb0Om={`;uK~SZ!yQg>Q-tN=2jPgK! zAh-`pgGT|Ys-k6-06`~lGB?Cd^~SKa^sgR!aVbmo)_EmUlCj;k>NY4mNcroyxjuNu z(#~5)1YfBLc>fZp`%$L$P9p0oRqR$eg~3|{U3npIbb%h`#vG7KBXda5cUq-FDaI?7 zeTSn5Go*Vk@u$@lw%G=lVyg@nP&!nkeaSHUEC%$`KcY@dJW59#H2W&GUrozr{-hh| zMS#W94?47JpA3WM0|M+vVGsk-_JS+|SwQok3XnaP+7GG0(yM*Yk?Co!yx}yk0G?br zU;-_8i+=eok@O=^4jk2tjF@oE?*HqV7a^m|qyG1gZ+n#fSBV1c<_p<_#zRq_H%`SI zXV_$z)nUGlp%}EYX|etoh1VbV_v2cDreg$^D-%>!^5wAT&dlKv(BicpZhvu?%Ft`i z$yV?T-j$Fa?n0q6&SiMr0#2JkF8Qs{nGJMhlEB3mFT zRBEzS(b?Lcl)6ixm9uFBxhdLbDWOGy>}A5m+UsJl&XGX|#;3q?dtH3DIOj%?s!kid z1eAeh_LynB!iK9i{nvkwh+CX1P{<5aOAX240Ri^7tCX|UYX@W7G{`%utS*w%>jJf9 z4S+j?+RGdqKYdY!-5%f~Y|7yx5zi|Lj1-XG1Z7D+pS?TwXJ>j+frs}6vz$4{$K^2 zRk_&D!x$zVHm;;EPR6e($Jo@;`e8P+a&E#Q#tk1o8^==vA$4HtkZPy~Mvj>oxe;&* z!j@D3ejF-GnCrtJ?cJ)P&mJ&ddrbDiUs$2U%0M`mV`kT5afgktF9IPJI-}14%pnDA z*5Q+nugTz*m-o5T7#m>`0? z=b2={ZNOLGyHAw2Z-cC0-w+gN-yADRoh#Q(yb?gqYY&SoJ*E9Mnd<^tK)VbXb0ixC zB#F3*tE^xTBF%cJ)*`#jX}`;K(;<5pdx30X|KQ0ptdNy=e{W&8v4X~BOS6b*2+l}}Jcr=?eVh@%MFQp99cul77%fII<5xkPPmGN= zQx6!B0Wz!nIG9qmZrL<%W9b6gQ%WH{`mAEO{Kr~Wp_d11K16KF%j3M4s^vmcosb1<<&oHqy?X$Y$uWO%qmn}DO z&5f{SM@w-O zC)3a9JZgd11PK^5dW9``JuAr`s+P8Sm?qmg=|mmz(6m2eLAJYUEwf5C9{ZM$zBd#n z5EEVX6xlR<{x|PFe~S4Vx@iJG_h_ACCll_5y)Z84p<~t5W+sFxn#WBYO^V!UC(VvEr`XDMPK& z+a1<0N@K7Y5PtDxEEk@tP9`u2E#%3E7?jE)4MXqLhGkNzqvo8S3C$LO*>!^H^B^c5JK*jYCN$JA8V z<#{RQ3U7V3E>8!DMweJl&q;f>4I{=@roA=_ow@ic=m5I|v%~Y!qYUhBcNptA03@)e z#;v`7C#De*p87uiAALJlAJiPC^%Qb4Mi6f>K$(b}IJ>8f;n407_Im+W&;T-TFnl^x zaYyL}T~VC{<14?v_$M)U>01Z#puX{njOlo$)}jp8mJc>lSef*oAX0?(jW*MGQb!H* zxng(y!uL+dmjC>f%Ejw1i{bSVxZ^9MwRU4fij#P6A7-p*@m~X#L&JfvSM#i--DYN2u2-XDwvANSySU6fjb0K zYr{k3+zJM%s%khbU{QO%pQ^<)UgG1YWXr~-C!w(IGf}v5-i3JSh-$D=#-8R$4LOZmd0P*H^fXhGCdNq@C zlPs{3hXpbrfEF|BML@R*0^fXL9ooALE>rw;W4vq-9$vc6jB6xtDCkTuQ&%f^7Ir9*&Z~lF>Xw=jF?O#D=-SAgN6`&r2WT)Cue&Ccy%tF;c~Eo z0al(1V0tSbWvSGJC8tKVaw35J)EF>{ZDO~aW~A26L@LLt1(h-+D%A7bopVnZ0%JpJ zHgI!q6=3oL_qB_z3#mcInZ# zK%=-I9c|FIx0rY3po@>m2Jb|X``&-P_esCer5zc9_i#%yXo9&2c%|m8Ley?I$yhk& zv_7=YX{(0d}&iUM9C+SP~Iu5?)FspEgR*S8#3 zI<;q`Fze`K=L5zIU;tVi9b^E$m?En7SJ>0KnZ?87*s^GS>xT?69mJ^&)a*q;P!j>} zE7}@F6!YTfyRvJSo~BP{2f+gE>!{^^pcC3dd7uC>BAC=)-Y$B%n@9ZT&ke0!R=2B& z4}K~egx51+W_zuX5IM$iR=}ieF^d473ei<4bgo5Bo?fuUfw4ORKA=LCW6Y8WF$-s1 z?l`QU$zI4&l|%~=4x)1tWq9-q=b=m)pJ+07#gK6dgHA_smMejH-W@tKf2qIQ)rDz}+~X`tlh zBHt6Mq0#R>lE?i()7)bjBa+}&6{rDmK{dr- zPHkYvaq#cYJdJVQDX`wtvPJtJBNrM*N3lz}+H)d}9&R528*VhRPMSeLSyaC$;IBOf z<}X9%D-U+694yV86B~Uj=pTeMT0i;Cc%SwsI*e4pzw_Hl?X&s34+t9UYlC6_>eEr} z9ii>L<00?9C_B(g0zd6bUacDym!5@zS;MoQX2t<0v`^ncNf_sZn6p4s7xPC)gRYH; zHe0;6h65i)5lk(%b!e z^|ed~Rk*ShydGp@gP_AEnJX->_C>HuDpR2XYGF!*z_R_xcfeV1z(AJv<6ECR3cYjA zp)6hXKnz*xD&S6>V*nTIzg9e&F;Tn@_4Ham&;T2qz@lrq;wIVv1luo5*1%pAt_~NK{i&J_7OG6^d_*BDjvmcfy7ap zgW^x$vZn`vfbu+^)FcDpysh4Zh6Gil$L;OrQw(sBTA3g8k_1QDBSzoR46U&Uj77(( zq;-NZJ2<^%dxc~4mnZM^;x0fZQ>H6?qFRPwG$(-=cp%ViI9q#@s2KxhHBirO8F@ab z4v?zE*_;wUKpiKs`PMyQY_3P2x$I)H@Rn4el8|Y^oZf8eMI60( zID$bnC#pl0@V|chUYHKve1<7xz2sbVyih+Q4AVwCs|S|G^`w%wb62ogVo30j;@1bFrAf zE%Vh2><)rWo=s3y#w!ZAWLI^MgL)8_IX_d|H2C3n+xwlfVTb}{E{uW$G!!L^E<9}W z_~;AmdlKg#3}vrn#RE*i2V3r<73$icIsA=VwEQvWgN+kC`4hsuTprV3-eU2U&X}1k8y4pcxiQc z7JZypg)^X9yJzAjk24|8Jq6|t(jG5d*vke0jId&QKuj%WH%o&V->F;;)f+@hvy&*o z14KB|kKE9m4mKl36LUatL#NcOexhZSLw@|&KAVVD`_97l!E}MXmkkMe<}kxpt6Rj>BN)`Fg8Sb3gGIGL!Dz+x2cfNsG5a+$kl#@NnaRp8fEVk zh}e4nG*xCy#0$4`4h=EZZrKIgiM7Ebr@QR83;L>oUd;9e19&*VBuoZ11_rwiaCQM8 z&+QEGEfC<82u873TSH!=;41?{&x>oGQ*4vo`vuB~OV`b1p)CPYmi z*c-p7Hx@AG*`yLqgu3$vTf-@OMS@lH(6P=w=Rrt8tB7?KDNYk$iX2Qe#j@X}xlC-$ z(VLU`U_hV>8aMLPg7Xh|aWL85z2#Uovk_Qp| zfqjZRf-!0a`HV9T3fF@vOyQPY*eQ%c2Te5zxz2NKJmJJju zppL8e%`;&E=EM1Kb}|%3H}*>>o|)77=)U2S+;J#C254X&Y$Q8`F4FPk??t`*9D^@N zp!dUhE*286X^dcoFsYd~9r0j)fA%4#4efnW3{J77+vw{$_C8K=YynJAD1yQF27UI# znQF1rMlo$ad0IyEJWPl7v|)^f`l7(C{hr`V9d-f%vuwUk^gI^j&h>AD_ZgN`r&)s} z!TGzHKR`E=cv!{BVFUxNk|)Zqs#6UF1Ht2;qvF-lby6b$UvP2E&SKl9;|{)TvgM#eg`9V2r3^x^~If~yU>8Y{_*)(l~Net zi^T&FV^l#$&!NqP4#a}AM`x?xV)*7$Vc1R&3o8c1lSsxsF z4l{^riUBdV3wG57B0IPz9c^0R5&*8T@U8o7t&?MPP|oSVO4+ahL7y;3*>trNS)nj_ zoj|cZV0EBcdKc)w`W^7Mev~3ZoiFH`A8U5vjoU{c{B`U0>EaIMOxVged&e|O0jJ9A z`SYMikU(`YUO1q&47}cr$p)yLkb$v?69%}3Mn850feoUwd_E`7SL;$3b#-T@PN`mp zA+JkUY=f-BY#^*CAVT}WVkm}qE+uEnlorA zBQurr{oSli6!{8AMc4~h#iP`EXK+HSjQP_4ALbR%n?LSv*NEmdIo&A zVrxBo42r$ecw+>#v{8fYNe&kgX3AbY;q`q%JpH9_Gef`n z=5Ms1bwGdZiOAHXNhs+|lH>4S) zDj=&YJ^?ds88i)2OG>Wnuab?65UZl9e$e1srd664!IONzs`@(B5$UpF*96Ji9#FHH z(Fl>v7^BEWrKdm^Nf&7m0-JIsdC)XV8~fpS0sBNHT#hjr6KfPbiE zwkV;-gXur zpPP2f39yycyE17H$BZTjPO&|jhptVk$a58}jfMoUJw^s#k3R(}Z%JpXiMP%u7hs@z z*hw}+0sG8xc<~-)-16^^sx~OR0Z?I9slv;Z$QuzpT-N*k16i0gAjgwgDNXA z08E}>(fmF^EW^PmnLr_zUIo{Y2W|W9M@k?n{aNZCJY%7AGNb9mz|acSe2i~CpHjO8 z6R@%ZmfxPXt=7lWYJa*|HFNJXK1|CLkj4A*cdd}jffa^>v5H`p>QIdV<501Mv6l;Y z3IP{3#B(cOh;;*kMwM-`jrM!Yq3jU@!DC6lya@2me|TtO@PN*}P3?!)j7L97JE(ok z)VJ#Bvx3;CZqTpFNNDa{)3;s8A`r7 z%SK-U+odBY5TyNS0TQU9%{JPXb(d0<40aFv7O#CN`aW^1=W!0Eht@ zTbTyTdEjhqSOy&o1b7Uy`No*dp7h?nScL}|U5^hlT&yQ~=TI5=+1*UegzPPj=_uY% zqd|bJvWG26z&veW?*TGsZJZm z%ma4RPHif1Z~bPOemvkY09R%#V21^oFWd+2l@{>cJ&^V9eUtOrsH01AKx~JZ@7)@j z2WbTfPFJ;y5*j7aU~4EVR zLjc%B2>0cMfp+V0YdQv@VqjVuwFcxn%&fA2CO}LCU{6G6X1bGTm9a`Wx-E5yJxry? zl^C5ipqvKm1aEY>PNqbW-JRp^wLdG3GwG&f49A@d#!8cGgXOgaf@gpP+nqIr zjg3i%@b;$6;ITF32H7?OfoH*htGr26Y5mU6cspGN1!S=oaV7xMhJ`x=;tur}@2R$T zpekFT1E)U*0z5z^e%fR6R8JQB$KPP#u@W}Bv=10TvvCi09Kg!z)v+;TS% z8A_BRH!%dJM1T)6&^qR$pmG7g3C53EDqwSCq8I8G+rVl6B8);nYRX(u>w8b>yDX^u z6T{UP7$QK$=e=iTI0xaaeF#*>+9&#g9qBTFDRX%J1@I&>u(W|NO4l96gw#75d4{U@>-@t0IJmu0xD0yT4X{2 z{ZnjRoWTO<(`RWm4QFtQyqtjE%muAnxgA{jRW>z=ut1oNE)4l;`fQIk4Hh)O$QeMv zUGBr~Dw^`y9_<|&0~eiBTg4S*8yaW#q-L5zu}ErTOiK_9eo9qZVuh%bb#7)Fq7!aBUS~2 zBS>sw|MaL}ez$jbXNt9|D3M*JZjtwA`Yw}4HH8f}GHXjZJQ>iU+#c{9FFKP!u~A`m z@{9lz^CoZ)L0vn&coUfMeY`MGdG66+xg^fre|449TcQHwjHMNe^} zGxQC>G#L)>c>i`Dw|UK8^z|4s?l*zK$vJNGmVtwJ+lQ}0wI7nAy#@||?bJ%D>{L9u z!PzL+ssxZtTq9=-eDMevuQOsl*(QdoA*?Ir0~b&;v^!f2$v|Wk2VegtB%RNF8a%7K zAXswUpv?@hn_$@ygHhc+FbcfzC^&l@kSt;vLd7wW-IQ(6#xNX5w)W-b_qDgoSZS+S zvULigCyTiUumZ;FS+=}#(+U{CX~v7H>PmZLMabnBtzu;u0JZxn)W)2QsVZg^UCF(2 zKy(+g-(222q|SH3J0}*FQ4mlvwG6&H6FWOkqbnGTwxbZt4YY0d14f-7fR}UM`u_=g z5AQgub6tGYrID7p)umDIR<(MWQL$C6-lfr~Se9%_R<$LoO&So=2;rQB1QJpR*WJ{EczKBhvbwqyE?Irp08;xY2I@gD zm6!z$Af0j08X4ncA07BNeu9w!uPybHD;P74(zE?K8F(g#bvGl{ohJkIYIf3tIxu1Y zfD({31tBtY+-MY9uB0*z}x>Is`|7Z)Oa4r`%7)v7SCq}B{IJmKY;NR1gO8e z8^dUpNIi(<2ZS^+AAn-@U5L64J005<)ZNDT0#k8jx|VyL1NqMIQoyyxPsED`UQ*dy z8lKbFnv`4^QA-a33!n%lQ36O`4H~dBHM*ca$JOOcPYG%uV%cA~ilWb->V&9erU(Kv zxmv(^#xs}Y63JrYY1#Eo4K#uSv!HR_Xo1gv?GqFMsS68QEr|DRU|R%ux7n3p80v=A z$h@%2PHiGamnuDU^AQ8ML$q4Pz%>k#(f()LypFh*U(OiLInfv11|c;;s>aEb={leCw$H8O|&fi;*2y8blSOb_4!sWh#8Q9zrK1u>#(ns*#)qCm?r6<(Pd`HnEFr`lnf9sWZnc1<;A!{rW`ZB zSG{n0>lLVXK=%`!EZCUF({i2kQt2YkWCe|aymP<+wt)drg=eHe;uHMLfvb-hPddYB zx{r%>g4P*fSIjUlkfNRF@~$Iay^&(WE+%FHzPHLQhF2|t@GPsH< zo3q)qL@xk&0}HNhNYAm3)R*~U3uKQWhz`(l+X}nSmR{miOQibSxb*~YR%IJ4;BP$z zMn_qlyhC>;faP?oa()bb<3`R1kGAZWTj#rv(#|-r;21oC`s$#lXCN4Y5g8hMOf;)* zXBc^c`rg%NIEO*;dD(|cD&-`Awl$IAeUMqT=ij~ul5<~-Ro}vmFSnPBFiIi0^vm&5 zuFi`Y60Cd;g$W06C)&A40kc5hzVhBLl0(XU7UuGW7oX_phEk{A-Uzv^?ZLeN z47D?51MebSSdk3DQ=-j0j+bv*XI}fi^M{a;*m-FA9*09yJfK+A z=M|u2@iq7;^Ieb$5y%kd%Q%>YV!*c5VhY~>Ia|XjN~MpP-I}eGC3lo327Keen3Zff z0%q01&F9(U7Yw6zD~-VCzW~#(!Nd~$CSwmcoW~hu2eTYthH(A7wt%-U1HAH=;T~1` z>5uO)t4TArSd>5|Bd$kJc*LT;vw+2Cb@s#R=58-FO+o^!l^R z5>qw{4Uk_>E{#<0(aiA(Af9=%{_bms!o!&;Kq7NMPzf;{s9OZ|Odap#D~~r}$YqAH ziWubrE+v1!Ej0sDz{JdQH-@gf97FRHYC98?K3eu!k7~3bv~=|)9ev+(G@P0x|%ke&)W3eL#?CXi!>rYQT>Nf|aw` z*jVQR59a48ZLSuF5uI8AI*5}PSW8mGWD!AE1Kadoyy$KE!GF3jaBVxX<^7i+83L9W zeFlWYF~0$w7wkd;cESIC&x?992K69@&Dr|KA0Y(p4oIH=(s%S3voK(ta7t$NhLA@# zZ3e2LWz~VPErOk+s0+4ua-N zeOygN$3VBbUThY$idctWHS1VUKn?Kh*lVoa;VF7gBsMeeK75>UDm}idPs8l$0)>Or zQxtSu2MbsB#dHz$>V??dT8sjkD$nI0g>0+cRRkvk6#fXM4|b(QeUm;J(9T z42Ek(7<~96umaHQ|G)&$jSCvkaX#?kee?>K#ml)~Ua0T+O>!H+fFy}J6AI}sI?V=( zIOP@@_LOi6fwmHTN22FyWfSM1iw2r6s1xLMe3<9WKV0Y2*gaPRwe{V{RjzNcd>VUC z9b>cCjUq}{SG{EhMlVoR4^yM{e?9XD*RU6(?l}0bCf{V|;{+)gyx~oad$( z&Op$YneJfmpr+b0=1R5~T|dm8fXOI5!r-{4_sLl=Jw=QMCcy-mhW7e1P}Qd$Aay|+ z8+kpt)^*MxUKwy>{DJZuu!>C6q%-ZGpLrfSbHeGm5NCaE&e_L~#e%cz0NSAk9JZzA zK{ok!ozPi8*Uh_S59)X_1j!(sWONr0%%li&urRl8ytKwt8$Acc#0K_az-H~NozuCc z#SGJ2{0fUx5Y-0R!pbn;jKWbK!U zX(9InlnPpyGi7yPm!D=p0NyDM;`3MDdzNjLs{r2q=`=VGZOOj)>*=?@x9TSw;vv)n zH&*h+FyKA|#ilcUbnl&?VyMp|dkD8$t1O~*wi|Xm85uJl)blAJy+WDRrRpVp611gQ zFza;x7xxxJ0Xjik?@Z-;DkYcbncIR$j{txAAsFwH0Q-USkom(G^kT%y#s_4TGwI?% zfgWI9%uH9YU?AW{fo6J>uNKzSHxl3a<=OI#qdFn=33czpKAzeFRp49|S;u{P7z_5~ z9x?Wb06*ico04JCi;{6loMBI{Waa>jVLXV909bL|Brr;xdiNeHB%KHJHL;k|xLQG! zp+Tw7^jR^+??2RZ`Nip`4l!sy*BhHzpFF9jSZr+P>!OzgE-x|Qx(8&^{MM7QZEw>KEzgjBMsfo40H&))&EuhwROjx-Ex5 zQD2yA)IlFlPu-n`k#hvtxWX9B78zTPKswxH&`tmAkIbZ zv&6`i{zbK$7{8~U9He97$%b+ej`0Z|z_4-o`Ex$0vExueXV?%8oa*H|&oN1==hV~Z zGrDD?m$6S*-CoRkB{K^+n)K;wQIKJvNHOsMD_gt3AtGJ`8yvv8%CKw%TC$QBF?24H^kJNn{2vj1j1Cj>-*KDk%)?Li&yfB(_Lu++r+p3BNE;#BWIf|?49 z3)UUW=}#C@plEamd>Zt>A9~~{gmq=l4$%<;=Hx0_Rryn3>TQctP+YeSW-##4(<0fd ztZzSHh1dxP)5+wDBu{fTvJ4zxF6J-va3}TOOZ6L+IzL8a7w}~t_J0A3g3|$*Be$N| z0N-R&Hn9IZr`tLX1I1f|C!@Cj8p{GZrdv)6`w5dTvH>jC9ZZnPjQR9OVE^{;cfbR9 zQDCFlkNrcy66a|FpCBgb*qV8do#3N~E7neb^qacm5f5MQinc!4XF*pT>meHCGnSxJ z4}+_(7Rp{tBCM->q8Qw&D<6g>khNN$4m#5f@an=3eu%0ZEUJ~BI*1hvDhz{8Fop-1 zZb%%?pp;>@z9ZP^js&rFnQ{|FyMs^4xYIDxu~~yOnJ%S&6Whsy1+r8A_hvhkERF97IpH~N02O9wUwE2>u? z|H%(9U^~BfH`q2)C=MhD_8-`R=3AGPM^C%@*cvO?4aAV9#Lg6*fHaUuM+-tAyep0- z=GG);jKvt{=!tR<#=GzMp=Jn{V<+9iUAeQ^!T<9|lOd|q@97*_ zgUY!BCA^X=F_?LS;h9IG4wad=cfm~z{mU=@GQzcJSb$1Ul=^jawPK8#cm@k&d?=|P zx;Yg}`U+nW9RmT}44mvOu_t!w9Aa09z4A(TqPYkfn@txe(QTOJIyR;H9y9}4wG+@6 z^v|P?x_|ZuW~46rH=l>@W9%ymPqfw24(n87_R zKW6A<&=S~-DjH6?xpsj;yUGu$t8_QYF%)nz2GVNiNr6-Mft!yk(2W8v7#J3DA`+7M z5zu|qb`CNHG{VNJOC%2}dwFbR;>z5_Vl-4%-*E=wAZFkFM+|eAJR|cw)_S&wI}12j z_O>QVj~KSj`LjW`jV$QA!N8SnN3%-RuZYXO;PiTT0W(&8!pyKYKw|^2vf$>}8U*Xt zp0wDZ>Z?Kf;&J+R|II$xYxvU__aAwmJJ&ZW#(5ForyVwViwpV)i=26(bEDZU{AljP z{^P=K3m0~}t!1fSJl~)nfmRX1i&N=+@1^tWGUiGGn79VqTJxc+uNOcb5&P>u75U+J z%f9%gdVo5{=gpSt&E+@lX2|t)x@A4Q{csySWhuG z9%Dy$aEfeC>MtUYz&m$?xiRJm$6HwpKv5VNlih4vLYzn`eb`Kovm-SE#b`=B%eN(4&Yg@{Gy@olx-z+ZmQLti=`r+m|&;3WJ_^9V>!LGWOeqSS|N6P$L=Ozw?K{v1sCR>s1$8)U!<#^_WpA#d%L$C*!~~ieFhttP_uN`xp(vl z4wV%_d(k<^>1Qkw@6=nf^>W?wipM#^iBu3vh}{5zO*xK$~H?L(zx8`llb- z7!0qZF6LVky%!gFg4YJPuH@i|l4To|F{Z*g`v+H@u#z?0di7pt1r=W404J(m0<_5Z z|CiJ4>Q4}!P%>n9z7)9iw7m*~mA$6Euk6uq{+*}n7?y6$MijSJK->S0^f2`O&v`=y z{`I#{yPt!s*XgI%s*{{2WqT`%*8!W}HQDLUstqoBGouFF03G0@lL0OtU?VlqSZ%0K zzIcUwLBJU>z?@&Gm`)Xl)V+ZH)j1(1@Oe-WNIBs5P~P}n4LFbn>MR0dR(Y`vc^v|C zUsqqNqy_?bhXA}f!1OHDO##E%{CL?2-k-@*<|NdQx^wM1fDD6Rd^0uQL01jd?NM;9 zfa5$E3kk>uIn^)g@b!gGxa=wD>z7_sAKry}?znXg0$_4jPlHv;SUArO-2B}^^@O64yn(_yaHI@KCNeydp~|!$69AoOTsQQbN^5Iy-dGhO%Oo3h_q^V zD4yQ^`FeRLd2zP9Jka~ku5>~Gr$h+nwN9GfX1W6-ffs*nNz&Dld*#&u3yeLoZ6RTK z653uG*fGwiM%(G$mQaR<*8xtlLpGPa@gzihyV#g?OrKE@LlGCQXXC&i7_`YG23kR^ z_v11QU7uPIEz1tcLr)}%p=5XREKkc-3R0Lnx*;&0EGN&MTsMe_{m<#gE`9Wj!$JQ8 z3m^Tan;Q?G;K_9f#Y5etD+QbgFDvMWIJ!6oPRDX_;UHJn@%Z>2&(q=Tcqesy2Lmwx z%uG-nQ!7-S!+?K%5cEMA)9D967db&*AnpdV^M6Hx1c?3b!=8^tUS(i~uJZ~Gx`iJ0v^M4fdhs6>_-2+ zeK%O7`e6rsVvGgpZZ=+I8|2>y#+M^&EB&WS`i|!Xm)*8EHv@0JFdsd4^F{h-nT`eM zzRI&;3yENX^xAR^*K_R$U;L^mXe?y_IDaL;PyUI(E=0n?aaewVSe$go=kQ*NAf zTei1Sn`An6wBE!UHT?y=&34(z91(Cn4$$1#40vn=Q*x+;#R9lFa=-_8vOB=qYq-O9 z664SVlVg_z8AFYCrN8TB_QSOl?##?v0eigu0I za;`k~&I?evKdbZ&E!46CkAj+uS*r}+Jick`#9Mi5N|P+>9WrA? z2@NhjwOa*^5ntd8*s@6KfeVm>AOZa(pH$+75);hKLPlf=6w23ff4&#Y3QFDuyLf-X zt(W#6uYU%H$V7b;zizw=sb~HHAO9$c-Dl1{3%m=o3TlZ26O@)i@*d1<%|x&#>{WmP z4Y%Dw#Rkrr0_YroX|ba3LQp-#$|~RjF8@%*ZAUklmrmYH1T2R6C@=;|!1V!PBJvn7 z`XkWyFgXt>W%UJu1orssdeK;6B ziT9t-S<0zRf&O~`tKh)kUoQLx!omw1C>D+N4lqyc(T8gpFRPlRv)vU|*+;tz1A2^( z*Xw-$0oegO0(AI4pZ?x_`>~KN3r{o>SYU^6XDxCmu7KsL$BM!P=&8+b%{cqj7r3~4 zJ~KkVCYItAFN20dF?>CB2*kCrYXpM?aS7w*J7vU~&(FMA{rCy> z_zxXC`e{7?tPXU{-UcrC*+uHm-}# zy(^F_N;|@4!AZGwb4xBy6Lr>=xftqHOM%+t&yctp_@ACIv8nUAEQol0U8n-TFvv8W z3t5Kw){{_InU2?<2IHB5X;A(=`v-ev2}s~d&Z>A`X+0jyk}DgvuaCuHNK>FTFq9uX zOdqN*8kcpRgDMz31Ig?LxLiAEIU9^#2e>Cw)WnQ!Gl8k!423-G3O`1G`h*1oV*%+I zv7-XIlgfabflxX-pJ@v0fb{u}ipAh;j$A;xSmLJle+NFVTP*Gs#iG#r!2HUM`_4mF zYx?(JsZX~2>w^qG;K6`$VsAYMrds=mDZ=Lalz-X4veMN$82gt`kdo+SeP9En}hHm@zDd!m~#mlVP@J>{3|)i*;>?We`zcPNyt`xF82t zz|L;K%KL-BYG{UHSxN8gsdJMt&&QLg8aH+^6xMen$im`hYS)7P`?J3WXEp0uEyqV! z{S)ilhWxu=j1P7UPjO;d!7<>6nOhMcAPE!zIy~>c2I18V7RZGGrd{>u1Zd`vz2tK@ z|BwcCs@ORUu?ga_Kv}Fv@Kv4)c;iK$BA-ibtYfnkoMNRWh+h8TOHektxdgiE)*r!i z4l!N>kt0@H9o* zEWs?_eod9T(K%4FTfl(&_g*@_Imf7Qy3A*w0HkZNTr8@2*hJ4C@waj1MZ@dhB?BED z5bS)e-l%&BY(S{v)Dh9ZM@8cz1w6QN=H$uSa@fbhBB$x%_dofX>?k}VP&-|HY8SS# z+68dV7+Ct`$!G{2E4vsy^)=JFcr74%S7b#T{j9svc|D~!UVu#>!7js?sJjm2ApH~M z1@^`x@BJ9!`fHjCPqQ1&( zjE3D=at54it}Gi?g`mmMrY}D{i~+rSD25STdGBfPMi7uK!X7Siz)>N}GTY|h30+ap zb<}06UV6^xF2-FBa-BYN_|B5aFE~;5181-R_pZ&54V}MYnODO;Q`(A;`rh7q_rpH8 z*Uf~_xcm%w1cSx!vtHOBSVjg?(&@}j_Rj0S1fxR>%<79*S9vrraNyOWo-(ZOd>u>= zOJ&DTpM!LOn2$h^tCBF%`^ww!W*831UfVidFsdx;D9|2=Fded;P#-w;4_3Em*;#mm zxpoR#9jL>>B3;To6)&5>17h>E!+GY^!?K~X9%!l0dfPmZ-D_T5q*Dp7II*T0ongw zqil;50e*ywOep7KPH%%X#jaW*bh72IF;>2DwS37W(0+H%aZ~@q$j|~j(&Ok1uLm$a z1Z+Fp8p>G+pCWHu}mEx^<`8@)qnO1L%AjZzfUwj$ULn%;PoJ`_Y{2)mBGe96EHn9(^>?%4AQp}XdNIy0~1ovTYu8)z;j|M zU}Z*r@`$kq^H#mB8)TTEbZU<>zpasu8s;p(EEYJ~Q2;A1%LcapwBaQtuoVPw#nbee zfJND)USxYUtIvdL-yDIRAsysgMnQC0rd&O$$!uznonr?@ zc8LHto0yBWpd9y2e_ju0;)*!KOFw2b&TBK&n35@QfVX1{GrCU3;89#K%aQW>?N5$jL}(LA-p_Q9#%-V8t57`RL&bnYOL^Efn?Cs{fC*rOu7CV zn2$LCT&F5D0e)TlJRKlVucn|fdHMRzz!o&7?{rPb_I8f*{ME^RN99w|}oe)QY)dQBZq3Q&L=Dhkc zxDFaOF$6k6p!tE$fIhy!nRJ5yUcy?I!;_p@xOFeL9E9uShSkz5DmTp=Rw#U3W46V) zW#!wlgA3>n`bEG><92|Rz?2V426NPaSr35;0uv2Yl-7e|W{)6Wt4!^tX`PJwQIcJl zW`N$7!5Dw^5*S_UI+25&N5FHjf9oSS$Ij9L-H})uq0LqF;XyQAekO9YLo5|%8Bf7` zU(JA0JECh)jOq`(j9ybb*aTj+irwH2r}~oA4h$)o3{_o?{J#1Ee)q}B+vf?;!e1Zy zX7O4(Gy_iFRMcBAWl*>PPUX_`V8A&L&jzrF+2IXDK%+NKHHj%ugdb~xrcD`xdw_I> zuW8>J+ZgEhE6>bkZ}%BCQM$I4Yl3Uz4D0Hjeg!>~iNh(`-Sfe3{W6jXLgxeNpwmel z#0Ss2WwI8TI_hh%>NQDpOw?i1jjvvM{wU0>xq1_i0l43ddqg*J>eqe+0#KP?Q4;Kk=qCn`UFW#2JFj-~GYN|-#wg!>B-SHnrL;6g{ zZi|Kng*n%9&>(u-Mluu@?hu#7DYE%7j7%D?NAT{i)Caj`5EsEC%yg+>#HUb{WeDd0 z*u=m#I8$G6m_a|tM42 z(yN(ayy*k#_s8fC>j%G_NOna8maM5u4;CiKZmOfG}(eDpQN6yPeitHRN zN@p50PTAE%Fi=0XBtO{}=*@%|EHNmdH-Gf`6P$Np515^neQNgiV+sMfvpJyhGW&Ft zJ`Ah{6YTMD_8tQs(1PfZ+t!OQF9xV5-Sajw!X62cMx}FBo@V6U1cFC*ye;AWFfqp+Tv-`tagt&OwWh z6{FzI+t%h|?7-7FH$T36o~Fs|p^%9wD89koUj9tdzx?(&^*bN$er?Wmf@9dg$_LyI zajys&2=6-W>u1hYf7fx%5u2DBF1OEObR496Ei?d+cm2~d38D|u1%m&1;rF80A@Z5V z$uf?QsnCHp@vYy1S=d%4Krz?UU-z2c{VE0_QD6X5RB(33=i^tRq0{>YVm|({=sZgh(|=Ge zSIp7rt)j$>a6&Nlt8Fp{KdsY34D8;(<%c^fMf2)s@K5z8C-`U zq=NhTf-HlMUENYR6rBF}3H8JZj5-r4BJ#${nY2I)D1DOVTzZ17PY^Me)>T2Dv!V`y z_l(dV?^$u4Y(@+laQS;+rmQmXWzIXJ9n1y-QbmAA)PnKG zNS{*|F#Q4Rf=Iog>ZCS9bPoG2zx{m~^YpASeS`I2M`KSlV3~m$1aj&#H9_ynmhI!q zCp$JS|Lia)#XLSE=4m?B06P%i@!nnFOd;ki_s}kf<^a9%+zK5M58|r_0k3Hu7kyd1 zAp)KA}kH!zoIiBWgRf&ViiVE|}Oc)U(hm#t2F@o3biwCzR_KWE;NC0A>GWGj8DQBLHjVjYpU$TVepO z+baZr`>Xr!m#-LG20Ngpl!E1n?VNggjIrH);;^aBbS%sl@6U#~(lc1M3no>*D`nK1 z##Li_S?nwg#+mk9L8}-vtkj$Zqnqj&hFHBs;>rYW>VNUPn!e(V=UnNN&D;Uf2R!`x zbkSj`Yh4>WWgl~#dg!!MuR%MQ^AFOw$#SEE1=sI4R48WkMZBCY!^T!&kiL;S%n5r7 zk=VdXdhX=7eesH)=N0?}*RUKm%1nLhyH)4@_8?E*4LZpi3BZN?`Pc8Mzq3H~5-WHO zXvpQ@Dh%nz0T5sZ-TD7XCOM!NCA ztN&6ns;c4rGh`;%8txb};XpQJZX1_amr| zII!Gv@#J%T+bjZC3&Nn7cYJF-7#(pCWjcko7R4IROv?vx!Tw^K5@9wu4m?egabQbR z^~?&30nvC0bP(46`O0rhU2d!qw%CJc<#AWB)cTHjAB% zcbK5_WLxqclPgHh+J#Slr#_Mpyo>D?5a6So$av6SmtSN5PG-+IAYNS;TAx0iLDmVkVm9`KqFux_ zXmtoG&u{GkbF3Z%2ikdtq=EWGi29gVF&^Y!+$W>yp{4sGKr7vx5NJ*uF|8bUc9MQIFt*KGBM^L8q`~*U ziOxyovy-r-oIzk4UU@7#c6}QNm^;Z=FdK8*TN0#XS?!R2Pmy>m{&Hl%Q z$G`!r2>EZZ_iXJ^jORf*>LDZS)_5NZ+;-Z}#Gr7gCia5cfOq_p>wm?;H)d_h;&ki#-6=H6zhV zO0=g2LjqnpZ=kwf8eD&trv=olL)4v3$igblsYWc|i#MM)bSP|tXVh=0Y^q=HWWWb& z!B_zFKcU{0p*YIo-ePAGn*HCXJL(=&ISA6$i zVE3J2mgRt|dcgpncQ0&=y#E|yar0Mu(|EWiG>Tso)u0&45m7f?0(nWMaoB^pD8}GvgI&{Ec zU~Z<*fLU02%sSxaeeCE4m<0|!J*avo*?iy~3>g0Hn-7Uuy*dbiK0>bm^rHc<@<>DH z47-hyuV@x}g~g_xvc6boY(HgaY`M;H&io+sYc=;$eZ3EV)g+r4<^>R)!jl7KBA8O4 z_)#mK>XWC`f7pgPWD~gh7+%|f5|%AB#tu-}4wxSM5Hlmw)!b?=dtp zEd{D5p(<%hoiH{)nOO1jDVlk}MYs9~ zt1igZ0ovQ^8x0=#0A8;8D1yn~M>bx%%XF;E)IG|Iv_;^*h^9p@)hqMH{X_RM7VmFE{n7Xz-S{||Q7ViN$t)PqQAg*lXD5L#9rgw%-2tx{fAuU&G3zzmc$8;l_IAyv zuTZfZ&&GqXBORq%0A?HySd*b|s(L?$yQ+6`-Iudt!V?dvyC;3U$qXt3F;oI3O-Y^| zd~r(s2R<;JlkH}QclEAoKlfYhFP(%92n4bCSx(nq2Fm~ePLD(2EUzzv`!4p)(m!{g z#27majj6B+qJytr;I-Ici$DUWp^eNywdje7Ro5#9p{5nLMqeng>cR1{*$*Nz8SK_~ z!Pp7wLDoI>e@FXLhn6LV1Q!6y>_Ut!b#ehpMis%Oy=uXLC9Yns{!4ca| zDTrqyjkHeO_#@rRBm*`?2!H)9e_kZ6MTShAgK$?}mNhWiem2yL2^D#m-G|Q5j)4Yf ze==%R6X+GS;N5L+3v@c-ou71#pNVN^!Cbz3iHTs~&I@Bh6i78=NNbgU97Lpggu=H(}T~rD^MJe%mfz8@u=%i@|g{35q8(#z0E&-#L=$2GoF5dbMteA;z)WM!Ok|`I!Jp z-iikQm;1g0E~x98H1r@ti}vE_IA*g1m`DA3aZnj5z6v@I`a4s)Ga__0@7-SpBO|b~ zSqYc~0v^Z@-5xS5hVsEHhH5CTn6T;Z6*9|ocIFv78Ol%!SCw!~466`jvtT;xVx4Ed zSQ6dfLx!fl=RIo0m}iNZkqyUK7V1SKYnQo7Px4}buEVts=qaAdVsv#1j7vbDKgnCR zdechwxF*j+mqB#$nS{<{(W{uM479}>$jlTtvW~NUPv%xI;c~fpR{j`huO{21Bc0p! z)^A_|0_7v~&=}HYF@hha`#g*xl-1;1ZGD{};FzQY1Yp&;?1Kca9rYC}y_nGh#{NUhSZ2 zP)3-8x6`Q@Fo0oY^Ie^gv2~l_&p65@7&t!Fp3E!+3jEo<0;*(`$?5P+%>OwMR}K8_ z#jl8x3vuzWOr3b_M%~=CFg^Xu%J$BsUv{Mmf>m7 zQ*`Xx-vrxPzxD%O6JS|scN}YH9pC1CI-~59yLqPvs(c0)>363L4|7sn9I(O*>#Vx= z73hOBr#)jA4SZz-cmG{$gE)@My5Dd89(A)_E+O@wR zG^_e82(juWU#r(*g>~-3UskL^UixVjc&tt+sGIGd{sdwSln4sU^rEkUu;XA3kdv($ z&@+bi#sx5)nz9W%&CsA^%i!W&XIflSU0)%CC8?7%amYA=HKoJ!w`YGS zX4fkn8S_Y24BUC}c|YEvhu8#wH(nCSop`dLb8`g{>0VL$4`ssWgGYS5)Hk}lxXn~p znaK6@lm~+Yse0)Q3E-wr4fVX|U?*=i)gcTS?HRm9^A5t;MlJX`Aq0%Lfb}P^y#9#! z#I>g|ST=0^(26czU^KRw_X)CP3BpTHgeTzKd~e>zhG3wI2dOtRhM}yv^qB$Pl)0h+5Dx`7 zMYdbu`0Os1tS1dEN9^oiJPJ@B96IvFZ=v=xOl~>ug%IaJ0_Fuv(pEbK&UUKBnXta- zG)tvE&pfPudK7Gzo(9}bgPjMRY!^e62;px%8pY{`>x_l!lTdzIUv)Gl()Ul_iic6h zy)ms)4g=?01P%yw7qp$4GZ|Jpv{g1*k4*K`QqX+W(@)qIt-1Epj6EoKAktF|>K9rj z4{p5nPcmX%uwH_UjeN!DI3BdOJz$tb*^9TZ{j%X2U}2mEF{gBiS+D)T*enW<0@PQ* z4sL2=3=V=p1+?&G`q;M8wJ+6&j>=TGRWDSqaRj8kVie}jojm^hDE-9_*KD5f;Icx3 z>%al`6Y9g&8;N1Q6Bx2tw42WK$i{Tj@N|8ETZoLh&vqn1JI8#{!R>YhnaNagK6-&^ z05B_J%fR$nEcza>)!86B7~F@sZs3Ta-S`&Nl0!O$*Eaf>WD^tOix3Tmcfer$K)4ELbf=qMq6A2jvJ`shx*}cXH)G%3@#Y{-aw5 zyVGG|=z%_7kZV>S_!HafKg|^7P!_jFf;@N+v4~Z;Zoe3C7R(Rx>1|FtARLTq>1Ku3 z6%~OCxTN#NU=C0#C}pM}+?-1ev0I###M=*IIjU&b0tbX(40H?DD&x`Rzf zHNUrBhE@p@RQ>0Rclk&D>xHjkxGnFz1+{bDz`{;^$`muhz;S4F507tWE^yAvAb*et z$fq2PF8?xkgXB7M_AJ#9jj=rLjjw?E@=8;E{e0Xad{8I)C0p9%njCzc7Ds<*_-=$ZV6HV&pvh{5xM2A!MH@IG- zlLws`9aldsqQ0lbB`}Azce~^Wj+{PV`~QvW=YNhE7Ar4pXF_d&l0ZOMDA)9boe z_|!r~fUN34@}sg%uU!T_z2N2rk+X({R}++X@LGT)04yJ5Wyl3vP18_3df$Fd#+J=7 zOSG<~h>A@ZO`wh#*~u^DE z39!{JrjxE1E`AIIjJ)$IJ<7vkm&BCC3Fmqg)o!adzC5c6Qe?vp#PQlyT|>QMymi3> zB^ETu*>rfgoA;jqoUkRkfET!W7)BYOa8P@r`VS*C{Fn`RFO6w-&KEd8%wdQOGRJrj zz>Q;iLKHd`M$aT^&wud%tVyg_M&`iJ&)VJJ|2{10+YMG0m3`p--z8hC>6nkc9hrYJ z>Ed^Iws1GjWwsIwh(2wcJGtW?;oCVe#4{&rehni!w1X});50NSclK9qWIPzGJD@M=&JM!e z;$?f4v73)&SNl;+AKVMcXlxz@<75C8IZV)t0Cxi0E_{!n8ZniK#kfJMGS6kI=#KzF^s)qurPP3F6DpJ>1oyn|P_B z!pKyJc!rC`1f)(KTMFxdGIirou|$dRiG@^;EwzY&!7{*G2@nj@E8_hYxOt&V6mWJX z^&U?PlzCqrAZsl~d7vQ9j%NU98wOcrIA2%p5epsDR#iuvUf`VD{@(F-DbVGIU%qV5Q9Tl%~W%X4%p`Aha8G z!1#x97yXzYXQAA8$eD zLGd8K%6fBpC&@^7a@QGAq9Zb^Zap_`XCeZ&cb{Y)2nyVj=zKwY4X@BfcTcv{%M0yw z%buOL{=liIx88Q4TxFj1B!Y2o0}Se54_N3>VrViX^90B(WFuz+BwE3$cMHJ*?TK*v z$@hOkyI8^B{QdFeRvGD2V8E79b@3-rjgS+vu^`vXq8tO6xFfR_ND*Oh=3^GK9q1Cl zmsEhxf`%IC4Sizck|GPLWMEo{ECX@&%m!Bq=U}v|9h&P%z=#Xj0i6IHX$S=e67xlJ z=r>tj4#7OD{P00m1zlVZ;G3|UF*!f@@+quZUe&t~qa1YVa+RYPF zEO*oJfN8<4v_{Mu5bEUG`56AkFP@5d^Ko9ES$vy;Lc0r z1&V!Eguxr3=}pl5*t!y9Yrst`L10zq)tZM7_dDL-ulsT}+e716!;bEe^W1s_><(~l zw$jLR{j3pz8`XB6C-+##jju!ARtI{CJ+D90iB0D~0b_m%RV=;s7%-g}Uenrljy)KG z&JFc9SMNFKk!9opR-ChLs?Y)%5AxD8&MoG0KX?p`?p9wiZ*kpc7^?SP694)8dg z-jjLI_a^ly{mSo|`~qz|Uffu3@^&kTj1_Zy8Yc|I`#QExK(fPoi0RMYUJ5Uoxb#aI z1u|?05#-K8Igvy$>q`W?r=1A?>(_pNjP7Bp0GJ;<;k? zoCp)k*cN0GPcTT&&x5)^ydyHT{bt7KX1xmav%MH@n&lr80{dXGiNpgBPTCa`)VPKFj^19Rxs z!wk5)V^7E3*tqlY@1aLB^Mb6b{&4LNEo4Wo9@rFN@D^T#4l&RpS{xHv@W!`Aa(Y#P z1HBOXG^TLq-W*JUx6Fe?llO^K?8KV|XW-B7UcYm!pE?M*c>!#eeKbT2TVV_+U}XmERLy|j zx;tPq4$>L5>MB2s??5odeR}@Z`38)17`6}YXg$BjiL-J6y*sqoaj|@vv)}3%IN2Sz z6sz6XZvz^0<{+4#ToB!5UGM}CWD)_q?h;+?>aaoob>DM$H64oN7En8gM{wo5N)4zj zHGQv;UGv(rV63J8`{><|uoF|?>szJMtU+MBOg^aH306F3TV{g*ia@7D4Ta#j!h^Yz z;VxF`QQJ}?J6vxm*c5{n4Jxwb>_V_?>3?5e^~J#Q>P6-auk1ztUHw@p=gc(&T(S-> zG%h!w15CgW(b5tn3WW*O*#^cF&N@R(6?ycyP9bP_Iu|BhWX*g8Tn`}HBABghX@TH7 zAoCj7Y|p!Ygop=m1-#z5BZ=U=YD*s26sXRx99-X(4nd^@=q3T1fuPt|q{)}AJJ(H5 zmut5|_2yXt*ZP|=dh0;UXSY>LC_LzSFqUV(2RofaLfX9K-w zSRYYS$m8?5T;NalSg!o6t}AdJy16?*=ay`1X@e~J_isEDmOYac!Ww5hIEA5@wF!uc z;Ov>;w;u0-S_{es(LDeQ64(RPf#yI=U*L?03FgsM7udx=vaX!{d?^D=b1?>v7n~5C zdoI<}hnr$3hKL81Y~kJ@Cb|Idq>ryXBLmY=xUZ=jdJXS8Kp$uv)WHBXwy-Xn#?ryL zpbC(Q%h?6Bfap!#DWJ`Q1dQ63QIS*rWut#{CX7s7pg)vn1pKqW=pG;k zGd}%e5=_@FfaR$tdRe&yfF1xiX9N3>#k9e~D*#79tN@^11o*IM4I*r&F#iH3a|ovz zI2R6HQmT)qUjPbDN&Pju5elQm;OMxyr3X*=4qyzJKv%vG#;Vq~B%AvCcq&uq&?zv$ zH6Iy!>7>NSB9_7F)`)+(?{^sZih-FVVB~=5N-*uKBT$#rCvUWiFy@KqToS!9ZwGU7 z;S9-H&;|$?5pj@rGLx*j4IbP8ovryGlDvWkOf7D~hHWe5`ZtULl(?vaBSYWfq|V8( z6C&tnV*)#vUebq;UH`iJZCAbAOBZBUW-pM@uzm4YW1_1+^TdgsQowittUdv+Q8@z^ zKE_L~EZ3cf*a!nNKqncnKx;l@lJQ@^exC!HderZ2p5nP!e}|^Q`dtAmY{uAt4mg7k z_$(*;7L4{5%7~4n1k~fc&f@U(5OWa|Yplq3)YYtgS*O6Ce=x>r=~8m_xU%+HmgtF{ z6>xTP;Ofu7V$_eCGIzpS+zRQ+w|@$j=}}?Z&>nKbn1>1K^|>)RTTm;uOZOR@MPbG8 zhLb-J7B;Fw!nzPJ;45?L%UP{ZwL|Ez5p{b!*Y2&}$CkZUb)n?4bB`q^Zm0+Hw#!D= zVs(+|#qr)=zM_Ip?1C`>ybGNjKMihxS>AAXiWy5F(OWka=xj28avmg` zcRA;0K;Mga(K%3vXA%>p3&eeWHwqoPtsOa5%qanL>MMBoSOD~lk*NqSPrz864AA2p z3@YCHg>0eim{*Prz|~*9AkTo9Lk#XdL1mBOCLmG-IM-;JkYQxK4rCC)oop4y5COEuTFro1Ol%9io+~j}iM>dD{YltP5MB zh4)!+^CvItFPntZ0B~_YxP1YUXpUJ`aNf)(pB=V=+0(olkOr!3=2dlCip7WW4w&(CdSd`)X{1Py2rtF@I2{B zN7Bpm)B7w4^=^DI6oLAQ9NydLtKq7dmY}F%OCy|_lcIV@ZloJ62^HbCT#Nc zpYs*Yq{mbb1SfaaPyH4A@?ESx;OgDY>ZvN8<(#UZ+IH<1qNxw7LfyYj#zWtK7pjhV zlmuECOJPi#x&H1Lt~$V-cMW=cF{Ab_Va zhu0SehvsD-E5m>>$^!{l+PgGufMS_oXF!Y{3E+B7Wu+$fO%LTSMLdkF5=8mONYT3od{4n2>A22|Id#uJSsZ4j*c<*g~n>sA~Id{ zeA-lJcUmN8t0T;H(H|Ds!pU+=^$;1T&XXpRP(L7GE`Vvo zEj{*FVn=i(^WXi`-?`_;LlH1j0nnL9r0Mnp#hEC6yuH&=- zwt@O{VDt@Ll@JqE0s$~~KvdzJgC{VTY{x(_XBt2})zbcl`JLS2u=j!+FzdThE>{cG ziTL1xeld9xW2e{*?n)rKO0WxY=^q&JKoF-0tgyt3L3D$Y8-OwDxBaJNqZK9}+bRnJ z*#AH;RK0vopg5PapR3T$(f5tCQW)J9J-`jT^ZbWi{YpeOo35vFKxwg%=BC$a_-^x7a-uKxynuDRF_F*7A)t%CX38ZGXZLZ+?W^=Do5gH*JvUYt`GbcK@+c~xGk)V-s$dVo z>Rw#i?OhNEwNtEP{*5<&Kg~{6CI%ip0AjZ?@cwtzllo#Zz0?mXjbKA41L<~-&6KeR zSTGZMSVNcjnK=}=G>oIf7CkU9KxYE#SI-&WC6K-}oj7(#FXz@bFamCS1tBJO&e*Zd z@ny(AS zo6OtXp{n)y$RTJ$Zr(A2j2O^jUYJ%-+=6~65iEQnZvO*R_}Wt>+ANIfT^PpOEglRo zfpjsv@r~FM?rym$!6&(cnO6?qrn77&u9>splvy38Gr?*>z(DBfmMQMckOBW6WAEV| zS9R_U&!~H(rQX|&nq}FtdT%qbdY2{J>KYZR+bV97)y9ODgakrJ0yjV)<&r=`fRF@2 z2&_e~rpJK6e($}xH#awVlXrdJKk)s2``L45Z1}R?<=^w{XFq$-IeS0t9FJzsWWW6b zaGs1x;Obr3;Ad%iZoZV|NRQ1x(0{O2!&z#8DC*Ln4nbLrl zz4kow%**1&kmvYNo%R9yDp8dyu|jYCtUFEuHU zw~krBlR-eD&Ra%#To+jSF&QZ2`W8bD6y?xZ0fkH)syed{>NwXmiUWWZ#0}R>)PYxk zLJOJ>pmFW`Cite9?DYo;K z6@xbLs)iKx1+w!;(P6n;uL5h&s8>J!GrP)t90@LY^J{1u-n+vTiMC#6J(sIvm?!CM z(W&#_7kp+O?$XXAOl2)zxo|8eb%13A(IPTL1+q(o*rSQ z6D~fT!ZI`T+E-c`qwUARw*KegpE^=K@d(v^9(^VX3>cLLoF{ipfZ5e^cXg6+y@4PB zUwK}qcM@&0UMT}jul*s+58^SJSuc+-W5npL72>65m}pEKpf0_qv7b%?=r04^uRbC2 z(&#E{r-gy+(9r?WR0MX7A+_ao1a9=1y40f+Sg9)NDhko~riX(AI(`^ndwED-y42Za znzBSRKx${;1Mh$R5`7MwSr2^Yrq)47td;Ertj|1_`lYZ69pmT&+v;QDas3eMvfFl< z9Q1oHh*tvxdMQSq^~D=)bUa@raCI0Wgf!{Ux;o*ROxGX6F0;J3_5&O4Ii8Wj(kN)M zNy~$IW5ANDB7;5v0-3TWhNROUKhg}T{*-jVJ%P_7*Vr%LiiUQh%Yg86+3L~G%b$PM zAsXuipKpYAx8@rWq{t~b{GI%0TEefs_JNx3D61k zV}B4BOB*179`MznP{YVHIn{TCJ7t(j$3n@Kr_JR#I(SidcU!TD zdwA#OsllQQ^El@7`+Gcw!su%kYGjUjd$mHJ8mj&fu>9Ge#R|0X|Ld7&Gm_LZNYE>0 zNasdHtT`C+N4Qa-qc*yYOKu;YDxa(57NaIx>if|0gaOBs!3)E{cwnl|&}|j3Jn7$& zb?|iR8NC-y2nGZE)8G988Xi==9iy)4^vZB&S`nID9ujB|Xc^Pq)3qGRBXkAhlPaB) zkkX52AYCyb)q)}iz!RtW)T`Ay#fh_lD)p*n((4`x}Ou_LLIzyOZd;a71-$7Hd z_hep1Z`&3`U_669j4&Nc^W|&Jvq6ck-OYuk1al>fRT{(_8)-#BTQNCF722}RAKxIu ztXuZtqB_5p(M|W`4%81i7oU3R*D_^B{m0KZ+Nel;Ji)l{Np!d~RvduaVEmib23A}C z{M(x#nj^WUfIeGgQ#8X4;2QV>pV4UWJP@x^0FyiRU@Ld0jRZ+YHUor4wN9J!(fF{a z8Q>9ndGdnOHQ?nSh6DYt-nV9LV8Q`?Al~Jqx=N15i%K}7yF)V(+Xsm3}?`-KJt zZmGXRK~{fsMcdjn%4_4HqKLpWv?~*?CNwD^*W2F(_eODM#aZ;rvqN^)22+@uG$8Gr z=k=XjT8K6Vv^5|xMpY&DrQrUb9AqcRzyNKfUkiyZ0{kxDK|h?{$=B{UfgZEN$~0L4 z0elr#J`b{j09Gu(t`BH~+}{btSNXIBy#7QxZ8I@OXU4d|ICzSY63RWiB%fk|1Pt3E zz%A1GQvT7;<0=ArWGI65)ybnre*7&_jjJ#E(hGuGnh)@}O~*+kl>0zwtg_dE=P%v8 zc)?H?i4+~At0?c@02)C(%e}aJNUyoua?%glmJk~U!z;itKqYKrkAs_Mc-9Y|=DLPJ zvmgUWt(F~5rztt%_`Le>_scgzJ`dUkF#}Jo4iD(6@baVRCuko)jH=(M|NMz#1rP-@ zTo1jMSMl+W-QP+#*YV{HtF}xNbY2ECggGPF`;B(?_6`4O=OO?f()*H_cfs|5|#XM?N1d!X$H z8E~ZVXjW%Cc*UEK8~P1M2S5xMdyZ*?4l~d<9;cp0pjXdyXFa;%9Zg^E}ZL!NO4FlB%U&+*is8r^r}pFM{`)1d<< zHtugfGgg|^@yeK40Q1BY<PrS!<9-Xu6HMw0*CTnh5Du$%YH}d}$2wYH`>}{w zFWn76eG)(vX7|@fW-NzA15O87$aoP0cmWrvPp8j`yxttL%W5FNa~ZglHad>sMjI^r z>4BTj&@4`UF|b1h=rQ--Na>Z*I?+?j>DPg40nYR~t{X7A30tO*@AE~s0u(B0S3cTW zk)vr%oqs1R2WjEp;P<~b$2Hfd%A9|D>YjCdat1etnD%AiGCYmu1gMu`rrsm9K_EFi zOP=vTAGq>|>bD<6`yUTKdr;qbpqIGMX<^U;#UKt0XP88>d{8~Q44wDx0W*a}&7$FU zUi%)G8@AkYoSv<+f*k|3l&^v_$ZB{}#z)wP-vBqD*WwpgVoB}hcKCvTEA)xrlpzH} z8lEz`5Y!*aBY1w`&7T-U6OhvPSLjd-3JB9Kg__Ij@@<`G`^m#YD;;PV{D<@wA@Xk)-YVEZ!;YQdm0`aUQ;Np+WgJ{~!xxEby4Zd5O z7r%>ckVQSUVS)u9nAK}DumnGCLRmzE`$y)-s-Ml+`s=NCOz=2d zAW-rqxz9`Arp*j!_c0{6YIo&_*bQn^Z;tyxQlC(Cm_p2rj)|b&1JD5epwkPvj?8cy zq@d$qnH;hXv6gaW%zc3i%{h>^z(`grI^5n1k7R=b6B}T=L9WEb)PiM*3+kIR5V-qd zPx&onNnct#zFCD38v>`KiA`ynE`(T_80OkR`|l6`RtAK}ps9)vN|c^YF3+Ve zxsd2S!O?~nE(v9nWrSf3=w^P;N54aFK2EgY1)$`r^gW`OW8iXWqtOWomD-BwoV_j+ z!2L{M0U#E+iCB7ve&}|9@uk-nV5S|O7Y$IPbaoVJ$B!qh4DkTRE3Z6<*8LPk&UaOS8K85WI@Ii=^uynu zy&s&*J)XgJ>PisT6^KqD$Qzzx**Vv=$RGfig@1eWVQ?lJ3)!peOoDib_T_+$dZHm9gNf#90}BTU^eNR1k!a4ZF#>5@!N>~_&|BP(K2~`M_Ohwkscz1w(Au}^W4bUKf}dnY3q;EL$95$Rs}uC)85iK^^~MHhRtN2{5YqU=fs=lG zVL6DSjB^9}Rp?KL*NS%6>-~UaCJ+-)kROHi;!mWrT6sz*1^QgJH|Q1CHLjavfTbXx z77?gt;hu)vTMcGoJZooluuO1v7)T!?3nCD!>rXZfwZdY+r~;fI7x#DVd}^4-yubrG z;vl{LYflay$!XN?V`G=8;4B1}pQkISr^~+xE|DiN@Yziwn$)9aA?tXDH0Ig7%<0&U zrCEo~xnp+j8Mu1k%8h6`SgqdsU7v3c{l_G7n6gU?I_n|r;idrdg8CRb?Qd1TJ_Nx8 zDqPn_dhHqX07eq9NpCjM?e=zaB0>5kE3EARxA6JBV3VLQ_ecLAH-H53X!1d> zq(SqrsMPJDrK6>e>QshnD}y0QM+8Lm+Xf9>b-McLji_aa>UR`!AT$MT_A)M->|lcU zMVk6BNL`H3h9xj&&YQ<|t!?fpM&GZy5Bn`7HKve+ggZG~W`{;>M9w2CO zlvZbjSC6|!YvRJ2KwEt6OSdj|F|?;ZXJUuO&}{CjIe~`eWwy-HpeGoRwIJZVJEdLo z+f6l{WXu9XhZzGApj6tpACv*gJ;hTShz@r^9smV!1ygz4RjqYq^~!G`05RO16Qn|c z&Q`SVFc&@C7Qo0dW%qysTl8vbtu{Y>3h=mqWpEAL{Veg~mv7wv@>88MM7!{n2Dk_Y zr9eA}zBdrIF=ogj>@W`ntjId&7=Jwcmh0rFzmrk$5s=GlbghOYf}MM=(C*fWQNz5t z4zy%#fuU57v;N})=rgwT?kPqvfc(S31U%FrnJF^3VAfC@LTRk$WHA#^Px{Fi)s~5A zGmmF}`7TDPIu1**`{t2}o#u#}IffQsQK9AhBbk)VRjuIDpffxcjWpf7t-h7ugbdVz z1{qsGsx-VFtBf3kprO}CsemoT$nd(=p=AZlr3m>4~Y!!0L>kj z?n!A_c1+qt4Es^OWU?qUe!5X6X!oF_zSGBS2BJXCB6@T6C^aZnHdy7ZJ_^R1$O0Vz zO*0Pw`+%jRYwBQPF3mnBy6F|#Z)SyaYw}nDn38}t2=hR|T`U+q2+R~gZIQ*ab?U_n z=#>Wg*U`QeAf8rzn>uDU3F0P5&>_v7G?#B(J+yCAr}wF3D65O#yIgk)ezq)Hbf$*woc_zpCt z7{UQapFAnu@va>RB!S8cqbI_U(JzO@OD~|~g`uPEoz!`5Y;BEG&dC(;JtEm$Xd}3C z;NXD?Rq~JNV2;U-gO7z zwdeMo7-e?7^)DYhwL;6$+R@sTt+_{!qkEjC71#?}6_JYrn1L=vBEwq1jH7XNz(j~v z&v$m98zQQ|{QNNyYUk0?g?8T1T>g$|xfTQZ<#s3>AYOU|aqJ4X3m(3d(G|lje*P@j z`BMc-F~RFcVmw_DR~Q-@%n3aphOxTLwQ(B2rUs<5Mt)(!#7hCt0@~l#Y(v9E(DSUl zJQ%=J=+KFUNTbAndh)>x)Y53`3E^mu80rB?+lA7dJR4RH$zcpa*aWFJD@56ch7M(Ac?S;I-$OcWum5UItvTm+x46^C?IIuIJ<=#JHQi)o5AVbG!Wo$u&y?NVoOU(T5I=M)V(z$iGde@-&J|<0t5lG17L(Ck{E2} zLbLX8AbNZE*x1B_1S}+%zYVq{{cbcmKp2bxuiOT1iJG1Rc&aJT{soWc$`6in2f*nfFuj^8h`ykAp8oVXG<#;%pTKttAPc(cdm+R! zL_fLJ>VArxUd$rX6X03mq8z-$Uk9$7lT2^i7gdf&vN|B|H|Biuu!wt1>bqK&f`!h4 z%4L5jSsDZka=`!Mz06?1^x3l}y5BTKo9{BuxZFmNAOj5(r<})N217B-GRW6^M-t)EI}V!*D$_J zpaTb;qoPPxzbKP&a^pl!Q;&L%k1>~rK0GzeB(l_~KP^B?t(9?ZDkmwOi812Q)GXuq zsL}<`qOAp-vwT|QE<>x=fWAY0l+qZW0Riqpg+1CO&{p<#B$|s~2V*@0=xzqHj&M>P)g0ziZ9 z4FYTQn+QdtcgDqdN0M;pj_knx0ns; zrwfc}G`ctNlS8b@x$Zv{kjm!FpwoMGb0a#0uZhz^gbQgwE$ z%P_dUQ(DP1G=`AJN|Ai}c$Bj!KDlG4?S8q zQM9g8Xc?B7@`2bCQ48NPI$ei*AzP*2f}gkDff#qBfJd30FJo#kBDO(-4m8QmOWztp z`(O7y6li5xTivPp^J7m#2nGS?q!C_Wbe#4No}C?w`|LUQW1CwUGeDO%XO73L(4GY` zpbn4Bo$Z=p*llguzy_YLU`ni>L+v)BQfOoZKX=9Yo2%7b)|AkL5=y!h=M$82&nq_vE?WII}$`;XT0 z=MrdEQoszf>mzafx-8Uwr0bI2opujTq&*|A*5QFpZ9CYCXy>FkoUM&n#H9~`XgdMp zfScDbCCbzSo`6gC#_7Ss=%xm@&b|9Qgp^fn2+zT2QJ@*L|8%i*3?8^YF#FXTYS6ba ziUCILHZPH>vt#EP(7M0)P&}9Fe#2QePzB|78<8g5(*rbV`V!(#a})^_e4x z?mSR`fk8j&9FtJMaCTF?wi8r4GMcHLcj>(PbLmdhtj_q**0Zbc|DcoMw; z&>+aN`p&N$*OcgWXn`bkS12 zRv%!$q5I22I%%L`x_Z6w%<$41)Z67Lmfye0zH==8g$KA21H5;tjWxPmEQ^AcZM3|u z=W~(T)h8h8P}OFFLNISgiM;;0xQZx4CqkDro* z@@-_^CRg_HE`TZ04C2%Y&?moM;29a^Yo2nqZ3gN4{=aMJ zA*jE!21PTbfqZVe;-h<+bOQMgFwLg!FUu+`xX(&|8BO%DL5OJCITR8B)*ZCmB>e_(0?ERBGoYThtVi54+^tMHxxsh`XkSJ9nrP#9e+I_A zmn7SF(Fk_;2Ycdi$^9;tiP8Ak%}&p}SMIM~=TQLl^i^8dxmif}a>vR6G@_sYO{39U z31JGH>IbtkyskH0GjwC10Y(qW8!^%e_E#T+_8w`ai4!AJ!F~3n$cTTzF;h|yE*KO+&a^T@zEKlDvy zhVMxCI!@2hG=eHLF2>@jzBM=zRe|qYUHZ(jhBaVJCp#J+Sy{kWzwp$v8upq*a zRKZwJLH|^xp}bCDIi|OAuhVl0fNuWs(+4;w4~+N2YdUC_ve5xv`6h!zuprG~>e?zK zpB=CzE{;`FpdE%zqx)8XR-JDJt;%8$_0Ul>cpJy|HXsm0hjZfXeRFz&@R2Q>QV49Sc z1IvDb1ZlO?@t80g1Z5fGn3@|TvN)aa%__WDD0kar*2td3Q5nP&!gz`#^;sxy6Nb<(55 zh+uxIA4}JJ;(CAv9;b@o*mIC(WPAjJ1a`ejLm|SlogT8|%k+l&2?sx)&elMm2_IXyNqupV zksXo?W=*6h*qteG6~;0+y|IVuN-;D{f5FwC@mdA2Xz@%ypfoHpz^2D0ndlxBt-)RD ztKqDt-snYV1mx0$hUc_^u09K92LTDv=-PM;J)3B1r1>IeQ0!;11?EAM)yJ7b>YJ1d z@|pD)e_cz5YhU-!vYDNxzE9MD>f~2^zTCB#2yn%~0BBT1a2-!)U%MHdO-nMk`?Gg4 zC*S>xB^&BD4YYl&GH7sCDmR_yvVopO8YQLrTw`o#tf(3olktTfpVp#Ji){=>Q6qW^rJyoH7?(7|=ZgPNre9>grX4*twg6RV*< zw8a5=)=87`jsYlSEwqkGYhtX7jA^e?${9*@(nRoT)~8R-^)%2gKpQADu6KGmqf!*LXa?&Jf!8dkKc7|e z;-=nMQva*){q$FrTqTv#R7g|GldJz?qh)D|_2Vm3St9bA7!IKn4e&x{uRJaNz~TWB zLitKS{ohWza*4o9`s=l%6CP3$1J}mumsev<6TEl_TIPbA5*X4n^Ds!@+#QPR5HTB#7LDOvNYS9T zzaDd-WC;SJ+?Se^Hy;ECTxAEx!_lVw+hfm)M&IqDV^1@6#ESBN-*zM8rsFJFA}<91 zud^v4f=?I{ggqw4Hx1u0)MbjsUm@HN&*eoFkB3ai&^ORC{l0Th`LL@)mtt$ z>BXsE(^;uqgxVoPn+&J+{#XAMjY@{QZ?)EPjcZ(k^@VSN@AiXz5!@*Q(Gi^AZH)4; zzSgnPCebkS_f}teZb!P?C8TR>;=0;OoIae=Gp$>7M`}TQA^yO&W zV@BKSo+NX$jXZDRnIoB}fK7c4L*yN4=ytB?!-soKq5=PZpLpn@fMdKWZW_8cXD&ma z6U11m;8~`45QcK_J3nQB2kV%pvlxW#yK26`3KC>VqocoJisdToliRg@(6R6u$obk- z&Qp+qM$1c&nm+tlnoa#;rs%R_(X-`9$A4A*#HMdwo=tu0GML2z2nvY{?{#Hb99~}s zgnDmlC#!bS8xJxQI#a*|%p`zWu9qN+z@xmP0Sk_*j~){doEIee$1WP*&4Du_33t0S z(opV(7$OAq?0p6wb6pTM&zv`KF2k?I=!l@twNgtn>Q03*$LohjprgTQWPn~86VZ`y z@jjhA%nU&;8fMMjksk1I5Ubp!JHZ&#+8PrO4eT=AXut>%5BQ&VKMxMP|BbN|Z+`FK zQT42WhN_8EeoO04=vCmhLioR_%=iIVEcn#FU`@Mu1QfaAvjC#T9kJ8Cl#c-%G8RBKOnvGl&-~a z7I;Bw*tzh9?N4uz-o}zKAOd~tWGHm|fFZWkSAq&;kj@;S%`^S+I~z$sHc_9nIk=5< z^+jxT~B16uCbrZe^~p z!T{kQmg}Cnzdi8VMiwPNJ(xk)MA1+wk`8L=@Qzjc*C85jUQ-vXwYpMp<$&Ih9isb( z03r5*xEjIMKkmGLoZf4tLEn3tDe&=k!RQ}dHv?Hh>Ol;n|392qjfsiDAP=LLAyes? z(%wPWBMFg^i#LcmZC6OmWVfkSk0;bGA%>lVGE^v97s2S2zCEswmb(?>_Qg)Jl0 zAR9UXrZ(`Se%e<~bPj@IxW|OzS#WPKn;3JopyWnlB#FhX@(9=f_b8xa*joUpUvUyO zP3}qtb8dP{9?u5o#?;lq7v+I^Sik85zHA@JYU8wK8QFV8Eu1GA zqNRaUP!(uL=dx&pzw#pJtuJ@?##J+=fL5Lfn3e{-zX8k>Nbf%{BeaQu zIztkH2h&E^OJ!({gE~Me=h^laCGrv=@YiRKY-TVGZHP7v&0$sypH&O}rFR8M2QnmH z%mu^J&>i^&U@o5B1sVeZJo^@iXP{a)OK7*5^M$+=)Pvf(I2FhR>4o(igIpqN@J>TA zgl0N{$#>Wk!OM>BsXtwD@c}-K>Jy1F%3=uR9tl5l&y% zXQ=`Pc{NB?e_9=dWOuT^N8NYx;xTvFe-#a&gAr1k`mNq|SBjNE3K*Zp&PV64e0bb4 z7<`fm_Qyv@WD>Y_)3xBx=l%TmP^fRgSh=!lQ2rJ^43OEbE-mWKa_F)eegF2|3m^UD z5ai^7i%+PJy+CfsI_aZ++yb(WSV&Xq=K266Acj#0lrD{?jB^wI43WH-zYVU9o(ysI zua7?U{w@2?>Xazh<*Ehhccvgloz;#=L`TuSgBCh9cUUHB2Qf<3ql{T;Xgwg4yK706 zj__zk;;J7F`U1TL&~W7-`u#lUlV5`YEW7=~qZ85t|I5GpRL5H!7r>JYfUHqqz?L+6 zx#(PeZr?D|SO=603-4zovNJ~jPqmD(wQvBiIQn>E^$R$x-HqnfDl}(w9ao<;NSKQ< zcQX3A%F?)?2Cle+3I?Z(N2*<*1Y$<8e)fU{i?2Rt$OH4PTJfR5zan?RL3paEt8 zeu3d?k)(`v_f$QF=ZI_<(?I)__T#9&CIp8)qS=xYDhGqOit`7u|))qD|I zdXuV{)N*!Y&i>E_eLn4uOZV;PnE@A5Y{%w*`FZIF|M~eJiUe-gg$W`&5lJ^FUUH!dPm~_e8&UmvnH1fm!Gai z%bLPloKPP4Z%^I>PKTEiCD11`ps~FRt{HA@7IcykD9|6&)!|`H5bajVjAb80ZHdsV z@(@NZ%?y+~&ww)t0P0DCn$=^WkUqLYx{OvJ=>1znSU<9|-3>7%XQ_oP)2&-?Fnm3;p{mLP< zy2uVVd6Thq@evsko-R#Mu63-o|BpAn`OJ}mfim7nsoyz6JGO7hb3e%(m+beb-vsS~|uRDF)gCnEjD$MznDez}(%AHfQ>)^@mReLO6c;G3g3__ZQMKRy?8HvpGsX#2n0* zQQJoL41`pnmyP(MU3f3#-Ql z#<&RkrO{EXYZRl67p%9RWJVfz^+s+FaP3Zk(;PsTG~hK{J)jRpQ@{6BkEvM`m~J0D z0A|1*sGdt$VLA1`@42aCPh-J34Dqx(AeuCOgD;xjW#k#3`f%T~aX~r`TDp8$U+8h$ zpVam5f1dqLSZYmcZI8A#MhwK~r7Uu{bfUA?d1}!ZserU{`L~S7Qc$@J1jj{kVHGtF z^&KS7-3XK){oHvTP0ZqPrY%s^sDA1%`OgpkR1^mP>(_3CYza&$Kk@P7U;J=OOkd-s zF;_jRIz0BhTM8?)M9CWEG53r`d-$bip;wum0b#zgWhi)#)&fp9gC&F|b5q0WgDYlc zE-mU%Z?z>rs;C1Kl%e5E0A5Dc6PjIUl0`E;UM~VYAEsZ_FRC|xB<+h2GJm%I@rS$p z(W+-A4=u;gbU<5Z^?oNenDyx|bSRS1 zK-0|(u;S3ts?hGWAi9_?V{PG?fny$@vSM*-oJFU)X-^3{z=05LFUZ3=VTmQJ5MpI) z53LRyEApR+LrWVArqm-3Ox)ZlLn(sSCv~*(yeIUePw?ur$7~Yq4vq2d54l1gPt}(( zaN2+u)BFJUV-|TjeNp9RgVMpmPc@ncx#lPkUor}+Y%q0qkI|LfAe}8xA0B~d*=wi_ z;plRzA)9w-R4#VQ&_Pi55p%S^4o7a_3`4=r%t+&l1P7?&^|Oa5A_xec7J*y1=C;PA zZ7#$4JPhMcV3me83+tiL8Potnp{+<{;o0*H@Xv3|2A3xdMmy4EXa~)th{amXG+Nv%>%M`=^em zsw5LVp+Ez$T2+GFmHYFrXY1Jd>^D%y<$KbSr4v}vm(f1Rc}~%N{x4`39AKrT$HBR& zT2Ke)dT!`zbTYhnYtJ|at^=2H@&4+#*Y4-w%yB(gX7NCts)SA|D=y;+m;fTj0f#^TWj z(v!F?AQUunI9EL`ko)F!nfcUG00z{@obOdXC@Eb=c;g0Gh#`7`ag?|z55`@(lCz-j0~9zc5-lBc5&JO<4$ z=#^)|KD(Rc=bwWso&^Oa<-30;mW4}w_ubD%(N$<>_?o!pQIn<2&%`Y zbiaucdl}X0|D~qUGs}xFJt*_kl69?y=2Lf?tJ^X4vk6RQpmaxCJBtk$)-$i3#Gv=P zeyj|-u>H$UmL{u@3;a6pmRQf$$7BKt>J2HBrJM#nudA9Ba%@UX*nM|1gzM&V)ledG+ zGIDLIzxowu8H7uqlXOe`OZRp%0SxG!o|%K@?OVa)BU+gPc(6f zo2>pcp@4a(Z|6PAiL660jXD|}#?-;13_&0ZWUA8(h8%GoY#-=QYGGCZEl9foJVYVS z_sZkZ6ZCty6AZAj{gRrKkPp546MGPu8e7@*0~=`b_Fa7j&EkB4UTC3?XDESio^v&m zW%AIeKmN3@OBF;JGdTU^(uBrt3~)U(MILCO0n8VqE}4}~hy5S{vl&>W(YaWC2a<}lwD-V$-; z00W?0MB3IWqN`Y)RUVC(# zR?&Nh#Go||%AooJgHHrqHX|D0iD>jSk9*}}D|wv{0Ri(&a-asprRm_O#{`9bEH>lP zsh1}6vv0io1E#q*lB;}?>#;c8%6KXOMrc*Z0eKS%+dj;#2XLbNY@~3%9GX?yFai)O$Nvteza{1sCJ`; z)|dlLgIENC46jE5ymg=GgfqLRhrn`mooRy1FcxI9uDyCU7;V4z1Fa6;KJwBJv>g*0 zv(9nJe4(JK+Dx0(n5OhGH|EC5p-?~c%;F+wjMDx>x0?3gDF7V=khlv2x$3vXq^pDL z;yt4ksoZ&jE{qK31ye1!B_>{`25>1m<#P)(nY}*N{eQXWOy|7JNJYcS&w|>_04Zw> zpFpE)THb4qpFyv$8SITmYSgoU=|~>Gk*_rm9tDp(KmYp8d+8g1kx3=~v;^L#?!FEHtRznma_qsm1E28ol{PY16M7yW3=6g@>L#OP@ zz4*MbXa}g+z5Iyx9Ns;;s{|MC>2kGze>N=&6dfpE;)!fzT!EPt24K0+wiU&s_Ln~w zC)k6A^@OkO*256H>cNU>ZvnHL#x%h6za}iuuL7xO{L~rKKKZq-EG?DlIX1=sgrJS_ zSgWC+*9E?4QqsV}q;IE{oCkUI7*HIDJ~hCs5u~Fb)ovK7IhxkLZMN```d=wJyG#-R zHw`p^{`CDD{JDMZJH`Q)%gaw_3Rq+#7;71DHYWj`)bFw3yLX^p3IcTQxadCH)jy~k zZtXDjhy@1fADd~mlce`n|vOMKk%eZx$6 zfYt$c-B<$k(x{hjD~b(7TL=O=KsuJs(yTso@k%I|j;YQ#R*YTdAgv;3mBxHp+LxX| ztK9%8-m`rjVl3kf=lWeR12lfzSujt48Do}LZi3A7@XTCnkRu-)_{;4-0*?gwR{9h$ z8p}a|ZPC=vEym_0tN$RjLv9+@sR)^I(0=WQUv)+HsyP9SFd)pcAE#)*c{1RbL%nmi z1962r8UtDCz>2f!JYX{`d6VHi!cd_#0WRc^zZ4mqd8^|+5#ps=z-TA+h@neA;4ua5 zDTQy`WAvDDR_zI1#%PpePL3W;x1sUhmqHs{6SC?fO~=g_e`K=c)zJA@zXiru?|^_! zX}-v-43+x_fuUfWkpzr2?ge;TtE4AfM*tHUVDM^h7l{UZ+K{}3G3j^;ANtzSkeo?i z%c)>2C#nNDi=D|{XQBz545i@z{N)Wt&R=t>@q?PF3zV8tX%%f5E>uunea(*47x)-*gX*;} zf0c{l(MbubT*F^(xS6GIVdxs4Li5t^X-fC+Ce}g*&PZeM3`ksfG>@MRVwQ96A&~m< zF0>}w@W#UITb?L0+j@#KF#zxY_Kc{0hi~f&L>=IeHbZEuE|6==ZypUT4upZ2or0#! z^`!oWq}q9P9OxoGNnFc6PK6d2DK8W^3FbZ)oGO#R-!H1W3L}qj*x_{NvSzdb{ea3@; zw&d0UPbx}ZI0J;!vl*#%qH9H?o?9qgaHhJwb;GmAZe!?V)kKt!DL7pHc}%pXkkTR3 zE4S0^J_WQGHK`K!07 z*B}WP1L`l?V>%MhPXM`On9fii%Nnt1^KgLf1AIYY(;@GCO}Yl>z5%XgA2%X6zkA}n z8<>&vp#T2qFTfKs?A!v7#$(YbtWUWh!THp{s_jT zUO4Nd>kX*CJK53A?=9$|rPgJrrVy>Z+yxYuqth+}u7FCGP@8%tSMfaELlZEsefpMb z(Ev3J0Zs$L3eKIIoD~`Tt=qxEtFPRaI28qHj^|O~e>$~D*FsNCqG=iyC%{k9_<+a6 z@$J2|Ipcu$3P2Xu&oy&DjUb=^MB^UvT%Ua_)ZIMIK=U!vX*T9-36DTSCIqx_SG%BX z3Ia~~A`a0n-tWg^icX#7*kzgj!B2yyGDJ+>(tG&qX<8|Xf#xqmU02;->N%j^$=xsN z;E0!>gVeXgTmf7&(t>LnL%RCZ>(7c>{b6cn$(W;Wub4z7hLWe&H4PHCoM?fM>`+4<;pPugKf z{m}p|gY2Jxna%3MlGh^hl-uVypij9EqRyyN))?Ed{ho^s`nAPj&Vzbx5BmKfV2mSy znVaS@cu0UjlWM61U#6>RVx1q5;=(;I3`GB!KJFl7UBKLLQ~EMj4b<^s>kaya1n7v; z70i2*$$dG1@&Jg-H^2-s&^-i^xeW9&%Ze(>;_C*fsQ|T4fYC^0=fJpVJ7c!<1QXRj zgdsuD=14WK*Q&T!c;y>bsK@9Am(JsUF33v9p5}4YvnKG{6m6O4F#CaIX~1=wzWAVM zV$RZ8-Uv{CjNJ}0_tthWJ+)IIajnhq#@uvB>d!TX=J+H;%YWVTG(BJc;*T2Cr-mW# z8EfTX%4y@^yzr_GPi8WkaM|*;i<#m z++OFt6h;$(9~TxuSBX=7mW#h-o*G#0fOw6jg@@omnP`j#x?l%%a-{F_Z_x_6rDu+RJbU_Qtz^ zY+3r(7tZEWqSpsNhu#vnKc=Rw38l>#gHQ_^1?iY%PBOljitfMOK?Lk$x-gB6b)xG8 zxst)o|NHmUUyY|ixmjRM8t`I~)b9Y*M8wf#%nQCsXQ8Kn_AvO=Pc$*INj%O7XgMXm zZVT-RUYcgC5tdc|^C4FIZVd+w+^^15x zv2~qcGxh$H;6Q9~G&pHa6rbE&9nPhDV;-F|C%{Vf`kN}$*UP+zAs=Q2F_j`bd!_sA zQ(yw^4^=>qM2#@lfr(4^F|VxB1Ecvi$l#>^D;=k|+6I0GRFRJ)o59zI5=w%P)Csv1yy_>!ZR zw@`rkNYz{eD`6O40u-EN&yfoD{x{mGEKnb(rWSCjKhu@29@iI8MvY)Y8rnfo`(d8( z;|pLtdu8mUuSJcm2K0ua*U=;@eF6RWtK}Uzc~CVKP5bjmdKi*jCelQ9eGXb42se%E zih_>Gx&7XEv>kNOms!HOVJGP0N5EVjAGEF0TnBgm@s%6axon=TnT4j@{jEUACJ>;0 zw=H!x2Vyhlw&=z8Bv{caDFnjOgq*}aLZw2q=PZ8FGu#%w*zcA-m@gGc#lSI3TYU-`bSYt`XU z%&~g^`KhnU7`Xcfmmuz8GRznw5E!X|Z*8UsL6)dqNJ)P5d4X1TC!oU`lGeQ1bC`SL z4GeJQ4_mL^o}w$Vr&=;0OM7QMw`?+-uDW#Rf^;G$j)g%QS_I?aQ$VdCdL|yUp&rBL zKVdzz!J7~t5YVbUC_Qj%hx!)5|2%NJq57i06PJ0b8HMWRL6oD$828oBG{~zHU9V&I zL|{1NUQiYnDWG#Ved4>(q=Q^THgN6Jd5D1fv+yj5z}#YFda*zEG0y$PefERA4z#(G zJo;(AT+prkV?X`g{m=|%i2AUO)0+5<3VN7TltD$C2^irGyvfwBfTT|iiRab5{bBwu z{TSU5+j2V^17+jBP4tFf#{Dd8U3Hlleu^*JmtC2TM+HJ|+N<(H$d4shV zs06t>%*^w`0{KikojLUBrgO#vF_(pd(%OLX9CAbOiFT;dS7rbCShTHr_5483&&tL!w$LE-8x zAqnYdf!a-JR~Tt6EJxd-Xt_Q^p=R`HYg~Lt3vpaFFiYo9cOKLW`XWMtDnjPN{^vFZ zm^T=*T-JcA&|7WDynIzKo~pH}-+GGi%zX=ZIRPSlCj4#TtQ^`w4ti^2Fpf*3Wvi5e z*ND~ROAn)ow5$6n2SfqWV+RziYahgv17H^)(YchP6SziCL?bBC=Zq{as$)FGgIHI> zE5PVIfNt+j52%{bsl+{92fagmFbwvFhMs6W)B>pi=D+{u z5j2AHzS7bT>N#;-DLt14$`~007ep|j1-Jx2ST{2yC;@NYR87+Xe4Y9s&k^Z|NCR#Y zNqc3fh1Tkh3IhN10Xk1dp3M3uoR$HYBZB^nG*cvFqMP>hi3eknm_YrelGM~m_4l+? z##_H>o)ZCc4#$~BKwUCe5@|MZ?n^0qJ7UFbuhkrvyANJSPg)RXb-J$hSk} zaR4)i+2tM*8!DvtZ}&gVQ>q^^iq<;x>p`>}z=M0$grYxQ5WVotZM2!pmlRR3QVej< z+v)U)c4LF3wJ5Bjq7fRNUR%BP@_pz4Tw(!@-Os~$e924|bhH$#a%=^}jH=Lw&@&>` zW0Rs&S?JRCGwLQ67yY>V09{*qm|Z}I4snRZdcWEwGs(~`FhVWrv%TtX*9qumZYNEn zX>D2u2NpqeUI8y%wWZn*XDTa$TU&XSSXypK-85&?=**1G0j8ZdHl(v-=(vnxMjPjU z_S=(5p54nF>QfRY+9yhuGYiHi8b0~eOt7_yft=>^!7XTtxFPPBE(Jci9c&JyPqL4z zW+)Z0?l+oOU;Rp4GObBN88`^3MtWR9QLC@|zSQ4-cz4Nb533JjdHrW10W+dyvb@=l zsqUUcqX*2s0nFl7MKS)rqWz%FT-j=WPw>QQOZ4MUS-jMzP*HLlZ8i?ATg z;sI$Ha145YLE9rDIB#kI7F!^JrgVyI@B#IOF?8b$)oj?VtDU=4?+H!olT}79QOZrU z@pQUEoH6;82iMqVOnWnV@320uW3arWgbx1GUB9SBBUnNcph-TyVrO^@s?a1(FgAgv zP?iK9@buiFX*5ek!7r-+7c+qbv^ntE9bgq_jvtpUI0FG-f$*V=fHfT^?a~#VXmpO8 zifwD$kFNTN9n$&HMV5AFs7s>2zPdq9Z; zCl=H#2jnK!YXcp;asuPNC&6_kG)C!auRq5vnzD_d_IehFI?xGFl<4384cgI^idEAG z7fNh9qST8=hf$;*1ZgjKVxUDNokP-LC<1nAguArWS?+;AX;MGCOS=<&`mD5R0-T;u ze;8YV09Zi`4DQu{-LsB;PzI#z^!_D9{feYkGG4@u2Oyz7q!0XSi zwpe`16I&~EYC+f1%Bbt?26GND;J8C(*k8W?4ERgWfxUNE6?oRF#aYqj*VzYo;e&_3 zw>*{W@>A%?>^b1$36KantO3M!3}nDD_payitNx3gDc?C`;2$xjiSYh&Z~yi>6?YA^ z?@!?+BD3j_Pt7uEx#2L-bzc z1Y?qTXn+?)0gG*@(L2Oqv6t4cr;3spm+A1y3~%sz_iLi+m8L=0r){s#&~SFO z4D(33@VQDl(0TV^8PG3ZK=1PhL`6FTOd=iHq5#)J3|fkdI_u9u-T@s20ew6%z>^xV zi=>^Plt#zsk=;elLVH?U9fwUhrbV58@tC?Y zRktFq$XQM^GejahDI^0MEs@-!dM0QvlL=@AsntlAXPX77=gp)a;6+$4g=SR58b(hf zX~H^uGJ6l2wfCW8Rs#MFU@RgoyQhAmJCz$To$?p(-`dZ`}jr(D~y9{ z3etv;>t3Jl;;6ud1I{ESgVed5f!*yAvdxR8Lkx$7<-j1y_ofacaCrAg>vHUc{Y7 z@4tR|7i2Dm3ji1?4iUeUYj4b{-`nBhR`%+P_m@tG(!N(l*0zip@BHkrAw$T?$&qe5 z8lQjr+FdGn)AceYp-is}WmAb=;UM$}I&ZR=pD#+Y`OKA5lZ z(k}`NqOw=dG#@Ma;;^?yAJkhVvaUdz#>h1$_F9Ymv@t~&#qG{rsLucS{zsUMEZ}Jk zp~)5RKHUOw4vs*xpV;|Nr_niw z_UnDi_{jF<$DB0Q_(YzG6{b-1;0&FXiR$K}=~_r1-29)9-FCFv9>ES*?$Wsk(Fp=3 zmgz=dTpHo)IzU+&v$$7U!akJutl@S;BR~r%9EgOGJ!r0Iy0hReG>#r!({-O=cNVz@?z?< zkBMWY4||NM5NxN14ohE~=F0u(GKqB5jxYJprc^E+yZYRY$e;XJ=kM;mD|aeqL9h2h zKOBk*0~as0vVf{<@yb-(p_-IPn@ZUzow67-aP@bm=eYZm?$4AYqcfE}0sh(V3Z_+} zL0;Y$RieI_KZMTbPaW+=qrC^o8!T(qMjb)w%eYX`i22^LAbTvGWzsfP-xi{+Ki~ zY1E3$)48&Cq@xS54zVzOeV?j3B*VH;O!6h2qB3}xA&Kzfue}x58_RzBlnmRwXSFbR z)jgZrh+JfFS4|CL()i)gT7XT~EE58jd){Q?_$-1c^XUlq z;A>C_A}r=09)cx7z%zWNKD>`-sp(ZtH*(kcT)MuH%UtkdJ7AY?0t+kRq5<7F#~|B} zdx}Rk`Yceu^dx=!rKmHs>i^h1T%A6mF#^GJEloGndbP|kz$uNcOA($++jb5{Ox!UO z&vO&ppUiyWK^AySztf$qXsUHwLRho zPUR~`u*d}*y=$SIXvO2&*5{fd*%j2lqt_Al-b~e)l zpg(~vX@s{NG>!E2_rH3Fm6rP=F8zF0l#L|?RbL#|f#fG6w77uPN054bk=5y*vR}sa zY3=A;vjW~@0P4$xDI$AwS221)jtOwDBghP`IExvK5 zFh;KLXZPtEHKecP`+02M3jlR`O#KH3eSO+jZ-M;Mk27)EQ+H*dJ~Ey8L>B;^l2V>T z-_oYf%F42CV}j08NasMbDiCQZTfXvaf_jtgAS)=)1Y&8q@~au}&wsz(g66d+z{1p9 zUfoA`AOrs&XK&&i)pezhmgaFu0)!+ql?H@_Bs73Ppn)n7ngI#Wgg}(UBq0VdNCyA4^J4xG#Gus^}u@lF3w;jicouS*T~RcWqI14(qC+Nyg$WX7fQLN{~V{yy2pVGIIH&cHgU=nrbxbsv3mZ34vQ zD0Fr~fCJn%CPFrI2Nh?x^H^#o4FY`dx;gm4t9iw0>lVo$S(vT@7fM@W>Z#-z_ zcOLa_JpHdf{N@3x0mGySw9i?kL_+;^pHFjR&YO4}95us@_{E+QJd+A(>stA>jtDd8F5w%Y$=h7iC3?mLYp0;U=^IZEdtH61AhZLxf#qf z3a9(Oo_Gq>gK`cf6gNNr_FdFv406ao;3&u%O+)m4JymcMJSvk3&u|gC7s(Lac-_so zaL<}?849j!00(N-tOrH~1jKwa@EUJkXtq({TmQM{fXfblY0=nPNTz z#Kjp*`Eg7bzB`WxEe@v^h8C9$gx0^IJSZ+{Jy?&j9F!21S4j*ox<`-dqBigRfYGnuHDiPD=h zvs5^p<-85@ksp*T4O@b#XWUGD0Lob|k4(kp2|?7MU>l%rG^c|Q<<%!p`|XlZ3W>R-VuyaHu}`DU%MAVo2E+*VV({!CY4Z6+%_NgZb8>C zv1@_GgL=k)UVav>9FUur*gtrs4z?aekWPCEbQo7Sru5jX>p!wBU|eSwt@^MgIquI{ zLn5t0eI+qtu^hHDf8^K*lQ!MIc0gJ!H8BB+`{F49y^O+6;TPC+1r2SkeEOx;QeB_i z0dTjW`16C__b`5OD5tP<*5Ny*e#!E`eSr72LJ^FQnSf3b#NJib&3|JKuUS zb1C>z_l)WSru$VWoDlPV&HsFuGwlvICOH>B>4OS56yC#Jrp8I<0=qoED@z((>p|w& zmwWs7p)ymQ0mh4xiUK&5Qh)U2d@%7Ma0l*jDNwUuMtxioeJG)5gy8Tz1Rs7*>RsGz zu~iRof&tFlew5uPnJDJRAvFzc%ok%OaY1>gX#zB45#1KU(*WWpL0)(i&xy$0>%s7t zq-=bbx~E9mg*Kt0Pp~tfxgDH3Ecd<_CH4@=jVE}Ho9F7(Ssbm}gB==efDxLI~ zzYgBQmpai)pVxEKbl~TXINJ+mik5Rw1k+M6r;Ihy2sGv*I4hzzE>eYxI-*KO*a2?7 z&-|+en3`8Ak4;>cFkM(`P=i4Sk1a2(JhA z?4ymh#W-J)+5~rR`t5e$+Wq3yF~ z2SjbYU=Y?)hl9z~d9qqCdUC_e=w)$IP60|7up<3N;rSW2Abq*`902h36 z$tq7-uD)iLN$2RzI(<#{EdaFk*6$PYeS*u=v#55~vG_bf-9$;0 z;KaKolhCOf#bU^EVCdEY4{a&9`J82i@hy@e^0?*9h^~1J~iVUAiZ{Yd%?wRTCC&dwfbH z>_DeKeEw1Mz3R$thx2*z=I8o!fD`Zkw0RTrN|I)RFdBVQy$Nh6Hi|HBbu`}eN^Svg zfz-WkSl%i`S0@ zt+IvCOpqgAp&ugTg_(c20mo^9k%E<#Z?x$b+ zPMJ%*fyfuWqQSYf9T)WKbvwuR6mb8QwGFZnDAxh=PYkHNR(nTAhlDmAh8qQ=Q0fc> z@0boi)$!s(^s|P4e;QvV{{M1dY#o^gqDO36GYEkJ;>^2#3DH9D2y>>PVP1df??9N6 zvMz!MIMVCS{`SYGtp*GyLNjToI^@q{L)CZWW1-c7+V-57GU3xu?XhYa3s_3GN*=dr zFglIkHeO=poKO$dO1kEoZ))~%>o(D3Nd-FB4uTJW&uYH-dgm>q2`9&&j?c+zvb<`guX+dX1-`{6mr|px@pkXM7xeEc~NRX!8Od~sMUXUrlr#W^28z-PbB_l1GNq@ zr~bTj0A*&FWbRD;IPS* zk#_Tr|5MUuY;GbtIUD@4=`seFSTwGDIpRtt zc)f4{w_u%z%pNG^w0QYyQ3z$QUwsxNm!aRv3sHfdjMpl_IQ~#6T`#OkpbUgIfcNRz z1XfQG98CulNd-E~O$%OQ4q3(M*nSLTknvhwwS&fwi~@P{k=2@EAqbr9vmB}U;f+}g zAOvqHKIIFUBQfYFU-g=QRtJ_#SLQTbLe2XYAnwVK zCLOQ{pu8rz`ouOXFJdmf{;OC~rE9b#uRQ^U4!HQRH0sXHV<@^RT>0gqT`dxWQLN7D zEwxt!JEf;HiMqWZJ{TyFf?xQ6tsJ`Gku6rz!xzWHap)`pmg8NCc|9HKDbYqWFSzfb zQA?%8>5^JU=;>uHVvO$7ke5?IN;#lhiCow zJ)ear*Hr%S_!hh8X>L1JC2}pVXx7*D&?b84)+8;Vl-UB{BwS+7S_JPRIaJh59omV$ zAc#Qa6SlaTF6*Yd3D-KoD}3p=3Dr3idXXb4OEnPbuRKvkk*2?zM6O7JQjM;5h~n{J zGPFJZ+#IA)`CyGhYFX(41tz9-N|>=09C_bSXjWIN3xE%x0O=^bX~Kt6-62$Fv0;#? z9i*4%DC0+WA}Y{1_YADg^&(NV`=!=+g5Wxrv}}_KRO7E>hT*&jowK6ILe;f{7vx|x zn4M*uzYBFX_By1mGdCp68Fyma^2Rk4IC_*Z>0{<_?epR4UkAA83-;S>T=}^sOiY{DMmuZmFwzg>411z<8kzmS51Ls(kf`w6wOV z+aH`9)br7JM|%%7^z#d<_DBbg~KMqkhkS^NB_;Y)DMbcA#>DMC0 zbEu5zm3u|O@OSquI#AjbU|0j`JR{%ni>`C`_w{idWOAR1U$A}fpO5#U36MOOXI6bC zgI&kzoNqq>LTA`;u>xMZORpe(&;TLRDT-z4S08;H@~tOlL>qj5?^Rk+H`S`^h;*@3 z^^nJ{4vaTc03Q(f#ji?z^$Sw(I*(d+5w`+-@sT2F0d06uox4UA zWV))3K@IGdO3zLNP%cY?5>&b~I%R+HPDby9JYOS8$>K@5m-fRajaZNPP zCCzElGO`9W)y{5pJJDZxOlqOy*>B&!Zm^3v+9B3i#njmi8B`K5tVl{>fkG~MP=S*=z8ekIJ%KuNvX9aq~|fIgpNwJy~Ul-`nn=+ z3&hd-6S*RQGM29V03`SpWm?=>7U(=#%~JylXpoPK@%(o=2Q+y z?69bKrpNYCp&Nl+KB#`qC9Qdj3gD~5JzXnNhj|m3p#a*-t$gp@C2}YY(6>UdU~%U; z3pPsCpWFJoe-f6X)&o?!tdHlsn?r7&Sl@>V7*(sZiWvMA30ulbK?k*;G=uI^-}v|+ zIJ)Bu4)X~MYFf4lrK^Ki5a#)Q zorM(q=BZ0sKqnXU_E|l5#GGWl!W3=IC};1jheQ&}h$!o~8cv2j`VVfU-!=$yOTN>T z%#smqTl<&n=dFa?C$4Je#5*Xl!y{omt6DrgkskAK2vkXQo$f+UMn(l{m+sGctKmd^GG z+r~oxzkRgRsuB*BfPeR?KrO1Viy#qf>lZ7aK2hK-9E*_XTkk zrwec@n_9`9-sUMu$OGf?gY*?@b7g#XSjn4@K?O9XNiB4BSV{PNsKWBzyHazjQEf+criGc(*T+Vmr~~z=8L>f`D}XkU)g6ka zVST-(7}qPz>xbUB3mx3d&rty%J_o|PoXSKso#;VzH?p!>Ef@|5pnHWZdyq67u0Byr z%a~tAXc*qQ8;V^h|MqvEHE)pvJ2wXc>@%kDq!fB`B3eA#xVQ|3b8CywVV@R`* zc~T(f6jZ_4kUn196^x#W&Om~z0mq0wM)Pn+Lvd2KN-8+$EMves35;511BWqW5zw{n z&8OK!ml-vmgAV3X)--XpR{Ecm3Utp@H4V&R^P1`)%J9Xx6i(Wz+{2(I4YL_|@gWdR z7NVhSxr>c2JyRf=I4t;VPXt<*c!ofuxgnc2b}tLt zaW>nZOuMqDK$FOpzMzSyzujku#)xQ^a^Z*Rxn>1={#jeauXeiJ0K3;8KvFRc7xP*o&yEEQt3?6 zfdvdLi!RGKJoKU!N3GS}!y32@4Xgc(@a+@~HrdQchU z8R@v9K+S{8l)6~x61T8rsUPH03MtUUgE9?lL1{x-gl&)+06J%jTG=?o$q+2L=5EeO z19;K`Iw{a-6(bjgZR4TY&v9pe)nRE{DV5M8R*3u4L%-CmIWWc$Fu2!tVEz=Wa@>G} zhQneW(A2Z7Qp08^FCYQ=^e*&k_W%5sAN~F-@&i<{SC0ArTJ+tNlEzt7A5Qf+DOC_T z$K}JjG@V0myU@{+L}PvvUId&vA+P2f?~(?lEvJH{ma{f-TzyJ+G1cTw{SLL0#ePV4x}AhImTGjX7Wga&CM8r5eoQKJ7j<%z zZ9jQZ*fUaf*#^rD%nk={h@dlHu$ni}oNn9@%W1ZtbKuE}c6IzLh%?e?ZgUY>@omG` z>}@4y9-#e>1;6ATG{5jJ4P#U#mC$K)(d{1YFYv4Dn#CUvm!OqN?XSnOJlYw^8LUlZ z09**&mY%E*ESHLn(y9|Af}83@_Jo&npT52H`KwQ-1|76sFllC!F&Lyz%3JFqIA5`yfiECNI&0G9L+&E!Vu4fhy1iKyxC) zF9s!tAz^;sg!<#}g4F!i1NV0AG*i#e)k%K$e*a6K$IrO<0J^IMCy4b@*=C7t05e6W z@*Ua?%Ck_H2WM^_D(L0_uR{Pm96J?xj+^zF_M*BvHf11OdqV{D9W8}_ki3X?xA%?-+D?qabCUUAY5U6i~{#q7neZ<-hAY>Z@1Gv^yh_# zgn~)XImykVQ3S*NR~Rx~jojhMQL7imeigJUT=%ANW8S0^`~XQq!XG|G696xNk*h3V zUZ12M-wydsHagZfgcf>)x?6Z2c)@%lYV(<;XJ%^o7EhmsS$GPU6!XKs4PZ`gTTYV! zR3~s0Jm~&mkQ|gl<{H8L5k)v365ng!tOIFUOwW=bhZ16>}U>4R<;1!y7)n=6libTMCY zPw6PW29O8_ZRc4KLGvcmlcgU$Bcc!0{%YZONG11l;2T9|Xl@l2G>~`Xx8L9T!sqqQ z&+P*4ech=jH|><#nYk#>jLAoK8Tq2_>fKWu$6*3Ro)s}4{!sYvt#Qa`;5qr`LU?KZ zG+1LT)CZa2JW*>|Esy7nl=~CoO_ual$8d&$SQMQzQCRBeA$j7!gjB_-O1BB$go;Vw zjr&0MG2b6W37`l{Q0=i&Be*0K-5)qFr9&XUzxN){_J7)^3t6~zLtJi^{9Ye7tRM5%TZFL-v zh1YUmvQT!3;*@U2=myOD(H!Ah_n~I-F_5Y3aYG*xz_}8nzyCLu=R^UiC%8?e`3#+^ ziS4-?IA?N)117R!!Nr|U4+o|nLWV7kZSu$e=KEs@_U>H)H9$vfG0P_&R0bbuE)W?- zBlJ@}8*q$3hL|sjb4Ni*wnC8{yh4!K{ zFE5~@>^Zs>^vW-`okF!1CBXGZP<8yG+Fs=3j#PRH`?2EdxJ`Li>yP z%pa$7{n2gB9|`Va!VZ3C4fdQn-;fp|E-=hwr}u9`PR(rlGW%z6w-yy)c}Z5-1CA4_ z*Ej1q8g)thbgC7^$3>A>kj}AvHK;5a!M*jYh`}c)Y-1>M9s(zhR+;>w$4zC8zH!416Ze4t?{_)z02^GynLG+nIc zw_n-NG-C$y=ohh4X%9_wRyfbPZZ${ zbfB@C_I&Lw5RJ#~D1WvmI;^g}KF=xfn9u#t7`36i9+hD2CT_HZ8<@<_%M2ju+OI&5 z7k%(JgB&Q3Y6~h}+R(`X+6CbF0UfdkLbXK%o*}>`$#n<_JUF-Yp#Yp5i1LJyOVOJK*45iX1=rNjAsIPP2GnFuNmEOOnM33fvVNZ zNCS%KLxRx^8V+Cog6atc;xfB+kh#z+F_$j-wf!G&wtIEHgli@qEI?%$C9w&G}acLr24$k63?WD zE%ch_%*VpgEuIb{;Pe6NJ&j;>m~2p1D=0Ycw|>F%S?m}*h#m+W;FQM=3fG6KaF1py z@EIkdUvujxO$;w!g3Iq44}u(a7lJnPy~f2c>C$CBUKT!0FAy4?ZBV$wGk=32U4-6z zKx*^M7FfA0hDc?=%jTRUj@9Xnx(nP(FCgbw{~Qcu|0Q`Xj?x7bJEA5*T>PX?*TOeFxk~J4hzVY7}4& z<*oZcDyl`%K2Jw!LqU}9mJ9OkMu^+hkGX|ul`f!+cpY|Gvcs`)5I&R-?+v;Am83BY zHD~TD3irtF2abaz9RT5p0Gm-bK`~)HntCIoK`28SV2@Dbgl`n_=GQ{iyW_)4I7v%4 zCFBKHfr8Y5WI9J*>7E>h{}CFuqb7JYxXaDl3l5A|hL@F5}ZN|7(2S}=&NPS>ZTOY^Hw2?NTr@^#Ya^Z*J{ zfrclUiy2x#kZWY{=|`-tX*t-NKezI_`Gz?N9n7%iCH1ndPc=dQ;O8`4vKIuQ~WE#H#UX!&@q8r?(Zn~vNeqHPiJsYKK?~7C|x}it9aDwzvl5RXh6U_1ma$4 z+Gb%iKZp>Z4;(ti3n85z9<>=|VmN3m-}V8>#p73=W7r8hlaAEbKjG*j60Rkwk!dg1Z&fLWqiua?3Y8vXyhm76y99|giHlGmIo=@;X z0760-60;`2B(YD}_!;_taiM%~E;>##zDaFpYwszg#|Y*b5a4fYd{q4;c3B8cwL)AZ60n#-Jdr4#6xP=z2hFL zVYfaQ#4R(IfdI)B;oR%INJ8KGg{#qs**CVCsqQ2V%F6;CC@B_1aNeI0>5uc{qpteA z>e%jbE(*Q$_;YE&4pQ?hQ-pO;9o!&1sE$YE>9sRkgyZb!)YI9VUg~#m1Yt4&_HZcN zS19z##XN}_s<*tmET>|rj}hfubtBk^>7 zC{-wnz&!vrE+=n7b^Ow#$iKhmVPQan&uyMw;ul>XyXrJ^x4(NNj(cY4&0IVSqk}1? zmzZZG)i;SMHK3*kK!z>n-lTuZmH=#@y=S>lCID%TF?{1adGkr zd!EZ_&6Eg28Fhj*jW_ck-fQ27vTk^CR@$n~I(A?Kq(+)klJh}n1YI{exr2MUKsPya zU=5>hVFC~S^s1Go%#r7#=+uGZPGA3e8R&srcStW>hT_r;i1~o*6s>h~hSmmXvj|~F zVphs!xXIG{hd0vGIHx)BAZMi$s7do8F?+ICf9BbEzwek|v_ccOV1^Zhs@74ZM+4W& zk>sKrL9x(l*?Ox0!@O%&Q~EK$EB3_TFRPpywGlgU2$d)R&zPqNm0g{I@J$PPc#Ni~&9s>c)MOml0qpL0wmC$Bp!FhEA zT5KF;nqACG_3&RbVCPT(buCJN{N^u2ck>awM1yE=*38q!Pz*{Rp#l8#y^~X5E=Vqb zk%eMCeFo6r5FzXMa^P{t&8>Ljg1}d|>G)Yfx4e z7i&H}f|pG~A()*t$q2$=3P`VLX$)YCRGK_E;YU&8P*&NC!2!C=j5pWeGmjT{mp)Gm;_Aj4d z_5(VkqKEChsizusj_1L79b9t&bV_GZ-R;O5-{^*R0_D#?`V1(r6QxdAp<6khIuGXp z+#mf6s5g6?t&t_p{0CZ23H0OfksYySZG$kJ&CMH8qEOcF00HFJgka1!GN}89xMRU< z_v&I45SfmqQwpw&bF#z=EwI`)GW}o7KbB#e(bjv@YWuF;IZww62U1NfSD!%Yr`W6G^Kw$;@;U zKzFoNBukwIN2aHmuc|m9PH{2qpJ@9EQ{{^QW4?DYzZ&7}nr&u#Y)>^lT6HKPL3QQp5SJg1m$%(wy0qwG8O zzWJL7?nh^~I3Ila^5vjQHSMKU9)J{ncyzRq&IL4XkXooDo=gZHjhhVcJLyi8&9Bwv zn#>2D!Jo#p z$I!IFn@g~*b{AkeQPy}THszvDkOrE3U$nXK$>UJyLjXV86KLRwFo8dCTHbf`H{YRO ztiX$*Fa7sFJ$JBnySoe}Fl+!?J;Wg(&FYzgrIV(i02MSEAPL9ZwVQ9UpxQ*&%+LXa zjY06CGLzKBRa-(Moy70;M=B=Ax0o_kj zEL+^KR(M#z+!FGf7*G{y)d|C>!&cKC-MyX?R8s@tpheLQIR$aNW;dVrIdxfJISy|j z2rzovq9%GvIWoX&6_&}_WZ8gl$*5kxoCsK6QGs(a=4$d2^2^bN*PcB zU()~>^E{oGoFIm&p$cX1P1O`7a3q^=eDB>SP_Nq2v4j3PMx}G}S>`XnntdNUHvyI> z7vr6+n$idZvFy9 zK<8bC;yGZPgbUtZ?)n~RS$$scC%fT!=>ruz>+{S#KAId9!3?V1{buzT1G`%Nm2vgy zaLkiNw$G^Lz~qDqp*+XR==Hf72GTkd#uI0n=gPEj2nFas2`~w9dSjdVKx^2XZ0@MQ z0Qy54aI?%w=H=CnN7|O&`i?Mk45D_&YzXgAn}gWf>DV z)2o}m zHaz*l!||R@UNVM9wnkh+9d>bB1gi7?gK3^QFyoq?qQL7uzyTbtH?36MmsWL=Jor)^Z^# z+By&FN2#Q@bG`vuUSPg<0lV8xhivQ(erK~_$w0%c=Q7<8mR&UP*!27hBG*lg-+F#7 zpqHlaKSO8!%>(_rcb^3_q_NR}uz5a$`FpR&G2fx@+O-=}hkWx6 zE;jEkcRfokQyvzadV@mG%b zOV@yotT>Trgs#ZGjx>VKSq{uwe`jKtJzK6l+U2!v?8T{^-wDF?k4ATYi@oTg?i0nl z+rCA`Za6^m%=HAAMez16d*wUkc?mRZk;c-@j9$;C*lYhJVmB&UMJ)s_8igmC)1B3- z9v8(Pf4S>%&~Q3+#BZOZ4S;m1w)AlBQa83`S0(Ke)j_F*s;*)qL~gPvU-WwaL~{ui zqzD3vi_l8yJMIpEe5#=3A!~x^xN@;fleh25joDB!d;jz6L)2_$;R|VVE;J~1~8EH>f_;bVT^l)y{Wvjma*g@erh^`4PdBBd;RlF0-b*mu70a!!3q8OQ4adwFaH=c_V<@{5|SGsUVCy# zwgKJaUgkgw-o$MI&xv4q*u399;m#MqECM=Y6@vf=m_!+aK!Ax^z%wYCF?Y%-r|BCV z!=+oCoK0udAIogd)bsw*Oe^gH7d8b_BC3%XW>lIQFrHGn?t`yop5!ce@{fj1a{2(B zToFLqP}CP)v#761C!VdvinZ_EB?6~&nk)G^Zg+yF6SPWIib^9>6l-ay;A;|JcwUsr zgLz;Mi2%xJ1#}-)4TgaY@Hpm&f1DUEk01P$!2utO0^GRF>9I%xXYTbXOH-J7=!1ZU zO|3|v^s3i?*jh1!dJ<)6=6nt_hy^~HpAbP^Q{AJdr>C63#lv&$vatX9c=L&zVXFnR z0i_ycMLWn}onz2M7EDuV+a8jT0JtMG#odu_hVw z(_=NN7wT8<&Ib(zLqR*3UkZn|fgcH#%Xqxt2WLaNib#iXR7~YJ%mpK}PJovJ`xv7F zo-g1A6fHHqz}1gQ7ay-Vxp!X|_W^`nh8mA}_^Z&aN9o*&IjdN0ia;sA}pB4E}4_y|f9@VS&hCB%Ah<*jC#^b;H$E2LPVK-W!q!WDNmFH~@ zH4U_&w<-VK@92)xAOj1gK~$VWfVQ2U<7fp#mebE1OM`!5k%N~0<$m*krgT~oPp1#( zB>JQJn1SM>N|Gic!SvGgLQw^wl-{d{(s)nF&E}8`Lc4-jV`^W{+8wd1H7@u7ws+?p zdvu7_brZHWbsRi1;caT+9eQ+fQ|C#4%`WPIv8L)qduCu&RZr?#SYbIxWcXjwOH$*U3HLtY<{0zzv%6Kz~h5F08KZAyYU}ymv&b_Ba?4;ZH zga@Uk0VdKXY3k!-Iaoj&-})TS#C3p1iZ?E6U`W?kE=ZLq=4&p|1!#3;>ET_cHCcck z<<%=!gSq+zOBuZfce`onhx5Qq^J2w#4C+uc@@$GxYEjOhaGovXPf{g}xjgGa_wl!xs%b#lo5#Z45i5_mPd*j{c5GNrL4Fem zO_Ticpdb}|39Xr09WOE9M2k zGE}~9kWrD%N{E}{?HttvH}gtE%_tWqU`Hq2UF`*KJdn%KeDM)3FT*J2y}dNp6cvF1 z&K1A|{PrzC3rgeqf%!L!f1Y5#gU6;C-F#bgM8O}FZZ*h2c*|i zw!~x76|Mf4yZ&(tDxhN$B>3lKJmL71-Jr}KK21$@Ylr@Av6nU!9FS@qs_Ds&1d(Vh zYBUGUfTcSMxVy*_;jp1O6rvl^ zxJ6C#H1@hZ>MP(!QEE{3YKUo7S?PKgTHpT$h=AV7g3|QE^8+pF7?XcQFcq;J3Q2yD&w>b5C7(qwuvyj6Xqg!|HU@ zG~}%)^!Bp&6`+8*U7&f7qj*Jkp!;P0zdiNEUWzr|Y`PWq9D#BWB@9KAOAA<_g%d}0 ze0DJMs$z#BhrjxT1LmgHl-jJ@Me2GrUMzUglZ?;-{=J%$y$cQYSFm=(Ym7ORKQAzE}r_j=%w= zi4v4CmT`cc0=1&#Jf0VpPQqkmK6~RSjSVM;Pd01p56I(+^ktyFiN?$6X8LW5Okob< z1vKv>f?v=kz4{C!FINR1tbzF=iD3XtN(H)$dHGYo9OSy))kmk8^MKtb$?7GieDb6i z6I;GCYnX@t$`iNf1GlXDOrH7dg+s0%k~Rjd)2jAnC(6o&f5!)AGRZfEM*FB?uX4hC=BdsufQ+SQljy(EQOX;Oe&06B$vHKd`p>&THCeWhS$?I01vY^PZ8kZ zZ~T++x3q?oBATq-sC9lBTAzezX<&-ApshUH)|e5QR|0#t$FHo9cLr&9A9Ko$%K_;< zMx!i(Yj`x2p?I0Hj_(7hWZU3gPMG;@uV(b4Z}me61y7M%0drFEScls~AIg9t_)!-F zOXta3=aUVh64J8kG=i=_44vyl)%4I>o*}?^4#kK!eF6&~@D03Dp&(5A=oo>(B1q;u+y` zvIPY&sfklaTjhx^Dy7%6BK`yfo-qC9TnahPmglV>kc})!1FdLdJQwO<7uazM4T5&d z3Bw5m3b$+ECWp@+3GJfxEfO8))WTc|LDHNDu5(!<=mghtKPPIt7PT;>QIyK4lc1l3 zE;MLt!f9=5cO+5tiQ;!N{YLlTd(B?s_tkQ^eb8RwZE;eH zO$z3ET}8NXhhmlXLq#ugjlg8Mbi-z@m~{o7!>G&?19VuRsvIQg)$cmoeWB=4&Ed6qsoagHu?`d%G7kadq=3CpUQwTS zAq<>(u02mWM6r{wrG7scABt--X$hrwXk*?0Dr~n@hKg52_7Ar$u6}HVDC5m@UB}#| zOsh~>e#UPMeo=!_;8Zeh(cbyZCj}w(DPg+2o?eUsk z254FN-ITNzm+3%6OqI%acHTV8DiSDOl*K`t-7syu^jx&Gz3`0G8yU_3T`JHae19rK zDkhQcWxn|h�R$IRJ_KN=M-|(XXk>Io{8Wh$T7e8O%JH% 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

`9OJ- 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

y=rrmz0WuF7<3Tyn))}Hm9 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 yTM>Xj75LPtSS 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�U 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 z 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ξaoFEl=%wo_bt! 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 z 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�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�!+H=u0sLc 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�rClO6{} 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

Lh0RvMngTiWO=-v8rRYi0&YHwbsv}(m{=^ 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 zξ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

    MF{dML>;RZ{W+Ro@Uqq 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 literal 3458075 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

    2~21wX>@2H{#) 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


    h?XR?|x>=K?<|J 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
    M?3~^Jh5{)FvJ$XpO8! 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 Le|I^$T2|#;g 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

    3)oHbSlo^Ar1{aem)&X6^!)wHva5xc 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 z%0D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π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
    hkMG$4QUy~8I_&DN~4U}3SCsy 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

    Wu0prQ#dNAdMO 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

    o%3bi;I=j2S{(axW!^~$asdcAq=cML? zJ%B!a@%5X)&?P13UCtQ-7TeaRRt{XWX`Kn!UoSJ8GQ6k2}vCvTMW`xPQRBg@D>XhTFuN2TU}h_I-PTkhQmNB1EU z&c8#+C5+5{QzUCk)|O)2K9fjFSx^7)QVu(>t0Tf1Tw0VEyRTYY!g|=BfDMs2eVxKG zf@-*b24}PrAd7tl)hiiP#f)<44uCp1+0`;?ySYT^;P?c|%C{Hf&FPp}L~$&B}N zb%%UMjgBFd9A3>R)D^#ji+wHN=|;EyA;^O|e{2EH$!b`L4m){p1;5d(@DyIvj_S^* zrHFMZp%w@OimH|4nyO!Wf6U$xioyJ$$bg@K&woHw_f_m!mKYgd1PQOuj(aVtcEHu* z<2Du2m#_p?>*oE#5w1_VF_caH0TJx^$XN=UKAc35`jrOfUpLF3S2`6fO>zZNW$?Tj z*iiRqctK?a4O_6YCpdnoGS2V|za;4hTYCBAI~8s(+NxIwK6-CUs3{xjvBSWx^3!3X zF(UUPN-w_Hhnk5l7B!n7<*_^0oNC2$mQ8R|h%J7@1{ZJ3>q7cKd5iPi1AMz5C+qvu z7>@ParN}Cgc!=7MGv6EQdTPu+6CixtHi8~k_3eXDCT{Q@sjmoxB~TB<>ys)kXFpJ& z(YKFi;gmz7eU?2RS93zgvL&Mk2;|VokLQdH6`l~Kcr8o>2x|_-s!SYqlZZ+dwUswT z32S>i28e@7>=7Yh?Fj1=#a$4{a8b+wiz)=|BiZ;(dLz-#<@naBFO>XE}FMdSNf*Va;TY(C)#iM32QxlPNP^OZQX zqH<7J6YG0|1J1Nvk3*iUDRcOyfi4e1xG-FR0*@QP9npvmZ#S^CAbI$STAbxh&DO7{C0)Tc_qpBdg_Z+gd{7CvG^ zlTY=T9xGC7Qb8Ukw616cFB?8Z3>OZC{GE3ua^W`9c$@B+q1Z@jSXCaA3XJzJaG<#`-rf6EyOktN^HGfE93 zip75ITqTXw>6}Zl`Jg?3dc5x(o)GQIyKK656n@ASv<*G1kL}&McQhms8*n(lt8m8w z3#Tx_ni+4=A_3jxKPTOj>`^-WA!141Wi)Fx>_q((-ON(-Rx&}sNDO_ZfSk(soRks# zyOKgPjG-r&b?=P}w$6FrxBxU0a*_9-Xbrfa#8>{=&}UMp;%rl7#waq5-kcHup~3^# z5=X$ZVBC)-Zub_|Ih+qii+8#qq4AU77Y5l){p6U z)P_F<S=HW?eQEf3mk?r6pOVTY zN@imau+IA-{Es@*D<5%tIIGi(8@6h^arU+~7;3mpS0xt6{)Sc>2-utSm7@A`V?sHC zI8xKRZrB>&vm)3ttlD!MhSW`-@RWRrYQxsN{(cuOd6de)TFwACIvOjVqrkFcfHnC~62&G) zN+yTpogo0MHp$-*7Y(b7S8v;G*|MuFLaAwdfZhCxQSlpi{XHKTP5yjrJwZ}*kJO27 z#O?V`^KzVE|L!dIL&gE&l2UC$a0YX{zclZa(ilUl)zr4SMVN}5+REzH=C_jb0os<# z-#*s⪻OB8le9sM2f%>dJ5ZjqS%UEOMVAE&oM{tvEr&YB$+jL6RS4u$|5Sr=V2{%O$ixHALB#JvM4+|cYZY}ZsNeGQJ zt+9F5@x-oSzO$Xy&&Xejq5jkkpT z(^~uYuT_qWp55P89X3;X7ow3)AXT3j@zw}TY#d14uo>!v+-A^}uk9K5`Q}5~`zSr< zWmk?&u;MRzoMY)jo?N=Mv@PecL(N3$oFhCWG zk%MO9g5rwiDfs1P+1GyCxVE(F6n4ACPCXhC`ZoU4f`vu@{UwC1+VP`O@D1!C*-RHR zP*4}BkV*P?ADNI~(<4*4G&39kL@B(%DZ+FOQGhRC>w6~%{RprY((MV|8HLg3<-RAJ zdZE)=3EJ#h=Pj~-=X?_1b)yaQf+TO)LTN?uC~|+(yDkpYQTW=3#J}_c>llT%QJ{5q zPfFE5@#btLb=>TM^WqLcNaTYr$I$QGpR}^J{HJw0e7G#J=q`w;?_}k&S13PtXv&ob zten7ajFSQBsypb_U@?`o_c36!cN)nfdiI+C)`tOZXjd z=0Fk3Nch9v%OxQ8ry?Hhj3{zYb^Kfacujv-8c6f@CfWCr!I(L>LucU|wquuEmFQ7U z1C;V3`nncP*KVS=(kwfnT6E#vXO{LsE}tw`8a8n90(9=5;uMXmRCa&Co@CY0{h>SA zgC3_c`%{O_T?c!d{I1Lz2)q<2)LpU2`JAMl_sY_@PL`D~M=AGFEJnpW3ZvJu;g9FM zKip(&KV3&u8dndLr^}JV&~2Ye@1r+LN<8d{;8i!NA#t^|Qe46`ZP2#Z*ib3UAPj$t z=`-+hr2{TVb#ttBw`Fj9HW3lAi?kr14{aEhi|cuF>z54W>F9;aRVUBj4gDx9<>&%` zjMMZ7p$H)^L(?C*{*D+ZrWZ{vk`HDYbJ*k zGUk2HTweGJ_{W4HjqMf|_~sJ?vUhDg*Q1yIjiKFKkMiP__&}F`GB#P6Na^<0lf|ne zqAZS<`6s!`!lDmf9-!|MxKQ<|{#Gk^H%e^zyn#Ml(|S0yplP%fxX@tCv$Fh{XM|&x z1*GiAfR6Q@z7>Mo%rSYTCVd8EM}HhF&UA^G>=b{|M%>4diJIzewz*+@L^8^dqd&k$ zQ(tcRuw^XC3V}F7``TG`h|eV7LcVHtAn0&>6a`3KEW@X)BeiU@!M&fZWZ9uZiqN$B zH<)hcs%5>SwmQla6+>xBCMWyF#EcFPY;A6W18VrMLumq9K0F-^+n7fRwZU2JV4vkO z9flo=q1ul|L2AL6q^tn9tyzQMg<8}d{Hgh0@TLd1;vk9tnCHZ z)KZ^kb~iqUHe|UyW8y{o+6K2mN60iQlP@*Fr_ay<7hz-)kr?cWbed;p0yQFr_f6h$ z2bQRHqAG$QV^_aAC%g!h*S{FJ4;9e7UzUwkX0elvbo{Dq$%5#jzi zX%p_JTO&Y~LblEy*F)3zC19yLDs9mlWte2L%Q?bd{cKAZD7B-SB%`?4r_D-AQG+^t z9k55K6y+q?tiOjIG7DsA>~gZe2Hrp>rFhalA7P5FH*I$Nf9L$r?W=bW6Hhq12>9dG zy)a~|D{I!D7|eSE)N<>i02NNY3i~K%&{Av$3vY@}b783u-K4b$Ey(>cnV81>D<)+1 z!)BvlpBG6&=&frkvx^a~E)7|&i8sq=vU7`Ifrdc;axjl(C6V_}aaRAO6W zu4+O6ck)LoCd|DKjUP5}R60UNA$Almkr(hAVlUw>w@F zh06muu~H>$2?GLUS#$qHQEYN!%o+O$$O2g~%MSu&Q`$!uRmy~hd=NY+FwiFSe67x* z&mNf_J!%fL>yDasV5AVpZuq`nKa5!ttZCx}ael0m%?9e&IRnYZcl99Pkhbi`|8VZ{v<0#dd?vheQM;xlwrGVg!XII4@f;0wTGBX8(&cvOnIuHf1l z%JY2xM*^nr_r9r#-b#}+`D8~352!R-_d4PkD~kxQwMa=6{{HaSEE=4VJ?=TMU=8Q_}v??_nt!c z2}Csa{f*LV>`xlD2{HXYkIrk~I!DG2x1iRbbvQ$yd0k126SI^j3uJST7(7lSG6`wa zF>$l?;Qb^J8nBP4-oWvnNck~*sRz@!^6Vvd3Bw~WO}rx9GN%m&@O}ZT`5zj|tTYo) z-sfu-8bsk56j`!9>$Nas3#UGr8ITM*zDwurBWwdglqhPo(=V=4LkD>e$Ny*)@nMkW zQYOI@8ZeTE)y*n_`(Zuna&napZ95ZCp49aJ8nfthQjNj#&_BBeEZ3q`k zz1k1@?p%3)0&X{0VGHWV!jd-9a!jRxgpyhCjq^8>**nmxpoDaezyEtN08^p>)7g(v z0toT(CsOcH0Bey*n!C9@z)X~-rT)>Avjv>#BY}WKE^z!4BO%R}iDf~g7 z(0M2;^(K8NAXP@G84P4%WW|Fbt=qj!9-v>&TV{}-lSPt&xa(8grlqI6YUR=X#Pv+~ zv#I#7m`@EkGdfwfEqx=^$x4TmITuZf=WGGUgV7BHgc&{Ho&vi1=ifE!`>VaL zNb6pvxZ_hri$}}Qr~+q`KBp_*RxOGEF;cTwRQdlAskh<;DGIJ_(N?aQhJ5J$@i_4J zf4{DG{m{1GUyi8|cnP@YRYW|N2kqdFqx?PYCl~O}vmVi90&2FGKOSV9jlyqy+74$l>1`Bc9)_`^t-M$whTIa_3K7W{UBwYD>;8*|lwV3l2HuPr5wuBMM zbe{49n$Er$4v9~Xioo`o4@1w8YX5o<3yh}b$ao+ zIRy@aRxgF4 zUJoiGm64d53AqPi^&=)wNU|$>{vIFiYsZuwX9RcIzb9nLylKCx_6Q+aS*X3|(yo7Z zhFf7uy5k^GVpLvYD18LQN8(*VU7eqN^X2SShEcn+NCWP!2V zI?xy6{+`^3eb_m=aqHP4M=glRp+coXp=ET4kx+`yP2mHL$}x0a+PWA)lDFD7z0fqYa)-}Reen;Fdvpf@E*(g4 z`~JpQ>Hgff`y?>P?Esy{?2xu8e2!$hNpWG)mOZ-)H)wp_dA;L-zTSg(0y}!9bVu>u zSs*WxY?|}d)%EPcCdk_H;zW;@-rCM<9t-m);lgIb%pC;F8HwAlu;&zoaJsr(N1ld{ z677BG7bN!6HdHvFvARUI!XV#YZjKdywtH(6_TTjjc|8j9)@!B6{p5=lRRVqGNHlS8 zev1q1b>iL$VdaX5Ozqck5^vZ`hJ|O^kS){gKPoi=Fjre5Fx9L{>i%uz!#JKXrq5H4c%+ELJlN7;{4V?w~N$UL3+bym24g%0SN5d$J zG9DN$EQ{Y+#5C*eY1mg0gy%LT)Uhv8iV94)yZ>fz#iC-QL@E}xJV%deo$y2{5f^$Z zM`pD`>ZiEs-MR20#j?cI{4Y2VSTbJAD6NQfc(;U^4k-&X>>3!GZAx4YJ$fv+nxbai zL4i#ekoUX}X92Wm&{rEun7rH>@6yT)cBUU{+-dr?;LTxeD1Q*y#7pH5ltGWR{!TlP z)A;H!z3Bi7fRsLbH#x!Rjav~8Gk`vOm=GF0pl0I%dnXcFKbu5bNI)VX+|z6;&o$cH zKgnSw=WjaQvi>Z7gXh1&_rsp@=cqSP(BfSDNXXJrimF)c#)B?g>~I|FaWh1e zX1Dw!EHe13Q&WnWHA?NdRYO$DU&&kLA?_A$c;e9>R9*6pwz<(7 z6N1p8KaS2Axr0U9krk5&92T8(Ro=KAyiwr&l|SWt%rv&QTr6+IVLx0?MDY*$FC0C^ z`GDB21mZ!I&~lXRLNQ0}&xs}gh!+W_vJB_XW9RpR&* zbhPm zX!(6d_tvkohQe#1s&CyUP`4lDwKk1Z@bf`iz?o5DhE8~)Yd;PdcdnGeYoGDMBxzin ztsgH-J#Rmm2MqtknQ zwvrq@{_0bNZfsdFm^KP|;dy9?;~0se8$iAK8^59IKQBw<8obVZh$j786M7;jnDRT? zfz6Ojl;QgVD&?+PMlUtRD{C&oa*nI#{b*wumV3>>~cc*#dx9RI#19ISqK0{pNxRSIx&eo&{Z7A2G7X#aH`xI8z`E|1Jy=Xfz5b19#2%>4dQkS^34T1`ZfZ{5Vf$@H%39G>G{r27y_+u-l>AiPeYp`JtwALci zw?DZ$sevc{q|}e(32RpZP-^83-804GP;=29)sa>Klps%6MWRzf1}FO}dK~+Oo^nCy zvancHPxlKv=-)KD#rN?^VTqQC^%+@p4lfb^k!K!iEjWd~JsLj3tW8Em1>ABe`gwt` z9?6QhrBk>-03Ib%D@#xnCQULJ~(l^NHYjn1e>yk14gowv8q63!;?!(JLxF z6(!6~Z@F)Yb90lOE(Ce#YRKFEE!Pq|Y=m4g4&*jRFU0M5sX1g6(dsn5_ zLS$L`fQ!UX}(sk6Gjng8cP-0hu*j&4^1VxFpd+!2G9-D>P6A5?zN3JZus zNwsyKNBs~SQi5`a>7OL(qPoy(0*G6)VsA`y;yF&<#x_hIGVfbz4K(t4m6Nbfl_V=N z`VJ#c4$(2`FKZ`l8?idn!nJYwvP2NGPaE{_3ok!&7fOMH*7#T4wAz=N#CA78nkaey zdvtFm?^Kw?J$`a*ddcm5{YH@LNbvGLnS~29kHWlr*xcM%zkTvO&K^96)8myw$7d_= z?6>~9PC7MzAS8K*__iTwlSk_1P7~XOm*_YkRR4VGCLsmmq=#QwlF{^aQViw09S0LF7h1daks(h#3rSgdi%Y&Gu z@Bir@HG}2o=*H*rN2=_j0O^b#ZI%PwI5wuNW90zF@(aBBBebBo>1@CO&tQ+ULEx*G zO)P|q1h+J?Z}cs<-0SN6KjC(5d#Pj{LHgd2HTYb9>X8}yin^NU^yNyD>ek6-eO?+P zNXn(nd4&c$I;bfTWzisbxDna@BXr&0U_3F<1+PAqKEHc5`1^eY{rFK=olsVYhW#(X z>bUpCN3Lm~ioc&ktEtYbW!agMeTjLEBWV4D&8X%!Aro_3R4*Et__X7E{nqVcE~l%M zm*u)`UwHF8ap+cP@J9`Ip8INPo@u)(0R$;5M?(hXE^&J*HFFZCa90fAjDlDeZjZ-T zN;kyJ0Wx$$$zH$Jgr~h7miAV8NwdhH!d|NB$J0^b+FInb)2SE1T}!VWz6WDbn>uO9 zMV6n7&k7(YH^=@qj|ysh`QfQJ=g%MBALn>b=xJ(D+<@Ozz+|AyIr#2f@bh!_gwSRHBPI) z+MxYPNUg@$mDhBXM2WoL>Tdav9!;Le(DL9O*cC#blz}qKoL=qX$!@1hLJ4Xfh;XM- zDZISvUlk+H-g@cfkQWsfEv&1TvhauvXPF4wk_E^g{*W4a&>>R`1d;CzLz!>hvFqtD z-Cr+wCKh{y2D;va%wE^|4_n&&lPCBzgItV>5{9@Yw32&ueXNxq`3FD;IElvzOb{jr z9qw-3R)})`RH2eSEDkv}E~>d7^W7u#hzS>u(n%?Y$M>f2d;muU=V$K%+X%bUz-b?e zyi$6E@b_rty8ae+iF5wAiAjo;r7k8y-@Q9!s1h$^4}+ikGntA^badt4)F*qS1#rG_ z^~6UDhOi=fMHC;&nXAQE8-<~L{r+}6FL_f}2CdSQZN`ptXAFs(6rKA|QGu0VuaGY0 zY#{eLuIdTXm)A#XeP0#WezZ~n3au0GRk_G2S@XUB_Kc-dH|S-L>Et^KyF4c!(CFHsH4s-@fHeOWQlHRW`#_ zy~b<1Ip!D5;tMG}DiB;nyWV|@_{G`vw#&?reOIDNgo&GhdaiFoKS@x~p7jsu8~t?yBay*Z!A^`VcKy z(9^y9({??r?b zBVTYlJNxi|##@bU<1v~q!`Kt_T+-rPo+xse8(lYi-Nej2L-9N}V)$Uq-^_j2z@OQZ z0E^?@c1LPFeqq5zi=#pJ>4e`CbAvqehC97D_N*!?zVLs>bRnS|E%Z-Zo;g(Jq5B@x z!u6vIu#0NDPk#_Q-0L@!zZ>M_wyCa;r)ho)ymKZEqGY6lDSH1x-PQju#1T ze)rgZ#WqhL?g%;vC@{wLWkT@MDMjNT&Ufkr*UPN#I|SxrE%-$(_9;SDa8naV8l4Rd z4JA0oliHrqsww_ojGbjvRc#lp>F(Tgm(nTSAt~M6^@4Fy8#0i|0y zL~^gQ_{KQn{5`)E#$d15b3JQ5bKdtgrQVs|Cp1aRRY#FY^2ZOx6ybG7CG~-dy6jG4 zWnW>@pY!)2a=-qwoH&+a;zjN(G|*urV4>g+i-|aQZ=9zOv8+wx_JPsVajBnOjvSJi zDrqj3lzw84(#@R|nQ;gaO<~QVB+$%J#Hz0>b{k_=oS<;YAA%%N}9$1nJg< zvRy1Cn6iNcLCJ4;)e-&82@nsj#s-4PI^%g4RL~IXXlye4m@Z0XYL&Cso$aI5Aseb4 zxmJfU71zMUeIYN;=Gmq%G#!kJtwC3*?`2>2vjiq@Czvux6q+iKAD`Tr{vK_?%N6QQ zp?Mwv!mcdrqXQ1l>{-WzbO7Bi!?qM=J*iAM!JGFN@bs~4Jxn85>rK&5AvPZ0+#7XS zG#{Rj;SyP*M2W<7eJ4_>u$jqLR^Lr(mbB9C0#sqXp%wXc_k8ebw%Y^BDo>{fRh6!K zMA@U?8AhD#QRS?{nHfA^Lu(p9Kk8*}32&6tSNt(Lz>Pm129~>Nkw6347%@Vvj<1kW zX4Q!;uyOCh*JHf4-!(ovesh9%5;$w-y{M~R)vsxRrp(EL%cG~tHS`Q;?d#IkGXp&8 z3s>R}E__Yp+kn{>7n*tal7=AoQic5pRS(nO^;{P^(vGK+1Q$e0Gu(iH1fWRNr_OlY zBOc+DKH*_djfv~)F2U>mWutkyDd__Kiz{bj_Z=xsZb>O=;np;1!~sO#=0PwW9n4?& zHsyzqk)*3RnS~Hp&J?;8mU??@@kp-s$FhBNq&8AfkS3JVnq7p;;Yh&hX@!|5(%mx} z0u|mtJHq})4F6;HPt;QU@3^O-su*JV@lW|4__vm}l4t~fJgHZ?b*$wvRG(rY1H#sx zd92VkAL+BM0UaVPqzFs5^U69!>=*uSx$T>c+Q}qHtO07I#f&BAYMalvU$aA_`7ndJ zJ{$3{FP)HDGs!=su2O^?yqGMe3NB|zJszvH$_FA4mw-Adcqla%X}uv>VX1C(RrqtlI@RugP( za{ks|I38i8GEjc9*|14Gfj9iG(Y;(}=`0B0Bl7(zVavW||+hAG*_jY@VhIHqu0 zQB`|ZF*aNE4CS3A&y8)vzf`wf4%pEV^WUaz6US|R7$2ByPm~!0tO=64>vZ8))%C5; zezC-VT;~2_fzzz8`ReySqB$j{zu)dc3?xFXinXQsZLH9C;eAtFqJCn?_pVaoS51Dp?n7&tyxpB;>m8TO*ZF zgQyly4lbVHg^q#~Jhs}cB2{kck~O2hPKzqlfkjG#rpJ8NV2$y_gahZePzwRIlY(U` z-zET)jp0eMQ$@8}J?G7OV;tp3h^v3{CZfTCAomgf6 zHhIXZSQ$O`ZBboez;-N4V3^8pacL4kEOIL%ic6P$WI-~i+Sp>pAtlHseB?o`GH zSSx`8oQ|*}K{=n~!hamQTwR7>T#XFg(k0t|x>rHp>SJC(UzE5H!4j<{qs_E6M+_~l zMXN5mOvzcMX&UXf)L;kSj0l$Kv6fR2wU(_Xk>c=YdaV7z`EtKBy~HKnUg%{QSX-w; zbO%am4VynjG;R3kzOz)I7g(wqGU-6|DJ1Ls0jB)4+i4f=g&skR z0MxCS>J-|^l)Om>lfwdA_+_zl3ae)aaR`K`DWK2F@vVWK)iUlWc0pY<+lrbsM=$7y z?En2Yjg@}ThGhSH*bi=%*`-?FaHut&>{Eq~G}aE@@O{Yqoy-X15Sh9dDUZXCzzQjI z3j%N{cbT$O9qi&>7Yuw#^!<*WUSeX+VfVMh)iRLr1Qx~3yrpOQ)LVp>5dBT5Q7o(Y zvbMnRE@T5GyW@i##sSN~%&YTDCHix*i**CL(u6jD!ZqWlCrLp#Ga0K;zW*ry$emK8 z7KSoqqbzH9#l$vTQ`@3%i_#KM%te{A~C&a$nOE|Id|_+RG>zU40+TwT#c`Jhx}e*7nle z{Rm|tt4nc~^m1VBT0>qxorfd_3q$&b3vReMHMT#Ku-(*NQ`W5JA_cG)j#*GbuT!$c zGknW{e)smi=MfIyqK?;Xe2npcb5bY{g&fbRPwi5l6iChr$aB2J#?c9T7(cVy0!&l< z^cs?BcW)iJIZ!FrS*Pl$wEbtr|H<(U@Xh%X(f57ws20*R*CPcq8pZf(`9&rPPTVBK zTt646#ec}cr{kH-PkwWYj@9lHDac3s{GRA%cBH8Tvy0W;QDxDmI(5?yHdrraakVnt zJ9jYDNCV*(1L^QyL={A-^v^R@d!DJZE*i$eKs)MB`j2rO{2QUufienL1FQW{zkE1D zN_c6zg`4nXMO{emErc*;2s)z^0a83ARLkPfvwnl}|!dTS$4+S~|b#M*OC@b2*i`%N}JR^^zGlEoOHZ2rM zmZQ28$~qX3yJ7FRjc6}0aA@2c;`6A=(WU|{Oro|j_?vJ4D;?c%_u!>0A>b$gDh+fr zC6exnVx4<7fi>5RigG7AOu~rqagni_V)%8zOm1j$8hGAowj@nbkEb0N6IF=BDA=f5dU?nt^5wer>{oAhuB z8AbAO4Ua7dS-jeq)ElOM!ju|sv2J9LwCd|PVMQhvM%f|S0ao&I+m;eGMcFK@Tuw|V z^l0;Qv?~-#HgG$-ans2sA)vZ|gH*P?vKHA5lKi)dZ`PoqNt?Ng0)23y@e-+0cZ;?B z8W0pJF0N$-JHO53iJ)Qkfk<|OXC}@H{AS)J?==)DN?B)HixJl7W?y!eckoeaD-R6I zKLOfA3uM7Y#V7Q4cN(Ds){@GogtCRc!LO+|IT2JEFRQ_mJaMoXbR|#yMl0sG6xCWh zdO0XcAA3J;jX`nLvE^kTV{Hjm&lJ86bK~b2JxTImguFX*XOkcqq7?;EWI=BzgRX!U zc(c_k>q7@mN}{&JFNSQsIE;Ga3Qe0$TE^>OhE?A8F;uTOp4xLBmqvQU^26iV(d#py zXw^{B9Y!d~PVlKWP%w?)z0}%%wJRf;q#s%_ez6}NElFJ#z(T6QsQ-ER*lIE9PRP0% zA$QtWIbNDe+u1v*y{!>4lmb7U3^7vqvk6=;d9^BnuSm`pm5xeZwGrJMC%9a-V;X)m zwgms9?|bpnr{G*7&`RibW!aw7fr-*zmiP)gUXzFPhWv5+eSH5>SgRmaAN*Bo@Mail z+Oo&xI2NM&5WZqDmwV>Cb1z6YSf-l&XjOu-7N%Lp#9(m~p0x>|ts!P7RiH`bmA{yj zg*&x>Svtj$jiix)UPL@*o{WVUOp4RLEuCkrplR7a5k3%xY%TeFU&{8P)%nP>i-YGZ zCbl1dKH8yUvS7syX%=48-CbOMlG%hKqE4ijvNTb1yunNlP{E4D7;{PbEP$s2e{Nqp za4lPYn^BZM5ZcUaWJRpWu!_xUE7YE}JG_RJZGD^UAH@!*zWzf)vb*)akOAfI!xrL& zG%NO2eJar$E)ogC)rqE=y>n}+=!0K#=A0cqSug|*aED~4EFUWn{4n}dsv8O97$rud z9~`2pKnq`|x-)PQzVvMS3w}yGp6vWs9K!o$N|_wJ%d(qI977k>Wo9$fnG9g7g#HOz zwUkbMKVd(a5KniWlSysaJ|q?&6V_g18?Hi(hHrH!wY4`G8W&Huw-X)NDYytv!V|f! z_(yvPkH1DY`0#C4Q3t(qF+>DFa$a-RH=%=2rWQralQS`C&fZ za@kxGI~sYc(pC;#-MIbfafZq02dQ}q(Z`rY zle_%dteVXGtOC_;WW@Tc34@T1kt;;fMcWh_Bau1FY==m4_52KKqm6CAdbq$6f zn{TztV5)urL0=iEhEAq_f>G^A^1{H zE;>0JH~oK}e!hqZh`E&stoV{DQ>=^TzKI}Fbj|R6j;mGO&p|g!HwkZy;^p?>$b5wC zyQX~>KUE0zH2B{&m{`F=?yvT0?kLBHwm@!f&G>9Uj1fIj+{@XQCKs=AA<=`kE*Y-0 z=>G~rEK5{2JGsPuw5^%vzA{JKg%87(e8TgmlT4eGZfs4;nnpBv;fA6jY_np@gyx&oYk);)u|9~jWng@Of1Df)-kDu+fy753)}5EkyJI3!d$ zouzqcfeJA@X>Pr|JUL2I?S?ezZDT|iJnU7+G2!#dy(ysnkch_Tz)CG`;a!$ zH9Qm0eya_Z9Zk>@DQSpDmOXyg=BW%IQ5WhaW`dUy8*jA*L|j!pOxO46dPaEfwG8;9&SS{vhdtiv}G*ASl>)e)#J-XBP7OSBBp>k(~@YvWj3aXu-k*>V;{Mj9$L~ zOj)BE1UhPPT*A`o?AwpbNFGUjptO1#KJXr2H`a27B_a1G4$}TiLEdYgNQwog<)kpZ z96tqGH!Fu@k82n}cn{RJtztmAgN_dHQrv=$jn!@2^MT3_V)(UY-Q@DJ{wf$=`cENY zDAhx1#DMvBzwXa3vEYH7k~;m@^j_Xz#OqI_GqKT-KfCukIi;h9M-w2iYp7Kol2m7fNoL{7CZ2iXs+ zj+JQlv$JxK;2`Y-Nzm>F%Gds!gVKuUe;YLRFt7=`@uFY=wQlR)KTSbGr%H`2C~sZw z1nt7U!S%|ezaXEo6M#J?gKEhanH$)!!+l-_F+aE>hs7bV>mpF0{EwW28={JhU5_sC&Jb9wmJT7r}nmMX!7CjfeI-43$s>;M-H2X$7NKidP z*ekA_Z>Cyq3iaNr(KlpYdMXcqQUMC)q{#PXNIB=xY`|4kZvvyz6BzIqm1M^f zaN3%+p^V$G2B*$j^BVJiUiUMw-+9DTkF+ zC^OTTy1YT+R4zb&3D7|?d`Q8iYHirO6*DaJ1yi<{@C0~K_ z1VF{d3nj}_!tJSdh`Xp+zSfBlL6}GuWRHTqe8I%eaU8TSKL@b52?Mj6E}$H1#v1`tb408p;w}(uyRh~2q;#iJHvZ&`DGDSZDK0Vh|=a^zZEK6Zb6I|yr zwk1E_;39kW#8}A^O_fs^~I#F8VN!o?FD##JO__nVZX*%WXFf!MOrgl zx9s|PutM{J>cxiLAL?trAYuPDLL}X)OKQ7XChFvb1Pt{KVgQ<^O=6l^VfFX22|t2f zV-!76Yi#QGJ}iO?2(FGzgye(^VAmh4#DhG;!sWE#cv4UL&;uqZu$hAixcPl&?*jci zh4@(#7Z>i2X1vPqy%bkKCfxb+3mx&R*fgkXXkWI%oK@ch#jFjT$>O&Lht7u}bVF8X zmy83>h(=mQ#t{ZBZvh{LN)8+{vXbg9_cCqT-%-!H;vL8#`ga4??LPb7U=|J|cKk*+y?NS1 zmAo*Kp-h|$96TwH}i&JiU4|4<&5W^dIRdjmrXyz zKslQq`U1hemI0a<3K;nX{f4b*VM#9$Z~ac_-FMgaHI(!~kb-rEGbi=I_UJ{?)EO11 z{-*$x9Mc%qg9UH&UYA8Cx|GPi8pG!7>*e7+ITS~f%s7I<@gEg0Jh&zlvRe+PQ#6B#1^Q@fDEg*7LP88R^a48?p6& zAoGeAKFXzS#ZHfXt-k;th2VoY=vjQi;+kQf`VA#JUo`l2eRaxFQjd6_ z5rAHY@AMxIwq)=sf7f)eF6q}8e3wu%*1ZBh9Q_(M9V_bw{xHLf#;;J!@erqhkJ-yMY+O}0Ce6E&6Uu439*B)1XbfSs(3H7 zM#qAp)1IcMFy?~qxo^Lt;a0}qW|+YX4m;k3cj1G-EG+^_W^J` zo{hhaY7t=5AmZC>sXJ|~jV~+lgAwXSkyY0o&2d=VzJ%-H1h-#EfLS57PcS;!r0!=4iaOH|E5qH#ct?(~n@UN) zakVP|1Up_^p>sFsd4T@hFB+0uZ`iwL8{FdYfb*SdDN_8w|=)MZd2~&W-9f#$5!oiGyG0OHm!dVwTJ9>YL0 z?16s_6zEDcCgc5l(V=%mrmKs@PJ89w4SItjl*U}qb8PA7r|Vf32?gIJ%>hkCs=YiC z!s8|-C%G{B2T-k->l(zy#h*b>rt{9V?U%^goxZ> z>&RN99X$hPi-^&_3rt@9XW{da=!9BCWL+mwZ;E`kV>iVt`rrn0G=h8H)Ud)NKx4w2 z$ONHSh)Q}?nS!E)z`O^BDmw>m>Qb2)dq$g$eZL@X$Hyw{&s$Jj8nYX&|LkxoA!2u% z5rMfcUKBCB2KWm%GdoffZQrf;RJP_EcI<`gS4q_3tCKF4aG0pnM0m)0pB9Hn4QpS$ zF;3(UZ2qaddFdi=?+AyTd}Oc*lFH;HF$d=w$(wbM9Pql_G5rD-GGwvH5C~<>_~t6D zs~|WNpEb*5z!vqi#>Cdn)GsCfM`2LR-LR||Wmx4`-(Zh0Z|}XB+t>Alph{ub2WZ3ET5FLnLvDO-k+Yv0P-{j7sqU-_J2}U`1${ zu)d%1z@`wKdf^aRuxD#ei_<`2{gt0^<9x9y zx?RoOPtV}QxS2f2{#nZMyA6}Wj~AR{3i1-(;wxafPs$Zds)8{-05og&A!C0_HrlRO zBu13i=w6tChM$o6Rk{Bu>;fAaGh{V31XAU)mDg4z;e#42bV~H-9Vv28gv@PW3b_IF zX_r_zARzTk1P5C5n?ap?P+U%d@rb%X8~cT%^B2qeq2qRJG7a=~5SS(0XwDJaLLCdZ zp=Tp=APv)>H5k|=-c7(Rv#T>wP{eqAaf(@6-~!N1k)>!{zeI=NYsCB;GFv8;P<64K zP*vTqVKg^Bk-U%C4km^OIm%cXeg#tiFTX@Rodh=fvGA z#*7QUIygyf6ENaxLPhB0E9h)oGMv&KhtGrMEyZ3V*#6ALN46Kh!TEiL_-csSqSr=r zpMZq4%f(=vmAOWwt&wqQk6G5xAV?&M{o*vmKnIh-uUq<&?3HI@M5)vIvyp+ywfu@s z^!8*4q}1EW9g_o!g%?Tv#od_goy$r}WAbv;7@{ifR3YIg(OPCNaezN&i!AEsKheZ6 zyoQnG?I>lOfRds8OP3NJH2v*0ZUTN^PRmj)S8t-5f&rm8oQR1Dpe z!l>T21me~_ppwjY#XBze-Gq#+m@?MZ@#$c@8bOG2%cO;-FCi#-7*YoU{qS53IwMDUOLGj6B zzMD5)q=kS~-X8=5?_otO5l27Woiff+qCZ^W;4)_n4pUf{?~O4>Et{UW)6dBhl#zx; zHV%PCB-dR|$y1X0%S&VG!Q+-K)m{q}F^MAhEB?6(*OIA(r8M@vws8SHS4?t#CUpCVZ(r4uvkz! z&u81U!_-pMS3D4P_9gRl@JbvckE)KP2{2uBcP~e2W&^Ua6e_@-^{Wq?)alW1v-WN0 z{lIn0c|xFV4f0a;p;b&u!|j^;AT~2|mz|UtJ@mg|EbUPppPcYp8qp8z%~Z4cv7U%9 zN!4?*oW-RC#n(Wq7xs(gZ`_dtR#aH3cnAmYfLnJV=7Xi;J8|jjhLWFo zFx?AjvrcNI95F)X#lCA&fP9B>tAKKd4|1H!T^41{4A?bxUHm(MADH-3JB;R9xn04i zt)3)lFdI@Y+wiUJ1i_q;00jO~Jj+-K*Cw_U^yV{e50{cCqG$_>_)XxTZi>%AuGTWz z7gOY$5uYSCBDxwk$5H>}DS8D~sP6(f6*GTcM)h5qP)A_-Pvl<%234THulIV%LqZ0l zUfznDTq*ru2530a;Mc?Y@fs{&g@G~np?LL*_cT4f9?`((DWw_i^32t3A@v)G+Z>-! z>?R&ArD5Z^wC{eBjB5DLi1>XR!H@rxOwGO>=HeHYmse)fTnK0$ZwjmCPBVQvmzJHB z5`MSgQV{~mG6;;#QpdosygeGV5WtcUyii47pKV;2&_cuHOvs$3mtY)Z2U{5qw=ZP4de=+s9*Kcdtw1If{7im2gd(%g+Qq`nYRgWVuXl%pqf-ECQQ|9|hr6 z8gdBj(Dj+A%Hj4}WORx4?smFxM`v(7QmP3Eco1}6ZlFJc+}M4OMcVUWaS$f}HmGiX znK+M}igTOdC5ufv1=;%C<+X(UF`#OoK_jE!^SXJ4-8OBBmFvRuK|c@34LkFbW7}-E zi$Q1oZg5OuI~q$0?L~dq7+tdM|H0wP4sqXj^l4ZN4k&5N8b>-pWMM^rid(CaBnCSD ztqjn%r%6%+tC@U`^s9emUnPC4Z@(R_IHnP0F#?7Mq8v)^_Cna#s@D|E%?(cjS8 zVXu=dG0o2m6{YA;c^V}Z3c3Aia*=Z|E0uZGDC!r_Pg7X(5k!vF(=6#^i!gsEUujd| zV@>r99ssV%@se?^eFufuFj<;e8tyd^5-{e;RPHd=7sVL{Ev;gnJxz`k9e?iyMfB1E z=V|icb8y*iNIj&gxhXi!vj_Lq9JoceHv=Ci-?3?pr03YIzrv*TQ6>2AyV9qY4f&h9 zw9>Z?J(0C5IukumL06NjFUJ_!kZ|dvbV#THQSd3 z>8Q8N^Gbpv^bRnwf1M-1zpBC3k2r?}@(EjQIa5=~`di*~T>KxK=fzN9Maa3fQMh%! z3M1fLESE^Y-ptS&X}~0gaTen>r6qqOQz+JzH{M&vWCmrai9>zX58OUd|(= zJI79fF{Q1{?4%z$Xs+i*)Szp5DuptRu6~4S6R1MY3)zR9BgS&=fNxRr?V0o)=@>ua zS5OoG4c9U!%fL#xM#(8*4D*?}e_@y!wWn(J-UGe%$00=byDMu*agp!_35$#~*Q3kPB(^2IoMZ5TgYU0A;JWB@9!;AcPOIyF(c!Egk zr(6yiYwB~oNryRBBrG$P59q2gF*M>GaVR$<9di#t@|F^&Ejq>es;k=f^4{=|yC zUBs)X8ekZMrgmrqZWGd%{e)@Jj_kZ^^DX57l2j28M?GmmKGNhGi0 zGdbP*X*Ypv^2jxlS40{sGm7rP<=z{bbfA4(;O$O<+!Feg$KTH0w*o>Elwz-ZP zY)`oEe8y-jGL45TEDG&tTegZH6+e4_x~AWA_3>1Q_tNeB!+_=AELxpnylfPNVL$_M z5zySv&Wr*WX8%Ysg9=%Lk=K(LHh<%QYssJeKr>m)D#-&u$B0MCT3l6N8@Y6P%vwg72JZ~rys+|qB~0R-;R5IH12{9YGTo15B_w<~ z*igNt$}m;o8%d@!816!jIJ{c*OncB)b3~f!xkAet9$I?@cz^1Ln?yYIl8k)qTQYTa zbzNR}CXkM2#-|J-{qc%w#F2wqRsr*F29e;1zOX>X9eEk9J@795VP;JN2yBrZ2L9dS zt983(#6pa&GkQ5N#YZ(3xEYiBS72%qA&YHC@uWKQo8aevU1qGlDA`{sy9a0=RHt03ms@nA1@j6Qz0SA9iNP9#Ek#YA6WvR#sprif-K05q*-p^qM4% zgu<^(hW(ab{8qMd<&XSTB?>9dWKnhsO|RAt+~)xTmcJ zKcI1K%SchD{4N!JCUSnpYagdoTR$rD;i5ldzQFe0m6nmy^!6+9lcb{-a#^k*&kE1U z3UT|BBpcz;JMPjgg1P#WfM|e4FO!fb>;7BD_n}IRb5!lGhV$mmh|lzI{I{O*nq1&U z0}>3rs>~Z2__egWj5jc3!$JKMMjY*B5Kic{ewzAUn@4{p(l+j#p zU?Czzj~TQ@s*P{mKExSU12i=O2Fj0mr$nvuv#nQv(kAVzT2~QUBj3AihmE)bq{f*> zNW;2=8xuft5?yciI!>^kH~Mi9c%;8RN$YOk9lTyX8X=mtaKDUm+jIQhK_GP2sf&&i zXj1*LW9cW41OK0AZ& z&QC@vZR<;nn88KesX}H5kmgnrrXc>oe=2$U_jNeHdBhq^vTqTVZ-ZbEFqr(|^Bn+_ z{Cw0l=fht>$_#(RKk7DLlZ*DKMcoBm6|v)lM~J5xM5mo=z+TsRFLW285F}w>5`#dI zWnxzDdW(e$oNJGn{5H$otxdYIVBM?8Jxbk@L&v6v<^;VX^dr^S-rFSiVxYyoE#CQK zuIV7IG31~yZs-gOub=zlWXk>$V>3bu$qanQLPX!$4f{H`# zauK|&pBB#(911OyJqL}UuauP|`c24q54ki2KC?#~mDX_JIWh;m4jq{3O+k4#V)mNK zDBg&_u*{D!qro82KCC36A#ExfE5(+a|Iv__`937TwFSO5tG$#m#28kjL=e4dOz6A(0Euw^nmpk_+V7&jyqM@hQ@^=A4JAn(6O@Qs(Nmv`yJ*akdv~Uoj`4+t5 zQ+C)nAXuWZLL+&V@E2pk>pBYJWUn#AO`WbOt^8`Ulnd!qm0mq_jU>^%wy#9bqe>7le>>oc`L?K^(o?%qp}A6XbsYn?5h#ah zALlX|>&D7;oe2n?2(TS+?GYyC_li9Ao^vH82p%%y4c)O3Tx;xBp)^HhpskW9z;>0E z?Jd^-riDeE_r&n{sHAXp$6)CyWu%ZDK)AcQUq7%zgZ6>$&?!UcKfFm zVBq{MI@p|)lP+JyuD5x7sB$qc5yl5D+ivhK-}7qeaeAnDpHUDWw)qUVNZ@M91+`Xb z0S(u!JkzZPQ|EEB$M3e)@BM1|W!_3NG%uBwC!b@|D7vn*ZlKD@X(1>y#r*rpBAeF( zY&i%Y?gx{N)D5)(bFQCA=t;QM_jv=>g9c_Vo4q1*A5rWL;$K^6o=eGI%M(FBZeV05 zXNIWJVElJ|zq$Vk{38_7Q8?zzG7=g`CDBr*_K=;&@q^WC=%+Rdta7?W9_gCpXqTZS zPrXRlNawP0%8Vnd+hkofMzCIvIhIPrSOe`W&JKYwp#71GUu%Mvv&J>@y}4`HNzQvN zE1AwOs=6&%w|(4AeV%g*8(3pnr5v7|TXSi?)_F-mrMKF?iS(G?@dh*B7Ghda)GW|8 ziU~5V{zL!X2aCdbaE51xufiH$u}HL>-@qttNYFyT{E1_i$^&(5RSN5O`E#D(*gull zVT;BPwzZWAX09v@O>>r@k|8z43^UVxfCDHZehby*%Q9@5fD{^_+yiac>)l2aUoen9 zwJT~6c@IY?syAPoKMexy1Dp)-$)>(M4BEyvjtI*h z0=c5UKTfSBVTB_opDBxF0JyrH1glmD#5g=UqC7+2ZnUw4W`NmZb3LLZN%pr1v!E(t z!nZ8{FONXPmr7G)J|nRR>TZy*6TDNFm3kiWlZfw|lli3quXefWi)!QR?&)cDu$SVW zGkSWd2UxuFT?pWImJdbA7BHb;oFKVmt0|iXGZrb2{9e1j>%X}P)e!(q<%LqS6S0Gq zc0^RS{^!{bw_$o8IdCa=%lXlDK=URknPHezvE);)8k4Yk;M7PZS?+M9gNa^OVMo1@ z4+B#`njW#OGV!dJD;4g~zVx5-Lf8J^V|nsxl;n*r6uZgoIHL0Gn9Q+Q^xwKH|}bDZa=8yZetmE{C&&B ziL$CE8uk^pX!z;}vG|`sx%)$CX#63TNMEI#lpKVOYQI7zAD~C84NxCd_w$DV<@eRF`WS&~E2^ zj)BM#nZf-k@Q_%}nP|}%COMpvG~a9-?>@!p8bcTDTj)(QGzUlfU*vzExwX8#6;vKQ zSwTa#XDqh2iXlTjcbi|7EGPSd=;h@P78HpF&q<0Ya_U((f8xX6e}5dzzDvANz6CT9 z;sk{KzDd?%uejZZ+=!~dlf@>-r1XEh1Moh(P-_=u0<)%wseRO_GWPVhmb^L-^t^B< zl7L(AWg0)ltsxd^I8d}^T;=o%2_uXLj};bzmGY2n!w;Mv&*z5R44X`|K)*u%j%wv% zj%Iq$fMj*xr%@CaDOO0OLA7F{4VCNtcf(f(Bi95G2U+q6KKKYZ;`brWZ3#6}v~%E8 zmI)GXHx4HO2lQ_Q^)oON<@j3&BBbQ^9FI7xXfod5fdDDqa*j;pQd$`mAJHv>VM4?t zIiqOJ&?ijxJ_Ivh&)BWLY&q1Q{z+0+uflJ_m9I2#!)k1v7I@2JrcSPx6vmgQAm)@; zJ-cBX(gAjh#H5;*m1s?w;C5d_3`LO2gg* z(0LtgzX}=5e0d5{6e#|j321c7W+v$W%r1G7+?QTgWuvvd0M(=)@^BLlZ z(iEoh8$;YEu8JtnHdrpMeA~jjKJ5LQLP_aW#8f5`im2h^=3!ScXmx+~{5j=#)c za#z~@n({mn+%oi8FyK$Lj?G^IC2DBbJKR`krc#qYnfOkbY1jPSh`{l5M6k}a!QEnX+4n%%$R)8k&3hE@>+}n)K9tR--B>h|8`Cx)6 zH(uB_fXZVSlMQAFet}bF*-?gQNcc|p66$rEKrPA0TlPe6C3YAG3cD{aX?>yeNp%57 zim^mr?RYJTJ9(z~_WeRD*jP3*C(9AK2Znj+W^OeEz&H!3U9*YYm+qY7O%-yv3sS0U zWj$K?%!;9y0x_+jDvLre0VE| zN>$ssWW`YkVD2fd0SfEfF;oCvN}ED{Ua5#54F}A%D+bXJk~8<;G3}!-)@2WlV7TY6 z1jpzyMQ|@paRAG5o98#y{PP`Q`D?O!_Vmxg5oc+6`i=0j|5V~h-SGZ`5gq#;`2=az z1RsaIR`zO?;|?!`&_54zI$RPRmqJj&dO)--1A^W}G7%$K=H8`aJlm&*0-V=HZ?n9T z)h4Fs2{nRA@_)2yT6WjN3snVU52NMBaSaaw_{qnV(Fi_TGj}W@JIvD8S#(>Me+?l= zwOUw5>?BH9*Ev@fvQqpK*1X(cHA<29%>vUH8cdS?^{Qok=3V%Okb{O(OpORai>AU+ z@fE^J%+M0H{v^;j88|Rt)=1guo#DkTph})! zBLHfbV^}V~RvJU6DuX56UTg(P_Ev@UQk|aqLZ*S{7M8CCJ{fdQ*j&8(8%aRXoP$r` zxm==`lY-;1blo1%xYT16Q%I)PbfcXGa<5~2^`6TGIyd73nx1+Gx}|h-b+J&uF`t)p zkZ*7hcFQk3LvwnV&2)^dmF>-zmq2$A|6+qoaXT8wwD_gS_sueW8z>`zA}t}_-M;Ub z0C#el^1g3$h7obaXh+N}x|H#EOGYt!EQ9!vG6WMA+~iU`PQyN~-^U zNQ$sh*6u;=>8V_5DZp9wTJ<-B#2paR&TngqA^BF~S##U>x&Qq@g~A?C4irnfi7iu0oZjPE zR+B?iSJJaz7BF!?N>3M*5JNlFeOG*kqrVJu>QQkD`5uAOa-hv7w9A4N2$@2}59}B~2f4qKm zAL4gpta(VE-tT-5ya_LN#WI&7(8vUSwl(~6>9qJOgPPlLT&(}!txR88f7S;vjuvz~ zynUL8Z@+i<2rlaK$}(z=TFKm{hq=<6L_>t6$$gIrcfg%sIE`&d6ifK7KJW#Z~QY| zOg|vd;*&947wFyc)O)jz^5r^AiY#j-9RP<1M6~(ram15hXR`zK7jt4-P4@CF!I5jP z>8)7VR)yZm&C4D7em>{hIYG=|=RvAeVYHJwp$VR{1TIL7uah} z(To2u)s$5rPG(wmrZ_i3A@7;xkBF08{C&r5<9Qx_K@5^byvhZ>xu($tAhx?X zvZJiAmWdi60M=BQlA_{XEgVOPj1iixg?C(deEKE-gKn=YgzZNrTm-w z*rIY?@Y`);iYxh|WK|AQui7U|=dZO2B$U~nhwg#wHm@J0!q~-@p zm||{*=?3WOM5%AP+GVYf01c9k6~?~?K7-WVE>XoCliCtpJl3u#H*@6{Q-Tr=(Hh!yICrHTPFZ(v9BK$^0#{}U zF>RFpL)Tx2Rkd|*z%Xn;Kth^LgGebMjevmCNVkAA0@B?AhwhRRBt$|&kXArIN*Y0= zq+2>A_xk4YJkRsHzV~|HzYa%n@3rO}bBrtO|ZXwOIC?z{_vHtyxhywTHfd_>MG~(|4f-c!agImD1`1G_m+CTZp8vifzrk3%J{Q^2) zL*OX=1!|l$Z7TgoOJ6r<39lcfe*U7A33YXUMvh9H5-;?gU_lHGOFRX>X-BRE6^;TB z51wyuLn3?hyQ~Yt35NTf->f|5?i9p1@#5N~*+<24K@7eFr|-IeJCr|d`$(AdosT2( z0?<3X?(vWsFuHpfE!XB+oH8hv*8N@Rf+lIZu+XUi-*RaRQ=HY|RCP^@IBLSJY?ggjv(a82ul$s=4p-Ey9^3mea(f@TZQ-NV$Oq!EpYcaUw$d?IvMqtLz?Rd`-&7Zw zzP~dTnY!DQj6rJ0lq7(7S?{RBw>p5ZOuR$VAz~n0|77^(KZaUyG55lEEI_7y_Kmc3~x;ytc1owiJ^x<7ptE8Ic z7p?;si_n#llWjwMASX*8kT)0O}eRZob=3b(!yB|`L|6Q$x zje9k*S85)2sC6|FGl|oF8kPLBJbF&~9iyArG`33xDP1~*tXV3tNekC|sj5XAtW^wj z0lWTI4l+BRNF$JZx1WjdW)B|487SnMC3qMq_66BCQpc6mM?VYYpt1V=qA!(1<{1r# zSz)r+0fk?ptDh+SkynRQ*d){7egDyJjpymsu#o{x+{M$K7g6 zC2Vk1`^5%<$XlSCG2?1;Yal z)I4SGxRbhJ$g2f)+Mj(;+1F~J(!A>gzJNU~Y*Rv&>w8=-U6^w7L6IyE2$B<+4%up&f z&a$pa#EBh-o(v1CA{#D;>R$Xs@Av5}oek0|Up=QgxOV_uWXT2CKbI33?Wxr&?CSO( zJWA!A#MccBu95Zre1lqC2uE0!yO=$+ZOPlODSmQ0AD{QGuRXZQE`mlIFkRc8d-DQXTnUi zCu1UMp8Tfimj^YGdE^v@lc2u2$T6`RbFyOVHO?5j54V*;S=E(%$xxwZ>XL#MenlGP zGyL@vp{$AJtS2q?sjCNH+-%z{?+I@2DD9^TPnl0>Pv4FPEB;33(KVo~57r?Dw|1S# zi%hsU6Fih=e;ig)yZXz1tAoFUs~c_EUFZyQDV2geOHDB|bTFqPqb>U<4qKAiIPEPM z?@q?|GjbUo?JYs1-R)9=XMv%Tnxb-)6m+)B))D%r*Qyv@1`^)(1ulu0a`K@T*5zO5 zs&TB-?l|=5biRl=8o1NpaGy$BxI7BdlOU9Q7h-NstAq)eTDO1}R%6AoaUs8}eWj~b zl6|3%#YmB3yOK-7tq(f&zoxIUlIbNHZ`c(}M1}-;1P8&brt~UJUeXyJC2#tT{^_(x zWi6KzE9{z8eIjamSX{9ioMj#o-e-7?E0Yin?G2M=`aN0F;+?}sDscNp82DCh9@UWW z&>&v*&y}PJyKOe=2^8@PzZ{jp*C7~w_ESzEh!tmt!CZl%p^^UEIv-l;s8moAiCC!5 zrZaX|)%pw*_9}1Z{j@(!;Xb90<32t%rNwOi{06IPmyTdr`{N7hntZ)S_)clisX0F3 z$(Js0(P&`P+~L5yNC58bI#5p9P~vow&f%HATXp#Odo^`ub*(T$8C9mBoWc58qU6Lx4xqPco zy8ykMigsJ3hwaP@6RM<`HpZ|BVH zJ8O&8mMHMELY0`uwzau$t<`BnYNM&-<-k(s@@@xwh~G^ves%U(K={C>J>i3Jcja%J8`de%W`k|GgA`tl#6N$<1$B@0bZ0gBtuw^i|=~4ck zIen<8$jN5WEs7Hr$X)fPSyS|pD$Q5C#G+|BQmq$i61HVjS>(Zf!oNQH?Vbm#U}t-1 zSx|kR8wb2r!z_+AN00G4@YJIg!z1L#?~7qp#aAHt9Bzj{$j7JKX^E?4wUl^cZnJ7s zv$!p%IbMs78JYh+@lN+kYjYd5r|~OuN=5?ZXHbr0-V0-<5ot_tmKLSovyvld9_8g; zL2|x7pl0Qtn}X_{$GX=}4t36S;8NX6IFiPMC&qi){r=-pWUO4<`pOLnxqEg@_n%>I z4=j-p&JvTnIHv9x8!;N*CNTB0y%+BPD;25gg|D+oBgfczUv-FuBTEziphS?y(fge? zx|U23GP%8ryaV*m)DM(I-waj>0p}=dO+#1yCP2N-6II;Xk4Z zYL3)lbolUTjk;$)>}Jq4l79Sq+i8vRL5jx*S*KrT{vQTSPW#@71YLPisL{XZz#N87Y^9zhjlVomb=S5-0rDX`{}(wPFQ*{($;}k1nshjC67L$&N!_YzdxsW+h}) z=-zAaUB2n}4mZ0&SDW3HS;F;zY21dsBim9#7%ObQ~> zH$nw!2-IBrt&P7`iH8^N3SIBd8vI;GQUPYaWpZ8J+twrvx21^a6-v;yx%cKHoa$_- zh!^fegg9PmJ=U-)zreh&^quj6Bc-S_7(GcxaxZ@~E|G{px@wFQcc|3(33TrJ&0iXS zQ631H<6rB1O+fjg#Br^gFq%o4u;3W*jt{sr!GIp+60Z(3Ua&D!RpV7)rD=IL8RGg8 z*e#TJ%!}S4_$QSk_TnGJMOlsVLps&|48szG_Jq|v{``Rodh@;sXw!p>KY)b692me& zT^_rbH!I*$NpGMKCNc-g3#j`|MCRV$Sblhl-~U}_5Bt9pi5Urh2f;iHF87@eD8_5+%8=WYf}ey z&v5gJECp=#XHZ;T!yTWFx8F~KXO;}9^W7HXz&AV#vhMk?+3!;_}&j`2Xav6vtY_nE%&!dfwM6tPlH zT(kI3^kVmU;Ohgm_y7&vY8HhatEk0pjGS*NImhpylZ}&%9&tG?8lD;@b`aC^fvriB zrA2dMQc%Jx{AWt1-|s)Sww4!@U;x*VGHCC8y$)#d%L-T({^i_p3sB=@pUt@Un-=#!p#W1EF9dRC6P%@R#E0i_;X8#BCvxdm>8Y=EjANL|d(ndDq%X#Sp{ z1Ifqih)(xo(+b#4=yu)>U>b3Qoys{z=^EEs!Zd<5DJoV7r zeD;LybCAjK_=@b~wqgOVC6Rremj^N3hWFUguDkQqP(rRpVV`K(!gro$6G=xWkaWmW z_r?7B`Q2PWh$Bomccbnh_1*B;2x)u{oEJhyE9hU44s7A#j$QVXPcsf4)NGiGPy(ZQzV2dJ+cx~;X@*{07JaZWm}sLv3EO52VJ~MU zl|Suv!0tS%i}$-4P5xGTR`qvQ3*BPN zO>l-5zRhZ@&@+VtZuCEgkxbn>)=q$U{`6W(yd?&JRm_vxx4wvuv0-w4HWyk+Eaj&O zM;^-6jnpjCo?yzi)HMrJU1rwVp##lC89rp7=;S_9=Zw`i! zZhVc?L_7casqSfD8j^cI$atWr!Q6XHMK~4d+YpNMY)*_4rtzg4w{Of~ZkecH4adK4 zE<}4b{4~cte#&|2s+EA)=uUtD9yY$LB73kHN(!jw8-$w| z34l!AYK+O%5HsXA=IB4T(Jz}fzm4o$P9X&PFe4PX>Y(D9>-^LTAki5CfxxK#<38wNYRjOqmMZ2~SH*lDytj1ES95 zz;B!|KnD!4s?FAqGUJodo%)&Gl7jfRodcF3=$C;NeW$dnF0(b2SB<;m<0X_K4X7__pO-&y4p;&oJ4-06Ir6^i8R z_%P*s6nABOQo=y@K6jMHP z*RY=H!a>bH!hnv|Ac5MFSa;8TY>9nzf^Xe23s^kfkBag?E%@WRp_*DRo2W8_;hYJ` ztwZ>IPjPB-j-#Q#b+P#D`pWA&|H!=#u-U=K^kcv3?&$%yzf z=U4fucl3MggFi8EqP8^Xou0;e3!j~>Wz0s5j_aAkt@P~Qa_9z=#NL~Q=}OM1^L2QN zk`U+A((mNav$#z*L^tk-5Jj$|`^!DgNq@S8SPbC28lZe@cKVGu0iP9gYJL@bjNdY@ zg^z0=WhU9U-vT6s+Mf^~? zoMKnPn>G|@=iL^z`-ZJ2hCX)g3wa@geX$7o+k}$U;%mGK2bzOT(A6*`{<)<2vbOl) z4w#`Cjzw@mdt$qVJOQ?>^wdDDhpzd<3`sdQY9j$WZ^q4tD(zPL5n>H}=tpX^s@$8h2)<^9!cei!tTM^j7E$oANh> zy)2{idxUF?rMnVkO`;Z?Z}>}YJu5@HqU)JwkXRSROgV=lHJ^Gu?;z=T+4q&!P{$m} zCkPghsl6uWr2NiXHOcGaSB}AdzWix%iD{))^-z^Kx8xGve3#PM@adh;uVs2`mt-FR zgq;$|W)6FI^Pf&yBmfE})y(2Ip43_X@$T$+)x3zN?dm6K93zJS1wBmR|LFa}&*+DSbhc&?X6gp8A_JcBIaAKd71 z{l*j#>*zMi1s0wd4#WGaIe7t=TN%sv;Gh?KV-)OpnF(sNrUu%Gnow_1yhZHEC`90q9#8 z6{*Ur8=VMp8+s7&g7HaJ6BA7!P#CgoMgt+m0GUuP@O{E=bK|)E>+SwOc0Wn zPS5UwO6f)I?xDDc@cgc~OmdSX#F_cB$k0u0PUgUIxsYJFNM+ha?LfQ`<_!SZAU7)TpEhnYjW1*)pFq5;Dz~he4er`M^65fM zeYq9!`9ibI&WFhKP z(dW}_+eVqm)3P4A(V0iS@1IIc+F3{`%}|Mzidt0vbm?>fL8{S^+M16H+U(#MVNPJ^ zsg~VTn^t3n<%}ia-M(bdKgY&;PvSK+{3R=fyhQ)Wo7iJMpWj-!ue+x05*rLqxd)Q; z5>9pKzHtLX>XOvkl?6BXa=Kn-6%vT4Otyciz(`4NUSY{h@;l0ZjmL6EyFm)qi(-3R5A6Eo-iHlhZA|FWX6KFR%36 z?B}5U8)7}4vE|ecx~&}TNgLO5{HA$!lg`r)Sb1esLXj6s8KFq-PUKUl=F8F{MAD&_ zeP4~&C~(UK1Z?&d=0xijga zA{pfmMUG8h4^a^c3o5+i6m1ZfFut>(x48>D`~8|x{JT|CaE_C z-%h5r1J7hKX@cr|fhfd7#3cebd|!N7X+pS2P5VdB zMYO?Jqs~N07BZ!%#f@UEYDb8m!QEds^%xBQB z{~CYbsdeDbwZ8klSDR{q7w^HqAt3s&zH@nQuh|bdfh3M<9#>u3(ldBO$sbs4-#4!M z$+sz1ooYZGxLXh_uUOxY7PZKLGIN*veT$j`yVy}8U6(ni!Z77=p3{}2u%nqR)ou;z z_~6}QB7J%|GtIGn_VA4m0$6rx7B`w?7t}DGd+5XI8u8#k}=x(Y}jCJ&4MMD}gop zl%nBgLPAhfB|i=LgM_)!qJgOq)eqSO>GJq&Lr@@?ilTX#)>t4@UjwQAa{>BWWh`y! zCYoZhtOX9-E){qWpGqzVMpfsd~PGF*UjHtW#w1 z?oXlpx7Td!%Yf`d@hiXLz3{VMl8!7VZeC8_?7RU2j?zx&spsb|7lt*9L>lMAQ1(NJ zVbFV-WC=)BI$b5r+oAj9EKsUKYQ&}CsqViYAkc_~ zA;auXT89Oa85~R^>VRcv$I|6YcV#4hh@UXOb2m5xMp2#56<});r5o2B`Y{=hgM|z`|P$ zF>g=v<`fU0dS)vvTL#V>H~a(yx^Hsvi{5+sKsqIkL6PNmQ`-kMImR@WQ@_JkIXXDC z#u?o_^_tvV2t`($vzfY|Eg~ zOh$-(n`P>3Zm-6ZK9pqc4?awP?x%>^K8rGP5g0F>N*?85%67EJD-ESnwTTA*P)4Icow57gPkcKez`qMsiwzDqr=Tonw zn~YPy;efRSzr~RF(LjC$xh-!>FQ(iP#L2+NOXDqYrqo66KJqBjRr9L#^R(k#&k{YU z3eklijGTj5YuI{DMP%^kCbD)G2j-jX3e#eWXMS_;OC0Clq5}i6%+-zKFEq7zMO{D& zWq_HiOtdjBi)BjLHZza%#2@gRJEDK-0*jp0b5%MsspH_wf`!Ph(zax(x{LT(i!W}^ zO0dI^N3kpDE6D#s`2Z@D=uxW5BvM%Vcm+8X^%w*^<;2v)?}s4shm9{Bz$e(7V}jD8 znEgarM=G~hz-%^5f40T_W?3KI88(1HDSX zReEijx#6Yi3g8$vtB<6B&~rD8%Q%J37yvQlHUJYKx;Fj^Z5iAmm=mWz5yq)!Pr(F+0b1O zFM5}iI`Dmtif~%x!)&U+4nWk$R>1b>vms7-blYRvmCQ~Hc#TGYPg2GWCIiT7ai}x7 zAr2V=#t||^pxjr78R)UX(j0?wR%`^^m2S3@C-2o3Yj;dN6gw0o-ke)6#`8vVGmocq z=&6dJ^E+;LuP9>yr;rCKh&O|68QVm|++@ps(kBB?P<-8+;TFJh50io{_zpd2xfx;8 zADqJkNGS!>iktJ?BOm-DA#B7E7_MA_Y1g9e^w4qf(3!paW5IAa85;=vMYb8bQt&s4 zSCH3MIE~{*3EIlnh=!g8QRE*kC!Z%2mw=s1GOIIGVwrdkgu`C|#K=@`8&+;3*%qwy zQStLC+#kz16_D?^zmU-EkJ`tn)m&;n10q(s6jPf@_5w)dDouQ~&8g{|WQb+PM9asL zQStWVinUDZ^5`p{At#6W{TL9;ZfRoD4RIb z<ke zV1P&3k8UdST1(l;{kv>Ps;)BAeQI=b=RrT3AaRPF;0Nn+>0OAfQ>3c2)d`! zImjsy2tGA77WHMGG zoO&;OK?dbEEB)WukYEP&^~3U!(qh;ToN!rGdN;0FmbPRRQW zujb=CxROFA_1hY(e|a=oS^=oDX+0dT|IhJy%m{;u<6$Z+lgc=E4)m{}=f36R>0OT* zyFiJd%h!2)8vN#DCmf%n7#uw+h%!hJ>|sD%T<%-unH9${^)QfTR#SAoQULF`{U`}Z4I z^?h|HyX6_9dX}Ib>*_)r^4>3ABpr0{$C%&WEyM6)l(e) zh;%nJ?aIp_DY(=g;7vOo{`XnIs{|5+fFJemAsSx+N?UcfasKaLQ6NCFH}QGs{W0FZ z`^$6eR^H7c@b6;4KU0Fmc>Wkz!Qin#8BbW7J&}|bSYx7WHNon?jt~AERG?53HVR7Wy8aQ{C5vX~T*SUYOrG#(I|Fbmh?@H)C z%A3D}D)npwX1T%Y_%JTG0iNF5ul}=8H-p3Al*gw$^|{_Ue8?G4`w_6(IzaydrmWHf zR_~d70_w;^fKn4M;2t4f{;U(nfuV62IRka4X1G$|8vx+JmjG61T}?BLO^jf8>FpWf zdj8^exa7t61SR}*`JZyfwVlrA#%SZqk4<@rHiV&8BvSVtUa*xk+N=gJNoR?1IKaXo z=kKmGs7ea~z^w)3EInT7T)d(XPhMEa88$W?m08Jjsilbd@s zg4%v^pkM>RGf0!DO$~jW!=guR6llMLVz@s?-fmmS$MN28#|}IxGdc0B{ZnriV(z^h zC!B_Kq*ly)A+Ln*cW(kTPMcD}hDVj-dh(GdgA*YV2`pKyQ+w#|>QLMW)=cLdD4_m6 zvIMa;-F&TQi;t>oK2%!aY9;+P16bN30yeeZm)`Z)x*Zf;s|Xw`cRtqHZ@t#v>&@ZE zw|@dSizCeZ^v&TNVh|mVUW746 ztHh$;7Qj0Uz~8bS=09$T!^w>hi32`adRzO+|Govr^;#S6eYo6h;>m!3ly-cJ4Z~#V ziw;)lHVxuhG=D`9En`#V^V%n5qZV0djvj8SMlI(30t1gA%c2Dz&PHfU4!pQ8W+KqE zPcSw3t^2Q205EZ0qK$R*K5&|Z;~L;2FqEM$ zlawi!6_syM_XJ;~KcCOmHTNz+;*)!->w%Xf#!DSW!e`r`)M9JtycRza$!MVPU0@O<~5`|~&Un{><@lNPmo zCL*Mw7X7hWU+`cG@q!O=T8c1yb`P^C6fGHuoD(ZQnf;%8yMTj=mI0wkf&OVXNS7ZX zPS>)Wj2XPNKiv!_xa|x;KQW8x?vz|0g*}E`x#l@alBdVzZQd-(62f^7V%yIMG&-Zm zMfm!Siczksf^7hHng1&v2aSOy5Xnx}x_AFMl0-H*&fE&*w&&MCB2 z5PMgT={_+gEv7T@7tfsAv6N_d&4pJh$fTQ`SP{?3HF3&s1zS;csGK{#S0zWd$(sV= zfb`^w_d8a-7f#Tr(~&C;a_7@xIL#WNz2M(q$4CVV!tJ#`D*n5wd6KYg5Ix~D;a$%S zl-RpR_>U38Q}}IrZ?|2%*}4Rd$c^ca&FwgR-r7I;ozB%3@0ARN5vTtUcfhWKlxk5& z0oVd3KZ0fj0>quu4FpE8GXTt2`=9cDcitX+aQKaRUDHnoBn-I!AI3R z2^Xh+4idwqR%)E9Er5l=i8dgh^Pq~yXavx?5`Hmnbm;)WZBQ=<^og7y$W#9>A3)t3 zFRo4I3<3rAsnVb_sfjq@IT+%*y$Gvr57B3W4vYk!@y1Y`|Mw-BUoV`76|QgLbp77D z@!)NrF^)0@x}$T|(&@xe^t`pkw8Bgz(;?_opk6NS%f>-ue?1`l112TiNMjb|WEv0Q z96$s|ITQ*U_M02~5^00J4*~jMJ-JbB-@T|-P^$x_YlaN7nfh}d0Q5Go1XpNW-ty*snORs{(IZppt5&sJR}j75Ht`kI0rnCU zA>y?dlU(RLerVhh-mEJf0O5KIo6bnxPT6FI`><*p6&G=!>reS;p~H42iSD(>aU1w-Gj|thCRg#4ObN~8E6a32Q#L-v$hkOkA9OpMT5s}v2GguwIC$tdQksIIDp zF?YdoB9QYbhd}G+*nuy>!(gcwXS+t{W+R>f%0g9QQ9y5eB@Sw>%O6q@SH}}MViJRZ z4xCML$KLf%J2pdYP1`W2jdV9(t?~r=z&JnP%{@F$`F1Z(I)bNZn=cp;X3AcGNw^RQ z?Ca1hpc8y*n+wP@!#K!xTcMX8SWx9DAWeQ_of~ip*M@C+LG>)RFVe>O8sx6%M)DxF zVe>By`)?wG2B$OYeS?Yx_N4*nD%s4X2t4?Lh=I%OvzPMn=8p>l9dnVmd`&CWTj=H+ z@4VR%zP?+2Ff1S^gIIP645BYbgOn_&R05i`;<(b0;f#0fgf6;Y&HGJ;|jFdBpf;T zw?vNy_*o5@AwK#HOmG zTBj|4=9*T@(v3almqkFe*_$qtUPYUQ5s$5aP%Mwn?z@)Q)PsA85 z6z@RIYZS4f3ny8i{71S7?z=~Yq!U0bd$*!t?jn*o9>?Uup=|$XF5=foMC!|5(;!_b z1Sv>A$Gl<0)vo9xG$tprSc?I>*6UL(x}o{kQ?sDhURSXc%RfZ)08lo>dQ;7iV(Oz} z++jq?7Mf4%R!eGnJu3&0Ja$YR*+g8+;)YmxU`GEYP2fMA`C3*cco{j2ZH?@zuG#2X z+B#$)^KO&yy^B`)Ge=?UbC!m=$W*XK;UGz{3Ul~Y+B~@RkRi6DOu#gJCzo()K!LSve(=_Nol?_s~9{ zJIG|}TZ}iaOq>)}o%iNhDSj#(7-3*R^Sd(6>GMopK&LoJR}v4s^fMzV?c}o`K%?q^ z=Y|6P^+iUtowQxxPp5ePCXlpb@DC>QlzzS$tjM$v60_yEG2DH07uQMUf_3jYoi&&9 z`!ewm0A8PECF&6DwP%5ITY}s7T~LzK9W+F1;yv1Mz`#YBhgp*knEob{5(;vi>+azG<=4qi>Qq@AYKp`QoTmaDyiFuTP zdO07cmm`DG2%30cHF5)y*3ZlGIrSh=Wxa!)r3#%3vE(z%1&7#4IRp4c9{; zlv6C!vc<*QV^0E-Pub@*e2j5p%DP3{oLOOwMnY4PHXN`C9cd%(<`ZQwgUW|stJ>+c zI=IJWA%nqGhCfOl7p7uwzVM@*qK`C{1Pv7(;%z4DsSAs;kH=U1Km~q^Gw~9;B4TzL zfZDSyK#d?w4P5ixxjQXd126$H)MIn=b|L0@xAgKJ0Itlz@Lu5#IF^p9=dCZqx5{fe zMWBheX8(DyC-G9EknOED>c9_`uYk!@4g#tsaz~Bz zZ@L3j=%JpZ&i zh5G&k?TDdSG<;+|9EqEFntgQHKNEN-Qg`uac9l7Di$3&9Rcz-D4`P|wDfT>zZ^ptI|M>dJ-dLA&Ox2@&RtJnnBHrO)BW9ZKYEnwI&x|4Z2NMmV=P z#lz9B9Lh!O3KZ}wViKD^{Zru-VD}L-h08o@5wk~%T+j(h%M~iL+q$Eqo*2Yn}Lf%SYS5g91S+74)Yh=@B$*lR*6p(X&W4&8VI`WHgHgdZti8rY!^?4L}S z48L&K@O@F`qsSeNR5kmj;x-Jma)N||0k23&8~ECLj6v^l$k9skwb4iy9ZD0yVf_m= zd#rRDIRms@*{EhSH5(d+|%|C~pG^`8}voz7obULj>XeH~)Ua zxx;sC4>?BNQ4%2WMuA!+CFb)i;)++j&gMH6I3@t#fQz*hwmFBdinCq1sX}Z!8KaZp z0?#4>GYUNrhp@?hPMiW=b(He2;k=SrSPQLX9^Gtz9U$HMoChE&{XP?K^74GOd)!jS z>UH6LRBkEqZOr>|)E@{nPrqbAe}t^6O&EBDTY_SfIEV^K(8sTSqZu@_B82x`g48Yl z*Ie{{GoR_P917c4L6cO<%;Bp0&-Q#L{#HwE-vm*9mAoF4tP^d7`#0hQR846O*51nV zW$XprKRa?s@S_!s(_*H4ThpEO=STpnqz{gfFPZO$n}A!!u659q_z=hxfDX;v4ni^f^fCg62Vb4juKPiQCAb7!#d|ed zfX0DK;Ds01EVuM8pr}I#qj8^nJ(G8O+zzv?e6~j7b6i8$8hlhmoNFjk(^p9fcWWvlmh7CUKX0M z$Dk05->^k1dpP>bcdMf8b4>4NT>_~L=GPCNOn>`LkjfFY2y*;4x7abbAhqLBC6ne^ zT88Tl`JJrrQr@dxaQ6fEv=3(kSv{ncozPZ4u{>?kX76F-L_Yu&X*m=dxNh8G$F?** z1YKm|eQMNA-mZIUfT#}VDvAztgm)ud7WV8|zVjmzM1Qjv@XE9yX~@tEuhSQ<)xKLa z&0SC#cBP zRUZXv5Pi@vrecn&Mk7z!VmreZ&<)xqk2O272+f~$3(GaX>Y;VRr!LhZ)cjz@2U^Q# z6sky|;Y>xc4W4O&nV%e0*XPaa4|zy{nnaF+KaE_t7*3v`h2uE{u6dc(scEdT246O0 zc^=C?XM)?JvaJ#?iK~4OwKQ~;qM!yy9v8AzR~b-2QV(#_yvwRQ4MywDQ%+35X^Jid z!#VveIi+DrY&&7;EMRDiQcByD7gWnfXta?eUNar8m&AJu*oNC`r0KJs3#UJd3 z3hZPv(QWb)hr|VTB^$)(qLKBY=JXhv^2gUIPQF@=SeHkV(2;^1wlzQTu-;P(Onh(a ze`>E;e2+Plw%&zG2Fh3ZuioSMHeJe}4MaCVEREg96z6y`$bP=e0D1p9Q4d;X8F~L* ztz}S zB?ahdi3z3LpwIw=1?F9&u|(fpM12#aDY?mQXZDsC0B!e9>`jxXnQwB$GKnVmc!jHnIG{& zmYotM0m#?)-aom(Qho9^bX(y{=D^DM66YVvuA#*ZBmK^_Hm}o1LgYpoUypJje=_sX zYXVd*fm`8&-i~0OJPTY7w1Qiwt$aqu zhaa2j;w*?}i)R=F&8w4~nEc;WR+#|ZKhnXg=JoHg92a6!ykNH{OJyv1LP%ZKL&IrP%i8!o>1867LgQv8aLFzHWXPX$ZeC}-vIMt*XCl#XN3s^qkd z&b_l49_7J}*;vTr!aZaPwkZg4d*z1?4kgWK>F92Z5n*H#IF@& zjsNh@xZen8<`ONi3%P#A0SHBVXnLfuBq&Ait&${s8q}afnTcLOuv&%ZVUj)EQCuv) zaxaE_1c`A%Ug;h7-48Tfj65ZJcnZA<&#&W8SK1UwcI~mi9#<>MzNDoJxX^GVh@RUr z{`1-UNFm#}H5p1UBx2rtHxtzSyRqw>v!3=c}DK~iLD2G?cG=*N?V++(H7)5$WwcwJ7kqUyq^{A%87 z(CNT^Gk?LQs%@N+dVY3z)aBv}r~c2={QTtGS&Y2}>||P_D$SN`q$01N^*RY0cI~;1 z=T(kzuTZYV%r5;91HdGo+TM|7J7kymtn3vx>aP51wE_K3R&wT6!|$jx$SG3_%lzw+ zl$okfHF}gZm?2={@ln){Adk&RgRCb9RK<>zNTaCitt}}OHkN+rG~tJiUE}dDoU!lm0;j}^Nc2hAjbS4QRDHMAjuRELJ`iHz`1v9KVyI~*QG!9^5(^H zr!!F@A(VSl@E{~=2FWbR@bK0%$GR)Y?^}(2UsFU6vB7sjF;wLkaX<8yPoT1x}~c zoTv~cP7vbHZJ5u>`hRShXs*p=P-=Ytb*f0ifG=Xxzo{Z@J(rznO6V2i#L`vve%@E! z_?UHCW2Fq1R?z7b)A=Idak6cwVuZM50ZmlWTQckrJrU-&Ri?=SUF3R}^5SHyeIn9A z5PV155i=dlmJh6tOW4o2YCW`NcMn}JBIc^HUg2JNxpyZdJ0oGNpgX}?I;y!XKf0I8s{2n$*T+SKb6D8mz*@seImP8s` z_baCTyg{@n_r8UTP8jv{8D{Jp8JH8J)A>a~Ze}4?{mzR{3EjS#sV5ty(d#EZ{6Ikc zhGot*mqaxi?5g@_v8NgO+}RCwQVhn1!ckeZ^8$W>W)&?2LjCcjqW3jzY@=L%~?bG zt>xBwwj1FRZ}waF(X%M`>tE{<6KT1NE09Z6HWq>Lu{>M0^J99opv$hk1J+l(eGOEP z)Rq-YBwgNpzajTsL*o!qeDWNFm1bc}F5%~0)-hE{0$$o+!w5*edA$u8KCRCj~og_X=l$Hgo8JL;^@6suon@5d;PzNAG3f=g&*_k9dUx@G>d z?tSZCkT+l?)yNa$c+$Nu2`RZu<)&!OFOD?I9$?h|9#URihhB-S?=$F9@+skPJ%kD} z&(o-iUMVI>v+G{sk?1rbX@%QZA2=gdpro=lIjW~@iIlWkE&r?vo}^6W942d8C=H^P@GQa zfW(v-sV$HNgEcp^qHLyI*Z&c4xpy8|jA6NiGh(15cf2j8uejT(CGr1b?>(cU+?I7= zK#+`pC;}1`Q9yFepa>`uB}qn*oO6^05k#^AA~{LUIR`~Ra*j=uoO6bL@9d>(FZVfn zk8#fU&bjydv3}Xuv)?dhRn3}JPd!zRNiE3T*h0PJ{CRny9_0s{L*S!bsBOqugIKhx zG$8-P{Om)p+Rngc29h@$TToPwi-BQF-DnpYv={G4l>A%~kg91!tEKW3C<@bcunw%l zd)dQC6vLmIQ&@`?Q4zcF>M(G`-tXw~RvU-VN{onlmdYj2HAuy+<3X#V)@4InB>t@Q zbJ|^hU?*B#?ky~^1P+&?e`J4r#*~K-xPA%vP>h2nTPj{i2iR=pN%ei@-hsgR9!9D# zUsYi_3tGsEO;7^CU69Zh@GTFE{F*oCVA}XP?psS>&nx_H4a&}X0tB^itZ-T`853uG zSZ4yXMC&Vj2o9oy_tn#)qAPC@d`)1dL?k--oig}cCGzJi@%VGqKxV0?w%_;E+NkeLeYJ zzE0isY%dpy{Hv+?&tyRMYQDk@1Aef-AHyKkm)S(m$nYMI@5J94vc; zkJh=wuC*D5G(meyS0&i1Ti{ZHsWKjS30+8yM{lxExLs16V=v7Mw{b3dU*Otho>cJcq^h*T6kG+Hex`%h@kL*0jT8ZkyG(qkpMfI&+npa0tZs@E z2fUjg#sg;&K{`EhO)3u8JUNt;>Hg!?6PQX8yJDcCe`8X(y~iK`S0^}x^kwDm zT@7~yxe$qtk#EpaRRvDafT%0#*F?@ci?>9(Vi`zNw)a6#N=WMUunAdeha&%Q9|D8L zp)Jt)3^r%uXlP|)~LGVjP-juqq zV7rI%CbEz(r5aq(5)$p*F6xn~6MZe@&JOZL!WdUfZuXTx82sTrpXr*wk+Llg{e6Zh zg~9p8%PG9|(gC?FtsBDCc-dU$x>q4qwU09U^du&|+e>f!&*E?9^xwEe&hr{_=DnbK zvZWo7LYnWLa+~gHv_1W!p2(2y&y#R za5Px?P1A@5>mK(tBriyNGxtP{-5-or|Hyv+vFCu4y50jas(X`MC5>1JU5cq7r3T{Dzv*Eo9%3sae`beZ!BXPf1&~?k*rt+&`YtlqkA9&)#}7To|9xlM5;+ zCCrR`)MI|@2m@KepdrGQ_BdrEK`N~7>J32hjb^bzcv( zHG6*^Ow(j*VzHt^NeVmDKYsXtvV!b{CV)e5=e?x)oYkT7h{v}T|4sU6OQB#dE*=__ zXLk;HW1_^yil$U!UZg2T#er_!-C7||XaQ$LhZeg|Ui$C4DB3^`wf8z{=vv4Xu^y*= z2K9OrUa7I{NHm_$Yb!KpVWkVG6+LGHTjFjw&$Z1v1{urvPVA$V%xV(;`b#Q{&37s~d4=x*HxzHUpGgTx-R7s)qS6fs_)>Fnj5j0m@tez37XU;B zNxqeWM-!J>gF|rKygxgeKx%}#K?IpNJ?=ZP_K?j-crRu*9!M=yU#kZ&NPU9{J+4(p z9@a-aBEJ4@>+!qdVU&(V02_2y!Qw277^OK+H8#P-#j!VpsLmyM?6eeAV=HM9NXr^o z=wgl4%F#TsCPYnXeGy}?g7V$*Ljv0H++ji+F`9faAv;0x_iSUr<=7i6d(ug#I#~NS z-tV>{P<9V}S)OzfWo<*&kPGsSBc`2%%ozpL+hn?;?_VOgl2W6bOS*_m6$OQQIp^}` z)!a=&Rud3CsbOx3FpD?JuOL);I&lgRC8hzkBkY@&v~!yP$^H;`J%2^K6Hs~TuhBDC zw5Oy)paJ<@FYg9Kr%=`(aRPV%B(I%}EO~L}O>iHXsbateu6wMzJQ&1yQl092F0?P5O~IO}BdX+!va0Q_iI zy%N0zKv+aK?nv@{Y|-}MI}%aOca0k6=E8CcGWy(@U$aS$UgJzt5$^ib5!nIoqX^Dt z>B4(lTf6a(GiH_)Akp}50N8af`<9yO4s088=o(yB*KqL*3dn3Yx!bOZ#`BSpZPU)F z^+DoZ9$F9R4f{kWvMAUf+7N{0Q#br#e9q|lOWzgVWg_9R07k>}9V)SSAOer}Wi$5g zPMUnNtRHs?V+h1fzX^s=+FCAU)mbu6>)#kz?F5Ji<4ZC{{2W0U=iABz5 zuiQ@*77g$O&PIeDJ!s`{t4LF3XNbz9KKRNh#d$-(x~vb1&BHt!kmWY<%U?;-4;9?x zt4m+E;dq^xjCa_0DI|)vlHtxaBt@J%l0cRKd_CFGy;Fc?WUQ z1KTwI?a=<~xCi86bepXsT99Zk>hc6U%1>D^J-}LmNt0U3VZ0^X}GT1HZJ*PJ6=n>kJLFcA$VF%~oa=gbr6!J?#S{H9#iQuDg+M_boNu-;k}YK>Hhy57?EAr~Cj8nhYk{GsA`g-A^JKpIc&>OeKJEP?YO zz?C9FfSm}TxD&mqzP{NcBXlT~_(}oa1fn$Ffv{0WJ9Y7w_Z-JCZ4o51 z3TXW7PcpOGPzJSbhytj<`zS%$i-3suhUBWk2aSGM>OWZKDKQlSydKs6hfUSDQ47Qo z8{U>a=QbS&*&|WQH#z4I^;AHrJF(-lEHYBPx1baW~aY^djZCfV!8akhTPpypOzSK1xZ0v6Vf{T<6A{|z9qF26Kd z%QkAkKBi3IPfxQf`{R?IFoxn3fOh;AegO(rcmvBKg;Em$o~56uyzY97tW?;FRt*Iu zQvgeB@I@()3Ee0JDT_9>)5P5X=(-8E5YSEf>0AW7yhdo%-+>Fon2+hul1>jL5xa0A zWUUUsbO^UTAoF~)ocDBG8Ugk(*HZG7{>ar@klv*-4`Jat19~$7f{QBN# zXeOApx57ti?R+{|bb#^2EOK*|^Ki=p2*-zdudpn_pe1a~oz0}g%t_k{nPJ6V+I1*x zKGhGCV#@lfzAm2ear=|4BT(HG_fTQs!LC91SVdsf_E+2nz!8A64svv}c2ZNo+{(!8 zLUP{^lumR8`xrNOnrB)#1C=h_n4)%HFCyk+Q>&9B{CDG6;h(*_pN6sWaUE#uOB%wLeVG){Zh29X+t-f;!lk)&Kn+>B;0A&7yjJ6Ow5u6&Gdox}ffou;L*Yig30<;ehY2iV2eSiLQe#)nWvLmPKqDy&~d}%z>GiATNA7`CbdUc>K)e&soq`S zoqQm8hzVFTLezRO)IZOYF=$=Odf)%R(Rs=>qi}d!AX&`xGkUrfssR$!`X7#TW3-J> zsC=w1ZAkVP-$qG7J%zVApXw^}lvDR$0Q;G_5fHcGMn&(rK zeEiFMC9>_+?SU<*YSz*nO)mZFaexckPo?f6=zn^9{-nqG#k&2~2X|(azAIL#a|{cc zS|0A*u&z=D{d%fu^oy1W_JV7p8z(yrkEnwiQ_CzX0MC&_&^$9<3d`iLTv(?U4OmeAjlfJaGzP~mE+ zqoT1*M8uG7C5eOtc`PLtO;VU-(|GMQBm(50bzqEkrsVtG1&R5P>@MHNYNE>1)ts{y zNN~}5axx2WUj6a%aTn*B$buL^)W*{d-Tw%qdJ9i~8kc+xKlssLYE99PSz=>0d~+CG z1t#iC@~R0ldDQQkL}5AhQ7mGP`Eu>YE1So4VjWLqo)kUnc&keEzR!=_@J-&TAJvOS z?l7auoF}x5d7A%ON-5B{Ap%y-N1K`BT3ERhs0gQ10PDGte`c!Mf*}El_4#7?E6k9= zMirt@SWtr*bL4+^EOET)9yIdn)|Xh==qOyyiqXc(z2=QWOqiqzQA?Oj=iB%J8F>D1#cS2`FPkSr;jJrQ^O~^%2!fj*%1CN`31VX!VVRuu z+05e>n+V$Z8u^~?X@AryEg(jp6Rnr7;wJ=R?Fj^Ey$3g0;~5qcKQc6Tf|9xUD=+*P z8oBW$Q6c)A}}=po0o3BLhT?dHzc1 zu~fJ;o|I^1bxky3B{;U6-u1h1y@jmGp_2mXPC9Cop^JYO8SobLC8|&fdtrURX4MjvS?a+;o)#rK zvL37c-9M@l(2=m5*LokFr?FqFOZ-tI_}gZK8_ca zgS;1OR#z}*qIBF=kiMB?RAERE$p2mG0W~4GthHgJNr>+j?`8$47S>BVK!y7h@P$D2 zL1Jh9D#Ors2(G0ZkRJPc5CS|$8>W~ea+Uv@M5JKd4QT`-0|RGUP@#UHl=A7WCeznd z5PO&U<``hueF0!VNV3Q&>xK)F!=lhh&$A6$Vh>;s7GB-H3aU`1`G5G+zSMn!jco7! zBxwp9-39FpQSNQ2>O7-@o$p*dS_olrhr_3?-{UrKQIw)gYl$Qe(iow{c3_5AJ)8Mt z5R$B}7gF==HAA!cIl$@{&?+&)Oo|Q__)bVGY{0GMw7`5PDL%q0sM)Me?%I@}M;6E- zOY|=D-+-%<*(ILO-vfmajR32!1$ybk&K7ZzFHuKP5kmS^20l5 ze576y#hb^y>-DV+CAn`@eYK_&rz5ZnweN)DzSfV-z|I2r0i=P)GaV6HCZK{PL+(93 z$zl2^r}i&V8y&>5LD+AUjqD0@xF4G4brR!Pf$jB?Ps35&mgQawJ}~b~02YH^6nb>s z^QdMzSiha?`82ZT;WIiIIDw?EI|2}yXt6`2Yz9!?VNOLiZmwPiha)lZ~=mv zj$TZvI`q;a`?r4dOJ2MRu>5bx<*-6gM~8=Lsh4NzfU=8p8~N_sSE zUQiby>SA8Z9&`FW)Z_Cjn^JzApi_>q09EFV_WK2Q{HDUdDM_d9Dl)j;j|^`2i=3{y z++uS?mo{Z{^v`+y*E%dSpaC*Hj2}edL8+RN717qOL7BoeOaD6S6W9dJp*3Lb5_>4Q zccU)w!6$=?Z;!pgw(e|mUcCdsK>C}&iO|$Y6P2;23}Bc1%Ed2HffM45jxYVgq~Z@! z54i~B5!B`arHx3!%+T^9OMo#EfBH%Cjy$c#(2iYCasWQoK&F*RbnfsA{ZeQ*s$o4+ zj96S=y~)TrNSGw^%j0<@&%x6wqbmeErl#{H-2#Dn0?%*Ry%!9i>Ny2yvY=0o!^n$d zW@hFd6P`CPiA${`f!Q~D03lBZOOS@WO(DLMS?3KLzAZvH4#%r)D7zB4MVuU$BDDHu zY>%N%?hTaDjcz^wX@>_qev`f!Ze}gZn)^(%G;@{;AmVi1z2HsX6|_hG&gM%N;&XqivNz$VSxu_#0+3Z zv|QVDjK+QqWvCL0tM}f$YLp#7jcY!&a{@h34R-T=8a5y&7_7Yyg#3M3rgm*2vK)=? z@jIKTU@w>QRx+}42!u7VzqBPSYJbzVRPGN5!;lip#d2T7_{FyfJWfP~SYa zA!YKSBlSTw=y36Pz*F8>9`psvHd1H~KH5SRKYfcJSy{zd{>VYaS#?M)kbg|w_1!r~ z3Lir1)2tf}htMsP5CuV_$S zaSHy1xr2O&lVtj&+nMossGdXhSX7_ad_u=3-?6oa>qC2X>vsh;G_P*5p}EWi+L!xV*1mK2FvU?VGRx|6Z~?yQbTI>uH>mV{L6KK7HC+m;|=es*qD3M97Vd$ zLX`(XmpM<(imJiDDeg^9>CmcSSFX15t(T*rd9uaU4@ z?;-q)9t9WFb9fAKw0!O4zj*w`-Sh>K{+zWtOH!tNcgQpPk@vXYPAkHor@&v4L_IBe zqDJm1G!lB=z*i@J(D{`^)iO3fAY>X9_ozkZfF?pk)z642t2FZE%)X_ec?arf;RZ|j zAbY?msk8|^hYc2&QrZxholq(}Nk==YMG(-Pfvq#1ZW=S5)WpMnCI)b)^}SCtmB_|z z7gOfGM%gacc22T5U^`lpAVyk=X2xS|uGRdQe9n2ZJa~56>RsNLiLAlg=3M6G$pu5i zbmGuQv$>Xw>@Ojn)kR-80;n}r>5QawPGE2~{+xb%C0(j)s!YZg*DBlXPtF^t@-+sK z7T-404SVftj*)6k>%P`dCy|#Loxtu9s1H}1%}Ip&%w95$P0x+SxDQ#MrQgWTW_2GJ zPs)Fr?KT2uDM>gAR7QQBU6Dh1#<*l#>a^9vPVuZqwN#5oXKzI@u+RUrIrfTinftxG z_+fuDKg)@_=ORA6S4@q!7zH}`CO_%s==eC9$|hbvRqn>=oy1;65*yZ**0Cu2o(|<1 zmm5`PJKGd&U_NlgiYxXyha$G>&F}ps6?)WYi5|O8uup&wql6+d_v1oB3}3`LbNkTv zvY~N8wL?CW8;Lb7#433ookD$hqT*J1-p%NjCmtQmT6^&80SOu>AU<2S@E#gr?|a0B zVbvjpvg%Cldw^J-(s*JVi_Yf~y!(e`{^-W_B_}H5M@}L1C{Fdsz+VaR}F@sn|FBW4Vzry#B zTA>rQmPGwQl|#UL|Bq0G8cmlnCxObAxcOoP!coT|)<{O9ccgwLIJhScx|b7DcvD@N zXX>P3R!aMP6l?EQX{tGu{TNh~Hdx zXcciY-gd6)!-*xXW$#Tb16h^)dM_$(h7?_qj)9BS=E|WIMR^v`f&OV;O-QYool5>( z)ZR#mf`aIpWy8Zr*PE8}(1m*ISn&pH;JDry&+@~?_V*BJ?MNwaf_kQLa%5_GXkyv8 zqWY^u#RLKlPkBbk4)_U7f^yQ{(RZ+gGwaMCuKK*8vi>cBBllrUnL`dWEQ3|W1S}s$7?o4Z*w3Ru6NjEL<7D3KYKa*$qRVt zHAd*l!EIM7qjiHv8!{+bDo<^h|q?#XP~8&UFELFWxk zhofJMEmgmmAugVCPs`PGT6K9QnK5@q(skZ0M)#CucwYB$Y_-Hxi;gPshjjeuf}Y!XgSrC zIO4xqZd)vp<;eC!$-&DOtV{0G=7bJyK2e2{o>7ZkLrGmQST9(x1#nWg=?Q8Lu_KB~@PTg6>ozPMUvqQ@5%9Ifg#wX_Gdyt_gpCk#d zwX0^ifjjd(3RA<9tRQu*(<_Jh)y2%BsW%MDp}k$`b??HEV`n@p;CXEMGB~j0;3n-B zl#Ho18FOkmJ>1Zmi@}`u4oO7~*jb$OAtVu^jPTt-<3*@zR7poz(>$`oqJcW?Es(x< zd((H14?J(<%%1g)BDizxR0sQ3cvd&QLu;8DA1w_|UY|FJtIV8yZ&?=4Eis^l5;50V zMwEESJ6um7q4Ck2VRrGeT`0J_IKNtT?BjvYV1%36ZZWEpqi}BDQ{M5J+H=_X!*1eD z>*N^Dm>1gGw{lC!7_XtCRj|-NfDt$e<>w~)hYsCLYy@#31*Sc4G9tZhDL+sI=gaIH zNwbG1F2;%OJ?gsuEJAHpsKIiY-_qqiFhCg*H8K{R2;r}X97V2gu9K(3FB=T6MMD*y zwM=?=Mpl*9m)>E12dh&A=imgfw=;J3$3>dr`xNQ$Zs$3gdgaPYeDwm5{2Y3k4S2UE`>KM;Z0&i&23t^|7;+K1f#W3Qc|U zkC!H+j@+26=b<@_F^YmL%Z~IfWP1>apW6M!T!lR^{N(9RP)31S)zI5MHj1=qA~UA4 zB(Pu?ue)d~6n3YX1oqyhT-SCMpLM0nQVdl?(Gr0QF3RUzaE#&%Lm<|kf|IDWP+hN< ze&;FadSDoxkDd-4gj{~ss$X|`X#vt+-__vRg-(8W6?Jt&HLR)Lp-N29hEC~D-V(&! z69ZodxlF^ixAmAY6baDIuF`+I|HO)T_e1`|K5NGf zvwIyFg@(HD#DZ5F=I~b5J~O|t-PIqxCk)uE*VcR3>FcUEq^o(_g%(rD2FywE%D+f{ z<~QmlqhQ*D?2hHsKC8y45o#px+}&s}Lrj-N6dmDohYUQrFyOK?WVyDU^B!ME1hSTl zAmDz*_>y)*(88RYVNwuR^3HRtF})Sr0N`i9uQG~VjU0^TFhZk_YJi_NR4_Y~v|Cq* z8Z3r$fW!X>XBLrmA6e>Zi$K&@otV$~j1bewt2OIyQ_OVbr7);A+@hf) zE~$*QlvA?k2IYeXLQD{>#^ROeTzlw+U7A&uK_I#>q z$h9-F+SAj1_-^>qBSVWq_KovVz0Q)NPAD)n)~p7#j$=g74XQfhfUFH&O-W-_pb+nYytosX(xoBoXKyN*8gC4N`4^qF`nJpx zEuqa47Y#+(Ior3!#zawU*;J|Lt!`yn=MaCqoH&9$Tv$&QAjuh2*dfesOMeYs#InO^F5ku z#nQ#y6Ieq4cVo(d;wOamA~a`7K9tXr;k-id7Wg0dxt3NA4-V(H3(p~_$EgkU<9$Zj z6it~mCkBjTWI4yk3MZ?jJnqG9jDwYo#9@4mE6wCFu^fang>tATkib^pGooKw09=2Y zWwf-^W)5GA1y1~Krq^&K9EY@~>(8&HVi<~2TC9+t8X57?jk~DjCad-+JjQP% z#Je6}lx4DB#$7>M+;Q`n-KDIoM~myxIaAOq~i@~g8N_DXpND&tho zO_H$#KfXU8kj;0^+&FKrDy9-5JE-y**>p3P^mcXjh%-0v`Ej%}9s+QFCop~|`5I-@ zoT1=ZYN<*yfYmWAPjst4#V0%Q5H;WXDz#SW0XEMA+>$sKSTr>9?X+xVHtH0ANmKOW z2`oI}z#KHpDM6XbN}B}pP+Ri0+=Ep7-o}WX))`<=NG`d-%mq`d2_i*j8rgC>DU6wo zf!&S>Ze#%BEBNGZ5=aptSUH`iJFwT@;27yA}a27U}3g__oNHOBghq)2-oH%xL5!82S$I0VVtu1$D;n^`cTGcs5J+r_Lg=P1dQL(}9p zd6fl|t)&zO`_`?wN=aDNzC;bWA`mNU-g#ZRJ&6%55dYAJ5h>0?mi*<>ComX@-_tQ! zFj-jRgrw73uSUi%LGkoW&!$;wMSS!3K@SIgW7DYv#n0`k1=8X*Yu8O3j-HRf$rulx z11H)rHaMlAVeX3$W_%ITzN*G>q@2d7aO?|Sb2-uy`#33)87G8pH12lI2>x+FTF_?R zLXemx+qg2SBZcxcxQo$Qlj3YDf7hkI8xq?jHl@SxK3(bT4z5E^%eHAYOl7Qu> zljdl_{RQ^PbKpe^P$FxszMc3Kc0y<61i3LD7zx@`9iU0@i02w5{a|)%*{N>pBiN=8 zRFHW4?YLfnNY-__3C+u=lN2SMD&1QkY^UuK%6E{|yG)h$T4g=`)f!y*l_X~_!64pR zyO6(;OB#>40UEl~eHv&wFC+Cg?Ge*sP>|HPIT-Ubr?{2OX@h~(t+eUmR@beCJ*>0~ z+GEBu#_0st5ksC#+9W0`{^9E5>RKxTxlJ0`i@uoGxvq^>z3$d$W}d6+CW}xCqUr%| zmstO0j1Sief=YiJEZvCE+#R-ikFY!2SYVfiInX;41(&jpCBz};X&6MdkfXknp#SU z_%6DBL#KSF-0RGt!?o0oA$V`9+)d~0Vzrrh8EZ<^5UcjwRV;atfP#YAmZzywbrjDW z1K*GJiOy8k*LkCatPn^0j<%>eQ-hK~-pn7&=86ZkN}X-F0$)uyD7wsUR$qPbJWP_shW zRmK!uF8VcH*WD+)a1$qq_>T z;<%b#DSybJDhU`A=jG&YSlzr2I?fg)V2rv<=)GOg;%TDt=gT#6p%*1>e=>6n4lu3G z^4dhdJx&fW{RZot8z6eRKLotZnEV%=cqL5=-;=TK^gdrkW^>M5x*kd8PaWDkaID;c z(n9Fsa?A{`Fw2O@Vx^LqF}Pnd5lCg<>J{mJ#<}jAX2@yrG5PJV2L%Xhi6IIIknycQ zTyyY2ZyHTDdJ1oTjwv`PUr-Nr>Cw@9LHJn?F5M%#q~UwJ(J$Hl#X8-vTGBs~zyJJ!sn zyvM^8q;yyr8qvw_e7{$3&X4QJ??-xX*5M)B(^sel*OS&N0x3kk-b?i8Cz0H11JZf4 zQ~Axx+B=nKnGQFVETqC3{TZhR;8e1%#NekyMZ;tSY!kf{8Kb`+H$IBlYmv@?FdO~h zT0z4m14_|UJBHir3aFCjncjorGI^fQQTJHoHko;)mQr*TZtHStxzZ`u_TeqLdjj6E zCh$UUj|Y-F(FrtwliXV&Ka2g>jPcQU>xhnT&t1M1%E60hV2?{c3){+5(v#sq>~^q* zu8to=#tE+J(XbXD6wJX*o&bTVB!So$p_fej)^fe2BgF;~`-P)Oje0C&{6x^%x|wk_z6vRavP8=L7>2r9NP>+fOO$%SvLN9gags@$VQM);L$l2 z96%(X0oc&Jm^QQFrAykQCVtw!Adpp^!KS3g)5N|Z?^veRc2kN|s8{z&^Ie-Huu7Ne zYy)KfTBgQZI9xu`SF`tN8kx?KwOGSk#nrxKXU}PD0?{NcWZC*7<~Yx-FMk+T{;Y0& z#q9xSZS(lTU=+!ym7nkjdzr57B$zl!LgNeU@6eSsPX^}Sg!wHCAXlU&Ip*EysSO)G z-xWE;acb2Iba)O0s z%+rKSW44aq8LyRq*sKo5JmkLMXoH5XO1G`2lBRg$r`Is^1|#5EYsB1BACM2Mj}#{F ztq3I~8}n^+M9+5YdZYVjdr(Qft7<1FF)c);qXlAJTeW3!ZmTyE(>Myy;dF+{^I#b=k_7U*VLqrVDoacertDJY-sUtUAf zWrbd+9t&&)q=KMsdAW?F&Zrby5*&2PYNmw8HBorXR@lp0`|zUVQ5_uX2*fx&-e|mx zGRN6JgBfwI+j_;!N-_(l8!c;K5sp@Pox`TThRAz065+Un&0tw)KfV2j=2p-sENf&B zP*6oJZC+#}u`Dt3CxD8;viE@d5?#&J%I8Vaqg-?NJ}_XukaV5u*VZshc(PZGwH56b z6hRE-cr~Yhr9h6ewsQQ~sRE6Zs|letLlQGve4u_;Om7K@NPM^e&2P(y&ce_eF$Wk! zdH`Ce3bd|qsOkVF5Q$pSPbAg#C}JP2>591-EQSVy&ZgH)&63Wp$_w=+cC4yduIEr; zn(%yBI5p6w>MEqF2sU!rnyLet?~$0~!(vhI4-nXgE_FI_o?mRiU;U^mg7_1MKZk!J}i{g}3Y>UpWKIdt2L+v*A+iHLi zL=}Qjl3tBn;J(%^W9on80e;=vCP6GbmvI>FVl-)m#8p>@8aqO4PHb z^C4&7@sGDQ`VZ*2lj@2#yX+b~zAR_P0jDlT7?7YHZB2_7R8y^;zU65`l3J#c4Qp^W z%~>&>)l~0H$O=n?HR#siTptU+YT?&H}O8mP-SX}v)*ypi&pNrNOf{71g2a5AkncyJDq+MqKV7DN@E8ZBQqNu7r;_G6tVdY$VE z|F&OvHAT?n!_q;bRugVeB6W)*O-o8l8>MSv%3PD;?&!ltSp5<+SGHss1@0{0Li{| z-xRmvIbPSc19`Vq!9GXVcIQ-uS&flPpzKr@_RTslFU!_NxOe{A$7a0HV=$`O$~zBt zTB%w4gbU^^Ri(rp7)HZ-(73XmLbht7@Z$|CLX%ym#Bk!}^rMwcHO!c-dbS4sR0LQ> zURRfc`C5&^Q=ZI@EN${5Po1a%j2h}SwV2r_+=<%S>$JR00vM8<>kMp2`BVY&sYwD{ zrQ7vNSAUzH85!@_7ogQ)s&Y0%5;8LySJldy#N}%!Djt* zjdKCb&WDp16i4%q9oGT(gn+fot|X;knW(u!D%s(~dCuvsBK#Dx1i4gr{j)Bc8j0us zI$4F{ZR!1bBHhxIXV>V=R4X&gDfW9z4h~lj%pN_M^hpGS%u=fff6cNiAWImhZ17&2 zH1S)UtVXrZps{HO%C1y@mj9cSdHWEW2pk!GH2Lt63bWGvXp;`ph5B0>!+aMO7fW4G zQ8HpEW%XIXX5VUapp9354r2jX`_xSObE`tjte z2r8Y>D!_50K^tZa5;Bd9=v28WBsdR#-bhO_3B7pb0v7^1s*Ri(}5B>5Z?{fbRL~w*5PBBR=s)7)iXhK8UWW5p8qYU1Nq5(-i7@@9HF8 zB^|ZKx8Hw?73YHQaDuIs5;OV+%(pSF5Wt7m1Ya!m%|ph4n(l_E5T~;thu~jc3{qmf zb8wD(wsHc-5|C>|%(v!zj<`4z?&B9fqhtY=*YPOQ?{~xV`%C{O@&B~c|5wKlXw7`_ zj?&%v%{%-5#dH0>Z~SGT{s-pCoY1Av?;-uA-?!!ewVVCVEoEGJqt8IShnoC|HUi(PtC43#ntWI zIEqxy<#!W-Z;8kLTW|mO;D0t&|8h}O?{4cEE-2poEoAs#QioiPMw)e%X)0gZ|1FWo zm1(s2c)#XWz;AiU|8-kB6G^`M`%T_5&NLVk9CS1A{>$0>FHO~dVHN&c*XbtRW;xrl z^!RViOCuu&o{!Fgr6T=rYaOD|2zy6)u;FO?KWD25pBH(N*{FKhlLY@hmH&e`_Tftw|89&Hy^YcF7LgZjm&cQTGiI2@Mh8)V ztGD4ScY>v*+o-%h!s~$ko2>ph4LKy0H0RX1dBuY`5`SK+PzQCgW37%?TJq2T0S;~( zmJrwZ2!;)Z;}_q5J(rE|v9vglL+%{G4ga;CHezFGF(8Maaet-zH&^+BEA;SK)S3S{ z&>8jLt;jN{1BG?@rux`E_;*8SF!ITct+zbGaBzMLEdA0U8$Glu1i7^VATsD3du>#1 z%eivVh_!j_&sq5o7j4V}&-5K?P}C63#WA#cY42cX_`(wT$y(nGhl7ochK&aKNl1u> zRoT_XkcRcSyuO*CfddVzlB2%EAOG{j@`W+@Le2E0g9!}>8y6o9>tjPxV-p7&9zO6{ z+}gt0PRZtl0T}bh(8<)mP|EIwD-P=uD+fb68*7Uf4u&)ic8=iNho%np3Wj##)|NKb zR)$s%G~m}VhE~SlvOK)p;15Yt3-BB8FY-r^3=OPb8q$b};QV@M7u1bOQF$fB8<;bf zuoYv)*x0S^N=(Mx)H<(-{+=@3_~5ddFE%D`1KQPha+JMKWcB*KU|+?&$#oa6_Y)yz z5Vi>odEf2lZdUM;y;HWyquPuoupY`OO*eS@-~q1!b)p4Rz9n?{OLlMSdv7f28|;pc z>WyS>6|vbFtPtKi82srVdj~Z3cg<2=64eyogwl3t=zc1f&3BC9C3&N{`e$)&`*UHK z`}@C!Q=v^8^{DuH*5t~1Z0(>t{kceDDBi)EWryFlgff}YvF@S$yhyK3%PZwP%5XKb1whE)ilLVo;IMpYA$c&i!%#0FBMLUJ#uZQJByLxtnk^uJ) ze?t6I?UI$;{6532ayMvrO?XeKGW=Hg;k~S?q{)_;sP@XnT1( zqP0}_!?}LFi26*&V`<(F%|Az&pz-$4JS&yi{l_)Zyo+`(YyZ40O@i2kMy(9-FKcAz zz0+o=8};iw?y-&eM?Jay=L7b-C~dC&Qp+9mDXuxg5B@(#(&Oe@Mx9mvdIBNTIngQp z$Y0<6zuG{4KH1-Q|G6lC&&J=9@V6xVtp$H;!QWc&w-)@Z1%GS7-&*ju7W}ORe`~?t zTJX0P{H+ClYr)@I@V6HHtp)#AwBQZtC|06^*sr+q?ZP4rb%kGXE%<9(4}p)*+-?Z{36~YSyPd?1P};CBPyaRKAugA5D@^)G z{4GhyPeu8TzPZ%}jh|Vl{DO6%Uw08K=7qwyP;fjxO8iXLS2Z?Y>?HQ@7u2Ty#KNNM zg+g4%97d8^KQl_+S~DjzU(V&50$r7UrP&^lJiobl17ZlS!eslQ{_))(w|t4V z)mjX$wj8j9+Wm&)k9VbsY3yz{F+8uR#~i(aDk0eQGtTcVGqci{561S!7mVG-_?1z3 zthd&!5V|w1k==kGqfZC@Uy(@xG0mB!j#W*FlJpYk`E@ahcGN$HgEWR~nZblJHC5Fv zliaUN28y?~x9|OvRzx)`iUu`C?NQ2;z@O9Mf2;8D+-erUu_GH-vZ|b8+4Z0PoEU_f zcUP#rQpO%ORB(F9VStMJUuDTSe#?^ms~pvzSu73?ZVvu`%2?IK%ZF07*=`)|F>Icq zR%f?o=ZbpG_+m7fe?hNJr{5!M2|{(fzO~k%JCPn^;glG(T)*Uo{=(=^u}}0hGMIea z@!0}vRD64e&D7+KI25ssht5rrxb>kIZ=iS);-1ip2` z9ks9LOTHUp(jRw=@0n7gGZHjzH68a99&y~1meJ&W`zcK~D%Q{csb>1*EhGFc_`a!( z{;7v$Ykh}xN$#X=Oucpnk12Z|7-(6y%Vm_;o5(zE1TQe(dV76u=(f?;$S`kO_ufd8 zt)W!Srh9A|+WK`0oAr@;mT;lqC-FU=+C7c~89SMKLb4`}j2k6wDP31jg_uLjP4-ifD&U&6lwA$5tJgi&m2i2)*d4olO~;o5iW?$!siod~N&2vg1TyOjdi zg<}>zj(46~#xTl%=DDL#y*`s=r59CjR{p)hv>lUFOBP->XOZA#|7A$wTEukAzS+mf z+e^0XaZQe&F`FtC zdL(xxv@go%yD1?iPk0tTf!U$J?Dp{zMyONVX}3&dMx@!K)2f;QPW*7@uw_oJ(80wT z-^4_SujswQSEE1ri_{Z^(7M-#9k#NzbZ@r0ILh8K(@edpg zyj0D-yZCK)YXGr4@MvK6bN-3asqovSlFz;+KO)O~EL3yURX?*ztD6Y)O)9^Aq775&^b`(J zvpw01FKhl`NN+0jUMJzMWfF7!u;bG=pSFvL20p2YRbl7yIb1LfJY;Gi zvEi|i!$%p@wkZ${+Gg{4f3pOcX3-u){V7yZS=mOJoAu0|VI8o0^71!Y;Hoz$4yNQ@FEfcj@Z{okzrft&FU8I?~!A)86^~p|0uWiyy zXOs)khzN{q#MElTG7shMS#8*8TmhQ*Qq$+Mf$?}$tIBSCl%h(`@DvH-xlzZ|;rZmK z=m>)$;d@HQwY_7@w5(xeJ^|BygMO=3=RBqv<@83DYK#w`1w9>Dwn|+3+_9wYT;mc$ za7QoJlSNRdfnsD0y{2X(HW#CY1%G|hdpLV(g_zUC(#>M8_$r^G*n7;jaq{MZD`94R z$KoTc8E>5As-+CO zhn=qczPjvyXUl<^jq%lHsWem;ibCE+=g-(|LzmRO1FETm=CY0)GUq-ep2?T zTp3q=MLtloGV^u#L}lRc%v2~@&v@51If}(HID>a$$8;~fA-K)%FcYgge3)w>O_4~b zJbgMi6&1GjL zTeH~r?!?Drbqz&78k0;_p(34R7_xlUBhxO^M&$1FeYEX!H-+gq9*>N0m(U!_{f4d1 zvMb)o0uMUEmp*uXa*D;Q+;$+bz5j0Pd(Ub5(tBBbCxOs;Z-I;_U9c4{WqB`*<$?Jf znJ0Kd;VbB*xeiRQ3p(})`5V(W@dRF$$Z=ou-)$r5yqQuSPa6L;BRX1q?d*2*yiq#6 zpW-(j^NzU7%iQc**XLr#1V{VS^1WMKLlyu8|7$tii6ZQU9fAWA3s6!v4dHSsu&FYo&Mra_J-QG}qQX zPX@Qzp*h@nO1+)Aa)a{NMj?#vZLvVpqi;A!2J#JF%;F2}SH# zqo`4o+FR6?*sIiTQKQsO?5*~!8g1!#fAjg{_xtZYIp==mocp})*Y&)f*W%J)~Su3~Hf#+f%Z-v~3H{Z|e z4I7KTwB)V+SQy;QPF)cC>;eu+Grl_jS%VZd-f#Ja{Ad-B1a1#`@mT&v4zf!|k@#~+ zPYvnAH>2)X7^MR5z|1H0k>8Le?KaFYy~_K=6N^FMYW~`U1fjOxi+@u{zi&^OH4;C5 z1k#7GI+{eWF)l@&{kQYCcqp%E0xr542>C50;O#kgMvGq+E*u?j@`$iTz?)vtYCW>4 zEM+3fT$q|U`KhljYVaN}bsyJyZ=~5pR(MBd<)-Gt->|%})lyL0qZl2!!0X)dq&xn=8@D-YzumDHM)6Fl!1waPb+gR+3?F<$ZG$$~bfdjS)>W zQ!f;llGb~ob%*hO^ppPK%Up1^r8}JB+A;bl=ABO-j$K$xnf8fyh$6s0qFm1AxBCL5vLx0WV9co z2Ne!zDl=K$@9PqWsoKpQ7qKj3NRm{%;EOfhj(+aJ5QwLd+RsN&=ELtr%j)}0N4R!N zU$Ul9Jy#>uOCx5|G4tLSqIze%eXpa@BP~v>nfTr#n4+rUK?TR7T{XEP_>{9i0@B{* z1Ddnl)Rah`@n?73i96Dqd;fdQ%obEOiPETb;g^wVvdrG2KE5&UZJf*V98TsE40Ukg zTcZYlAiGK@eN0P8&%R9%;R|ohcxK<|6%ObL0t~z)o;41jes=NpL{u&542u?FXazL( zkyM00mnIDQy&@)zt~}h}x%2tq%5tZ8!rVKK!YE%ltqE|Wz;D_h$YVabjeu~DNa7Xj z*jrHL{J=_Dz39N^_SURgDa$5ZvEi7x@R;;KH=VH(#!U(C=51X6TMxdmPSC?)HY=D+Wi(l%}Uf*(s8df83 zV$zWxPe*MeUIyD`P`#q)C_k&&o4i!PmHm@qD7$W5|106p`tir#mxtVH42Wr2eVL$m zZ149uHo>^RrW|vtw4-m{Mi`~!%ctkdhQvyM&1j_7aLc;_1IsA;>^yDqX~+|?MB>ed zRWF^#Ha8PXs?wKcOW@D=-u{E|ywsC~M7j|#G{Wt;E#~M+U(7(N^!IpiB^qAva{9m1 z6)9kzr6#w-{T9Yxw3cjY>oc>vq|0apKd!@yW;I=E{zot!ia!=8W~;j`eQ8>Gd>av7 za_&gVY6g)L6Vi7o_13zyZ;?Jy2N!PKrVE3NZOt|?)ql!&s}rb@uc8dc_|r4k^nzVt zWNgDZ@EGvDsjPkbVWszZ7<}Is&Ra3VOr@3#w&47gR(f^esY|E0*O(SXT}U;NB@6K% zduLg$a}nER1=HJk<{Xf<24Ql+cOr!}^~d`0`PD3wh$jmdb(KPKJ{5GTh%c5#OfgTC zQsN6*^NDSQHs5!DSLPTW59|{CS!D}!lKk7_;?@a@!;MHEwB)Z&(9)CW-N}EtKlF)k zNW?zNdKLP$(n49eWx*swb^+7uA6Gd2?h`tu!7W#-Fmk3_o1&0*5X^%)whM7Adk*|V zSI-&(Txcf_qR255X&nujWTyFvxTgqD*^Cp|0F*bQZf$O%?a6($XNH6Xfi#H16dfUl zLfa|Pb##-Py?sX#(()b@hn-oLea9=Zi-flu?U z-r1QVh_p#fjJqL*>+Id3Tl=~Fru1<&YwRP$%XpKdQ4E+vvl}4_TZT4pf$ZHHp9o)= z7wee7`GDOMu%M$aF{2M9c`2MHo;tpBIhjh1sD+o>Jr?h%cgs2L4uu|nH2U(?l$rFFTix+l5dzK1`B!W@Jq~Yn@7492#K<@i^wFxQ zK*O^cg;rhsJYmAH?{RrA9o^vJG{d&0-)z}xiJb>A)q(y3hz|2&;rS+b|n4GRkk`JF;l^H%JAFmmG zEyI+Zjbo;QWl5}WQ1DWsO}qQn^{zKC?r&E+ zMm;Y{0#EVEd@h2qNT$du6iAYB)BXGfu5!1p1`Qxf?N>dZ&rgC$wZ4DRQ9_V5Q(LNe zH?qQ3_6oUb??K1GOxn@wAhmyNK=BDTw}-_Uc-I=`33qps5jVB7L%KoKnHdvPntMk+ zMo$0msXKD>pTo+lqD0?>(i7!vSqy%>$MO`CjyDR(__$O-GQ&*rn4dv%=*8b%4pqsrFRO!2_+_U&NXybkGrNWnYts(M48X6!R+aP zC|O}hEK=TtgLtZ?)TF&hO>O=aqB!nt9JyYM$=d$hca(D#HdpN%A03JNhI3J#1)5^_ zme$siS;PDiu;QdLUzbQcP^s;MTh}oDk}Tk`>G>`gD*}QB9tcaC_JA{$jG1TGK`Q|^ z%5)yIWYE-z!U`fbjx{}9eflB%=A7aQ3C_aj{-N1cse(yb}Z1H8oNTWd!UP zaAgPzl8LEeYdu9cAnH(y6qo9R!0xU@yeLAa;~PC>7;|Z(P4v-&3@ZevBW(#!rB@)m z(CW7Sd}vwU_8jOJ#pjL|jz`k}7pgv6Yu3k1HHeOT&k*-rB^^ds4Y1M*|AyU~v+x%b zU2V{(X?*S)l=<8v5gqrWpo&_Er70mw^94>`E%WjLZA`jG3mkJ$_!Tqrav7vTer!U_ zX69m|PRPR?tQ`GbXVZ1{9a1TBv@%=@0mu7vhP+8n2U?Hy^~c_8f?GRNjJf7a?>gx# zH`g2ZAfV!GX1^8KTF6@Qi`lJ>*XUCTZJER?M6&lQJVqyAyJo?kig zez1(@7ZZlfP&PYxf95#HVB%V_--|Y`1bz)vmU6mPe20h<(p2GpOiCmv+jlL`$HT+8 z-#N=Z)oBpAT|KHcplmqUIdU~W+hG~y1;dCB<;{j*z9^gm|9DZ8=SM$E;*OD-GmfVH z@rvFA4NTRv{*Gc49Cg{gh1$!(DsFf3h7>ZVG{*q;%&nptVj;yLA zNDW0gNIfZ8arH1cGq_|`arOMwRGkuOoK#iii%%}Dk6`DAO~cn7Y@KVr?Vkj+^}gRz zimAL_q$t!$t*0uQr(2Ie;iRQZP9afS*12krM*@J9X6*NKs6DCWz1Ti3T8MNFVioo5 zf91vHfF^d7mudn|W3E-OzY>BkyJjpN=Q@jEW@6M!ubGoZ83Nv=1kOb8QapjJH%*;< z`Nh^M60ejMp?U}kt$V1)EuTF&X!Xqbwl!P#f6^d^^KvxTSS05~B${p5^ohEG0I0Df zYw%o*nA#mNSx?B5wwC6vuk`J78g+?vD8U(Fe>>Bw6QY&^c=$SSNSH3|w8(+fRhbSR z#d{mw246V#r!Z2aYX-$C-pJ$cT-#-+*CpI6?}gazgK%dALtS+3so3%aZD_leg{g#L7R!s~azpyK3DTRn!K?yn5~5m?5COQd{4l{wx|mjr2yKvTq*|aSwPSnGeg!>z5Fj3D#}>V$H9p0yX^o93oQW};Fx7T= zFS5ODH3QeOr@Eg{3?FA+7@TyqN>gmm)#lYhx53gCS_TmL5d3jPM>5Yea&h@#b-&Fn+m&y|Raz2%jNZ+?^|*zKuE$kq z6c3kAxo^5th}i2|^OER*l^X{(@@qhQMV8eI!drHfcyfMTIc@C{y zVdXaRGp<>dr6aP;Tyv=h7j^Jl>ZUd=!=LhvW#^a{>KNx~&5OIvJV@i34w{BB#EeuP zk7kYn(V<-KQdG1;9{%!H6AWpqtq3MZLb!yJFugYjK?%3k1fcD;3mhd2BfsTI)NjvC z>dGl2wwOu+Ec5||freU(D8}#V&&E-HMTN3%$FAS<1ep))pDxLjL;3>q*gm*CYr5+g z3N4YV@;w}#5Wy9{#}yfXS-KM3*g0kz@yseiZf^3!*Dbo&3e?~vTsX6E zp7^U1Ofiqbt!uK{dbC&qv0xAJW`^w6YR=qXT3O*fFN2Q$lmHn1gGp{|U`H3BOD&Np zv0%?)b0p)ABuSfmRVF^tdNi1CR6I;$gLDuVEKjVC9{{Rc%gw>^jpNjH`e50a4;rd__)T_Cxz zXn7DfOEo1nRsbUJdzRsO#D3jl^;B^jzUG@ZAIco5QePtfEx)iu0wA0bWO2<0F zNwyOEcd`YI!;qI+Sbsb8pBp54=d92%OR%rrSCxYCr1}1gL&%Kti*Qh zi0v6Tl+Nh3iF@Z3$~?38x5&yCfp=XRXO^F92U{Khem=|&5FWnvJix%qtqKKqC`%Ug z&Z;FQnAO`CAu@|91-b2RB8&yjfHTlg?>)?;=jCHngp@D1RV`s9(8Ul&RzHQ+SBfeV zBR#3r9{&XS<4fP6sq&0Z^`Y8+h2+Gg;=M@9@_g=0Y8XG0s8=?f)XgOC?ed6G7F%XD zl@C`8>jggVQzd!jFxEeW&5($0izM6euNxc-f~HDD9?zm|fQ+-EE0NBsm|ck_mo~MG zVEQj_g}-|v;2yxd04H~9GBy*8XRWr9tw>)PTeNF6iG=Au#gQr{*+ow1;YwX(UALAm zT8|+r)NwZnB8xQ~=y*nJRrMKFv)Iq4rgXjaJoDyW$Gr-4=f{V$G!P0W3-=nzIwQ%Z zQhjqAT*8x_+lRKPtN~A?6?5_UFn^TF$dB?%M*K_Qg&?Ek1-@e)#QUo4xG)Cm%1_y0 zfe{l&sDh1T3Vs3mzL}8QYS@qjY zvrK^q_9gY;Te2n~s?-+E%EiJ4&!+A$7Q^W9pZ+-wx~lSp9TS0(*+m&~8Op2NO* zGL|x>*Q&>}AVF}0t(Dl!1Gs6fv)=6DKbZC71vz-)u!T4LT9?OD8s$;QA3YzGGcR|} zzoUH`lh>}iDE9YHc9xdo;Dr}Lm-29_fBAvuU(*L}y0mPsl69Vb{A<(ehK#=FE(Ojx zeuAL2BwBge3VgwQGJM;MGD|*$5C`VbPxSAbxcqszZu!(Ikx4APfcJUiqDkWD2SU_- zorsD$L@e*N3K%gBNEGq@nG5g2Ert;wZAP&$Gw4;f?p8J-9>;o@3Dt?U z>XVPSGXVIq*%k;#GJCyyU~CN0qeYnbHY5|_m`OKfO7Pj+6G$o>DA9k2I`)N>zbK8# z^rKZt*)}M;@fRkxh;b^IQ|p4)&5;zUiC;^L_i3f>3@}z(FHpK^R6h`-PeaDjeTKOs zb?8qc^s`m}VcNY|_sS?;SF-g{njf;@Us2l)dp^drVumq$O`|Y5DHfV;It-6aztVd= zQH_OtrU}w7FB}0UBF}HnKq{vzHgZPR|Cj;MaKY5Rkle0Sh}yg50+5{O5R`|FIZ=sy zJmhIOM=s*c2j_hiiizA6Dq%uEke zjlxdi&D%iV7#7ZGy$1|n?EYvt(EU`%_aLR_c#;HcFtj(5+lITUc=X2y{Gg+IZ&-SF z1}4J$EFw6oO})48rNI3Of&;jAL`MW#pu#-(P@tB!R~^vkLLU3QQ{>az$>E2 zT;e#}N7Xbhmc;a!4CC`D>fq&F3L!j&jo4+idAV$1Gp#ko$sf$3YEazx3*uLITB zB`Q&hM0`K0=!bb_?6#KMQN~p(ftURi(>~NKpJ7m5gcmRC3h`PR5~u3&eUc<44qmsN(Dn61g< zy$ghpD;v{EM1Cx3pnCRU_Nzl=&nZ7|MkT0q(_@mDQP`83#W1EN%Gx5Q25d>rvTybr`Gr!4h$a$C zO_tp`R6>X_8pVg;(j!NM8kkQO=_NOkt20<%QzyQaZU@I2ijp>i9|~pnI|9}HMfGc?`XP)yfLs!n>RZvC08+6-c<7+FcobDyX3c&_PgjzMedlmvNX zRkSRrBFFjct50XA_VR=hA&K?oHSN$?JF2V2qKKlpsuhAA2=ECsU1;VdL#Nc(7dIF5 z)y!6cRVFQpf+oA@P#38FCuE$6V}C$%W5@x=({!)ZPUd7kE(JolAhY_AXx(*v6qh;b zkK;^1r$OE}=#yR&h1Wx58}!TVv;JS3xTE~y2Qidw?g!RVryAcSJqz^H(DKnHI`XdUO*9JKHA1##Zin09?YxR zRK5J8p{78FI`@pY08UaXa?ymSsJBHcDs&ZSwg4ir^nkDsXREuU6l9Kdp{xAf<_m+7 zf)4>=SDi1#6Ntn5&qP1Cfqyp2g3tHGYKw-yINT8c8&i_=U}QE^MG3R%FSXQZqPiio zs5SwH>o`c-%Ou%jYs*j*e}zF?(MeR1aID`)5;iJsvi8#Hy~9x z9QB<=U2vOERHP@o&1{J4ED|Kw%z37txu=NeYmMTl*7yIw@pivKiLGH^dSE&Kp=msr z{b2EOft}6_3D1!^54o%>_^$zP7ER>`*e9Z6mPRoRmMyjFQc1{4qYzxpWY=+jLq4wFZBSH zE(}T;Z5VhyyHH2y(wYHhEVImq15mRMa-VTCyWvC}4k3LOi*XgirXen6pg2vxm4@21 zPLxDKR32;Hs|LzFFbqN4#>D%ERu(RD4q=2+&ZvBgGun2_ert9RHrW|~>TfrANzht? zYwpO`vIcsoA{D-cfZn!3MW&Hj*Z26rw=ysEcTu>wKm;wl%l@_y_-5S8n3nC-G?yDO zQ5MbuvTctH-wC54dW&@B|)&HZgC(*oH z=HhAF>k*|fjx9~FedSiSQIK<@{GN`2TsS(*!N0yRE&?bN9*%D9Fuuz~IuZ%P)Ds@| zru9akv%ATD97jo~NWTe4t}lan{_A0l#yY$@9C#p6qMSK39Ej@w8gNg(@j04YGp1YZ zgTX?3KivtxTVX4WtrA_@n^U$D0KAb&u8*@2N`m5h{~Q?iX}PA~Erh)u1VCC9RfQEv z#9~!~y}D4_I7rS|@h=o+T0)fZEbf-rjdv_C>s~-ZoQAZ3l(A znaKg0nsfPVc`stRzNO_TB_sS4!b_DpgBCP=PTG(kdc56>kir{;a`P6`)Y$@G$N`Q{ zs;T;3hCg$Da+F{FsUM5BNUIb_S5NA$oK+Ov+P`7-I4;-e3q)(`7be%_n zy)_$7cVu5Z1!8%vwjVf0u-H@v$)t1agwevmR#Co1b&ijb@a%Xt*jfDWCHhE6v|EK$ z4|N2=df3xN?p7nv$4g{7uL_JSeXEILCX;^a@Y~l=-;rw`v}3r<`;vN6-%~`|*K~~2 zDHZY=Ig31oFxu6<@v7T1?G_kgml-MS&BEpvxs3A;9E*uQ2Q?1AJ7L4lQlC-*_)0sX zTXM1Z3RGdnnt`EyL_wB(E0(0+NWWJ*g^FXakerwqx3)U6BIjFg}J)Ug(N-H;jgb+>%# zTRLDkkM5qL@u>Fv20vYuZ~P0Jc5$k8$}pyki} zuV?tYsNlh;)qTs$=ezvJCd;X8zFNEtUPi^+DO)cUWxTqV~KSRz)y zETl@VY$<<;c;z5&P7a}ZPJp9cE2!Aobzkosz( zVHPC(ue0eZJp_D{kKz#(=!u$}7PU;Cl|GH=dwgWPGQhQi6Hm}}5NlxNURUcPdY)nm zzx|YWgWuU6kGn;j;)GZ=2E>c^x&B?pvQR$XQM3MZ?YXI{G%}jq+*$5(xsA#h(FYZ( zp+9NT61Wkbh`bf4sJ+jVN?HP%G-gx%+#T94fw*G-1>*-A6}h)XBSnd0I5j;e7mZJMo@j zkQK*4sy0rN8O?f7z2z7Z)b%{?ATm1EDAC!ERO&yn{3_a6+sabfHZ_|XgY9>3`>)5R zqwf;dsf!?KZV*+(;_Dz*KfC2I`sm?LkfVm>`3lk#{V*HWrU;)%u8$MG8Z|#I%Y%Dj zj*K@{2?Klvr?auyFSWBZ--PhnQm6#HlhPFlpuQiT3z=sVTSTE~anfVIE4~lSdro6- zLc`1?*E>clv1#in*~8u66sK+q1m5$B4RziRzL*im%(A@fqhO6#~(AdD&pnQ|h5A-4H0WiQP~ zl?4t1CYcQxrShDdb#Ets?2zH)E+9-uMmQFIMR~2zU0G=olHeN${$>JxHg2j+msWf; zty_Hzp>;2gc{S)b?Tp>G*b*&H9xWSUyzZjQNedBM{?j^aSqyS~BJKvOGvi>C?-E;1 zQEj|k>3}b*@yZ=qGUck`z13z~>qqrUhP($Vh`UDvcXF~}?nnaEN%FGnD_v$iYIcc| zju4{$)C2>MJjOyOKC3;ZEi~~g#_t&$Q&*EDM4LhIEvOyJOM950rxCLulUJmzi{1=8 z9p)%3+x@%Z8+^=T2ro4a>no+{vYcrWiEEgwds->nfPw=(NLi#TCjottWzi{km7Esi z32TZ05cZv#2L^lZ!iS}Ajff#D2TyRxjL8>1h80;NdaI_dssO*lOtadWa`!pMT``3* z%MPsOBK-}wu94K2h7|4e|8VC-EgRMF4}TIIlBVd#bidrm_PX(e6MqgJ5IIn97ykZWywGGM&{pf^RMLr2P3pmPna)v=5{a` zeo0L*(cefWH!%ByG9eHs_^QSC!z3H^2E|_=L*k1SqmGX)Njz1-F6kQeT@25tJsl;l z74BdE_!Y&ib8?w-v$u>HGLr93bn0`snBg*b+2K{u4SsgawMk|~a$2rJ&e6AiWdO*czW-~_gPQ1|6))8Se`=<$iobmjNf*NWY5m*UIs=yN*`^m&`j1~%+f zS6t~R3Hj-;NC`tSW%f(xw%(Dz$WwG(im*B#Wb*yJmS1!+D_WH8seK#XrsVZ3RqWA= zg|ZhU_r&yRxuFkni}IYO^wm=+TcIx>8EsxNw&W~8^&S>qfUabgrT6=tb!mfSxypC# z4v!@h`cd5FfB6(F>K_0qsXXySml+_GEV#e9hgSZ*vdHkd>^#E#>Y3M=US+>rBVAZe zm=ucEh>6tr!2a6K%Tdpy%G=AMA-k!)2WWIxgG{O%wLB7hmh_3=I1-?|W6%r>t@L!swN~&Av3dD@P48c0e2auKb~8sH zKBVg~WYTb;S6aRJqZ6XwD~f0d7n1=JulJcB98CI-&4grPC&t-Y-dJ+Drap1}2?Ev& zJ|GaWvM0^lPdGRX2h}=@(lkh8ZKx-N{Og8H(9SgY5++m^Dl<3MoqA$=L9xVVoc{{V zW`F;Za_~9?0c0e&Sh9dO70uvI*&ki!o`6HZzn}%Ga8N{>IaBM`19i z9lE{nqrWccFa&CzV9b$|>r73-Au#DL^=n^|PCh+6>$y{ScLtzOUcI8>L-J?UmdNyL zgDw}xi$b~x1)(&aQ%_ie<{bop6ZCr(Ml-p*lt*h7lkCU-xG)0l_5XVah$RMA)cFRU z{yFXV^KbVe=wH-y;Ma#QJN`0pCrN!Zx4YRL^Ui(wFF*~m9dvFj;hp5{FpG4%{Qbc$ z!tL?Hzs3M9=5?;DR_`)OBAr@nmA&iaAKJADqe`(rKVZ=LGHKi~*<;bZsf5Iz7e zd7Tk%B<~Y8c5WyDk9i*YH7OPnnUf~wxzopWLut3luA#x9B(;OWoe^xH7aC`lkAE`w zXS)(nzEb7g2a^-g4Cu~sy)VN=wl8CvJA*ALqO=sHO_*YQy%E3nlxR0;5Cb*eJZy~7 z&R^VfH%paR^F2GvB4ve|&nydvAL~~3lk1$%L|v-K&_vr*Ph*9o=1ZoVvY``Ko-j(J z$CddYr9C2L%#Q-N3E+qtKxND6;5t4HYZTtJZ$-)7EqkvdHgG7R+#_P(M<{shT z>rC756zmEoR;*CsiN{(7bRrPNA=4i3MZ4oVxZF)_)NeN)FM2ik6&bmzM^11mSxb_o z6Ypkbm@VArkZOdjUvV?%vP8acco=YJf|(|u>K;I&1{8#k@iVAQ$4U-lg*xdG;M=F5 zwi0;Do+$WnhmxsAE1&{esk4aKzVvlKH%~r0soG}%wIV> zo||k|F~Bbz*haNoh#{DS$(G#1_LvuwTO*jyo#}o}O=d?ex-)G=PZ->?Z!ns=QR^4A zW#3ZsyKLZD_XI^BsC3;^p3<>ZJ?kZ_nc8;xro>WXzS~-8| z(9^S95Yr{DZSHreuGo3y$|7v&LnOe@fYg(YmJM3q3;D+;YVu1~Ol?jDF=hQg!13y4 z`l$eUq1mLL`?mu|sA0B-u6+LYrp=~A1COP1lo`ur!8>I(G2p-O>gXZj{S18JHgi$j;! zjyJ|0x-ZU?n}7H%2V8FiI5z)dD4|=PD*=1oepz(ur%QdqT`Rl0@>4$iN6ot& zIH|!UDELsU`Floq@=OTr#oD_UYKcT!3Rm zXw%2B^SSMG7nt*O=9flq99UXqy}j;d=z0Wf9IKYR>X_+mo%!QM-+dM?_Yz-pL{`y0 zE?ThLU2~E{6;qzp)6|Pl&F!f)%Df9Hicy7I5rT14eN?(5${rrVcJ^$zS19vjG@azr zJc%%9L>oR8J6DS*65iLnwx%WF3H2HdaBL3@CGB$6M-rO`m<>O3J*1KV@;bLZ4iC$W zO1OH4m$gf+e4x6!eOzjp$}qq}VP@wnS+xJDkF$HI3nEp-VGYyO2$LMsC0t2~k$z#% zWjs$F>odoed$4p*LFhRw02MwDNqje6N#;~cGZhrHjbKxGgmEGHNRqj^+;41@ z0RT#F7<`TC=P$=;kt9~S;g|TW|8NWO8Vtc%??!Hd9T1c+7AR(FM-$0EI`%Cnh8JbF zxgUx#T6)A_o?%l{8Db)>y0(W*q8uM(B)*ThEus~Ee*fB1(%bOoTgmKiBwDf0C=`9) zKhhOt^cdE4`g$~K%gdFLtZAaR@t>Q~4ogXp($$gGRJqMP+%_@M%C@c0xt}9xQuL5{ z1}8E99N3TkL|9n*c`t*aB=#H0Y8l<0Bf_>_YE*2<`7bCC(#lb6=BuVD_aX1 zuxE^ytKPFG85e`a;&i=&5w^t#ExSSA+5XXo|48|6{&b^!w1)-xv7eQEY~^!@y?7w& zS+ir|>;Kq%`>pjx#U2q*PnRv$Csg-%@{frMe{5;r4EI>Zqy6JP>7kZC*WUA{;&%dU z)@md({LI{7*20eRn+X2ySpOhEd*G)8p&9v%uat|`QJ8(CvH9Xzcqd2 z2!%a&PCR&xjZDgu@6arMlnZq#wV6w=1If-?P0SgTy6J3_!0dn>bg2i$Ho<^+-C`%* zanI6EA4hT3x}->sAdajl_z`Dt9ZQ^JHL>tfZ2+n{+pBCzXejt2f-wbwXiT5zhGFp2 z(ofsf>W8lsbssLf2F2@=k36jMIR5Ia%Fi!(n#{{f*>4f~Ah{p%zGC*f1S+a{nIf+| zwf3jA%bU|BeLR-WlfL)ZBgy^UOMSgDj&(x9+)&fPXZK;Vhw+Ch%5}6s`{>Mv-8)=P zI(Hs$`Xg)O#@3~K;_CPtl*h99TR5(aw_NwZ#m#JxE)B_;M)~7Qz)g1r`JDxo7`JbC z0e62+$JY12FI64jA#Y=zZ$E8MwHoDV$>ZHc%dO!iX|6Af9wt(W;mfukX7aeV)509{ zzWq{{q}Q-@y${Weld7klCup4Mh=WJ`l8bYL(=^U?M#C?$Mj-Q8_2Sy_xzB&k-*^w? zTPpMQPH>fu(|}uJzBfq65u(gUHI-2&uC+(r)RZ`_^Ag*fk9~zrpOO0Xz?8_;W3sz% zP)~oMIJ~vNd72pum#ZmJd_{FN};^1A5J}uPVh!~oWj%9^77UNV4NKzJ=mz`BU zA1Knr*7sK>94{FyEI;uigFlx^<2tT(RI?re&vT-93-w9uf&A;!pb1BXdyG1R96_y* z-L)cVveWB@ zL#?Xq>55&Jg(a$q)`*xxr|(`|z3(eEYQgdH6v`IGPtu>Tsf@VEcPfa~ktM-(<`M zbG*{p{pZsoLE9$8?}UDk>p$Eid}CW=miwx5^m8!LjDgYU-9TWr+D-(CE|STR;%ZTa!-q0EQ);j8&w1mDe1A*wAGLmy&Uz6YoCS+5@TC(Pb> zvUeIvjM`fj44Im>ZS>SD4~kKh-Xn_8;(9RgPfz;3g{tG>Yyrh+6qx{@ShwJfV04JJ zj`>v5p)2jlztsKjbh78IOFQu_pn${8$fr4#6zYdNE2IijzAxK;Tpof0bT)!{z2E3Q z3`M}tWsGFjFnK541YdXuQq1MY>WhY`iX`$ex>V{vLE?T@f#Op3JpIw~@MTX4J%`t< zN{zC-G^uV#FHEdZP6EE7twRXpMl(~)f;7>$WYVZi=kmOTfapr_ufIt1JTSe*2$;uehL#9zV@mD;}vtg z`T~J*)4bz3=De}yti5zmmy`+6C%A{|Foa4@g1sk>j1RUji=4g_@@8K z9%DRsms2f(BEJku%ze2EGkzzn#?dM{D)h*>*cVD5jEBuOUdQcGYiWcPFozTHTWguV z69Rc@(&_^xT|iNjEtaQHPs=^d-MfLFL`I(*JmH4VFr9k13b9u)R)TGT$GoIy@~va_+XfU9QaZAF@Dg!Lj7@5iJ=Ux}!tr@Us2Ncazhs;~6sD}>ys7?2to z>>7ePLUdlrv(Fb0P^|MT7tY!?MC$SBQu*D9$2VR!$f`w61`F57QNIQ!sLMh%LeZt} z={`qGN7`w>(c-f+U+u(8Y%3)!@b3@$%<~+`-Y_n4pURifH$CL5p#!NJy(z&GG^5>Z0_7pA2UvB|XMu3FyjU|gqy@vaq@zp+vB9dE^ z?o?)28N>BmR`y7taA0OGb!ayhQxTlK>=3=)z)&MuRFP*wUKOZw^~!IcwXFx|D0fFs^q9lON{bvuX^VO}*U4ZVsW$)kpGoO};`v z9E=Y_jX1wVE?&u3CuK43V_P zk-Ty$fLHaMe~ zHs0C{-Ubi_SeY=ebR`jqO&blWEZ3$_+vMA2w+-)5I3IXWDiS!r%Sg1UDce)h2?@JO zeY{Z80Ex)c%27Y)>O|+EcV@f2UhaHV$#|$bu3{>=>lb9v%b6*&4l(Kc#w{w;J|g9C z>ked7z^Cy-~V9Fq~tRt~q(Owa3Q# zH;pQKGn{v3d-FU|F%5Z0JjH2O+1 z5=@aAVGQ>mpWYQTm16tN*F0r4VYp!TL-!P z)@L+AwGH&$W|7kOMjo=Ob$@Bg>ij{hky}l|9?U6!@$ByIE%blCJdGP&tE=GRwb((y zMVd@@k!(iVob19Hr)yFHNl_8O+!HYQ39r7FA|^iv+uTbYYKK!AmS%>A8fiRSUL5>1 zf@Nh7EmZT4)(z_npn%^fWXDf|0Rfc@BFQN=eRO=Oa zq=w#diEwG9UblZ|Gw_hfM5iw7H%)c1plVbDzXpsDo1JI5xY24)CL8`%`(;pLk11yO zOy?T1#xYLktP4Ns+jY<-AM4fCg_rkq9@9G&kim=M_s#TU2@qdU$c>B zAmLhZx1#}4&+eDyD{D)xvF|eBVBu_;05ZMTVH$CfAX5$hU-qSOv-`@5lD5Fz%#X$B zRr%COeI$uMz-p|vXd>SNn+IToqed32MyWuQxNAnI2@W`;XdAAWzD%aK*pCVsD*a!7 z)T8*IiULirTt`eq(ILbKLCbGK)|&dmt&iI=yr&0}83j^*6R9@eb^$4Qj*^eQEXwdP z*6XXghLRIN(IAfrs4Et;wzZ7nbuS?mW|<(obt6C{P&F|DKgP0=5!pdYt*w?t2-ue2 zs`=V0sHFj`CjOY)+f8YDXxQ6G*xXo^Frv7{oQ8)Co)E$?3*?2eeV=kIadeVPx zkwL)bXtw>-bVRtw_r^_Mh zPo(P-LlMI2YXeuD1Q0%BLJDv6$Myz}lMXtf7v~LPVx5bBmVW@s&Q{IqhEHy{d_}z` z=S3Jb$~4Z-4)*QPGhmdHM;XRCiF&eh84UpDwCy? z2g|C_fuhwi0YnQ#_KiVq1i0Q<{BJy=QO(i4q@prc6{Z}DONooZqRNva1y5h!+(Sc` z8JuYTL{G_2k#i`&!rz=nmN$!KT~oZ{b)p7vTuOSVWQBAIcT-IdK@TGbm@#Unq|z|& zWN65Ht##s-GAI-q#1s&3QfSMXEG<&SwGNo= zaoZ^43n4Pz0$nkmYl>YIq2?_l=^73X zv$36j=+^p~lFgCuXQjIpD=K-cQmExGbKJHJH3jM^o98MzDs!0K6Hx&c`&C z1WAp;Ie5911NqEL$fi=^^K2mBfN!qBrcF@~9zTi!JtWeVz7y|!ca$nv4;`05u4r2X z`iz+$?0emp_U?)l6iZLMk~yrlHau{0QnijW(J~MP1;Ys@#TquNY2fGZviRW~{4p`|s;cVv z^?)hc(JVl4o|E$T32uLLj0d6wzY$+VQ8tKrw&Bs7ck=1btQdRE|$23I4fW!>|}zWFa5<;aRWY( zU&dxnNo2Rvu4_wpeW{kE2SlsQc#~z^kjUzL9Y9a17I>2o$mebRS#<%kq7K($Ua4W` zcb|C!rfpOcoBo^pWda&$A*F8mw_haEa_whBdMXxg6m;V0Brmh$NT?K3N>A78bAUt{ zc~!Bc&+1U`P_xh|AC*-Ua_Z}r4nn4yNQMgjqe!|!_NE{&dV6bRA0=HF^>uqo$I;P` zOeVR3*w{}=HC3Pfy^BV63bNje$kYc)(cy)^Ops8Cfj5A$b+nbEE91>~X)~w=Koir6 z#c{KTPOB#W148nADerJcpehW;mr)#PYPE^ES|$Tht%UmLnHdYI@2;OVRXqr_=|qOQ z2thM<#kNN^>7dY~W&PqQ?K8V2tp(;ikXysTK;m}QlotFl{_&cM?aLf=nl*69K2fCF8yuUj-#eDIXk3$=Xl$VHO^ zprQKWNU5uuzNsTMdG8&+hksW39{e9)=N%1K^tXGRU?ghPAQ)W?gBYDe9|X~f&gi{G zCt9=^bw)3v1<|4h(WCbkB|#W9Y6_8i^1JuF_g#10b^n_=b)U0l&OZCQpXc*R+Z<<@*m5v z#kV>l3gMZeZ1E)~C=EhJB2)xF0w#Ll4KHHfEFCH;x71t)iNAg@#Nrz972)X3BK&<= zV>Ir5g7tTa1DT|WD*A7F6nTEFZ*eL}z08hCMAW0dBKG7Ub+xW2HF6JPlYJ3GZ(b;y z>{M~X@J<7s!vq8E?rSL_TJ}U8x5mj3dOm$6)(we>7Vco$+CO&Nr|x{j&%OSyUT^xQM0sGxRC+ zK=P~F21^j#*jI8hwJ7_2@^}4srI9zc`Q)&;0d~4fNchMkL4ANq-VQ>VmK}Wk3y@gL0erWZb3woW{bIy_@2ZMZuBG7yRN4qsRIPMU#OGZ9mU zhu$J0EvTrqy!E}uJm#CFINV`itr8bwpc9Vmbx`im3TnLRn(GgzEK%ebD1AJ)Qil81 zlz2MO?UQ;eHXW}LPgO=Vgz;P8a;{`H&96?dr#BWlb}nMeJ0AAHDYI1ALF2BSuyxjZ z33Y3VAncH3snp#GC+nr`1_Yq~p}1UZwQNwM3y$md5@M9Mgpazq<)!r`6l% z6V3Gt<96INn7H~=m+T-)97do~3m8%ua1BO#lFApC+k`;v8yH|@;4x7Tb!U`DcME1} zH!7M|+{r&%dW&&*M&=TP*(k%=WVU>g7G&==6^#=&-O7S|idHyLU@6?fK|Xz*v5B;} z{qkG9@W+BI{revQdpYE;Oyi_w&EqIVWYMMTY_nj>Yx@&vu?vMsSvY}4`5n>^R!oAf za)7|v#ulHm^fNHp758frYJY8iHl>fn7Vk|UN0td%ZbXJ9H6OJ1?)Q+g0h%k0sS08$ zcU6!oal3OR=na3fiQoXTQYj52ZmUyvy0lBj=9c-f+HmVPRQikBH57T^;*(F}hA?lU%DcnnpzjlLq;sBcnx0^3zm8cVS4=7cX8N%?&-_4ZewJ#n>D5U$|{Jw z^fgiTe!#sA;F!WOrxb3BcqMwGv&HL zySI%9ULL1YPuig_G*hz)^8?;y!Cg`!EUXSF8d z*AZ==E1zHW?swt_gM$}X6t!>0Ea*`9cTXx6E*J&E8c zlSfse=Gjvw)U7S=p%}JiVkBM3=lk!8)#t+#M$Em{$c4^x*(!Cwv!#=XoGjAJyx@W@ zzC0pFbCsepJ8@pL?mC7~R?rtm`9Fr$e@fIvb#kIrJ0*Dm15BP0F+AH)gNG^O@N zhtHF`HcW}?9Q!$;GqK7mBdCq-4(_MTtx_;jF~YB6{a*O%n>uF}Rd_0Hkd+by15 z=nwU~HxFz9<(d)7$MJ0;Z*XyVOvD5IXAoRp#UJhqN;%D$( zN)EB7LvgN1`W+K%MxN?@CAg{LFa<=et1kZYt{ z8nSqQ3x3|Lfo}kzT;dtU>P8q%6Hgf=oVKC~{Ttr|@JlHwSAfg^vI}1=i zgt7?-A3*mM156~G1JJTY;=A$r1{E4o@0AhZBgJc~2NmSNx!7E}00`e}9JrQi7p2$1 z?YqjEaWI*dD1FzD)(G0MpE$>cjO)x+r8xd=y&xVq2VhPEIRoH_O+JzVABY3gf0f7&UsE`Uj z&#Y?GvcHeN`#PLE$Vs#j{ME&lL1sulT?_v(#GWjd26_G{v%jCN$FAGK0+;|&dmsWe z#*B0Uf8#zgoB@9X>fERV93ySH=EKbeSoy@eN_8m`%7knH%6 z-0N>?^d@HfH$pS$oDbw>@a#8Gy;o|JJg)govv!|t8zv9muiaNAeEu=#`rAy)okGh+ zCS%Rm9NbfHdX^asVbhA0V;MZ^Xb^ZnMnCyj2|}qAI5^HQ?4?hFA4$#$35xXA(h8;k zeSJ2wJ?we=M5mS^O&`wZ;%Y5P{U&fs)mBWHe%&lr472MiW_W^{0>BPSEg3HtlJ0N; zks%8oWq`*o-P}s++7Gv3@TM7~<=PKPyg`w^ufFt0ke057sq@_)K!MyX#feDj)5#)e{?Vv7dnC4fOdK4{$@T6J7`XR|S`KnxyH zX-k$wGog%j$N~j;iOE)pBTb>Vde6v4;`pIx8ee9;}2n%=ek5Noj#<<@pHm6JL z0Xsoh-?{?AMe{bs_g$hQg?^9T_Wl^C=2}Lzex?OWPEk)NZ-K%FDh{YiJ~y0$)1fvI zsu^gc4FG6-#{8gZ0dByy=}X*L#YZRnR2=68uN-zU=c~Vye+;W5{-BQ@JUrPXF&WGJ ziQ1Fk*mXk;8Ld$em7Kwa(#6*;&RS`SU`x>fcmr@EnBSys6Hs#YMaU0Umdo7CWJg-_ z7k+4>v8H9BG?Y~&=O`9UQ{sA1rSu@Ufh3WtR zOH>h7&OCy1>7~IoR!GLo#e5BG5dy>GaVKjYx4iO&@Xj1vDy2qroPl?7XQ9gV=*~$N zHnPhoGjDUdWpq$~>m10Bzh0CRe$5;U4ekiLA-`{iA ztgzj%-&+M?yT*S*tuC0T#tUw*uCqor!tQ+7Ts_$)KGPOz*Zd%WvZO>*DgPJU-???#~&vTj=i@)=O&QWvDP#l7{PGl=Ws*F7*2a z>&CUhhFbzhXb0yl78?q_ePHtloe7fcxP-(bT3GjdbsKlz$ER$l)yF(Hz|zy`W(k96(4-F>}m?7V@@P0|0kNXZ?@ z)O7Rtx8xs^7}yAIXN#~>bPpgk{kNAmM1)O3Qp6nC+1=+~?xrx?BLz1%_y6nxbXUM0 zK%D0P4*&dj)c*?q)bVn+(X;bmGi7@OFx-GJP`dyhHsC=2E#329MyQfEgiYdq9f>c*ZN-@|MzD7 zYv{jbnF4!>{bvL7|I_AwC;zWD|Nl_T5J^!HvHuIjJetg@;??{kIKhN08x{Ax6)%#G zilBz@Uba}dSTtKIp7Qx^&tGHv`YM=c3i|2dNP$`ExQ6k|);9ALmh0=$un#wX>^3KT zb1mN61pVsn?z-980YJ<*?tke4*Y}oP=gqGa_nZ5t?qOknPeMCx*1n&u?)<$yD*qe$ z>+;CK_islQ@M%=;^t^evAZD?|^=Rk1`@2*&X6Mpq@W?K&W$}F-Q#aG?8Eow3^-qWH zklzljZ8!dMf3C29L#`ceKFEa*on7=DG-)w)XK080ir*kDIP^6Yiv2meb0RLgzGU$u zaM|L+pWCxKx$f`PbYW(HOSHQg%NK3Tey#nzxz-N5O^H9bKCgT9SDL)<;?X0yzmucg ze}n%d%Kbb~S+rtqu?hU8G^Q>0_x4O}EGUrza&zIzV&AlN1eLH}dDQrHjB`uMx)Td3g@S=$e4^6z_WbPsiDP%Es>6 zAz?rnguXwdV!C?JPJWK*&t4x-*nuTm8Cqjr2#|Jx>PBHMx|*hfq+PCcqfJM;iP(~( zt%IhTMg!bQ#MK{P)at{5?Bj3rFC5m(>CO)}b@n`aGFg7FWowC292~SlU0rTRixFEM zo#NXS{-U?-rm`!oAC6sfGw6}^4CSZ3QgOD?SZEjeO*kTl_}BD`ef^XTQ!CR)6;ISR z&l#JoklNYCr18hvl!|J!9*C9T=%cxlZ-%cq=(B)p;%4w_>NZhK_RM>+YaS|^C0pkx zkKUH>?wSCNwh8Gb^1fs67a_*uxpcw&x&K1`)PK1ehJ%!+bkY zyk5`1iZwOhBPhOOku-$+j5fQ@@=!-8ggCf z)nKJ~*_v>UC=*_hDm0{0bp5b-yq!~cEVfU!CH~=}^vGUmq|{& zzw~uJZ`>MJwii8teHJ!$5Xo9>F2NHz*TfT}cITn>;Ju)13!j+Pq;q``v-qYe92lmo zjdAKY&(5pp;RZc$&_s<%Y8r~BNXfz%oy;~8z1BX62a46sY7*dWalRI-twzugz>8%^VW)zuA41Kj`pmKBi;L&wF1r;^js4b>(SnZU@(HHrDS5eKlP>>#}ta zzQBk4){X|ry~DcnTuS@j^vtQbN*DD6ZvCyf}tMNCA(~+fvm3ll#*++ob0h|0Iz=-N2R~p(ii_em@fJdf#Vi-_~ z2Z@upqT?|MR9o##4NNeW|3G;RXlk&>sR!t1U+|uC^>OP}y+1rZkaY|Zra7G2|W61$+lX=gPaq;n~^V)p9$TKM{mbm7%G?tCJD zGw4!acIXAQ=nOTE8ZSQ&Z*(0`Oa+3m`@4mcHRiI}6`4FSBklm#M33a}aBFakqf$NW zMpryV7{cp#hzu9Nn>7!e)Q`O2j8gun)Ile=J;bP0%edgw9Ts1J z`~-1{Br4Gytpvupt@U^U5mm3#65MwWemp1M&nF2gj$Tk&M7gXy;kPTW$CjG=i;9XV zzBH22MsjSjaV~3567v)x14I~j5|a)BYdPW_hH64IzOg2df_hL5B?fygOI18Xd)_6{ z#j+^gUc$?p_HkIWmedabNavoZ#OS!#h|4N}2X2v6$p?Mo=c9z1!n%2d`@v6M(fGR3 zPi*Y9uuQ=4BBGs1ImTkKhI%#VGaUcA(=AUtYiJGnZc>BT6kCrAa_=LVYb4_ZxksI( zV+PX$BUcN}x*PpH-^mvTOWVEFybA_vf%@U~MY+i?2^dtAy@30DU*6S~0h z3qo@D({TaLsMzE@;5il@#h}VCkGcV4$fci_yJo?YXyr`U(g2PoX6>Sw-u@c*csP4d zzZR`VIJmnpPDPHF*8wp`5gsHm4)4eCGMK3n;&3{jA9_xa8GQ*{6d%|3GurdFDJ}~U zmzjJ;M?k%(TcpQha$DIZ*FC5 z(abUXCx#8LBkzf1C*5&FyqA6yT6{;^k0?qcS7--2=Qurtvr=J7PIpwC6!GX6=|Z6g z6;&x^Kun_P?3cz*yX`b}alB!jZ}lIK(Cb|XsrFg3;^#KAvJ^fu(XC=8a9Mc&$q=CoOxae9x#a8T(VK=h3M+ zHF=(I?XJZX>TY{agNHCTgVmocZZEW|q(Nj9XTQ&Wpoyx`*uf$9&_0(ZRj~92nTo0?60YRg2?T1LW0(7@q7K#MAV!87f#ZYby}U8wprKo z+4`<$W3D@Yn`%>Jtn%}6k^QQl#U#6AbS>&-xOhI#h7K5hR#(r_ z)s`t&w%bp7bZMZI94zU}*?u_WXE)ZFvE3XrH43@!J)UsF8R*Nbe}8(N%e4!c9y3z@ z!D91eEI-Ro4JR-QU(d7&3Jl~Qxp8CHT;5nA@=tqvs_qg|qmHq0JX{42IxzzQ1IolDo0b?;{W#wVO<9XH20_&=hU*YoJ4y z?{a~9xa5V4u!(2G^_(&4vlFT50uUi3gN2HCtG6WH4|@%PdC{2!lTHC#ikF#m8Cukq zUn7>~><9)W4|KEo-*MUFGjNHGbH-2*%{HJyU?&6VTGX1HqMX9}B|E2%YGWiUwg>ZL zdUED8)B#^9@)VSbS{M2)i^`wt`E|%LZao;9t}H~!n&_%l4r{pkm_!;^NFczMRi4h7yf2 z*vy+zW4ReSQ3i#NHOIZW*ej6M)>oIGM>=WsM+X!`L4{R z4c}7FL?r9frG6IuP0!B^G4`h+AJR-mZo~_OE4s99dYDHKpZYFsOB+XPQX5a^pmQC_ z!_WO}3*CYw>XQhDYlHJ8v#We0-gZ5VTrlXloc@mgg!wo0fn3j5eiJ1|%6yv&CsvT^ z5zcO^uA?4L54uRH5MIt3Z#_p)agI3|q{fVs*_l?X&Z_`Sj2jUC?=v?|^9&;u#VGmE zrr_*m4B|p6yYLO&%H?zg=IKkFHMs1Ui4+{C8#b1j?~?b&WD4bDG&l3*aK)-Pd+>_? za$J-4^3`-|;OY)gLJq%d`iVPEXjA2d3rfa?{h5{ywJfTf*(AyI->USYEZri82?+9b zHkTsE;ItJurIf;4t?AF=3ZSB;Bh`Y?=P;=)OWK{(3G_JhsH4#Au-SNdl+1iT!E=rT0ai_?u>@;X7xt+) z)|#v!nne!bg#e@L2<-{`GfSF*EfD8sA|D61ZIm^`Rky79n z&>y8-0#xfZVK{z^zuv|IJ_F}L`Yw7Ob}_hff&= zu>jaRC;Z)HDjr|dw+7rXALi-_{Fy7IQ}i?673l5q<#;Vw$%VvdRmDKxRD&_kQgt;% z2E|+0IaGUu;aXR4wK`&wp)gy%pr}WaRlq zYpR%2yA(2;NQ`zYWM$R%LZLZjfkx|oI|R+)x+`ksvIH712{ZUdr^ zcKvY5k5)5+XqwJv!TIDB7oQ^Yhu_z`PzHqiNFWRg1L!?Q?m6sLpGIp#sPFnH1&IOg zxK|5mFx@@nQ#1>Yyh94|K={HmSq(q%zV_2_7$_!Cq08 zStZ2+?u#F{?NT1{55i0S_3@-aiUkvHGgt{%BL0($YmwluWc;osFXw@_lHG??B7Z-A zTQgpbF{dXP7s<+BaaRj$k*e(4<^2RkV?|3^kVy}+3KFQc(xhrh|AeeU z9_RM*9xtNla!>aYiO{6_r0Nzf>vvfV#8&=TSpG~Jk&XVNz_Hga9VX~Hg&IRA)}2kQ zr{`uyUeD@Wj!nz&^xqOQ)NTLC7M&?Ze4-Nk(>fbE!hnz$D@vMH>fGAaS6lkX^t!_5 zi$IM-t|Zfd>o!%w;F zUE=Cysjz`V_^;HNPL)2eJEL7DzMK}8M0B{1DR#3&WbA%v2v`>X5%qhc;-1XRUd`>I z5BI4X9rD~;?5r!)S*SyzT7EK}(1&%B-~1}CNc!+6VT5DK-jGTncz1NN`@_w-aHuJj z>9gNh`qfwYlc#4ost;VVqWeh%_a@ay)MRYbNUB8*l|QnM4p*ykG3fIfs*g0@OG~m7 z;9`f^J=szpR;_jemfss`(lQVF!hBI1xp5S$LyZ>ZH`16MtYr!9VQfif1&UMjwcK5?4 zl^6om4St(&*znI19DG({m*lJkb1ozk^qkbEx`<$YHai};Q$CWR`wHRHmoXNqi_TuR zeoKJhU$tP(@Ao~0ayc@|W`1e+pE9_vwNO(hHS6@Z7c#P7OCR;+qWL})4wC6ilaAt( zK`x0mR6ORIyyGlVK^(btuidVlDp=|yk94=MZU=U!NtdmrfS+UE`u7{oi(;`qd7EGH z`?&N+w*!0QXPERo6R>T1HieTTB->lg+Rm4Ayqj@3x5KpSd>8I*ABXC|Q@EA^tDqh4 z~@eDwGuYZO;G&o6ybH(j4H~N!SWk-Ot1j>WGua3*t$b>D82~z)*>th z*;J$tLt4)iotAMD*^F>LD%0~tK_{x?i(YJ0AON?;D=?7_t)V{X!A8=^lFor~ZwDVc z@6W=EksfDD@h>lEti4(Q%v0Ds>OcA)qO+yx_~YY8xc#ivAYdkWO@_otfU@k;LlSY% z$M^SqX+`*o3Wt@QLPoF{*cYR#noCJJyJcwOg-`A^H1ni#DzK~gY8q$J-9<#F9Fl{2 zBL-_y&##?oMMvdo=M7#;<1TKw0BW0hhUI*3Tx}A#_Znz32<%!AD$%npnM7mbHQkFG z|E7nSHN#LZU6U|0&Or6dqDU|`UjQI~s*R?T0S?<&DrtH}pb80RBZ%GXy=Q$U>yL%% z>0Fbq_@Dq6*Cs}cO6v;=z)!w>md|~2rkFTF`ec543Fiw5L^7`1Pr~-u`Gi^8JsYo? z0B9y7f>u~E@=gn#X?VYtnIZMoNUsTRf40kb^!fHVpp1ITd||`>3;&c)Ym2JST0e%U zEM=mDQ!K>Z{&1qYDSp;xW|N&L9h2$4uF7y!x=S`6>2SK}l_)MYxikwSM$QMiOy$ z8Gz`nKlS-rXj=I)6_45x^uj1cxbVF>@%7v1#|2CklVP*{Y-zzN zX`vTU8@II~D`dfCHy_O1bBlW?M{vk*2lYI-d7=jLsV)K(WG=9O;=ZLP7S@_8*JEKC zg<5I}y~lDqy6)Yk`|et5c<8p2L!Z0pziLY7GzyT>Vd(b<@`p90H2uNqx;Rx!5}phJ ztr_V-(RyjtEJq%RSqvFcYB_q3x#Mwba2(~@%W39<)v2VQd+*^{#>1M-oKO1% z&kl&&v#!7sY9Ax&7HfK2RMa(GxCy5NLspf%xp|f5Cla&dqde{&RWhAG6io9daZ^K$ zaG9ms^LPgR-fG8bu%OMc0J67<6=GT@>ZFX6?O7a=%VKCa~)r&Y^zu$hsgR zNj6A&+42{ILiz>HZ?ho_ckT4mBkF==TQ>)Z9Xq}Y10A>b+9btqTj~?P6KZ*sKn zUw2^*{}fKkdKSyC;PZ8A+OLPUf3`26q#0fsW_f@xr<*DG?em6+)o|v+D)kQddMv)@ zO7F`{W`R;VCZ}GmnG{m*$hejv+XZh~4t#Xd2XhIwwb1v#5#C%ZIi{F4`2U(iL^9v2 zO=i`5FB;qHB-#*SXWRP61=0I^?oCDaxJ%%lUSgkbnotfNgkHw0c7dk(@9DLNNz!|60tYhq2YNUnU9TXZHYkCHz zu(BPF41r=~?2q*85b5ZMoQ1KN~e9BPkCU!k9x?1>u+aA`P^uJ8qK>}W5*{8{gQS+0@TUn<+L8vfFCNy_VUWSb=r2jnj7Ny zCTB!{t-~%NF}ms5HR&~)J@jS0LaO1opBEy%a2n1cOK}mezhiE)LLtX}6lrXo`c!SS z^9wIxic7)Ucm6`fK|_jmw{&2=MdIXC)x-&3Ta6>!b#0qTs;W^v^TXflllyg#bGT(b6w57Elk%|B5xaMXq*~B0S8V5rz zp#(ykEpsZ~2=DJ}pddRfQVJj;5f3JdU4VC1%O_A(CnywUO@yAa`rq5A#38u4_H^wF z7AZI>_vD2>DG}9(1vt{jF(dWyN#5#-2X21fR1CYU`^%;@lW_}MFIP_dZGJl*G7ZQc zz`@wJ&*4QjUgRjMKndQkz-Q!{fyH#+ZD}oiE_}1am|nt&4W&W1M31`xm&8jEDbkN7 zk2E1&==imBsa2P`wQRg(BYb5|o`F_b#y*2irlZm@>9ZS`q9Xo?m4*_$m%0OjPK-vO z6$m>4%LW8Z+#Sif=U-KB2WiS7dCDUGSr#E8d1?nWKc{&xkx$d>!!>3-2(F9Z4l6M= zfdA7NQX6C(IYMfQm(uN+`9SFC4tn5@QzOqf^i7glJ6ozCt?p3D_=;XB~9;hj2TtooP|!_44|!DPTn7xUa3rK1{H< zErrkf=`b0%`Tl9EM3=|2Co#Wge~a6k3$qTl?j)d;Wj%_%Qqis05oRCRJqsTrHk(A& zuQKp-1xaANM!%{=u~jy{oiB65xxd=3T4zr>L)SpD_tWS7F$8aPSi**0%{*zOR4|cv zT)^wzzDoi@riW86FIRsyX)4)0`IzBmqJYR=uC(N>TK^x%Qs#zz_I;o#+h5bta9VMf zsiRazOQ$D_*Nirfx`_wqFS84jwcJIHn8VEZ*|;`}7HKbW@LkXjhm8VERg_`k6}AM? zrgba>=)B!1+GHNkKvZXf2@I|;5%16hQhhVT1#y3EVh4YmlIv_O z6kq7J`pt2snBIDP*R<)4riZaZlG68n(Tg@4&kX$tUXI^*XDNnbAHgxYJhNup5n%#e zwejrK1ZQmcxJV|pqN0yAQa><89^``;C5?nXvt+R43$l!_V_;K!NHr#j_V@14$0<;@ z9ZP<`73GL)?7Ds8o7zGQ$b6InsaHYSi{MdzcgU>J zfNLEFctzwT{CvMgLzZOWd0{-N|d( zqeCIP7LCBPf?K;+J638a$%<{Y~&s^dQEm6sZJF|8Q^iz98n z+n(ljmJbTU7fehfJfrdlo=SMslX~r9$RE+jKfX&og>F?#5u2Qm$2?6#FV8waBJ{MR z*%sX6J|=6(3;c2F^2U91P}kr*AUFd;I_im@gfs;|F2YQDsNeG(*69I*-^-0&ER^9! zY;u?*H^%gKIK%MzEBX7t8}WZ$MVBJ)mPYA_feQaVc~`r|s9iXbtY=UCVTMT{@7qU9 zVRhdLG(wD5(=UxmH8{L7UA&Ptm4O~WtTx_pVcFUMpq~~FsZU*_Ld7vSD7&P%>G*Qq zd*Q>fpTqTW7uV!(=GH5eSP2oe9ael{IG<_+$`981-;Nh<`5;?zMv8p8Ccp&xa2quw zpKKt^Uvz@VCwxIP<$ht}AgSkClm{=)aC@F6JhX`>(V%g%mjlPN0Eh+2C4=JijtfB9 z3bgoG?0c7|A_Dw=l8ezvHjNc%3V{Ym8Ch1QvfrLlnTlQnpw!U#MlFH@MRcT=pJr0! zb4;bQvc$KXKVT+HDNQXr*~f3ZK} z;ObkuSs3=x@lKlP^_7WwiHwINmfijA5$p zxGTq-z8s&!P5;2KezvJ>Td`mdh;a6X$+ zK7ty?HOs6*?JX*JS?uwm-nqVgMfZvkd52_dwE-I^`iNvfOR1X(=7N|qGmL69hMAEB z%60jnzT*W;21+1i-}8KH2r%1k9Py2`FLJHJcSO_6i$&#YdQ{?|eHNcG;btk$(!s#v z0#2kek&#JvIT|VSy6lVN27l`VoCMW~uMP*A;BCU|m5%sbcsfpyoM6fN{ENq!7;FivvA{Y@P} zolTH!q29;zDRcgeQi<&%ZhVfJPgEIBY8Qp%U;br^d8eR3#mhD&p~Deakr{i?jQq2# ze8P?0X*hNLXh+s z9$7Ux%Z6OCEoqNnRS2ePO7Rq73gg?nv z3kGi{nWR!d+vjErFPMvtUSVBlEd)~@7bhv){YiZ4 z_$xGGX40WW-1cxKdk1Akh0h$gdeTDmq1wno4M;)|3n~$E%h3|;)vxzU&1lO2Lb#T* z5NkeodECrgklqVP7t|Ja9mzt!&U&dccR|=hyAD-Ufz@*QG1)dd9Ih$Ae31GndFYK% zP8$6u)AO+_0ou85OI2y~Y-V}B;b20xRW_AHE``}~0%zlc!zgGMV}fb#tHRl&IYg$L zed!Pc4%-@w8ZXXX`dq6(+vZ*y-$pa#Ysz+49LNRy#rUJnBZFq(3CktF8J8Gjn@M0V z?OEYSC8cO@XR$(M;5%cf@v@O=_A22nCY(Ok#phO8ilTq1mWYA4} zIvr?va`zSgb|~nRgL0uQrzL3~w)EXgeI=KF^=3^#BI+0GY)E~JX|(O9A<=9_E1((m zIE6vse6Z~^3_3zTv(oKI3cf!keYfM_vfV%rqfFBiynpqo*h6g^93z;8S-z*4vqHd^ zLzGTl0Cab!(0*)nKC_5qGd4{L>w4#x!O{w1bC@~)r@r`Rkc5IT{FUCnH{#&kPjk&Q zTk!-vFam2cC)7a+E~TUX5r6W&d5aP*i(V3t zMF}mpCBjohocn;c3)`tB9QbSG-5(2XL=xdA>2-sbBjH?k^9U1ofd~)!fWtua$_$|J z5FNXjor;hu^;rgdbnUTNI1vKl{jBbNr5)6} zSOZ2h#wyM%n#J5Kg*@~$fyY`P;e9qnPyGYdZ%#2+2zg6l>YDu zfmRe)?aY(rQB zT|^LpRhca6U@dhW=iQsh*||6qd2n6hdqi!D-xS-_#u&{~zt+@y|KIre2At6akTMJn zo9h#JeVmvhkUMZBShKJYdRvD3%FbX&^%5WrG3w}X&-^@CBIcOy-xS3y@$>2>?=z)| z>MeEUeo=;Xd#F;<$vcZ`(l?ZXA3~OXB!eA1_2A_Fc0b1+EoB#H=Tur$DXJIEia5c^ zUyf5adfG<2wKH{U9`2>N0lxm;5p9jE~-Sr1jy(Zed4`!g>VC5w?MUBSQUlH=9t}N(py11VlX=a;| z6I0IzW~Uk%FcZZufkbvZxNxDEAe#MAe$1V0tNBI)A%1z2M*Lvi6YzMxQ~4cLMznWn zy_zZha|lg7-H{BO6lDCHU#SW}?3}2*Vp6Z9m|7{BqQ2qhcb+e(!2^+KU*koWSKzS~ zuGYS05`v@e6lSyOvyPV`9^+k^AmF13kpn4yz62s1!VGA6&u7ZW?b(a`R3R3fHqJQ?(rnAXM~5F2OhLB zGfU3mHu_HM?V5)TVL+|n1Mnbe+RPLKBz330?x?omw~*kY>by5ZUU4~Pt1Z9T1x%j? z?vq76v?Kn_!n|*8@_;p0a;2>1<>%!hf5cYHK!9s>SwE-0p5)2QS>g8Ba-0@}TQ`4f zuv(1Qq1?nrV8u3Q-PI3d8Yk(GbA6g>$;PE zY;@ZmM^36n)zLjz?%4jTWP&nRMf7p^k$A8UTIcYED4fe_6vagxw0ChUHcE(eW(t3D zPWr1wN_$jyua2%P^;cABy64XQxy_C~0?S6xi4j| zsS!YNDZE_F5Xcgr^|Ce2)Zcy7`tbyc(+PHD3ls~qe|BxZIDvuUzVNuWkw0nZxwgU*>3Ibsg$-8TXZM89HA1AcHT;R!TXGR<|@RCDjb&YE$mue{_>WuK?Po{O09^4V{uef9lOW+gpAj?Y z8*luzfJ4;Is*jkh<6I#WUZz%H6YXz%zqK8m30jz^5lrYFlXYIq8JDIT(7DNDBTp^= zb^3eA;dM;T(A-{VBX4b)V3eYB=ul_5aZsLMvCkD_bqYYS>bXQXBA#BKrhWA{q`vyK z=Mx^I(mz7(zs@X!nh3qjvQ_V(;C*0sc;s2~`-}rCs=-R^amwoSd1$ z?*z36wZLNNURNZ!x~uprM^SPz6$h11_k+j_E?r^@99hJYDn`iqYh&Nn-{$Nt zU3!EUzu7+w%&kALl7g1X=2h|M6Fnpj;#^q{_*CH$cQ$>IU7GR0w18EC)O06 zan^+M#wJr*P;d;iCV~!E$qJo-5DJ?jPRLOt6w2$uwXHvWdS;7VGzTs*c}#D6Y?oij_ID=V)%w0qmO_ewOX zJS%24U7?;tHk-7JX}AkyLk_X`x%>DRGx_>Mxa_ekd`3eqtc0rP=0oTs1PK79-cB4n z?1%s3T^GHpKmYAZl1ibM-jBnLn=yx7DucMf$$zS)vYeTt^aYF%+0+?rmVg7j+<33- zL6p#)-NCoum=A1Bhoy?ZM^3QfO2kuvPm;Sb$te2ltRblBN5Ae|*q!YNU0KCm0F}FkNuJ^RDS?+C#$BA*F1@KRNwCidwaH z@ec7yCsxRiLa8!D^zoExK}O}s0rykhp4B^rKziI(G!jRd5lduNZe?4p6qoDJT;@)f zib@(7IYS2)U-Zl+rXHz59u$Z}>b-qnei%d1XL3cs4`rIv@FRD__Cc;?Hduyg3tt zV7fhR9~?U>d{xK8LmQEu7F;UpoV;7de2;tW&4#)a|AVvl4u&iK|F-qs5+!O7v52~? z61^nq>O@Nry_X<*52BY9*6P9PeTg2TcXo9l61~?Tgxu#lcl*uU_dL%t&wu8avCi!7 zIp_2Kyk6I3A2T&(qqmi&P&!KV8lEYoNrBnNd)hYvt#-)kCK$7>%O6SxWf*Usp7vg`<#odH%2$Q8Lby=-p1N1>y^$#nqr_NPI_Q7LRc5d{ox8!V_8 z+tZ$ssp*znWnx+g!%p{courAWmVT{uwD8t~Pbe@%!U4Sq)bEf-;;Mart}k6`O}5+53_9VfNmz z?j3~eTEDE4hOk?xhQV3_y~GA6rT0rJ;g7SMpm&-Q9OO8%^m^ON**7T}0|oZQg~1;P zeIFdhpdb{_ImkJS?Yv{Ug3=%a3_TVrq7P(?OJ?SPAVwtLz6{;=8`Fu_cgjon$>8t5 zt$mXBo>;TK1I|1+1`$;z)ST8x^+>LHzbdpHw;-ctkCS!)X9 z?p-T^L+SR}qG00}H=@FxBT^|q)+v9gZMofFPV?~uUB3{fb9Xk)zqB0`4e_wGd9gD7 z=w*LOvkR z`)+LGvo%R%;^oqEF;VK0N)c3r*f7p>g`69&L8IJJAc`QNd3Cdn6~xc7RTd1$-Mm|f zz^uthq3pyr6GVMG5;OIBW67m*`TeiuiE;@BAD!hL_u+j}!O-6_^Sy4%Uc0os{pM=^ zy9Ng&N3|1HA_BL2m*?@hK0z1L4$sphm7C&td2?!WAw}CwDbLCVfK}ZXnfL}3C>1u1 zrxD10<*Y+q2NVJ>${loE5%xZ6bw`?vF>y=JVM!FlT0#<3sB@c(Ork zxa74daFqvTQLmnzN81_!#HE=~$Fv9}XAV8QZD^ zG^1aZ(zG^JzRf2K1Ou@G{YY+Rk4{`Q-G z?M}TWvS#YfsQ=b4yw1t22?riDj&s6576-uw**Cs8bi@peFeex{Ku9MDB9R*9dECK0 zi&%A^%)2*S7Qn3Z>GsQ5a8{gWeAcL(5B2ZGt77OuGM>)ru55RNd&0XTk%J3-8_Z@g zJL3iqjfb8W^iTDXf})Zp+>&4a9n8+p_ezS&IGQUjg7aM{qI(!0{*l(lJV%qsE}Yy& ze&BY56A(T|N6(G`%!`QAc`Egw#AR+y8d#}1elV4bV?D&vPE+uuIMr*EinhRZVM z{tUP3luXzi$1A-i+tP|v8})9gEIjQdiKM7jnyasjWhV?nK->u@cTc zF-(0vtRu2%Ru+s(Wf>5%(crK=v&DYEsPaY@+&Pg-LHGlzjN&0Hxt?CDX0ew^Ov%uW zvx@Ms-6aFr^|~8^`?iY&=GwJz_epH+8QhBfT~8s`Ok^lXuH)Kk8r&V2Y}_1*?=ycK z@#VV=TW-?B0P&fe0>zX8xWT8}beiGa+n1I`X&h zE;@6|nTk08N+at#mg{y6eC|cvIwQal7ydqLZ=Ov{|FrN;=?!4UR_8gGv^{VRZGOO} z$w9O8U9;J`xXb}O;VEYntKOmM89)YEZqEvz-Z&EoreJobj9x33OZEPCSeRR?QRpfD zF>L}vgA_$G8K>q|Pl+7a?JzJUhf`q93mvyz*9j&G@l(A%(HM1@q9GX@lM!*|=!F1m zJA;c)CQQ4tz>@`si~T56(pg``u^!LK9Fp3)pPjnGoJ}DC-MvX@-xV{I-j!q}``b?8 zs;OpB*X}}vlZ&An1fA7a|eXgA!QZn!d{i5z{9oMM6 zC!z3yH}{Jm%ab^+s(-0T&%ca(YJ7bq=fn1S7gnX(S`)hG2S>HNNmFEtD}%ssB2y>MxEY#6 z=}C%?1eYv_$ry(HG@2w0pH~=VKUsQY3s|pEi9Vhm*{*3*h+EQOV$u3{2d64>i|ax< zGqtr%0r!o}yzqehOM8~=?Z`yGp-=Y-7jGS-%HQ!@_x+OmHQ5dlWuJCGdhyqhzx^pb zy>ds2qd0KUs6p+kC|2V%`Oi28hnI|lm_(?#nLnE1!&vhW9m~SkyImx#k z4n9+3D=0b`*zWE?o16&juV%TNaSN~7<~7ZWugLm@gq>SBeEZZze}rE%%VoAf8rePo z-qH^!DeB8p6#G@)=w}`hDUgANzp~L#XE-S#yy#*z|8aJK+u7%Vl#b_GbH8{XF$tq> zorWGAo(#2Us)OI@XeToA9)hhB@pgB(;he6n*K{LR!Zg_pcUVowFSmrd7t8XB)p{1b zkm6|M_v^2{$r{Hz?enK@wd!RfuzU0#hR+Klw{F2xwDsrDTWI>(O+S=+yn10;AkG}% zJwliHR@JRVbe1CV}H{O)Iz0JV9QD#h(jevUGc59zr zwe{ZGE!zJNx@oE)I{PJ3C2vFG{hRShfw+Jr_HaEM4S`83CpPfV>N3?fF|UbKuTc0= zc=m*%yZsM{FLF?S0^-|kI%MS7c1I4S3}V%tFl`Z_MifI3g0&j^IB z-_;SyUXU~7;v7$?#y6>lb-2m>Y)5_f%}Z4dlTE{0CD1uWzuT1JNGxoAn}5V63_Jiz z0*{Ic72i&F6NN)mHP$16@UB&FMZ=GZNn}thBkF`T;bMdJE5k30H&fjl7Ecl0ES+wDpKz^h8G*s|D zNZ~gSn!qYe%+>thI9&W5VH~JVzB7RJHGhkAVzV8C)$^8ZZ7!xW{!aubh$~uB>^wxc zVO)P3*#DA0bi@BX_!j-dT9d>l%yvef*Wba6MhQ&a@Vo?DAebPg@%@t>R?4X^eXIbu zSNnPEu@S5^r^%f_AmsZ6^#0N7zHJPY&GQu_a?c66Cyn1D>iPiazPO~zn%2oN^A!Sa zP+w|ip8z~u9Q0Xj^8tfWgCqXaRLa95jbC+N(&FjeirpA z8gj@DKq6^pPEY}aH^``uP?tUMvJ;gk_Hwzj(?psd{Zq4B*0;jIA~m2z8w+OOM1etBx=+lrD}fDf&JI< zt6;kNOT|X*SJ0MvHoG?LNWsm zKqhgLIYc*R8vvwpIJnL{kY82h$t9R5HcB(y9X~ti07W0ltXDXf`FjAdw0DuFVFoCa ztr0bDP27DX&H9bQbvVW9u#J;)##J{#6{|hT!^&Whhp3WX*Ml27zT7S78_o@ z>lG5E@%240JB4=do*}t7$gt+|Tr+PRKv7$N!l^M-vig!(c}mR2wX zW|lo96-GFeFjX>z)sloPQqT`!!m0^AzR=e{8(wN>KQ{geWVV3w6|(R)k(TE9>0L0@ zxEhv=ahjE7yx(%xOiH7N@I-&vXa}#5&ob_n<=&wjl>kHS8ATn@WD>q<)$DZ96o8&% z?twymx_$DzWjw3`xk5(bCz~p>d=tX*qQy$Yt0cNt93&<6;d47=O$tR4Zze$*{l70= zkd@d@zDlb-+*L_4GO~;T3nxx!N`MhzZ&~fy=HV_$jumb@^%lYN3%*MZ{vlXN39_b^ zuW#xN-jUQ?i%PZ+%nmE+spaX1KiMH=u2%VlXqMEdg_%gXBtF&=-kh#~6%&&A*8vF^ z@vurrR1Kamt7uAo&)&1Y79}%5jczd_BKfUy4w!_OrGFANz3Y%nY0I z1Un`8;M*L@p(kE=p!JUiNG`I2lN zLdwYl1`|lN-dN=|e%Otvd*N*4Wbw>CT-_~VLvv|Eny^eYT+W6`EH`gc6p@y0+_1W+ zk;0T2M^m-|diERrVKbxQNt7^^f=MZ7`l~4oJ-TRJ3UaFRAaDRhf?O!4aYatluu7X& z?#~KT?5os=EHOXx?qiK^l#lGd1L5AL+q$Oolbx?ynz`Ogj)-iHJc^f5xcyvua8BP0 zvW+QwW&iInDfLr5DpytKtS@33_Oa#OPU9nA{oF!x=>4QF5TneIrhrQVzlqh6U-K#= zvQVlBQ%@88N|H3um2u+i(km@7jRxob=Txw3awswVY@PS7;K@fE-%Gp8^y^X0IyYAJ zy`>m}2@O(F9)o}3ZIwn@Ms(_WJEDZ^`RQq5cItXUcl$Lw%uwLGF0ybMB{lM*4JW>J zJhp9^a4G0N)&~C)_WtY{|AW%B;_Ym|?PMnu(%2g0FNplhX~z?g`v(=P+ZODk-iaR$ zVu>VWYRTe*1@etSRBoPGXprRb1q-4d4HcD?UKrN{@-4@rDzh#8ezb{$6^ELs4aS*0 z*uRaO!=FKZw5)xSSFPmuC3|e2VOO9wpK@)cza{xUkrk3+Q_c3_%h4QzDqhyAo*0cg zL)k!W?l}Sw4xx<9x>~Q_c?!2TK@#7VgxGaeCq6HoeS%r+vj&PZz6puueU#%I!Q#Uw zxLlT^#nN$HQf?bG-kh7GR~^I3&O!7S3CPlng|*qJAF500m?9gYB9^v+{oxCyEYgFN zk%R0HVM&bMZU^-@`~zF|EbLhq@Q$b|aVtAvN{OrttJpp}X&uTZt~|&3N_~%6 z&wg&}M8)Oj>>3J^d_nPLp0e2fgwFK4a_O>;{DB`%{klFZ#oj-o7tcx%zM`;!x%}R~|oj(p&nV z@>6j=WQCL^)zF9!YIo2;XJFJP!|FmTe^B#CH1KnAREZNuym}s!sl4cj+mL;waY4bF zP0F*aa-*KyvF~4#VA2o99_GdsiUht@dqZdUL$V4{QxGy-$X#EsG!!rC) z$7-x253sm!KBeD?atO8VQ_1Zw9+bk0N}Bv)Q%(BwzJC7$+UA);w_D>SERU=8;nCIH zWeG}eEVePsS|)_b@)KHpHsn6jvBb$r&$N6jY_?CxPew6=&ozYc6-|G^01dT`L6+<= zf}Y5Kn}WffM1xnIeZDC2>0!JYG_3V9y6qo#sm>uJwH@`+$Pz744gv+yw|E0dJAx@9 z6JVXZ(CJ(w8<7@codai81+sGac$)1oF?q@0L%)L{oKeEQ%2~!#z8| zjZ@|RJs)1BhHXh( z)L!d+2l9EWW^<`a`5uXX_G@K|+I}R%L+FZ7U5siDebnF6G&MuA)PUMP_$LjZ4H?(* zrT)}x-*>3e%IeOBkal|-0=FpIEq%*ta@7V%2Sj8Ta_5knKPuqzea;v_22vmF5k3AI ze-CMF`B@Ox+;B?=_~}V3&YEC9+zQ)N&f~>?E*+3DG!5Rnpx0-9rHlE@shw$39>zo0 z?WsqBc2%Blj}>OQO`3Il?Hg%kc9{g5&>8J-@A?JV>R_m331*tg!@3>&%sbxXWY z-rEJ2!2(qFGEDq+OQV0?ysjWU`Tb^T{=e@pz1w zi1MlhD}t^~eo9Xsw{gqk1(Bk@9Cw#o!DK^B=EJiV6QjJF=kZxv-kD7?*~`Bd>hsy=W#CZo?NNS+iM!n2cV?{r{%jJ4sQmp3(8g}Nr0?h7-JV@z zEM)Jt4+nqTPrY*wlyYaFn=d`d3V{X{U!8okXiCA9l#RP z481mVzG_O;&JS%1zN$UVy!pF+c%0ef`p@I`uf>LzAO1Q#K)1Gcxv@U8uDWvl8A!|?=o?fW+?j06df1wB zctZ62c)#mE!^QbMiJ|GEU<=CMP4`azoP!feGUA2ZmD`_kh!z7Lf$OM&)0tyu2-H9JA=sem)zfuP^#hS-u`iJKMvlmmdi}*x;(kRV$|pTug}|7&0~!7S|T-p&Oh0r(#M$Riw~CX7#}Q?@?^=>s6C&%Z8|ag1iw_W z8jQ0V2=1YE2Imd>H{UK!XmlYm{$wsW3XQmi8ryn`o8Xz#h#c|W>j51Lf;A4UgT{LY zlQ<)(@ix?L#IYfw*+0kRL+w26^!<4|I2c7+`u+mMk5I$B>R1X8^G84~cvm&|ubf%* zpp3$_{ZzcigY4CSXQ=Aw&3;p=p{!9jL_r`Ac@8*tw1JfYuBLO$9BO)NI`kAmL!0rE zka=BIII994BG>$~&0+rhySCn@{%WEIeiAv@20BSQPP3?ttk-o?Pi7g$j6iwsKE0}|5PYu)R!(4$RXcUrSW`6km z;;F7HYnePmFwe{ZrpdunFxsewaf~BiDmkd%UzjU#wErqN$SKOt4|$Zo-LyKXRGL@Q z-s)hf+o1a_Wp2y4bdhevaqyWdqWrS1dOvp$*2R<@wK}&Sa)5f?-wt+Mnxm+2^wx}` z*M~R%B+8gBq1P|&ay7ub%2my#2`FL^de2hYDr+j&yReg-A?g@+Ydeoh`C2MOBcGcEASkyR5mu)e}s$Y2WvLma=|V1 zQ+)HE6T{RnH_Gs4?I%fJpH|->6tA@Uz^BuosH5QTu?4oNy*8Me1@5vvskZCCbx|G>mUH`3!A6qPT#IC zP%9jaCWjluXad~#R3U*CQ_;?B1+eQrBM%TVjB|v@*p2}#XobVK$EJlci;|9vJ4!1? zKrwiDe8LC@0J?F)R}p1l<+{=o2A1Shhv(b750$`)Df&(bo`}cZhRT?iJKq;l^u+ek z84MD-u9}W+PeTi=mam9y8Z$%gJuP(Y^t3oZhf6@-BgdlLBVzDT>F`M#!25N}vF0S9 zu{vw;*o71`@gKd2Q(JFDz_C8y%4Jxg#cb5b{JUqdTzJ9$m6cBk>h{&rKys${f1Ry_ zgx8Hr;GTa|`ocNE;0Ja5FSHaf?_)u`F>c~$Fmy>K{H zyVjrSvjA63e23B<`EDBbDlT^K0{s5*7GRZd^G=8Aq19^=s)Y^ZdaaLOe4Io9!blWr zwSA(1N_HO;h}OX`TNLemIt}$zYEYe42*3u0i-3&ppE=7w2{x1G&1Y&w{hRNqZbJmJ zf1Pf8=JUsFM0vzs0I~(mLhEGm;FIlMfl-yw`XM)SmI1iW+F9xL_*$c*2F$9 zx$sxz$y>zvY)D12HA!|rawjP|fnBE@cM2(l>y}+Sf^8g0QVb>Y1zuct}1Z&}X2munfJY}Tr?3{vJ zB@jHq782d~0<`dNu5c?FBBKG{$*wEI?o!9}5c$_#f)M>(JQE#y2=Iz1W8Y zi#!Gi1by-kFjue5CE)6mKduMMiGho3$cDbm$KvmrG zOpG_OPSQ`{{Nra#% zRi*ZtDto++fP}5)yko=$p+VF`>oaWUl)nd5r#z7vm-^1E25 zW3S6vUhBra56PGRpw3vw-~C145Dk5>J)m9{8>qEiula5t8m%`#EO8$@ucp&uW`z)V`2~C>m!MDqS<@WZ%;Y( zDKg0=el9b#nIAvIZHK&(a>RqKB71vVwb~p(^Up0ayFjy&m_`QZdDtqZ8N`{&orQYv zS1K4sP3u%a6fB?iD2{UE9m1Tek2hR>9riCzF+yz2+a8Vj`yvBk4=o15ZO>v;~*mnnwdP3t?3e zVVX=#K(#8IzNd$4HL-koTv$g~k)>=qC6n9`U+`3`+brPsCsyrv7=CY?U{3EBUcHu& zw0Vpso!3t1R3;@5|Q#yAQ)DW!r~J z(3gKDiDCNb%Db05aGA@+xMkKrRo4Jbi$B>}Xa1N%e79RVxxtf#*Za|)sdOggbuyV+`*2W1 zgE#-o%_XrWeDDd3S=V5WZ7t_ti+9GLI|2)eK66kbSrg=*+AO*#9t^+xeE3f>8|6*6 z=g#*jL+$125sz9p!s2?PtWig&POH+ zhVPazoEz|4Axd^1=Ws2>tdZQC%Z#mot;7E?dgz9nJStk$p8geS$k%N=T5dSzEqHPB z^K{<+bcdd=SPDD3?UD9hb+vT2hNJ;$&W%Lne+5NV6ISSrS`Wdyem*d(0ISZT&F95m zDUp6IG8cz|%))=AKUgz9b#BWXGKUn5!CD7?O*Lt@6rfx4<0zL;1T3XdaVEuh6V8PK z6?yU7yM&Dl^sGGnu(km)ZONgtc>gEx?zC}n$lz3s%)ETd<+QK*Ph3X|R8)K{E5RE(IC^h;o{ac6N=KApq?xJuEjfB!Na=^x=xJMt=9e#PSj$1v{v)Q_OxF( z>+KFd>Phd@X|meUoBXyZdJlMmHko{Qchk-{nn2NKw{6!0VXJmH+LlUXvn&~{C{7iH6J79wQwmPfvcgyZ%8x)a|~Xo;5-(WS0Di2xSi?7 zFR9>$&SnrJhSmvQZRyv%InH^vqM4v%MY3@YRY`YZO$5WeglE)D|P#!@f(eYjvpLYxHlGhMvzYtECB^^{EtorNd<2v&#ls3FfUjIV9Ml)1c?;+ z(yaXN9nF_NMD$v_lo8;h{qvBk!@fPFma_~H@42289Jh6SmlytTDQWnklWXfcyvzR8 zpQ7{dg?F*CK>3Td)#3TiId6N6O(8Z@Us>sy6KJ%x=eFgN_#UJGi^7kN_mfYv+e4+) zeLu$^FL-DyaXs0zfbH@GtZEt*Ky76HYayix6>Lual4B!2Sje$s>zH(1zU~GeLdTX4 zuJqjx7v>_=a4mln;8jy=>vtlRL^^&grdJQ2dU3wouh;h%hP;h)4(Lv_{d>^Hz$kve zn36xXQLwnA$?)<#tDR=8erbzV{T6{U#TwykTAnp5M_5ZAM$X_0|0`mBT`Wc|;XpzJ zkO5VkiV7jfoFdo~0(ibUBWlJFk2__Ly22^6vX>Kzo@$sSguqfSCjO*)QU4ir@ept3Imc?M`?38xa-y;gKi`~);vrAtb*^MXrok$w#luEG&>DI_p)qjxw9F_RtBqzriJnGaW3f75tgEd5}5ZT}sJn%8$ z7#DN4f6D{m-A2JL4(I#Uguf^p{#xlV(IsodKFGmXHOLo%2-XN1?Ii=Xg6%ZP{MU%B z+m7ae#N=ms*(K3({1WmZ1e^s$S{^2=ITuzHOZ<4>XPVgF=^mK(2ck=+zd17MP~&Q) za0bAVw{)?COvduNp? znjRM6&wh_<)umgq!IVk71k0O+C*)WAA=dV$QA#zH#1jTLihJ25V9QgXgroOE&;J9{ z5;9z#AZ9V1+v3ZM9#~VfP|XE)cAw^4Yh}5%Tx3nK?Wb=xs&P@rvGR9p_oOXkEuiB^zxi9r+c+=6O0tu&X+OjD-&^Ir;v;* zZ|Gsm=NyP*T(PxJ%cmo3z{NpgNN)bAPrxzk7`4LT*@@Wwi>Lclx;EgA7x^-a@?pHm zZ>aZ6K5Z{G{xrc-Nhh&Chx>5Xb^*o@`kMTQ}XZ3sByd568+%qQt(0y=jJ}7u8Nn zcrYe#R+FGjPVD<`)-uhRL7*6%L1?&b{%2eE5P`RW^~m!ziqCvy;StCKI=WN`Mb%!% z5kl+yXYETi@0}~=ggnSU>JLVUfe9NUfyOco|6T-);hlcZk^6^0VR}d_w%x;S&;727 z{UR{Mc+fwUz--G)4xX9g0oXEL9Q6|e26sQj2`o>sITj6YUhkA)X-*A)soJ!a>priN zlBhi{{U@jKm@jMu!AuS*O?m#1Fz%E(WiQE67*BsP!JB@v3(E%V$cOXKc^3HP$W+`! z0#b;e4cOYN&#{cEO0|eI1sI>bj=MyY!ha=V6Ji2(ZMuEnVH`E&Y^#IZaJkWuWXe~^kCgM*Fk{K`Dmym2Ss}cRDY~gRm4uz-nkSzE;b}CMQugzP zOWr5t7yS|0zu_rTo61%1=;&C%wsH*gTKU#$B+o@yq0yWE#05|AwHM!7%p`+@&uMvD z>gEbxrxA>O9$sUjOUXXt%gbba8j&8p+3B}RTC8;|+}KaYvVK(HH9d9GA*|mTjP=nk zNQUR&kClzhMo3%Vn*Xh{jZKwH2ExT((DJoo?yf-Rc09i3&oC>cy#CMD$@r*!QrIl# zC}pL{rf_GXfMAvp#6K!KZv0$Wb>jRKSPvkVE;^hk@XFL$yKyw5arwj;ux#NPC00o1 z!UNxl=H=4d1T>+wz=6c?<|F9`ylU9uJ(dL^_aUNs=Sh4E;{5D`yA9hPXcH^hpjXCc zW%Qw+d>VXLZTQN0zeVyM_ivbgi|2<4JwLSibi`@bTj-HiE6gHYrW(tFx-E&(mN|~{ zIeBZj(YfJ)M4Rjk=E8p0(R$YDsQBt3u9a}~GD~N z7$C;m zRM8S*!&;VWc~6Y0C@e8W%{hM*sjT3(ZV_vnH+k;6V8~69t8jT!a43kaacM<|@inObt-hh9 zHJI_h6hQc{YLWp_6#@8n#`Um|S!<=xf#`#1Vn!BEKSgW=u1nuE(2o^QUCEK`@o{9V zR=A-8-h~RBT%4ygT5S`%u`^PlQdMC|F4E6VEPv;x>p`DURoxRlNROMrG<_ERGAAxs zaq>kK%p)T|>`hQB_Y`ajl?05LN~_=`V#`r#d7m?i?ic{F?e9%>i#bh81>TZw)C6;` z^5f;cf+?Z&XPN+r`y-v&{N_rF%ToVRn^JOKt1RP*|I}MyEsoJ)i3}NT)3E>)$xItZq@2VyUn-ML9CKw0%A=M{}CY}${avh+})xrk?SQ5 z&~+Y+OY+Q@L{f@^v8v3U6qczK+J#;cUxPUd%VK*TRB1*!LzTmJNg^~?I(;4GQ(`8k zI`UMpSg|%!K?`2NkTC7_8R@4W-^O3=^w5-}0Ut)wX^}A{^S~+~L>N60b}AM_0{&w$ky-Z*0DR{=>luq@xJs&|rz z<9S%%PKr`A$_MW3^}FSwGGbej}~qB6&!qcC&`x^5CEQRQSqz=v* z*x}DqhMe)8T4;5;?hnD6+a3(VKrnsQCPMCo3CyNbY^!G{wBV@!f?PQF z$c)&mM^T+r!wY(Vuf7ewq}Inzyuzja>^p&8j0olf+KgA-K8#D>JPgz@e-z66z2@cU^%6H$TOpC%J?o^E|#qz(I4IV0gV|`)Cdl`4sQ`ox&Hc+NXkH z>3uKMvbBIZ=OMQ1n5yyJNP1_(iPhc!uZqnYc!htYjmZ^dq9{uK|G+IsypY< zwvldx0d9(TE^jk^*YzAKeoqmPr1biT%fF|KzWIa%uBo#y=g^V{!}e^pO0L?}($hYi zeS9p(hM&NP0H;x@(VUS9M(aSza`-aYeZy=0%q`Em5T{K9n`rYc-Tk35BTjY4%+aGK zEA}eZuv4Ed9Hu*Dqi&)lM?N$-@?L`RC1+-(}ow_4j^2NV>7vrCvPRN(FJnYSV^xEl9 z`E7$oJ6#jp`KMxd`27oiU2LqXI$3=}z0W=tl$L=JM1RFy(z74EE&p-BS)?Un!v9N@ zljg}|sj7`dX>6iE(qn5yd*?W^1@0kKzslgDLUQDM`pudTx*qTTGpNvQ$VIe3gd+l@ z_Fhu$OtWp`!%ToCNTv!cNmqZIjkm2(KhwzcfbkogyYjDM;q_u5>BnC_Lyi6bI?d|UQoxx{wguo1_Cm{t z^kj56w&I-bch7D_mEeh-6?Q(LUUo26D(>sB{QV=2_*I@7ZB^~@c*&2Ch0NGr6E5I_ zJ1b0J_-ma!)1Oe+zBMpCD+bED6&sE&ufZ6#E- zbKA8mIag+)vSm$EbbJg<7sqI-O{K_-u4h`C#-UQPqTmCz=Ti=U+@PaJuSEzhn2nx}-s2^k2q zFu9{sX{_sfm3!JxyCq~*+*<{*E52%ZIsjCMcl)3Tp;w=Es#5zH4-Wab}wwHar87>{45%t6@&W=SzO3I%d}TF`lHp zaJ*UZBlA9ZXU?Vc5~S&z{z1rbWEmc0PfBH%PiAGyQPor#n>#&q7IZzk=4#oP=GN^a zTK}QgG2O^CSTF>VA{eafXpgo>GfAkFY(n>&`!RiS{XS_gvb1o2k9s<&CJxIt>c*%B zTcM>1+GN^VsCiQg9pZd(gSPN?O96S=N)Gg2ph1q4@ME{ZB12U z!;AvuZM;h-)BOk_1Zx#!u9_u1i4-TNit%NBBGd6vo_f1k!@dJ)Wpk*!EGYSNxzlK| z9OU5eJGLj`l(i+`?g)L%sn?t~uM?Kp9+#OJw0ykzd>9lT_*$GgP>U{DL_j9e5-Y;_ zk3;j>fg9YCAD)n(nO!0q<|d;VxeCku@60LRlje^)V!}#td^vrGutQ;++Q_ zu}kg&R*axfYup9{2xgs3GW$HIn3+Mf>Uvt9q5m`PZx^UoSO;BLZr-iBI6j>=?)D;GNI6WKtGsR3 zp8$W%n>@C3=s7&j>ZvvWODNne$N7nN8&6**6T>tZs^ksWV3ZGJzT2%VAG0WIW9hXe z6Bo~{yYKj%xuG~bc)Tw9^`<<@u1|5Ib7L!jI!wb zc%}Rk(-wM?Qp``DNK#sZ*NhX4Z4#BEBsne}_zWP-eK`1#LjJo0W%!WV8jGdjLHY1@ z#sVBcPcT;NgQihk0k*IE3(gTUI$pOH4Rt3sLWYB$4FD?AtU1P})N`|Og3H=NIl^z?m>jq~wb08nt&PwW^h5k48 z-aD$Ptcx2K6crdm1w=tWMMSA8O+W~W(v)68kBHRJq)JP`f&~y!0qH26KmyWh1O=4d zLl3-z@?_vV~^b~}6T-@f-qC>Ob1zjae0u&_V7 zK3XXde5%{1A}%U>pWe0Q19}(}cI9Rlqw8z$ia5ToMR7U6&3!&cvw8of7ASpzE75?U zBB<^9pcbHR5}nH<@4F5KFK*8tJGWH|L-KIfYdPJl}op; zeZrgy+o7^zCMjQ_WC9)`=L%4OD>JT0?!H6xJ*N>=k}GityG?Rsdsoo7vb|0^K-*c= zhP}qJJT+!~IpOWQGOQyaAE7dafvhg#=O$b?o?|-!`WEX*sh_ptem{lx&%V_E%U0Y= z-%l|H&maD8EAH>zt^YSC693SO`}-(=&ivC>Tyb@0@Nneor~de@{GZ?I|LbI8Ca~*P z{J$-_f1NTcuKL$8#NY2Q*1qd#WBtbg#p=#iPF)7iPX2vK>dvy@hu=?J{yx-?7 zPjdfY)Ssh>>wDex^mViO4}qt|p$_*v?ZE?#C9j+kSF>@jv-dnDb4e1s47M)2ySX}j zKb_gr-OGmQ#}k(S)6J}}Y2^V2Y53#BX7TF|o*p_j?#iytZmurhkBA0`ylvxR2abP9 z>avWi1h`xWCvaFMah31m-mtNDy=U{c{^6yO0|AoIz!iW_kLLERdVDk<5C;5}Pd$Fj zb)8W??EdHKp?yO^&cD$e2or8-XpnqV8+CVhkBpoD#>ObhsH@w5rFv@=Di2_;_#yly z3*{?K9nwd7RmH2{b}q$A*o{i~xz)_J$X?S~f_~+sKj>Mll(DG&?ZgqKJ#_mH|MN$R zJHw0CjZk4|IZnO#UswP7#+)yGefq9?x?j=>XxJY5gQtT2{bS=ioo!0i#8Bef6+whi zJ??h*&!_x8=o}sW^GiqqtA7wv%(H(F^`GIDF41#Pqi+!2LfS{~qN6YWblN}e)nTOf zt)tBmH0*_(|GCD$R-v>fc!J@B336#`0`=kSkE_@QCsNGE>y-RRa*7JW-AJUjYPjX4 zm?ys`GUD*pbF@*Th%$Gvqd(#BAF~I?9b0_}M7PG(7>OPF^>1(d+VJ?!anlJ z^GnzNzoRMtFHo9tmA>_9-JAH&)}eL$-F4MimQp;M%Z^hSVZ*JrvMve`H0Qd9jlovi zv=3@O<`!cr9pNRAy&l+`KX9^oaMz;0O6E6-X$QXIGrv|cOtN zeq5{JBgN!bQ?O6XYS?*?vuF4`ZhabRf8gf-Fy<7AeTTvi;gUJT0zEQqXug$_&<(jn3}#ynYsusND0Ri$oN-wz~fi0u}-wI28!DBfEo$N4|@1K)j@ z$7zb=aS@Mi;SH{@Bky?UdpPEopEj0IG`@7sSWd|J>Iae;7M*xFH<{fj`D9lAx0?c9 zd~=$Qm+_48tZ!!rvpN3sO7_Wn#LY_EL%aSk3eS&w0R7=_DF#pX(4YH+6<4WM$vc?# znOgn1m`_}B6H;@kzmGkai?fA~>-GwtIAMBg~`l)Fv*G8r#ZC_qeBxaczoDc8OTzjM)5E#Lk|^ER@6mtcm?iC5y& zT#VWMG*2~cT6w3pfua+}pWr=iE`3Bu<(JBx631}4vCbmmN!%T5#}f7F%s%+JeQ*3r z)mP&E4tVS@p4yBf+5x$zs>`yhC_)(*f=Z-IT8>Eis9j9gj+gUdGA#2^d1az^!s?09Y;3B*ZCUWm8=$3YY;5Vy_^R{~YEg}-zqclHT4;+|H9U3MeN%Bq^aUAGS3k6Z8$8l$5VR7~%FwD$FzbY>r3*h$AT)Guzd zuT|0N{!Vv+hKf5gpYF7Woe7y1G>UiAtL99RSSY5K&zAPq7N4*PQotViJR>$WY4B@r zXOQ%1P2igc&7P1LWnFl>>NPO%=tWX2wr3T;!ytL>RUdPQdLE~e>&XOT<1D-tPT5Kg zt2eFSRCJJTUz6Y`tnYMTy6sVowd^?h{eQttoL36u%r`TSl{Ct{6g`-+ z*=oDOMTA}PUvZn^b5-%v&A)e}lMJ+-cVmA`gK zS?a;59!Kv6u#ieg-kBTOxvO|7vrzh7i#=vsY?XrEz=v}yr#b&e3}$d=GK##8Y+YT^ z&iA-ydAG>2B%4N*YTx8bbClf2+TwkrkF zaj*O@)j){t3u|O$ua#Gi2b*>x`}n=dSi~{ogJYk91}nqOkNiS^K|klbZ}V#W;pU++ zAY(LmltJyh2_xTt@E%RC=Xn;SBx!oe!(RuK%ZyGnVlYq40K(}8m2x_Ym$oP*NyJJ$ z*xI15SZ>Z*%{*8hQAdNi_$SG9`iV+v?%{6Xb=UVrMO=w$ zK{HzexlWHbS+pJ9&Q)WgUC!YC2O$Qhkbc+#MefX5f7O%^o5{xSoLAo}s*{mwG`_$? zIWs;gPKK>{AKw2k>kn4kQB6-K0;D&llN${cUqlp;EEdD^uPhT<0jVQ8T?6qa0DN@> zkDcnTRP{XO)3=+x9_yOfP6=pxg$r7kFtMP?(QP1h?@{iSZD3u|sOROcxY*H3|8!=m z_1jk4*BL-Qb4JuimP)^CXUkn>8!)=xE_z=JfNzc9$^2_}N9CYwM);(nJI4>J>B;&u z6H+BxZpqTo0*O;o#d|!R0!JbPDl1Q(@RM;;E|w?Lv@ZkN;ffvR$LMb|9_|BQzkm7% zx%?@i;GAQ|SI=DNhsl;m0j@dB?D0^o9zIuf;_EvqKwqC0fd_nrc~#g@>K2z)(kTG5 z&=}qD%g~+u@VhPl8E*&aqg1vzZ`@kyX^ zq1+}q3jKQK>VH{eDEbL`1xi{@UHkoi3aUZCH-hX|g%R4oY8%v*!fE@#WC!X;i#?6U z&ZaLi*7}nb^_cBg9i6T8SH`yMszh5voJG}XFyVG_T=1`?`O555cr5Iqh^sAnnD(X4 ziH5P-H03M{utG3OwV!&Tvpt3TZ7cWmY0b@u1uehXTRcz<(?7l(AKSxAVmF@jI!H$PCY^J< z`75Q*Vh;|nL^@jRi5r@ot4d?HkXXiSM(<6MINvYNpB>Pfe8A^%v=b+77!`4>2Duf*^eV0`FGq&ePQ%li5XVtM;S&CF&pMABbQ z%6<9EDGPgnyCj>It5SBlo0k`9l7Z{?Tishz$1b7}+BLi8^7MuRpCC{}uS$E7e=V`- z$U6wRa^Mc7hY34a=ofJ7D__I}RiX8ksUO{v#U5z;ha2(vGK>+LEm7HB zN#GLUiAtP>Wxnf#80+5{G8liEEgE=Y4Fz8!zMPry^ui zRz0Ate+So7CABRD&z=zAA38~ZO-||JTkak2G%;(x1by^3o9F?fREU!( z-U7|?yY~-XXFPeu?NslIGU6)lfTfg}P68owk#UG=)etcgbVmanyoH`|pqg5q$akeW z63MDsdA$2b7wjp>HPmm5i43jm?Ae*E7%x|gLR(Gp)$9{L>?w?gd)JQt$Db>eGOqHS z8Bu9}ekAKgu*n-F{@m#;TRQjMsCKvulBH8yjW)^W;7;SwfB59H*$(~NDR`b`?;D8) zAMo%j)26J|s`s@!>dTfIO5H5Wv7_!E=y8{~^`joJ+OvVO>y@c3^`^%or} zRrLN_1a%USIn{5TER>Eby1Kl~;6|m7O&4vZo9mBWsV}dIDPlkG`)yAv^V`*iYnxqu zSZl)Yz;tig|A<|Ml$G9$wDS0PONP1W|`;YikFV{W(w3yp=MSIv>)T-aR#Y z28)Py_FvzA8W$fgtej}{!v^<{Bu&RV*t+p$Z-j53`}$pJNmt;*cr7h6+I1dMyQMK?Mmn0E%2KgKe9XrU6fvByN&NIJSL@@f8F{rJd%k1<5 zX+lTSpyL?i>+e7*1M_h*zPJ7G>@VwC;H!@m{5K_~!a#kp=dh(^j`GYAf!+wD7ipoF zgVEe3ylcH9UMtXf;A47|DNMapGqXGMl+5yIb>-_g6|8vXc>W2{jGdVr97DpxLoRrM=-4?;wdvS)QJASa=sj`Q~F+_8MQxdZDWk* z(YY9mHcNTNdt5x~J?EHaHew}N^8Qra6XxpB^SBubnJC&Eh^rhe_E{NyXxDV_G9US? z>QWXbETCZQbd*kt={gVtLku{D;vb9!AE@{(mV#~0lKn-9%g)|0MQ)B3jhD1~;Mn2I zQa!3yP`xLc#uqP%_!M@cTgpVUHgqAE9#7jW6}3~OZgg|32;wLk-P&g4!gj?<(_`mO z0opZr^+*jGtcpY6AJtBc!{-m*eyhX(^ml99*hANv`{5di#P$>yQHFZI1v4-ZS8|+- zITya7V7DovIi+_ocxBkX*s)irnFwsU0^UO<&fiE#$|PUu`rZSFZi|`ACcg%J`l?R> zD=zCTG9 zvQwbW_7r1YzCKp_$RdF<?eK*J2>|!T4MYJf@7HrUuHNLd*mxoyFdi;5 z`t0N!ki#KhiKKe%yV;3h~&UYIncn0v!#tw|UYFf9y=1hHM%;PwP3 zHY=y+zO9r!za0%zxcCBHwXUJQU}^3%;`KR%g&473+B?W;`CuFZ5Fz4N%DP9p0`&Dd zWyub*TbN80neA$kOO+a$sgIL!9ThDdo**Q)WyN21>^TpJL@qP3oeQ8Y!mv}XZw*)1 zjE8W03R}eTtG+a*cD+2A1(R{=Uq!*F3vqC?E?gjWKZ>{aqRa3Vg`;chOMgiA44ocT z?BR^$-z6Kxcz&WUF6UOXh=W=}y|mPMx8^2fx5iis4S?fu!D0PVtiUK^;@L&ARBB zlqvEGjj&=~5P{f8rHxlSYFFG{daAf_8g=&L8f^;;vtT{eE`%$lccH@aEOrS#*dg!1 zkaepOcEEhFPr;9})(F`wh%hPm8q#;;!BnIwg*U-K$i_yII-y%3GNquH{L1K70KLoiMhS>hhR}yiCyTVa(=U(y6 zb)@KiYA*&M<^F7!)OAbTkTsMii^U@G0b3Fq&-S!9(gYb#(`8{{F~Yv;4QfZyh$W49 z9qi|}M0u)pakU@GQ6T|wX{e7V;Xb7{;xd$~NDsJWkKS+OK>}MySB5j(-)%1%Q(BLC z>il!>J?BRkei53GMYo`zsg)>MqfPzFmlk3k&$YT{umT)eIb^@Y@x|xZ@S6pa9q7Pr zvDBm?zLYLDR`>T9V=lGCOFJ(#sneM2c2IlHqe}1fL-Ijyb`0V8siYX|imxew_@<)K zZ9+?GG>ksH1-V{6ocZF5RQhYJg;{`a`_qAShC0G|FONB|-{3h74aj9UOnAoAF^V*^ zO~!W78hQO&+N;{kHhg)f={2R^uM;4lm>N@f*+vMhz~#f{jdcLI{S=v>bWomx!_ta-bLj~J2cJ-A zZC`sN3C4+a$_?S4A~baQLy5-pZ)Q>me8dJZr3o*JFNf89RG;tLHPKEndoXy$c}ifp{YzCp!Rub zL{-Rom*ZXIXC(Bta<NS)tu;=Y^C8pYc%We-`Z3hJAA%e8v6>tgW(_CIFE4UK5Q|x2#eKnRx zJL@VLfxspMMg`@K(bf1wLe0P%j(E-*H zF3Bk~28}i#@6B~$@2vmisnMX^2T-mn1s-jiDW_K zbncgB1DVHoHGlZ$z#Qn=9$_nn7c1%)WC0wzT%;JIe5LbtDq$!d7}8*i26kN&&;HgH zF$;9%pX0zDIigi274Z1GAas`LZ{y6DeO_(;y#T17|7k`-cPU%IwT^$KRr|&At|c;u-_HAYbHEUOMyugmE}l=T|M0sE}1b!!E0p_LXz3H(&z7bZoZra za4=-xl+X*n&|?HuYl~({r-G3@5#C`gXQWj98%>pQNMII#n%{qtsAWwOy!|eP5$L^; z68pC3>qG4JL*c$P3Vx;ZWADC+m}Bigan466L+<*K&E%>0cjpl*oBvTCCC!6pz4r+q zjM-w^Z~j-Mz%mqx@w{%SfTomn*uw#jHrd9H9bYR@Ocl%gEcbD*))P2$smYWn!MwEi zSmbco{gPQii~zPC=wTVIa>hJ~(`%hJ2&%Xb^F4PEQN*FmP8UQD+$Jkv-$|D4xV0D2(0 zcg8PqLa>)t0b$fK17KI{n4Rs~de68U)ocCemj6OL4lAX+W}wI#Q%>|qSp>)>Zki#M z`Y$bt=os%TpfEehgPU+nwe6)EIeN+R3dJ}D|B`7`oafi}^pRjN{9HSb1$wDoFX~>8 zL*}?=EB7AS16q=Xyh%t z%hL|bwk5)g9mGy4?2RNY*hKHHVDYesPwU7$J*&o?+fzya4pfa1qc5vlh2cMU2~i^X z{?P4ViB|p0Dc(NIfaZ8Ei5QEwHJgR=QYd*-!!<$C@-!n2(j%XkheG_}ztMb1@OjHn z_2TaV6Ap)i>v0C=s39raYtj~2VcXC7r0h}gd~5NFxeva?nQ|IK-c6M5){1Yt|B}A5 zF%8qQ$qd_m7`RchRjvKR>)E1_o5Z(mHmq=^ku_+ZUQ1xkW1rcb@1{vaOnhPVA@5{M zYbVN)u(U<2feKsONjcB2fjw&!*dqI)Mku)gjE+atIc~tfGzDE;VFM;r5B)EE#xhr& zgj33Ali)EK3BWhOWP{A0U4v#mc-|;$z}Q|Rr4{D6R8Vt1KV>yj7}UW$F0OT+E7@G= zZN|=nT=k0Af>1r>F}6xOgSeWECpiaxJD#$|Q*^Eva_yC{Eg4Hl#VXdZ$PA|lL{X(f zO#}Ctrd~Uc)7+wfK+yfI;pngO&v*55sd!Hg>+YIO9I@^2_vgME==gwO;?SGAg2H6I z6x$PHYvz^{9-xeu(yzeY3qq;|?4m0PdcJ!%a24U4eY~y5U9Ag60o*v43U}{Ymt}pv zWS|}a5?H%&`#TyG>Ifv|5wO$GHI z4i2`HrQp@N!U*ir$L8GEL$277z%;_^1PKNc^&v2JReaA&$75(p!|aWkHFF-+u|;>% zFjea>=zVXl(OMwrcXIsZ{KZ8@JlkLSBgzujlGjK`Llsx$fbY4$U#^5hc0$0SpDxX(i<<=$GrGKd z#y9o1dXhQk<};JM`SL8QzuSGAFQ-!`Q~#0@=sqh(wnluCz2=OkU6f1pR*bUbKW*Z{ z8UgwV&o{vEQ8Y(~{E;={LYT(7RBdOR6nrU-z;i&k`yJA2tv^#%X5(27Rzxv4%CK(# z&m$It6r}@1K(gi4P%NP3W#3hWLV!C^h67Q)_zJs&1e9f&zW~TlKWpJzPv+(qD9Uu)op=lQ@^1nY0dBFI_2{JS04`f)nk| z761<-9Ol7QDObQs_N+m%JBB_fj&29U%*#4*a!@EDoLK5wK79;&`weA#ccf%ToY!ye z^oU~OqDS)X@Ltxd7p)t9+v=2PziM4uQ|&p1>i`RGaCEuKmCbka1AT!&i=85IWCZ~o zIe@VGm7NOh6DbmZUreq;LT3dyGkjLW-WwgdwkLR#(f%GSl3#V5CsiO`3Kh`|d{6LD z$>(9}e{SnaQ3nln;!6zc)Fgf{f4w+1hV*@r@!{0>7{GxZRHC@e#+M4SVH*ORMOt(l z;qmd#aw)`ibv^}C2k348!&y>v;hWGZOfXg6dr3z%$Wo~DssV^#9ocYv1QGAhlo>IA zbGDQIvKX)&qSSu)R50PhRxIlG4uQFQbj_CM3y$WEf2H9;fmttAK9o_2t=xZyA$7R21HxiYL9Kze&)Pq6nvdpdi_ zRC{S2$N9}NY_E5ZrtZ(T;HczN&?vm3JgwjV68s%RKfmv@2fPsNkrk zD(FTf0c2ocb>EFX$DT+E46}bYfY@4S+bRb}Py#S|=bx8~gS9yAp)~xvCi_oV`KcGT zy5P8bnfTCIz%d8U;5MB;UkoptmZx6NI!w3kY(9uj^rE2fNLb)}?;g>8dzgQ2vKzO9 zCx}3-#7BMrQzcUEelz|e#EvGem&cGIuxHo=U2~=yVG*C|mmv%N#qRrEfaMG?+5w1< zAv_EdNr_yAg}1~2i~O1=?kzGiO12;9~B*5O&E}UIW6|1#{44=P?}|8PX-pN8efLYdlHC(vw+;pcEKwKHIJbJ z&cEfbKLksAg4>RP{7iORe@I5w75owA{sTSv^JAj05)EIT)D!ZLiU0diN#Nis09t2} z!t%GJ{r3j&FHiIyGIG{WkNfAM_`blXQ##FLWX91ThrR#0$>7x~?NDcd zcGLVHI$1zu?P6~6(46d#Aiaf%8|8sLBe0Bj(#lMoE!9rtdu)Zlnbje;s(rL6L}~x8 zz>wSOFBI+j>THfZSdS5%1V*-&OQlh&pMZ}Ml*GZ!&!F^gNzfn@pD`BVpL9ylGP7Yn z=c3LyeT2ema7#^f=2U8<03>K3Kfpob^zaG;#8saEk6vs~G+1XTo~OU!`>}ZE0S#DK zDI5nlLzw|XPEaPJ;*LMJx$nx8q86Nd^&L3ra&#X_O0gF6P)mEmw;RV-4aN5xfqn zY~O&P;NI+;5j^tI8tDxYeAoc;x>nx1rn8@rCF>yOspPwF8<&0+-D4_2PkG+ck~ekz z$HH7nCtLF^1w14`&O2ypEnL@%A~QLw1-s+K>&PB;I8Wnn%w<~8@p(1yaogW zK)%B`*!v4`uy8igb(nPR%HVtDr^mX3z+kL=9V~1LWdx9-Ph7tD482i|vlL!F8W$Jm zxea0o##7^93H@VJ1ea9K*Yzk9Coo$htQmj2r*2cyQQRb@2N5ohwut-D`(qk-} z*w@bWgJYjmv$nQY)oLpEC&#|)2M_xLN~hD3>m=Yj*({T`MR49a0TK=aU1RpUs#QP% zL3vQgSV0LwPB1A>`+10vN;!odfV#BzEsS2!Z~Re$H+3WO?NtmkPyd40Rkks81#XGp+G_ z&b!lfdNxLo-GTN&#QL1N*{Sl$zUl1KiCUFKnh+V6;jA~Fw`!Kf&|pFjzKB2OkRw=x zoi684FMbUO&QFoUC=k}$(3Nw*isSt@uov{7%=1iAs$y0;L96xF+O=-Yrcm&4j@(Ev zm^Htgi>4bg5#`p{wV32XY>&IRN|2E?W=gbV?Q>QTGLl{kinu|;M-3)0|JzZ{dD4M9 z7c(v+f=8J88-!-H$jre16x#a2`5PH)N!L-dx#NC*cXQdS)MW&WOwXv8UQiNdw%=ES zkd`SG$v#Q`=r??lYsauV9#th2_I3klXoxoDFsdLR)BJjJKn$#m0%Ss{^L+8XBC~M} zmEOzl&dp@+Aj>mujTO<0P>Yl%Rk0g(J!8JhxENdVCii5?BpHj=dIHYp7(~3*ukOSI9{S3xr+@#nd3f0&vhr@2r^2I74h&=5m^8d zu$}LC%%H}H?F=}={_^z$th^iT@S*SH#daFb-QxCETjQ=cf8tz`k#>q2i_WwK{LRQ& ztpApaVWsnsH16Heb)>?F?*Wd$dOP{)7{QCezlBTFCKcT{zY$4g8N5lh8RkntR3xfK z@OrhY*Hliv$Tsz9QTn*_DAD&D=gv4D2v zvw#n0mh#ftrm)BrpnbI3e`J26fA_%0pY6apiot@saK+v3d2#$Zc3}?RO;x_Os`cF* zM!-w=8yVnst$Ke?TOT8QyhjKfnXCO&c%|z$&S&`k)4;Uw0_#R00b;#VG{PoO!nS35 zvlQz*U5rM(R>J0&a11yMdSKr*p|Ydr=MRG+{R2YzY_5<^7&E6ByYwN)sJW`0MnKCy$Ym6ay;(5T72JxKJf%F$q@G?CX`P}bIL}4|M>ly}1N3_M;8_otCKau3<1Xxz>~>?hMT|7zvS&eC>-BkR>7ohBm)uJ9`%l zW^a!`uFjSyEveiv6}AFOOld23?TWkGP<=wPTjH9tIT#EMu{903$nx1t)65;?|f0Z)bul1B2UEH43LI^nBZV)-Zx0ic7}jNffr+?e-&tbLRf6%7oP@sAWMS6Qjkq zZ3@73dP%WMZ8A~br$Sk>ZNTt@d5=&51vVX(`0}Kz9xkh_-%H(CD@(usj%~QEkHhFA zRz>^!=xHEF)lS!O*-@uz>8QgpRK;<&H5ORxWyCq9zeEq@+_-`sXj)$OG}6ArP3{8> zr=u(2%Hpc_Q|0vPoU4vQQYy>1dp8I-xK1r|rAAD-+97G=Sqm$cKpzS6oY$V}m*d_G znJTZ%tZeECeT!*aT`QY#6?T7KicZfofaa~wTkz8J_1bG980ozu0v6^(?{D48)W<%O zPjo4ePZSfpoG~&uFKtkc(tnELZ&~hHF1fbErS9^yjDjyVYR~bv^?VBt+SHDhZe?0j z_fR;p(?i=AEn;$)oZrOR0_16HE*F^C^ze_hWkF=*6Qzgc>2vT>w_`RJVSuTft`(5T z<3FI9XtRlaN-G-4!%3MY5;REqS1K%_&*j87P`mbVfxdEMH}k9CZ(hBdMMD;ae*Hf>i@)N66#acKS^$pv z-6JTiydbSY=kr=UtEO0iW6?rg-H25Y<*btSyUW9?uilJoBhN0{o6_nD#XcV&9Y57u#pT$zaWyV2Up9vzSKEAWr=k z}=2KisW|62tYf8+*T<2K>_Nyd9MT?bbZXmn?Qk$AVzS zta)B^XJ-Mw1#@l+`aCr1$?~x=IQFrHZ}tL|R9kM8oiC*X`nz^j;`sKMP|6nE+?T{s zz79IT9s@O_N775}P3Pjfv=nrAIF+bUk&er!3lMzGAUKeCOKL7-2!4*1oCMEz2~4vc zxq`b60iXvlrQ91=2IkG1Ns<+Hef8NO*BANNfPub}*1>zgyM9=O!ciexi_?)V=XP=0 zNF6jC<)=?wq5|0tX&VX)I*=+kIImz-k7vf18@*gxeJf;@6R0 zWRpY}W!IFlH-nB0At~40!T!-z_D2dg#~uuZqH1NFkm7Zv@T6W51+Ghkh6y3lqPx++ z(6jryYQ%-ImR5RW?hAQiTD8R=uW(z!Rm)kLkMk3O^Jk%n8dsu@qYNX(!-=@eXmFF{ zJCV;L8-p<1lcl~=oP`QW9C|zs5`=X_eVOSxA!+|==tMi<>{h(qq82YTRNf3wv!S`` z54jnL0FAmU2>no*YT_cvP%)#^we9TFECS#}7F{B+bB_$OzL+I95Rp)&z{4-riUaa2 z@5=(Q?mk~=qx_<}g(UHyBGT7v{sxPe`0(i@b;ibB=3I$R7oV#DPO3uA zi*Iu4Yq2K7I+cynK@|Jbr=U8-g2CpJ7bMA5vp09jj+BVad`w3CHj1XemZ9vfq%szP z*d|6%H*efKaiH|tNTdb@)@v(sz48tXGfwy(qj6_1;>NxwG?2B(5oS_E*}8c3#_R8L z;q#k&|9~2)AY|=z3=0-(Fk6a}Pq82TWkeud$18bUl90Eq@w0fGwmSndHpNva0 zSHOHh+OMugI*wq_?tzYz%lu?)>&FQkAO7XmZE~jmQS?jho3*lLW*{s=IExEQ=*E8S z3yezuIEh)P0a~%WnO9s8E%!`vMW(>Io>E#E)sgf?o_UEM^gF!h(^N7oPNNwZ;Z~OQ zf7YYb%AFAn_C9#|W_4>&Ps#Evfn5W3L%bJ3tiKFyuoAQ@nFN@*W;jd@UvV1?f{70O zGiCj~oagyM3CtufE5z@G?WINCg7@cN)(cNF%tD2sK@q~NFnMIPZET$zUAroY*MegP01n0iC z1nYWcMaJ}Lz%&-eq7#Gdx?}hu#gOfU=DUlvBS)G65NtA8?hNISH9Oi4aJ(6;(yqvi zfY8c}ixM7>;@rd|z}jNv%`9*((rYzE!{x1*fN=9C4YrlR8x<#J18N8cb%5i4bgXTzLe*?%! zNe!^2yKqr`7rc&E>!jke%@x3LTtdz($jX|{(WJm01?td;0}Y9~+za{oupnLtH;NCe zQ#-|guEGDL+^sr=yNqKATQ3v;&10oZCdsFQG9jw7Ax|5g9@zhMmv)%oe_@!4TG~pQ zHQhWp$H~jZ!JBv@$(Y;rrKjWGiuaeB3nnFqC@GD23yovR#>(9$l@XGg@|S&@B9Ij8 zz@AzPUW9!e?DjYcmC=J1q-hE!i32_uZu_hGQAL9j+>DceS6Mv&O^MMg7FvPyv>K?E zr`NJ{s$SkI>?rdC1(RnRfA!dit4idM0BArS7LPbywI#@QCsWQU0@&i=j3-;%GZ}_! zjlfWvb{tVvrjtpq1;7mV^QjOHb+Wj>S=gR;xktg~UAPLyLh`zm(oRAM&5}uNddy}S zjt*4P-u*sh)kh~vHJaz;fGG-$T>ip=QjT<5FG&)UVTd*hR4VYjp@M|x=p$X~Z);3~ z)gA^SlEV$DSz!~2J?BMN=J$P+;E6-fAU>@3mT5TfxNJV6XYH&RkbF>K3Z3+Tmh3^} zBb_K;?}HxY127~-^Al#<{G-?Z>@@gWjmEP^iCDYZKe0Nt>W2F~o&m2jL~@IaZPvr?LtQ)KmZA{(r^4RR@+=B0_bM?b&$INo6t8&XxlVH(NZe0RUC^~%)H(w8KtM(I@t!2sup zrc`ynl;@5i^YeyEj){7A!iCd7>41Zzn4Dhb&2Ddg5o|cCO{st%*opRJGt!XT^H}*b zHz019UL0GZ*|~9pAhxYP44S;cEp(Vld?TF{VNg40$Oyj^AD?@U=KY8lf)g}!r>)TR z46vdIXO{eW2C#7;Jj(}~86&l1JhbXB?3B4HuZMhLtKxpkOPG7>h?A6^=&TjEjd@vT zH><$B7e@w2g?DJK+7Byq&-7MU{${8LIxC-t<`O-eC$df8Co3bs(v}yp3VfMOWZmYK zdLmLGdJTEI$8|!ewA39`Eh^7I9Uo175@;eP|Fm4vp%}a|y4wHHt-Wx(qPs5L^@6}M zSbx3K>;IVt4~hVMzIYHfT3GMpS z!YnJXJGjha;H&ixhiCNh22Md(HKL?upQ8km0O6vos3K?9D5RcDWvI~eFtwPp8FVM& zn}|h4&%QHc>}KVOF+)ApOb)P-4lctI>34>*XIMPd*-R9Nq`PLpC>^Q=dSI#BhGfCs zy_0^&dS*a-8Pu{2--yo~y!YWV=>|FRvNTWiVqa%B>hg{rGTQ6q`7ho`#f5jP{vSOb z4dYV=Z82G8pMMt|^CeJ0MpVrnlonB7TWxvjd4kvU)ne1QRz`2?5kc8e*O>4cj>^zk z%V#=P0Oq!KcBKl{`Yy6c2m{$CV-+KLTb&!7Z;@)?oP+u**Syf_@kEL<7Ju|VNN1LG z@Yg-zj&Q~0|H67%bip%wMZwplRppuoBd=$ETG#>|9c3*&h>6NN`Mr0Aak5TWa}>P| zyXtXQfgrmy1|98HH~2js>tx_u?wN7JCBkbiV_;64En{c1#@P^3Nr^?MojXwTJ|G zuYp?tLqbv;O2mK@ZHq$H@u1UmPv;bCiux`^z!+v7I@74={jEIRu3k0rJu}YuemX`dcg~QHOvainGqIkyd?O;9mzOkO z<~uk-1Giqkld1HUhUob<`HzVmjjVgK$Me5}@x(6Aie*y3%s#zzqM>#k9!rMdD1W{t25*L@~KU6y0;0 z%VqfmxaA3@Fq(;!7B$Ryu8{!?=eRqKF9t&VBqfDIzca&}Fi=MqbRRC;vVF{%KyiQouSN)m z&yW)&N0q~|s=5JMDF>D@eb6ACNN~S4t%t(dXyW%T81Bjdk2D8_Qh?OK-UPshm?v3xg zJLSClsl|?WkzTEH10JkkCID5xKQP2sv5%xO-`TY{0ff_U*eqG_j`)!-?!;s`5~qP3 zHNf6JiEpwi#7~XtBW4gH{zjI)3=Tj1i@D`jG+6mzW4L3HS!&uF8b?SOhsPI zgMsho=;)ER&t>NFv%!)Ur$%e16l;5GMC)x?ev5v|R3f=wb+*)Fd~Dj4RmSpYMq!~d zdqvg@nt6G0$l=B29rnzal?@P}}QNz++F6Y1;a)fk`nYuH3dGnxsA(Dn_Ynet| z^KB^eg6-7YGK0@gG?W_~EDyg)aik*Hf$Z~hV)E*6a|Sj!y}HySLd9HGCk?B?@UK_Y$p zi?-+)sNDfzKQ)dt+kqBrf|NXV#x197J>4$Y@#uS$H~W5D@EU6l7e;xVYS_>|vC z(AbV||F_?I)6agM&(^ACn=}|~+i0X!`M|`5yy7SnQ2B9Z zPBOwjaPuxyVYf`B)IjyUUP<-KNhOW9cdqVI{A)z28Qkz;XwGjhP##OxOQIEOdu554 z@Q~iM40hbvdfxXtji(j_qSL%GF#wxCUttC-JS1<6gB{$X!uc7a9YtR!S?_90IKwnI z_C0tHvY*`AAk?lCmAIL0nP_3&Ou)IVd0d#G8OVIc@RoHJD}h6%Cl)qo*B&1!M{GZ8 zWWakcKnJtv&-aTlEtp$IjBi8@;1N#&6^@Tec))!2{dq z8x1$#Db$OX{-;Cwx0I?E5p5d-;fTki_faB!{DxVG=ul|P{!l=j@26uYQ|yk$nzi@P zPn{UTaus~*Tq`&~aTBrG(G7rkt_Y91KxGfi9C-y$_svTuh}sTM+{)E1v>CCSqIP{C zbn(xW?VrV)%O9X|#&fGjW|4bOo)@O;Q=UG-6wDj$?L|qnt2TbPBxPwZS$q`)(ik(n z!9a74Fhe|h9FgoIQ}r+H&wq?6(E2TUONn&)jM_t(3^ly1%xO3rI!HV#Dmw*{TVxk8 zJu!U8G5k96UsGPcrI?prLqFJKt-??=hh^b_6~{HdjUrn7jzQWlWn2^2%B)99o3!$= z@X(qpy_^5SQ0GyWS_1S&$m4x?Ng)x|w2^hONLRDS!;MHv+e^o{+Sac3@h0Fy{}xY8@f_A7k~n5m_+#rO-Z`^fSSnGQD^Jpt#LOa zr*dK=yOgFfoR~9tmzR%(XSm0IiTB|N{|>G3i08+Qcqktj4`5#^Tn{PO3fZ11b8C%y z$u^`L{_4)$cqsM8y}SR>y%Dg>gt6)0%>E%deH+lYPjdl49RE#e3DJby-pk}BG1p|* zrob5FjHksUp*o)nA$~yAu=9ATKn3@&bs>Kc>p$Ot_$6LmU}4~fp$E6-$RJt=k0sTl z0^#uTu9NTcZfMkCa<}0Pey*}#mlA2h9POT9k*nRboLq@H0hgmdR0FXurdQqwEXVXB^Z^_4t>&;7|j%$9kR7ujPW7 z(VB}ffU3L!^dkl}ks?9&=PUlR`aTLTB{|Z?C%;?QWeOSx>242o0gwBcBP*Wt3yGg_&~mpvs-~d_P*ytA z7eJPcKL>y5bziKq`xlFTt{RXW1bK9^q8!@yrJY|{rAd|9su$V4JGnks<#ON3s?5mi z!pTzZ+$e^{-5Z1AkeJeA`&ZfP`q(1aXOCw}+LaK=BW){~CIuuwPa+NrCK0ckoVEe) zXY#aVCMK^UFsLP|UA;U1ItU1~zy=d~)>DA_TA$ewCz&m*ZM({tzQ<298T|->(bH*m z>B-Ti9#r9lG4TI9tQ7Wc2V9%JbwBvmq%64il270#K;qpu19mSKbu_gHz!>R(mV|7O zEsS4htL4n91+?&m2_FX=l}UK7gJW&8^=ABq&T3zwU8-tdMg22b{~+XJj#=-s4UGr^ zd-v6Vl_j*iyvCZdB5i{o`sE%?@WX0y-R~gjSD7^FeuYBH(#Hp(T~}SvFtTBmHXgy8 zMDNjf&U~4-0LrdzV^Z@a@#cYzw+}gg`MjDVROAan2bCVaM>mSfxFz1@G2AfQ)CgVZ zJmd4+b<<6NYZtkgcpbj{7-bEX^$ba73tj%F75LAw9#S6~16au@E^}+Dwr!NrcxsI} z`U?$}?Gs$1;#-re$-<9RExW%lHmQbOuo*|xJlO@DB(G8Z+3Ww`+9g}e%dfgZm%D(Z zJ1lY%@0HynLwM* zU&r+VZ$@pO4yff7BKmXoEEhS*+)`ew*ci`kv(#n7)9P(ak@GX8gAx+-Ys3x=4j4yI z>qws}nPU0+761gLJ5IOaFd?(Bel?}r&p~Ft_iGK3{md)wC+g*`dh4#s4Px0tAcvtES^B1=tm909MtLUXS3}qVNqBHJsvnMyTOCJg;`@SyK$w~ zUEzzB&Y>>K#+pdz0T591wegu3(J4t^xdD&bdSMU20r6mbY zEKfr0&MO=}VaxOLxBlhO_-$m-i0-4xMBmXzs*36~k-MnZ(9x2SI4&Uz7s+I6eL`(o|_LK)sPd$m^4a>##WY&Tr? zcq{JFItv12XU%gml7Oe|Xib;67JxO;F)kcOebQt7)z;!bpJnfC=M(n5iW8#z1q&l1gb>B?1#VPil%#1VGK!B8+G38_WQ!f5)*x^WjLKA_w z=D@`aH0E(nsq~D>0o45UbTgYbZb?lx+w3yN=-}8$2lf1XNOkzsM5Z#+=;Y+&H=7%= zfq%{n#7C>e9jn78{tb#w2No5qY7-x|dfMY=f!M{i*ZIWZ`ZTloIqPnZ z3JZf!Dt+pWt5y$fWTsWuu)5!xv`HDonv(u1;eVe#5}zo2V8udXP2+4jLG)p0S9TDX&yR)KKK zb?C!`6U3UFbhY{Sv`7wBI~j`X=Mb8Uc|Q{51}NYxPdyQ{5$?z5<7Lx9uy+gNbsxz5 zp~bw)p3SPFW)!A$=SepxW_bB zEq#jzb|{aIK1rdovzD2fpnqGJV#ioEvt8ri~{N~Yt<-o7p2XJB4N-UA*Ip$IW z!%rTQeW(1~1+>V`UUi?I!W1DV5J5zz7TNja_Ah{1&K)CRmcGf!S`gDh^Q=k!=bHMN zlqMlRG<|hiOL{R!KC*>ZuQDtLYc+f2=cQi?ezhVTcl~Hu8#(yoaoeI1>E{=EQNI17#B9{Nd!kyr8{*y+n&%k zlN#+?>wd9H3ernDC)F@fXt79%QWw{WB9LdLjhdlh-T){l#?bkn=zz*z@ zyr+Wpi(TjsY#?leru3>=PO50;h2-$nJ%r*KIJ$@2XP{MGrXYv;M5gWqG8Nl_iRCv0 zyVjbp)OIr#U>b8U9-cYO_kQi)5RR7bLzJ6KK&S~`-Ez*{5zE@&a4h84@b=?`4xJA^ zF&8qQd_q$k4UwTrJVr-KX4p0hMvmIHMnXLt`adqQ2fJGLH+=_N_e;!rhts~%i`r-| zc~1*3H_56~|5}I$9MnK2FmI|C!z;I)DUf#^E;K9@#nXCgXayW+BqG2bKi9+cJ1*PE zn9Iwv@^={i%8Gy6r~f~H=-_JD)m#|Nu=$0L`xoi+vLiAPcvioqb~d+JlSqR6Uym&7 zdDXc#=JKl=y4Z9cJy^=%my$kpU-4a8KYFmz$!~Ll?LSyqTn zOFy)7O7Cyj?SF}Uz<_Dy#A)wJR>s6ZK10n!g1#dO*d0eRU!tOl+P|ug^Vs>w{Fl+K zJJh(UauG&S`@+@{;9xOUgI8mIcy<4;8F-yJ&vyeBc`0$arS|AE9tTH+1o zcXuTX>`Gdhns&^uA2kui?few@=5Hz_td<^%v@9%}psTksb6H?Egn)NU)+x}!E2fB5 z{^^GbbHJCLc2BAEorBHtznXvOvL>2F3FB(z1LCZChjl(kY;_u_fK=8Ha&|&DRpU%r}4cJK&;D=(-tXz4W}ZyWz7K+#o7MsFHihs zE5Y$H2pPm_JPta?($Qa;g+eb6SF3|vH5Tb$%2a)B80tg`*`a~U-MmBd52ot4+VH-) z_=`Fh$kJ*QP`VSu+0w*2z>?+!VKznY2+?zV8spr?f)y<*G0(yO$K$_qEK8wh|4Lv_ zZ{`5q$yR_RtC6V5S#|F%K-Hk`s`UF>JUDFwmuU4p75Qz%9~%3=hVoLO?rQ@S`M|tF zsN`hgo#?iDtmWFhh6+SUnH*B1ck(B)tp z=~q;-Gb=~WIv2Oo_HM#6jJ%}(ravS*ESyIwBSQjqN z>WZz%-vgvyG4BD+yE1oa;ZXC<)?0HpQhx`0uh#bjR5K@RAtb+hgkCrG>cnbSi-)&? zM8W>E)5SAeDqei#_Z2jDOtlRV2fmMek*cA=v4uF)^9%oHbNZU0Z-B_pffHX>{!2Bz z&2B&+%q`H;Qe%nVV^EW-?dAC(k4}6<|BAljw0#{Vv`Mif0RBAl$<__*wp~jwuyr8z z6X-l}Ss!CGc>8Qkd5+i9j!T38pZZlz3SxlAo5Cy1<_Uid)h&N_-bidV+%oIs3p^9^ zkidM!?LL~BU@)Ysth87E%;`1d0HIp=SAf^w=;j6D#dfFCw-=_EB_%W6seN_KobNr; z$%U-I;gd?K!0C`zn)-#f!Mh2;*uE$n=m4^mSuur8uC>OlPEMJE($P#3?c~T)Vfd@{RZgmBky{{{K`j;R7-vHSZkjA#vs&FKHLS zwsJkN>dnyWz2O4F{1MqbVdeO?;M@>;IiA0eZ96+v1%XmxnEv(=*fkm$cbFxxsYsar1SMrZeP^sJ zVFk+hHB9DT*AJ$I>B!qm8eba==m=?jYd&yq$6LuzyewoeCF(Sg+2y+g;=pDqFZgL4 zkz^eF``gv-K!+kKxG^Jbh*->8*1ez9JfAZ*qU|eqimtChD`z!n8}68;$MPKyA*+_MA#?TmZM8QNRe^cAVfqXY6AaR|}?pWiN2w;YDCOWMb0c zl9i#2lw0;FE|)evbRg4Y23om2xnG=7i>F2}8k75f;_=u2c_s6NwZ8*#{zw2_Su7>? zsIB$c;(phdS$gm7{DsrTJr`o6oD@t?=#RInJ%a`*ftZi;al1^FQwk3 zt#d5EsQHk5o+Z*#XidHCxc$sv>S=@c-}>IvenKyvSsFt1@`&eXLT=*^#q4IX5r!n}70Ou!PpQWxJ(pJQ}kD!0E zZ2z}CoGA_A->e&f(=7`vXBW$M|q~@oNQ(z=M&UzB&P9m5)nUR~X4JmIk(C zk}{LpR@+jN7vKrK zN<_fTLPJH}$wL$1nf);QlDhmoyOs6~5Hf+!x#kpccqmXYRx_c;x6#3$a;vAOr>n=! zc`F8!9Je%A{f3}2k)Awk3(6t~Z+_s^IyrbPh}qgBjgD?z>l-0C4&>J#uL3qTLk@|< zFAp#XSITstz-Qx7veOw7#)e$KF(K%UwM`&axQhdW|LTLRA>eERoTt5yXY`k+4#fiW zadNmsOrd8p7pSPba0onq^?^H6WEWgwdec|D3nX=u12x2T35Ig@#GcO~%Mnp`JyL<1 z6ULV9|MBk0k8tbYS4R?Y$Dz@HjhmpW(Q+xV(In^Io}hJcKMdy#g>OU1M+jxX`Q^u3 zO@pl~-i89Gs11$=TyBgj&o;gGX#7Y+=~;M-cc>qCA3+>g(8G0P;BauzC;jWyc&=UI zyg}X)Qu-bMtATfB9BpF)L)VXQdHi^?SK_cFWc(=gO>G~bk7;@4@;~O2Eayq3!;Xyv zV)Rq)VUB7OCi4ZaQZ^iaH>GR{;%fPS+(3 zZk6X@VwG?VdRpMZL*S6^4?UvaSh8X*$>%4;VRdd6;~=~Qyw4C2KqCX*P^wk6!7ICQFWIClLs;`iQCP^3;GneHY@^IfUFj}9#ixmI0 z1VhNTZJ>^hjg^l~cT)0j?n20cx>K*^^f6|M22^!Gi3*S5k7P`!K;5x~wobo1t*q$( z-e-2`<7n^FO9_+ML^7Y_&{pWLW&bywAn~q2j@hon?A7&VCILnz-2cbV|EWmyQs9oy zu-GN0QGw##wGqIh8^!m;b)(t#5Lk1KMB{J0Elf?DJZKH2@czq2jU9LnlTtoT5Qr8BUS$5rtM`Zirj!Mj@BzM5}p#O8mI1pzJwU1P0 zb%Q{e6@M477~Z9SWLtmWoV)P^(q`HBL}Oudp!N8FXzufAG_VmK*HwJi0cJ|JX{5Ga zDCjkGq#x1NO3o^*iD_O!56LmL!y^BfNdFwZlsSR!bghXanp@Z4uticYSBa{fqymaA(C}7nPM0@Bx|B)vb6t z65i9;H9*|}fzJ5iI548`Opyx=Zvc(Y?~PO?TqgX@gm}hMW^-}7xQ+_13tJ189L5J8 zNx7%g*Y|WjeTM#BJmD~Pjee=|op!}e1B3FH3w|UC^?;3PfQtVE8yAs32`S+Rx0gAy za_7@t#{HVhp&JO~y%T}fP60$Y?bY=tAMDmGGF*1(Zxf##hS7cIo~GMXZ5E$8oEwrV zr9jrFb>%Mwe*IlX!Q}|%7Z)Xu)`=t8Rp>>BwUe_=b{bEeJTMkAGBR>#IoHn?IW}+Loeh0vEZ9@@y@&-vt3einLSRI z-D;caFhyVY&neenMR<*!eM%S+u6L+C-x|87Uu!P!=9V^cwXx|>%1Zd)ydg9|bf(Os z8^m!7N^?$lh&D4z!IU6 zWptkd++CadEF9uy)3v@tUuPEQOlGbu-McqsZh4ve|I9llL7&}MUbfSY$KLLNwi*x5 zM99`cq*R}IJ4;K@7En+>d`<8>D@-YQE(N7@UAc}(5dVm9Uhkfg(9|RST~)k|f!min zYul1pBSCw>UG%G?i8=4q@;?vY;O8Hs~j)o0;|^g{t6!MXV=RL zUjMOLiNJ=vUVe>m^hQ!gN5|ofiyuk;*ilbfisPN=ta)$GO&?!yGu9ewr$XOSu>Yx$ z^`ha+BjO8%c3g-bV~=*7MaQ60bf-tcz;Z@*l{Q>8hacW%hD+H z=MWO1o`?QZc8n~io%mEbUUlDEwnHUDFPOr9XAK)Uqt>8jyV`daP{{+KdxjQ!BsSZ+ zn<%>@*+DYu|BPoxjqX<#Xjv+PiRi z?IQ*4zOyWK;#+s%4g22nK>A<(TKc;tXh$&3gD7j&{*vGfF0`IL}$+iqXi{u*UN zrWe9KE9ZIM?`!IVKxYuBk>obSd|hjKVWso5(!{h^F&M9-a3{Z0{Xu`E93fScoP3&B zI&Qj$8`%KyC;>;N9V=QJQw<(@|h$x(AQXpRg(Y7U6Rll39-<+4z7|pwBkXQ zq2->n!NGtah>iTJ^L_nc^@BTqh{k0IPy$I`RgDvRF|q5Ksanp7iNlZOo=$koVL*gg z|3GF~WxEuAx~5u4evyR94>|z(!xU~aK^MkWa&;1MBF$fcsU|n1b?Db!1jW!v-JIn6 z-{k9DH@7Ra@_ne7{%#YYhNu+ky+MeX z^hsf9BLbT=aNuE$A-s5oqTGU3|6%yZmrbEVcyH{^fTimr#3;$GQ&7T)mo>NjPOIM} zRx3c&E=mT|%joF!HUlu=q(1p*ddRL%*4|RYA^Sv!(`(imXp3gtUQ%4#467jO}_DrLpL8-@sa&E%r zMdw0Sm7C9g-?;5-Q01~Aa4RMQCLWy4ByLiuNVS}z+VK0F9)kU`KFPUzDBd$TqW*_x z11nJkha@qRIBhbmrRBS(rpAVbQTwG!JUn=8-r6qfQ!P#K271CKEXGF<$a;L1uNerx zg-q?%#C#hl%V?f{f6@NJZ`Oa3lKRTLoHA8P6SIlAjLr*7lEuKxY z%tph$)HL$ginEhIla=9y+BN7^10~V-GqoQ>JkHyzQIs`IYjz|yWYAr?06|8)D1 zb+G;cL3ZVjyF2lx;4N(j?d68?_v9U1`Mv(|aLyMf28*YszjlV`mUi#SLx0*CIdM7w zX4iD05G8~S!kDW!Tsi2s6@{pUGlZ)j2EVuO~#?h{%KX+f?WaKx6gd?y(Pgvj{seXq)aQAj~TQb(r z9b4yDNtmyUQ|B@c4HGEGZwXfP_T+^|X7iRae$85G0NRAtZT8l|h^d zy)Zypd&`jGB7y73b!SMDH~fhF7_Eq{e=xbe^1Rv^;=E6ghckuCqz&r0SFBK3_W@wD zy0~TQ>ZQXfq}O2+g1eC9ji|U_m57JeB#cEC(sy_%=rNzr^^46sgkc=L>+3&iYsJ7b zF&H2sP&=4j+LS%;LR9qI#o1^wa!?pHm5^6CWD0;39kCXO@Xv)sPwhLBFcRnboy#=? zuz34-@woSP6w_)`Zowa(_=KguX3xOLzf2a_;51-$dN}n1|D2ozVT4FNj@k`T(_>xe zOn!ndt8#U(%)9VvF$h8$o6}nLbRcRa4zPQq<2I;wcKFNr5v)#yt3E|^geIw>0%@pqgK>!TznJ$ES{-@h+#XYa%Nht?>p z?KB;n$t&9*i3Dq9E)}zvx{{k4v3epDo<3p0hfcwfnU(MY0C5w;jqMt6Yfx}hW<$&n z%huJ?`}r$+dMc8eD^PJe6O{%@Z_M;OJR_we$lk-a`UZsJxd$kA(fNSlsKx<5omG(l z6}q;o@giRKkyi;gcRny}lVDgAz_9@I;`bG^ZyTKd(a*qgUd zd>$%K2R$~AWki&59?#W01hS$MD6ZNzTkunH*RM>5r;3ul3d6ax!8#)O`t_UnE@?i# zitI0A7H6ouDAi$V4K*W$g%=E(xA1KtpFuX9Jt%wpaQ3BC8diG35r;a@&JG8u0JpgoDEb%!szgb!q#6kERbT1VnwVYkY8UTGZUE zu|2lDUAo*OKA$wwXw@XXRb$l^Ur3UcajJyLx=8EzM#a?OuDY5`gVk;@&g2fhl}!19 zNxA}B`m8`nr-P2}Q^6%7(aM&@n?(Fqkt6h$R^0`z0f86ayg5+e0RsH+@RZf%mCO42 zJe!LQ_SK$!W|_?dmCvfS;l?*59RID2*7akIZRjo*EEmP&l&m~nYj&^7ymz-jT6Su` z+<5deEGXmNkPYj>DpS~5emA6)3%P3Lg0Eip>^31(@;-}nSlun(pJdx+$qTqQTp`>c z{HJznoxReieXyh1ezw62{r3LZa_YppPH#_Rm^tB0P9&yQTsa;vv8j%7t6C9>T*)(` zdU89Im}IVqujN)(_PPC3fgSt7_|V*$b0tbocWLD3dwU-81fOMG-92r5C-^k(snSWT zz?&6F-iKSOL{e5C#Fd$h9qpkEt+Z585rxT7^Xk41GgbcJ@sUIH;GkZyaOEAri_D;4 zMG{`#S6)M(C9eQp{1?l!uaxG6_k+Ow8o=CH@`4Z3oX^&hOzUsiXd5@pgATMr z5Kgb~E5Zr^h+(qDd-{wpv^A5dS>~%p+Qoi)ySK??-mO&L@LDv*PFCHI{DiGcPfyzw z0Bdo39%D16?d(?DXvy^hJw%0GjUKNRtKwa_05wqYoIJLzT?jgFe z|E&25Xap148(v8A0egnwy{bTW=Hg8CO+{vVK`V2m%Ez+_iA-d4-kxkQ&TF=hGcM8GCP9>v9IF)>DSMbig|1W`Gj8&sq&;pK#b1b>W7KQMwR(f(RsAu@E4 zd)}wec*};%_&t`M+0m=-p;g2V?zzI>e$AQ_>+=J#@J4x(LU}g%kPyp#0lFF>mTtqy z;CXuxb2@cJw1pJ9smvlOYTGd%r`SqjF)7}=NFOO(Y<`l&)*5`kDCHK_2-}|X7oT+9 zy(~%KLgU5n^kLdVi5S~Fgf$&Qc)u==YN2tIya$1|5cwMJlP1Hsv3-WKbakQEO(&IM=5uu_ zv5~R5X1qNUH@J8x#}i&2ej{2a_ZuBms$-%MtXUcUDFEu`5OOeyQ4zE(g9esL3P10m z)NV_SWX9k1RlciwjyB`_JtP-;vMzlh80_1!coJR+GOABjW#>?Kz{uaM` zv-KjR9YJn+SanrBh!7?b57*b9k|C24dC_&;;1xT#`O#!6_>ITn%qD}dpAybDzu>S0 zoJ^%S*$^Lzcye}p=;mD(5!olVXVNj9w3q}FM9HFb&$4*W?RJ$kjpvrPU=Pc2s;Fm^ z@e)PS{PS@n-QFCzkl$1QJx5)bONeTv0oEVoSbqm?I2K1Z?2SrGXMaX$r8xZ#M!E)A zL*$r|F(NQwX^140>FAckYaszXPU8XY?J; z1N1Af+dj`u-|0d{vF(??Cj=hXy>bYb6#mq1`@rDs7pXQpKRO*Vb&+7FtP?60&mH`aQA=RfP> zYPUhuj|HO7@)mu_i8w-|*@my-;W~wW@7sOgs+27JXQ~pzX_$n`*AU$UaDHpOHRI7Kz1H6Z(M5_NnWssOF3%> z`g49n^-@`)4xYJVgoepzPerGnjPw*C#Ry98dTI@aeM?!+z7aWXpr`&aN^vKuf@9YC zdDV{qhmUcO9zX~>~PigCniYz%d+$ynRlC-ABeb zquh4E%Bse}beZ8iQ6UzIlk$f7)Yb61M#8I#ve}vHYc;nHorZB~&+wWbHdG=o__=1$@W+i^$=ve1G!`HRWQ5@$d+&H^n!^%94yO&NWJ$vk>Of(>(vvVUKy;laRGlfjvU#Hm)pypvj30Z=P76&4TOvx)FX~dCUXE9lBe&)fQwJN~0$vRvPo4b?9> zmo6+MKTbL(w=xf^4p6PpAm5e?&Ydy}YNheYbYVRqqQCUEGs44eg%WW;6T{p`bzw{! zOF5yws9XKGD(!%)7&@Ok^sYUTv>9_ljJUYKf-6;CxOqJOX2-cjWJ4z=j=YV*_$~b;rLO8Ib?f!wV8beHSeu~QLhN!z+bmBaP%x`*9(L*v- z7n2cwfgwM*;H)0!rnJG4a9i1Ja%PnIl=}+bYMOVcq3$(rtqzpt$E3KX2m0fm@g>W7 zYc`XdW5b1oi6|(zu4P5~Fz%M}k4)6u>vgVHJ!v4?P3TFXZB@!CANE8LR(5{#d+qJX zK|UL-x5<+~-OLVnG;`G~zeq};(`76#Sy}Jw&Wi2dinnK;&$!<{vyQjY+P;Ar)SDy@ z6M8rsoa~8bzx@)5)?__V2sE|1-V-V60WwV#<@0NX(P;g*0YC6K7|NbpH8*+;_GZXv z3}m?+k~FQK`|+BZnzcJEZ!B3hQc$q?Cn>EMK|Y7 zQ?^bGZa)Jred5J2Woy)T=3VZ2I;+Dn+YJ*Cd{>rx`_i-pUOmYIqL!<+aHtr;zAHF3 zW9s)f@(_A^ne_dI5(`{y&E@V2JbQdFOtprhmE;luMRoX_e(ov-WZRNyVk|MK34a3` zF;ah2ASLE=*Wp05`mOBS7jAmVdPdGV8C!mSFB9Y99_v_NVAP5tMzce-aI_J#H>Jq8 z37~pAt+j{HleH%ukv{c#c}mTJ6X>w=U12$3pkLyUA6j@saP#B4rAxDxzFn!@0q$?I zAH3w4Ii;Ta{JbW51D>%IlE{5=5VlctG4F<^qh?$MF$0F^?WSN*oFkjp`1tsPz|BYR z0f*am^H1b^4eumseB z>@HIixLknLbNOh$Y_fV&Vn058vSK#MqYEnGFCXi=gU1!|E@^`fVSy5Io|>Am{%TiR z(SU;ME;L=eDnV8FKIo@wex_#+h^^UGZWx6(=o7r0DDT$6WJORo2Zirr@cqfad2d?0cK2}4gsus%gqNU3st`Y=Y5$w@tF-l~a4S~fc_#$zVVNQGTfPC7v z%C7i_ZM%h(Yi}Q6Y(H#wM!98fXvngj@{leFKehK2XQ83{$j7S#(fI+@zTLnADEUfopLY_M-@_wDbJK%tH;oL62f+n<6Iysmecd>v=5>7YV&c1e!r) zJ!E{mnlz~AYi4bOD6yMQ!w_NcvwO{?sV=@@h{CWt@P{?Beflp?NWbfI#+Zas+nEuY zaO6+(3dz3DKb9@R_p;x9n|%Q)sp5I~eaVD4RMJEp`+^klk_RyE<~fXWP`$#w!jtad z>YrC1^-MqK2}B1Uk31iTY^s-`Af}PDjjZ+e zt9*pK2;H~}SFw9282bJpTTY@IHY#>U>E4#J>o`RTMF`H|j^&K5*qzH`co)Bu>b@Z)5OV7^{qofCS{*Al+>TU`mj95++H&;tko!uMz!1J0G0c)X~t}yjV+<4Av+_X9z z!7RJZQ9rhl8 z0MKAt&C_a!mB{1Q_|RU7y{_GbPU+)WpT>Jl!^Jz5dqqI&bmO5wGgnHd;iSl3M!Ri$ z{ONZ0brC+ltK{IRaOs@~R9|0OEjE9p(U&}_+z>k)cd~!;GBC+oiCXAojdoW1YNS3y zq6IvORha!o<~%w8*rMDk(*X^FS!dgml6%|Q3{1;E?T_AzXJfO&jluh=uO8faH9I?y z)$721MW#TlT)u6YKOOVv;p&T{gs(l$$ZrR(#9W9={kBvc6@)DTJq*%ls23^a=mDWL zA|`rQ`s=dd+nRJtsIb%IT&U!kA-8iI(M=Twvfz$&(ubh-EQa>Ude$u2ogTVu+zTd^ zhAp3mzL5mmA1XSqT_f2`^u}9Xa;VjwshE1#TDvbV`0dMySp+S&L=p-KuTWkR@bUhk z9-;VAWjgK$in18h&CXbk$7w1jLOQ-kP7$uBJ2BfXI{J7?wgc#h=80Q81L4YT#!DSL zV~!-*z#E%37h*^1_d@)Y`1s0P1ER))$E$Vht zZhY>#^;*lIKzHJEzElPNq7RsLW`hO9<`C$GOUEAoeP?uh-|MrdAFbq3zO@M{ae?$R zX>EitxX+$vRG&h5wCi800?ZP}PVzw3OfN~jJnOM8v((L(H}f$lS+U%mXKrP^`QL zMiTcuLs8{JDJRd7aAv;Md%5?%3-ytUCa>TIC>fxi4!;ZB&mmoJHj^Z3V?o~YJp39? zpSZnk67hA#Sw$sZk9BLg1Cc=I(Ml|CiWjE(C4KZVWh5^i9w%49(yWih!qb&Ojo{#5 z@VWx`)tsz{O6>9{ZQ%{a$3JQ%jPH8Q-dbt!@+_%hO@2pE|X?@z1L5ok72HnO zY@DHcl1w0ww3q%&PR0tQ%(_Y2X@du{nXSRSVa8;4#arU!%j!_Y7zra)AnOGteMyns z)0fRpmlzum!QnUEv5xmiHke}vD4)3SavBq}_jBps-k2<_{g;vu_jQDADL^m(aFy3& zk~<3Ja}&}tqgLt=1J}y@^85-v-pTa^y^Fh68{2Y3ySbk+k_D$K3E$XdopXAT44?@5L^Eb3+2o^Yt!n6PfI(#rO6PQzF#kd(#+B5)JRC6hxU=(Sp7uSv$}suyh4obqRCV=R@NVyPrU7s89y`@Yxi@4QZ5b;r zpRv6*T6%ilb#3bukHXh)mqz2>DqHdS)@leUoX>Fv4=h~48d%dzRwsvCCc3ohO`oTl z28;~&r}su6hug`))w%27r5O;KJ9PrJ_AiR~R+Ob?B@i{SvkuxW$I8w7a3l{QcvmqP z8>=pSl8ci;N7y2K$8Ft@f6T7MVZmNb&PxE7BW|D82oO41(6U%Ifc>T zMVlqkdI$tEapD4|0zlJGxLt&Jd0-~Bg87bGvh<1eWj{l)&lx1>K&WZ5JX+!hFX%Tt zumq{GJ?vt+_xW@6=%|Cv8K3;wFe-@_kdJY`U$>Pf)}sT-%eoOAM$IB7_9>enM6_mg z%+}mI%ne(6{6n#*=z)^bVQo)nw-_ zIpWURUC+BHv!9}S&__N%eK~%=+f~(n>R?r_#NZ83b%avwxvS(~(6Bz|zI#}QzQ$Ox z4DfAYH3QJ_fQQjoV6+q zc>^2C=DRFXOTBCH@j=N>r><|M7+T$TnrW}mN&^_;oE+igtdmZ&c@ngAcPs870?3JMP}@_w%K+Wvi)NB?C(|mr|T&{CdH3RDa?S za~^iR)w^HJhoYcQjImtK*?cDFfs*3=sW5k^G6#BS>=|iIwSX^SyD_W!->w zFZc)rCpR~p#UigGj&nv-JCKhkq@)8J`;?Vp1`~=;3x+h8hsP;NIwC|B5ANivYJ6P2@xJ#SW+r5cp3G9& zZ=*#Pj5o9rC}=V}JMzl8JjHVWan^BX8_Fyt9HFOH1kDe+!^2m;e%*2ST%ZM4^Hjl* zFFS~VO2g)*f@wi6wYysh-YYbaiA5 zO1y76H?f1b-y^)@M;aeZrApu<6~wd&b#z^&F~0_uYj1|PMpZ6-k$Olzr&_l6D|LK= zBtlX|FWUEP2Ni$7r`~d$tZ~2?F{t$IlP8{1)Tgf#R-AuGRa;kA?az?#VYGDBrkStL zg()ew(T7B^Z5;r?1w%B?$%z_ptpIGBmzBG(pCMX;#2M-0r5-$7Gutxm=^)vO4|w&c z%gm5e-EZIR(jiwd;mP46V%mOmZlOwUI~i3l0foPi$>qoUS58YZS8H278Xa}|2P-^W zV_Tl9>`grlQn0?n$wi};PachEpFquDle0TEu3Ma0-_Ck)!cmvRwXM&4kh|a80>7fD zXH-txFrROJ$rsoB0|8u?B%Y-N`rbaJ%X+*aHl|dbnEE_zf|P+BX9q4IRsv7bzd{Sa z0-{)UgpsNc=SUsjfpH(U;Lc<^V0L4-Nn_R2R5Lf?*AfqM}Mq8G+59yh}cc8efIN&2UcLO zg&rCdwV44D^iB*bZI+xl8sm2Pdk017j9{<6;TP5TEB*NRAi^@=;YCVOwl2wcr`$2C z>9d7-WJ3Gvr)KMZqpw@BcACN5Ng^yULZlNh(-8}?yq2l4Drm^Pz@JT4*lDqr(V&mpaHUuZR?IVUkL@`mvOmD+PE zO(Te;dlV~?)pz2%!kvbZfmTuM5GzjVY_f&UeY53`1)AJBCh<#+L%{&U`bny= z{kne-tm4-l-|BV?g%k^372bo2`&$9f(u3vF%w(JfQG(Ap>|FQ&d9w8J?^~9ZjoN?KnzqjOq$#14fGsTw|_Hk^j6^`T9BT;s+qjz;luBDxw;Tk-6U?aNEXKb{3vG_$@H&7k;gk7`|yi9}xH^^WD~ z{-e{et}njE@%Bl_o>Kh>^4vkAw7oFFnwn}EfTtxOtL-)&uO5x58+DJtakxRn(>+Ib#ncTkU`%Cs*@?hMX)ixerXxn zjt2PMw3$D#EVYt`@4N`d&Bgn(F{RqrIDIMgGzq!@jUZFv!n%3AT@w>B1cCw)kwWrV z9>hkI?JHDXhFM0kIK=oVmqbx=j_t>pF9xa@FfV~C^zxIOY*58=ZF*YsHc(#P=m#5U zN&4a7h2`?z{SdOCcTVXcRT$SY@uyM=1f97&pu0bA&41^rM|1{6?F89wB!2piUIk7L zV2E_P3Ztt%w$x;~TP?X5#WI(gonJIhn`v@G?8^j9(QE2-hTd+5>v-8MeR=^n|E%8*5uV6l7N(}^r%5gTgO3;GUUTv7|eO*OrNyBDv zi~I#IkzIp2UB7wxeDOq6kbLfLe9}D;%i)Q7nD+>>2xnc5kpn@LPm|c7rtDlvJ%<3J z_yfX=SMQP?xtrfzYjPoVrJz*fgShRmZd7$sXQx)do5TcC z1PUT_3?9WQPvj{D5m%xDN74SAM||OZiICERPpopUTyF{qkzo5geSEw<4058!5bU(T zv!{bPdugQ&(z$Fuf0{F*(9qr_YNaTF~#I9uSUQTe(Wu-6_lVg%QU!=f`DuDA1Y27O7W4jESa3e2KGgVYIbf0 zP>dz7uZD2f0LJVM@V8ez9Vy|-5|8k?1m$OjfSB%|o}JliS5cVD-NQJdM#Z&{!c;?p z6%7m1iFDk8Gf(T+PcftP(ojC$`!^Lwdn{dDv2Ft+*60^xY55)r(QDb}^O zY4MpU(YMCq3KnN{z6(upf)}Cj{xWrz^AvbhA)$-v=0CP|tBg}l_JQjuGGNx^)n2pL zj_UpUao5f_vaDa(4QW!&RxfHtT&JP&4Bc!;N3E>^y>>rDx_O0AYm?<4<`Tf?vE{av z-OD!-FYFbC8=(51)rMDkmUEj^D0g7v6|So+fH7Ot>Y= zY7z-EVi^^Als~x>8QGhTWu9t(AdzcYO}kb_H~o#zczXR#al{*Ni>Ri!#9#(qhoz?Z z1^a_Y`lC;G8FM*5n}=1*AjGt*z8# z_pi+`V*>xJVoqeiG3qWs_a(ty2;iw0lJTD%tNf1$1k{XeAiAy&mNpIpY~yW~ziEPl zxS3|&43UwZkc8LpIG6xpAvvOMu>`WIn?NaRR02dZR!PUl zB02W4*j-}a3Poex9CkTvV)#T=M`xY-JSo?XnJM)Vw&gXxO-WQzGOH#rr`pA({Dgf1 z7(tBUEj; zx|J!jJk*oljO8KpxOpkGc(gu%wL>b289QN=g~ATb-(yqk#@W*v`M z3T0NvL{?!nFzektGr!AGMa_Mv_E@7g1R%4dhgYs<=QQhp1ef$JXN5dxWJHA zVzgGwf_yay$?K~d2PMi@q#ts3`^f;9ziT0!nZq~K7^=Wpx11) z#la(2^q?YaTmmY42CTZHnpWlTiyM5k%W+)-P4II>CXNXE>BI;mtu`_I}99G|n zh(6Qr?DWhKz@;T2!7V80#%D3Y!8JVc+kc#L5k-edNr>_BRi_*-Wql(FMO z?m{jBfrQ7SIlB2@5n-)aImJFg3U8#-A8TuujzH~08|@Rv%W-G3ayx#Eemm_KD*4@G zs;GaLuLsA+ObnIr_zTs|&6s)xwnW0g0f$zG`=ZLzoW5R0W&EiWBIH;`_{ms90A5u; zsYbgV*|wOREW|>QqK#G6Us;Po7QC3GS@-qT45n;+vytIq6^#IU+iR~cp9j0Ur^>uQ zj8&g8xA-G{d$o0dwk*SaO{Pe(jya7c;(F?kqh336gHqSA-nwU-=m<9{r1zTQ^x<%Z z)Mq7{T=PiJjlx=oS_fagou?gKk1Sp5q0_x%O&79akC#xBJ*9kGPbE<7cvbZ@%<5-l zpLO6p%{lhv6dUdNqFHHMMcq7Hc_R0mQ&ECLM^=pDiAgb~Q_X8hgYp^Eq^A3ZW=Zz% z+g`-u)iX))qcldW?D{4Z+avs*@wvSokxJ{v;?IvB+f+gtOtf%+0iz;^ z@AxfIhRml{`gh3e3^}DV{%cIkQYZ!$>ePT)4@~ak$)czR+?Kx6RiZOIf)CR5&5an5 za7`FK3#)HO41j>zQury|i?g)S5q(~xq!R2;*-Fbz?A?p&9))F30BrsQ6I0jNPl8jtGL@Bh_gvoY2To4j zVRpf9p?(PzYS5Qh+yBbs7A*(g7Zfa%@U;sovxv$u8GqO=)xTkBw{m%8WV|tOn;O$T z-?+Qz*?~ElwU2PyR{S_)TCI;qh&DTRTSwAd6Q7f z5|Pw7R*f(2<$Q|jFY*xNt_Dy|?qn2%j~_Rj&spW7V-}x1y>n(iZHGspR8z71w-F(P z_$SXU_9J+ZksnGn(9%<7Ja~j_d_>;zGSB0edOu^PN(;9{8kK!`#D#>!WSb7be@|JG z3nEljx!rCO&_UZb{pH;`Io;Mi7JO(i-+p!TwRT6kHmAI29) zoYVfDJHnKkBuuxg4SYX?DRYG04kpc#s)Ny9XSA6v9`va$;dA`h-W=q;<58}{JYOl> ze>w)~I|bSjqeoB#AqxV>+$DwxS(e?k;7@V&*L;J_*huV{X8?AQb(Q|4OjI4t_v;iM!P5{}pauYZHd-f(e zeWqIJQiU@;-k=pkz<+NOaU5XaP7ADi!1N}Te?*IyQiO;2du5^8 z-r>CVYJ;|r`lwE{+(&<+c#7qk`QOdWyM!%7gT?L01z zD&=1IpsumXQ<+Mr7~>htT`XUrnK(kj#Df1Od#d(lS0CTq^qWgUQ<|fIj+N&SiIG(o zKmV+D4Ph)t7<@7;YHu={@hVV1)-Lmt7En_>gUKLNDPtw+;SawzBvVm;rlI)gd)8O1 z)u(kViI*4U)0NSg=c|=0n$g{lC^FcJw^?l{2a>o$G3!m9Kze49y685*Z}6_}tDxXa z!)Z?2^(PcF38z3*l*nMMb#pl7fG_nt)PLX4??_d~t(IV@?+QS5wuVxx^Iqym6{E!3 z4)1=loCNGc&t6yX@g{C<{|!K~m1tC`T`~U&yHZ}rRr?&;@AIIvKR+I%&LVH$J~REq z1WZW}6q>&;I#&h)qju|jgbD0c7NVx4S22=ia!0< z-3Tn<%P!J)>?iXxZ2_K_G9f1R^W2`V=>x0DTbfh+R1%vt=xhZ4^)s*L6h4KSgg z5}={MIx|npi*6{|e$6ZD$RB_Q3Mgao3rWl_6=A1_FFa0k&6e#;tkOf&DvPIDs`8d_l!a~Il!dzG;KCQ-iTpJiZqw>Chk#V&Vy_TUHE{UJpbuGe8i9;KU zR3dmje8`tmprdog^=0?@o}x}WKkJXlVzKe^_;@EB0Cr*fm6`ka+;DwN6@bnp@Gp3) z5mR5+3)yQt8%jgsx~PVDN_C_|g#wg<8VO@E3v+{M(ndGsMT4NhGGFyt_RYXKE-{(S zSSE&Gct!qq3%D~z*25!a)tn><_?p8GS0k?`eJitno#edy&-9lATrn>fpSYJ_NfvSd ziuKWd5N&2<+Kxq-$R_RmX(2H+4eA=Roq!2Jt8;|^;9cx{!uSV?w|u?kIxJ^1ymH+iV@6g#Q)aQV0Yv>bz zJu~0;KG=%u3yYG|5iEAS>Y0jDk^$(pIJHNuhdqU$i{^Kg8{ZL3NbXtmtrLq=oZ%>p z=LoDbPsYRM-aVS6z8t2xr2?+3l6jJGIx2V*Bnk`2Pdrrrkx<&-1R2M|-YQHvnQ^s| zV32V>EecQHk>dXOy5JfluXcgmtgjZ5`Ech7dc>E~TTvih)?D@6R$EM&^ac+ei7nIU zR^z?kF|y?~Z7hnWoFFx-bkaJsa9!F<8SKUS{{qrdqxP}9ItYfVWOS1)Ua<^3MwKoT zo_#x&VUg_vy_B(dU2qwvji{-)7vuUP!In*pY5hXJ^^CAP%t_^Z)lc{>tt&^kIOG$3 z3Am66O0`TJ_RKSZn{y}rE>yQvyPH1}Fzq^p9fxapxX)SoxEi{+<$o^%lC(H=JWEvu zMyPWZzHXA+CQIr8v)e-3Rt-=@7>B%9fo+5**z9&OZr|@$qto=w8=&KXf5L*lgT%vV zNEx+)Kz@T|sU$K6wVJ^e_|bUb8snEv!}GbpiR!VNpk^wIwY0 zMiyV6?=IELGfa~>@jid?JYy2=e*S0Ul`x0MCiDIkN_72 zUD^F;?O|Vo&Vyug-t|vjWJTXh*kQN6Y|@ngCLjEX$|y|uMxvP}lMpw`&H7dJHUDE} zCAPO)(Z^kmdturlC5iX zP$o$ax=F$e<@k)q>Apk|ZIh z3n=(s)FgCR*Es)#9s^=~+_$8j+YCWIK|_uImaWf+F)8L@sX2p{{ah4+44&CHy|9KP z!n9t}Se3*9!OY?JvRYcCS`?<7u}CxqRYLHjyb^Bd;ODq(xMo*JK;3f+DJ3f}0Fo?w zN(f@DkQdd!SjK~Wcq|HEJMleNY8bTXbh`c9F>o?AxDh=8hYX)3tKev&6y_4Pr!uVS zwPiFC+d%R6Y<3owRuv*Xf`u7na{q+AFdotKf=mx$P`3Vy58`u4&t}VV$7Wnq8Ofbe zSol(1D_=o3gymt9g(DmSV6* zdtx7J1*fg%WUJuVDU4+<&3->+w4`))p0#x3_ z=V9GEx>JRo8CnrFtR<sdcHwr!fws(kW+}}^8geTBZ!n8e#`;}c2FTF)uC5* zhLPNlVkP71&Y4r<=t3#95ihZn#^oD#OI_FKu9ynS)?XA>s7{4jzbo<3Ti&~Y^99xq zT69Z*MJr$o2Q*j#s*k|&M}5Dcb$|6n#--uy;9Wpa{_PnSwgG5?+|z;WjexQKKlOFf zpEy{q|1*mzQp`;QUlC2z1l_x8I)jnt48%fXhN`0t?@JDcUP2$@5o7iLYBPu8T^|EWDg`0@|t(_I#wIdBQ(`rV3U=_ND!_Q$Bs(jP3BoSX_mS4gd+!NzSbiN zooHuQGnj31g_7p(4!vfrqEG2B^wL}C-^o^UpQc(q_eOz}&(ry&K#NPS$NXnv79Mvs zPU44IBUw+SrD*WQ1c4%ZG1D-|v84Yt z^~l=caAK0|aR9j!oM3Zkfwpfw0@4Yvp?l3bSODa~6bx*L?GZ|L>q!RTL&amSS0|cO zwDvFyPgy2( z$Ajl-i4L{t;Wv(84GI2g+SXh}y+FaGs@?Tuha&(*2Ur{fNY{=q!f9-fiOHs+Zm^3+ z0-1_lIvuFSu(&zyVx@Rv!?;u;MJ-oQ5C0?gsoHwbHleDXYxQmP*OJ!}ZUO$iWfP?_ zH^+I`O)3O7(O6`%+;?IhHGuzY@isktfb?byc5IMApi4~WXl12XaNtoNDUSLVkA{Yy zX`>UgUwf14Sbra$of%VzMSi6Kb9wD5KO`_@6d~ML>UL%h26?&@fFZy%L9!vu6 z=g;>5)N>gjo-62?hH=YpiO=nW(LVgAFijedfUPqu(z0^1aYOSeWJCGXQ5r1*7KUKA zo7kYCsvB4v$=KJrjepFDn6-m`aMp<2FVue%c)|=q83Wbd8+9-(ny+oEHx*}L-j)#^ zx9!MnPJ~;g9x<}Dg;T5@U)P-GMX|U?+cucwNmwQM{-TRcyU(Qo8L&bBE#Op}y1C@f zA6;ogA1$NDel?KaY;#`f;g&`u2)KI~axOmH*fw`xH;JJPEZ4YXQGb_RuD+xC&sAD# zwj;^}O8KHK$bTkM>;I5q5pJpv{8?lZ#sv1Tm$iG{U=Q0^3riD}hGABAu zjTFG=$R0ctN(Z=$68O`pHdr?F1~TP%9Y@jcT1*l*^e5WC=6})k;J**%haD>YdrZqv z!f5D};{one>VIu+M841JHn&)n(xUElqHHiN?}VLYC|3RLGr2>@U=ze@jw!vpz?0=EG3IJg$G7f4}k10^E?4S?t_?Sti( zSkk{UBF?c-EYKy0um2D(yg|iJHyr?JG+64aSv}VR8?B&8zl5Q%V+J{f-n5abJHNu~ zAA`IiI#N}PU%}zvVEy=;5{I|8NvNHE=~Fr;oqZYFf&q9C+5ta)H$;-m$cZTN)Gfnf z$Fm?-tT=XRm5XswaN)7qTUE@F!;RwWueFzcJ!+!OO8-=})AmW?KkVmI0{W-m%b@>+HX``i&XuQ;7@FI{!!f=r8MQsI%rV`YkRp(n4wT3B^_ zf-AiT0fORTuPDGbODU*2f37iFpmUh&CZ@GCuX%MRV1NX?``HifAz&346SkXgU8>a` zBeH?TV;px70U>n{wm&^*nbh!=Pje)fL3t4jy+-#m&u)G{F^Q-HT|a)@MAlfOy6_i) zYqvM|{vl}g!k+&fTo~>Ti*xOFdt_f1omnE8K7$PiIQWyH;f$T$>)AH@*(y1?1ybO4 z7Gc%SU5_mI9HDF?!$MKq+4;M_zu@iL=Y5;2Q3OLpk-?$N>cn}{oAb~-pc%6j@Rfkb znAaXC@i5%?*fO@|+zD%ZhuaW%i{Ua8VUKyjEx?&7pB>?<2YP z4+fY#Z)_V3tsowjecvbBF`5jJ)`sHFCdR99EU#ylibpq?XU%4Ily^Qqle`DY@UtSq z+EI7oOag5xA7VqkrylLDNjv8kxFWnvlTWJ^O~vy0iV`Psp*!zdjZFrus3Jg~F2A1l zhiom~>5#}ktu_^ejDRX*Jlsp8u+=L~+ht)L$UCx7S9TZEA2uZM%~NJTc+ z%*KWDk>oS6B7&}fCHDu`pETrtRN>%0`gY*#I5wJq#FnTE|7#GXcu{BkZ~sLIlh*R@ z7GLT74O1CBB6M!a0}ng2YxI=u#lrsjZKrB2@`~1b=Liszj)6|c?TLWV5M0vIlY7Y{xhf@4$%PwQlpD)I;N429o<4rGQt09zT$o5Eg zE21Jt9{%mI+>wGh45oP3Z>B*bf8=(fAOW12CNb5$u=1W)(5UFgAc*CCF8fCFyT>oU z{l)Q;B{?1?%>GhVXAui2o+Wp>{shW}2vQOeApy%}7yOI5e&s^3Oq!edUX>pU; z27E1G-v}_RM9Igtj~4@+#LMRyIdEPZxo3z+d@e^yMdatd1GV{NFd?0PgxxFFtK$8d z&}*54UNR$tcON&Wt_$9QWY7q8flE}uZ~ZQnf#rr{1fBDixR{y=%U$!lJmQA9PCHeh z_0Iyps?E7w$}Nt`&x^lqaiQ-?_MW_UHT_AVulY^jjGvAEf>Yc((b0759U<={RtGeL zlFS$|w7;Lc0YwRo1}c_p|1djxJu@#iOMwUGvk0Of8HhQ!vf-QsGC1SGrVGc9ra^FYECMr(hKBegh~Icgtn zwFgZX`0$Na>!M+`J%z%dD#%gEn*X509MW=J>vj3e@*D+PS=?z&_@X_){A@{s3&sn5 zk@Q9JXHUCMj~7+RlGF_} zFns<982>DJjIt}YFYXv2q&(AJ=N?Tvz3Z-g!cg*s^*p^n*@8e^zip^yIPw2N13hCBcsND zZLLN;qAciZP5r7zl{Mce-uRHsP`6U<@;1y`KdEuphPTg*f_I3`lu!&O9sb(<^!n5P z(8Q~pI*a^oO!Xh5Z+?75vO*>!@}azdD`od{%=3ijWNs$u%RBgnmpaZ?@}y8Up5=E0 z7;tY^KpND#(77XAXO8d_3hcq8<`Y$-PXeYwOpo~MmE9zZeC z)E|MAK?Pcn2fWN~eR*>BvNr{2SVlMjk^78kc#}5{b-WWRZ(9l!IgOiiP`QtF7DyeY zD3>>AiPA5{nxCe#5$3GVJt;1QSsp*v`z4m0q~QL0-tF0#o(w+{{AR$qsTyhn8Zf~? zu8mo#-)A3xd;^mUz}==B3)A==$k?lP9}MqsZVi_Rj4A^VAq`pl?}lFU6TK&l`GuWb z*X%J)=m5=%@85sOzN5lzd($LS?Lio0g`#3Z>XzAQ2)}_K)@9brY0@O9u1DIT-V(jJ z2;v&*okh5$N?1!5>badXk>6%@!1tFAfCF0n4n;9aJfa;ol2Jw0vSTu+UR|OxYO(Ha z7atZY<3`^8?I^np=zEXcHm>O4j>w-Q34e0i&;$QL5J=9zc3I>3#8_0^!}Q&&7ehZf zb_$VDQc~h*#*DVcb|MG(ACAc?KPAtLG1qeS>${VJFaCH5$lntaGbB|X5;Q2gp!Z9w zEc2Zd46XWRgt)im{H;rG=yHIIVxBLP?Zp1!B(J+;Kh0sj^RSa(UKB-@+~BwhRH#&N z${<=+i`OZx_{;h|-ygt(yd;XUEdYO&UTXIa)d=Q&v<> zlIYc&B?k8%+g!R>dT=KuqmZuxX8A-+pIk388IcH0_vp-NF_{M9{%{}uWY6XhT`DF4 zH;UGcTKP(L=JX86^4e{yDLbYTE{Sa2FO{zICarhGN=LWp&_b&F%rPG} zE;;cR_RJj26X(h+tna({7w<4q`0=ch4nldy>+P%t5Sz96_bA+DL0aGJT^UBW=^AM5 zXNZ*d`iK^OzrgKo$RwkdhyS-f_MIZn)HpcaZ-}YhnE}k-6I8vH^FV&h$d!DC;Fr+4 zDA9zE6!ETUBZYU|p6jy={%_B^K%5*4yF%z1x*cIzCN|@E2uXioDCqv5@4bFwwy8X+ zBI1Zv-->U8p_#Q?yN`a8gJ8nVC8AGhnk25?WDn_D8yVr!=ld3yd$vzBG0eTNB+ZBx ztji$s_X-VBhT_)^1C&G3GHf_tx;ClD?_FYTde|A;Yro^IHL(A)5%JNh^=IuGE3H#> zDS>*|*7Sc3!E7={C_3D)LdB!1h*cVaOjK>UiG?wv+Hwz6xKtwPFl83~SA*S@;RO(D ze#QVbo)l&#pD>q69VLD|;`jEKGeFkqJoWJV-{i)pV~^2Y9qme$ucW$bCjI$rqhhKH zkETQfo*Y6m)0B^p1#c}<@Qh61=H_rG+pt&Hn+WBhck_UYC_YpU^S|yB?8|qe@~q3q zIp5qQXOaE#u*Gonn`)OxY>4xB0vv~y9g$hHLTDzInD4pIhLlHTz+7iw8hO6YG?v-g;HYdgu`Z2%x#G@kzg;6ol+VIZN8i@(r2{(-)3+AgU z)veH1$6F{@W{3iG;nJ%9*#+4@ZF^hpzY=j9^#Au}m?eEle+MEicd2OGX$U%Jt$JnQ-o@|Lv|g7pt46#wT!*kf5`v1hsY71U!EM`l9gZ z_W@Z2p_@zg&^QjthUSwCG@A#>OpaMF$;_m4BA>@bscj6j-hMyIB2 zS5HW);B2);P}Zi?Pu~SQV`tIH(n&)NF8Enpb4BI8sLwC^tPZawgO*D}Y8YV-7CQ!< zIoGQWof3kPYo&Na+{{~Qn<$7N`p1JX!WCilTZ2a}-}VeoEZM;fD9N|#Gw=>`Te)BD z<{9;*wTJ6Hf-a|k()8X@+1xu8W8e2%?gv&o>(V*Pc~b5%z)wo9GtV7LN1dqNP&wP= zYdWB$^Vdp_%-eo4jhIMA!sjSs>(Tci@7hR3PXiqVolum3IYOQ%e}{RVO{W-# zP6EPuSfm8D0@rnynHJ+t%`Mxgy|M%5pU=i-&0g)WW-J?K3|&!otd^`)p$+B!*r{jL zAFe$hxqeN<>(CNF?3**sEUi}oE1;W$NV;6sBcaYl`>HwGK%2dPV1zbHCWw$fN48Xm z8`9Ebk4GExE3gg9SC{Zo>Nr8aegD+5CQaTD38x3KNdj@lUU2w7%<=#nKS0F6|7yAG z;D9Nulg*l^$NCgj?_W-W%rgF>EJC@pTAPxXwWMghg@5}T)FDIfl~CJ z%dP9~c&US$TKTqe)qhj1glK|9e8=LL_MshIwnqQ7fuG{!UmD0=Xwxb1)gJG>A&s*2 zq!yuRd;9TP(Cr8RUM3-KpQ*vpN1s@CuXZYTTV30>eif6CufkY&fkiQbt~ngn#s>qg zt0J$L0L_E_ny&>t*Uz;Q*WHEAbF5vhfo68D6!Eq9BJ{V?eX)L4k9{mHZ@<6BH-ap$ zng&yeHj3)mAXwNU2bIo+!AT|pJQ%2a@!Pk&ykWP;It;uxXBcoBs~Y_B#EQex&Toyo zxT^vGzxqILY{9+^GKQ&qIHWqwzd$q2EHL~DZWC9i#EmRzZC1~7*`KQ}*8ny?dytY7 zlb@Ra_Qv-MjG~1HqUCrAc_XXKU`f{F&7wU=*@`)dYk8YN>4{>8g2Py^-jP3YI9GR+ zeeo6t#~7G;T%mnXdYA5(+ekq+NjQ`vAT=U~HL)IN+k)C?7LKvx!=;m;^jIl;kfKzv~e^nJK)}CZ35^ z1Eq0x$KH*bHjeqe3IBCE-PKcct7A>PtR>7OTvoP7{sO+Ay5tFyX+;SB1rw~{o z$XDWYu`myV(9Zek@$nF!^k*8f&E++Vk|cgL)1F`DiV3xnvKfEJ_!#MJ{jp9qex^0H z^QaO9HEEJL&`tCm^7l`vhr-G#YZosbX|4UOM^o1GPn+MiapXJhv|FD1*H?1_{)GRV za#Hldu!1SgLH^G(RW?deH&m_xAG;UAaeH&GZUWDm=@Ll6%_NVXGx z9sJzB82hgy#Vo63b*b_ooo@znqTd|Q)g38n6Q}m%Ndk~@fT#K7tGW&Ze*%6a5V@Q) z8$lSg!h8;rD|e%ns!wRXUpCf>@HA@jP0iU7-Yxy3|xoqbzp*jUbY-;4d>zkh2Q zto9zyBCZk+hJRJjTm43;G|4mKG%H0l#e4eR!7<`BX;Auc=hJ^_N6454aX?>S#4Vt2s>bll z`nbCOSu{24GQ(C|!1#Vb?Rw%M+h5-I+>jX!zjO85w6gyl!uSz``%)nTNOGX`2atz# zxbk&LuLG*et6d$gTpJ8SiEgR2L9|KW%xa0mUHkv>XcF4YfysQI`#JX)Su83=I+ zB)VMtdUE_i)#xfR^6d;phKg{R$kO-i&a@(*BS2p>l4S>nguOfBPKW&#FT<;CMv~yJ zZvF*E`X5+pQ9oRie7ejudAos8c!d-U*!|JZpq2sGDZEPp9H`XBf1`5@A8mp&0fuuP z8vw(`+UDi7=5|~csyk(v&t2?x*_3i{KdMNy8lSN(ue;o(0p-pip6&VPcUiM zfQS{1lgOVqsbke=KEf<#P$MnK88qGoVnFR$$3ylmWy*;eK2OCtGfZlr^-y_rhiI;v zj_6UNILlZtk8QZh7y~cG(zoYn6^~II?oW1eY zk;XeDsIJ8!*(JQDqKNDV-06RHGA~QHf`=p3ILU?7*0k8+WRCNS7&~Aqis~lQO(w56 z(i)2JsU3h~zuBsCwlp&Q{qd9Y|DBQFZ3) zr>(fiqX4yu!p=lWcEkK1w1`(iCNVU@KSX1lgrf~Z5TwlaPKhbtg%rk?4T>m+K=@1PS4Jk@~}Rm>2SDysa!ac zJ4ewbEPHx}Mw95x?#JPxafAT!~;=V2p~d_Gp>PozDa!7591S!g5qoq4A9wWdD5 zy?2+$)3Pt{8&nN(;B~YEGNnU{Qve`?#a(~<2?2XvVJK7F;q*9Y+%!-s^fFsjeI)m2(FPV!RKjPeR0oA0RP^f;GF_Y8FYqt$N|8KJ1|o-VVjD)FoHq?%7Wzha`jYM$nfl$SE-z0>IWh}i zh_`o{hz4fUKkHPNESUBRv{Jh@|0()#USp-Pj67>OWg3wp!+6$+AZ^UTK1%Zf$b~tF z%6S1wNGZILDzB=ch7-Av#E~M3$XW($!>H~DL*D{YuC-GwnTyEQ3ga|j)=nhw9a}!{ z8JA$@QC-rEvu!_ayIeR9arMF;m)$HYp02uPze}b{7^FGa9!ml^elK0DWEj>-WP&xK zcolkDwx&T*T~Gjh@As_xPaM^o&aD9YXD`{uTLeYF8UE#p2YSHtt0q~OhEtZ*ZLgM9 zajKpvX7&jMZ5PkCT@;n1@L+EVlQii+H<6ox(=qEQNfT(G{moem{#-GEv@-^Jgcm!w z%72SFiK$gRM1iv(0ttvdO~ATfnoHo^nA53iq7c*R^*-10A1hM+)^;nWH|gHN_R8>V zGI7rX*4JMVlZ0^6KF=-UpamY3Q{&lI#NdktctI=wQ{CDS`JN)hSK-YlP8pK#{o_M@thK7=}sBPgDnaGhT>OpCr8 zU@N=^qYC24z|sFzZ9sj<$E&0)esILAb`P!)%O;AzA6OSNKvcI#F`wsRh()av7gwzL zsX0YBMaHE>yxOhU0FJ{WHl<-tE!fz8sB(9RGG1up491!{Gsp4L&j`7}Ck3PpfYZjQ zi;OObS9ZHax{#}|TnmJt8#$?g-}$I>2&Qi|*5e*KV|Y8Bh`|{E&lp_gY-I@1r`dE$ zBlG9pAtBEVVRv5Ff}bVZ6Tiq$|G#k3RjoM)&vr3g$bPMFEix~t&7|bb%%44?;$}ao%IdiL_%wG|SHLR^`0#=fY^p-Gp&zDEkQz)l9})jvJNET6?Y4+30kabSEOj;szZear#L z&I?}PQND9p_u&oEf1;g#%X?lr2vWjZI}f2sla$R+>L|w^DozfP$@>d-@F&kD$Np2M zIm`jC?OxRr@5ICOKK9~F%7F}%+OZsSnF)S9Ivf!ua+#)x;Fe&ojrU|#@RITiD@uo{ z6CzLXPTHu~Hr8Sa&}FC^Q>VqPSUnhy$;b&}8o|nV!1q1ik_I5|z4^pmp@O||k7No5nja}y+gnfZ z;()mUT`k>R1pbhfea#TRnW=g?j2-~=ku4W4G&i!aJ1@f04Zx!GgrO8AftRy2;6c_2 z*I4CxDUS>JwHm~2yhqAF3g4*D%AmFP{kQnIzfo~=s@$485O@>I<1bgF6i%bX?u%`V6y1C$*p;GSntB0EtSi5Ho5EVxD8w2lf zo~r}Ea>wqq3yiB5qA>zn)oWNDs#GNAO~gqB5rlB-Pyt^(W|q`<}T#UnlY z|2o^5qJn4qE}xj7Nlb=sn)F6vf+34I6fqh%{rf$C+X zG8m-?RRSWZ;Ih{M%gAYH(+!-AoLeA~Q^i3)-^jC_>MCh73tN{4``^L94wcKm=R@FUBF)}0@N<<>etP~Lhq9#0&&F>7 zqE1&iWva6>he*Pzwf&yC1FqvFmw0b;1#k~IWx@Zpj&=ldm4Sc=i;lH4ILr6423GKk zo}QkyNmBG%Z8Gh$&uh**htKca+0l@gNRUsXUk`mPdOZ9_hQH{g8YW$lo3~%Zw&C@i z=IY1_iY%{`Fh=+;?|nYntaqe;tw7^~+)0;8gW(yBJ#hJfHJ#e-KH$CF-u$ZlB6#Qk zQ%ezm-zO4WMkK%%=3A!XvTfImG;Z6U2UaSQ=Le9qOm)9qA)b&*VLzMra;;WrPK8>R z^|TRkE~7P>B0#$z#ZLQOH1OtS2+>)>RDpeSFmn%l{{?vajr#*?7%0vQ<@6SwV7KbF z=-LpmVt3&1QIlrw9HbJ@VqkzXLsCe=E^!~?L&;zVNhIe~fDRXjGinljo9tAYX-=W) zjH~Ox`My<6#uZ{AZr>=2r&TllG*G0mXC%NcL$vW%nZ*RIOX6diav0y`32y;5^870H zCoTdSJq;aH3T$tgoTz zsrVXCinA9tvR-|YivJ;bFW_dOYR~4SiqykME7|=2^&c6bJfqBW%!~K93#1OF&Qn9M zs;`0LEV{>7aRr_BV~lO6Bf2YydfAut_8av@s|JLnb1S^+91rZw)(Jgm&0?;deAA9{ z=*Lxvf9IK3-!odU`}LsfXfYersusAZ`NQ4CHYX!Vll`gZ4*Dbk-eUib#(>N0O&s3k zU%JgUw&DeKDr1~iC(%WMBE93X>c6@Zg4k1PQ~fuA!r?3T{SvFH+iT#a7p7`ECY$-m zRO74H!g>#FZR_iK!@`(fg$;4|%#Z%4a+^f28vm8h>Z`}VdLv_lg&`nFEtW; zaLDtAG!<3Rvofam@5jN8;=g#c!$IrnVw)yr)7yEAM*R1l;|3#IJoQs5#7E@ue6OZm z5NqQLc5(-<%^CNPm|hng%<0xgoXVHK$uKCmlk1S$3`h=+=e(Ey3Q3y325Qr|i*o8E z1l}t%_Vn-U+J1F>E_nW)9$CU)U;77DLdLGDZfE2LS{NY<0Yf9za}3ZNT7p5<4fRKo z=<()A>2>(g06zKhDPYs$egWIa*&`!R{PTjNVPA&9g!&?ZmX_cV&3EF`d(OSl1?l;U zSeh_$wE1)b1N;>?GH0U$)9t{-63Z`t@^`y_@O1m57@AX#RAe`}0&& zG?ttDY9jvZS)C2~OM9g-R5%C7DKqjp!KP=QyIi5*4NrY7zJPb>Tr6 zhwu{--p<>9Qp=K~oancdkH1$;n&mZl#(U)FlQZ95zPu#-uRH0x~^?=U(I z7Tx9pLiMmIIj{f0Vd@?A zy3}yM0qX?;9%@3+W^MP;n+e-)BH9Vz=$OFr@N{VNVM%+!G?D+a2I`CyL>u_W5^BMu znVc}a%?Sk@Dy_^Nh|l8qk_^GEhS1)NsFbeU4~!bwYjIX$wW-M}L1k)XcC=hn zo`P8JJ&gfCR#9KG(_fVd-N6kk1)-{pndi5wM~vB}pdx7hYe0~-JxQ+sdkz!H`vW6H zG`ONV3FtJagtF&B^)Klef7GF4J47hpD2aI;6xy7fox}dHnVsadc#M((Wgd1qDYy z!BLv?$JpS32EI&#mdNv=bR$hqMlf`XUPXKr1vJYYvtMOj6(hfBYGSc*?uYkG-1x@J zYL%cwY?{?LTy4`-8ojsar=n(5mpSy3xAV9wclW?^zq?+|`TwGA zrma#=tsAXq|%l5#F_Ze&3?D=H%OJbNJi;Ikm<6n)oR23!_(d~JIT=B~w^+m?z2 zz1$mMEgYFIv`(rHG5nw*qhkyql@r}A$~sWw@wLy$+=|naHC^p8hXocyOA!til*M% zB`J+HLjQ12U6crg6bRHnNUU#PEp}@<%m|k#yV@`ZsJ|mR4i7(*swlrwQ%x(aH!^aj z8gJOv+0T`es;4i*R+c^<7S=t;4!@RG-SNSW@Wj(9g$k;73xrz7@a!CA9!+q$iy70b zXUQ;@I$mdKb%8HSB8@}%PZLPJ)|(a^MWebKIXwkV-As2gWCN>PL4qForevKU(aFT( zTE_c*?E^cr8ObhsEe8(m2QEsjuckV z?i=&A^lJ%;B>7pZ_gqi)3c?0s_EV(~C*unfIW+k*4Z&3K%Sb+k90H-Z2dIWoSt#K; zhiZ*<+rAQk_^PxWH5*uT&#DjH>wAmr_LBgo!>-y#C4`28-RZI`e{@Z2j3k~YwR3Kx z-B2GGEwcrnc1g6YwL{UnIDKT)Y8?voZz zSJ*O*)w(SN51Fd{L(!y0etH+#rU7t5^}aND#mwXUPodRP;#nZO1oUAkE%N62PUKGx zmIbg=KyTUeYO;|A*Z!ci$JF&Lyarz zbR;zCXZ>oAKBI+5<)BC{P{qQj>Dj1ur4beA1?y^YO0f<*^-h32L3A154{`f?q>#6hNbVJC{yTaMrA^bt4#_pI zp-!F>RNo@d1D3?|-G8?U&Lihnjy^j0cd{%)(|eck%tI-0vLxdrt8#;RPp7$0c^@Nm z%9PXpD~dpnDrYeFEhl30*=Nj$Nf5a?y!b(B@UF3IUQs2FD8xb&U@FXO{cR?o%D}B^I1uT!O{=hOqH5oFO2cRM^WLA893nU9gt6`r+l3 z+EaJ#+=-`d;ywAI4u=;XN4+K}7_JfW{kj_J+qhLRdS)Xm6BWm@vM?uy%s&A-F6b0#rM7_R}D>z32k{15hrOZ|cp17bd%&7bvodbYuO zWa5T;m3c#wfoCrBt*7-*6vD{f^l(|nX=0T=Go&S#XrCQU^`qK2YEq2jTwiPS4J zc{Z||%cFeaHJbzh?_9v5%^b|)b@LoBgr(?!QH$R!W5F5pc`3-`ZbI%7&1%QH8&SvF zaN5VNFgNFl)SS+MYDX4!W{BrGhC)SR+@)R8FM!Kr{8?!moz`X1rp%}aqybdd?MCu( zi@yddDnZo&Ivt^?q+k{znMGpbpoR4+j1PQ=f3q(ea+ri6ux{!#6ZLJI$=S0;j7u^9lpz!MiE&-4;2fLulB4|GxD? z*Mq@3uTHFybXrfRd7uz^bQTvTI~N&_v=7zBLN1F@q?)L$)N%1`x9arB%f%adSH^Oh zL%%M6J;w}hMnPK=)sQ0=ilAokNrR5oJniePt35s|D|AS|A6`ux-P?773Ex-dM~$iY z&DqCd{I`4+6)Pw^!(s|=0D+ga!R;UinE!R`OXbp&@$*LInn< zr|VH!Buyt@@W%Xy^N3uisgr;nG3z#Jo1~n-OHBDGkkcMzQ6%a~dQd82;^4^qgrg^c z5ni2O$!yZg&rwBz31*7dOvQ=~Otl;?eO%WNlzJKiz44I2O%>+^|A;DwdVE!62A(`4 zeU$s7&!vl|1Z*W49%F^mnHa8`2C>k3F@>|7M56Fc*ghZa(Q@<9-SQ01e|z#~{{wI8 zD=f#e5X_||aF;?7ht&c|534M`m_wOAKkcAzT*hM3Tvfk{K(~n6g2ZXeJE0cTDNo|r z|Hz|i5h$EZ`j=jBz;x>D_N7^Z_@E=Z#D>_lLp3XUlS_oY@@tM-f}P;~I&bq)V(17IJ%lY0PG$eMsDDonN6()yZg%OCtJ|x z6QKFS0AAoS3tSJaq(T9UqSGvRf}$RN?wdXN&x^A`{sra*W=jI9szzc&#w2;Y>{<+Y zv%Y>cw>v`tdz;uTJ>gOh7RG{olENgOp*g=;dynuo5Cl;-Uqt{rXLPkKbe*=QFPGuE zn|eo6-|;=U$GvZ4ZI@RCsCLt-?xBpTv)~O=mXuhMu_p1fB(YI5*8R(_u>q{dD6{h- z6}cMiwKtPs@To}HT)e6g873zswY0RBl<7vj%o;-;Ur-w|By_!nPg5^xyxRM>az|mj zC(7w=sgv&9I{0lf_l^j*Wc!%>HgIKB7{w1G^%J%GRw^tk%%IbM`@Vj?s$O%o4>jhmX9wh!$dtrHg63cOI4I8YRE=sK6Rht*HNEIxE# zJcvjg9YZU>0cDBlc>#?dHCj&24j$g@#}#Q3BdtrVdf0Q97!XOnqgNmh~=O{x5XirquNl^Ek zplTuBBlSZ0^RcasFqMfoa!2*kx+`!ZndQxX0xco52hT;lgCEdY3rW})cEI0SM4C}7 z8omPKe9Q8;IQZPSAVaij3y?n~{07Q*L5Rx9*0Ew&R7pu_f+n)tq(w+P5xH~&hp}GL za_qNxtIhpR+9x2dcB=8_PuCd-tW~63m6J*t z{XIIVz1-32hBQyNJ5w)SN7VN;)>1A)w=8G+i&RrPkbyzys;K;b^ze9;Ue`a;b+d?t zNfo0*#?0^#M9?73HSTckXTz;$#X0mWXC5mhXF3*aKQvmG=%x(ckg?HaT21MH}nMYqZK3JuVUT6Z*Eh z*@2{ZRzD<}tOR0urfABd7FJ>2gujzzZkLOzx;&^}Efx-B3 zbf4KnNeV&lx#O}0au_yx2POC#b7){BV4-1dAd1|Z|>C=9y&er(f6@S<5pR#vd@U(Iz> zTD-@#GGMjFV@$lt^)5ZucNTGh_(Oy?2s+TO#a&w*7o?~~P$geCBjp#{>wjj0g)+Wd z>xqy<>FAR92w>GZ3EHRxkuP8gLnY<4ZH*~%W1$zsWo6y_6$p^0I(Ij%@~dyZAd2`oa!-&okC+;GC^mg937l&X`-F zz;-2+s}AX6Rc}1IS6O&0ikN$jao8@#D$B@X@U6ADGJ9fO9U+YRH@EuX1%j&oQA%;@ z-0$n3HO-+OM(b0ch>`f?2(p3O%lYM4NJ1Jf>v<{h041D5CKl-y3l1E1Lu1smfp z#(CZ|Z%oKvRw9FZW-s`Z!1x~zrllER!rA$*YtSCMPu9FTid!k)e$G2vqyK!zsP6}<^OZD4qKxEDq5;5p`{)oPgjYr;>>HA07P z#HjL@Qn5_NE15$%nMLD?I{tzm{jmX0f3WBf?wunI-vZdby^-xdB*W>hJ+~SjQlXb_ zgcL5ycRo?>*D#q&5B#M>m5T03I{EPCOeE68BJHm6x=l4ox!0(SZcV=?_>u$Y+=CyF zRSx#7Np`HPy9b}BC^fuW0ACHBASVQ`I3Bz34Oy)8>RulHNDdxY$p|k@4-Y`5e4%u1 z@)Ecj(_{$x?*gsY;EM%vGbXJZYDTApLG_Gjk_^xt{-a%Li*&B4v)u^G*^ICbY>*_B zL1PWMqQs-12t}ejZPy31_oefMV|8SW&HVQF@k))*S~=1*M_%rSS}(nIng3&C^tX0ThR#NrHc)8|-4Ji?98mwl zyd*gI;T(k&PBp?3UxL4T<{m*~PY4a#g#6mp#@|y@WnUw`w#|}QjQk@8QdiHzELg}f z*A;4}Cl^6ZpCQ|aoDC-xU!MO#O%v9*P!)Ilk`=jF)m4@%q+;3eWy!7oInPmUg9`C-}NABHV z;ljITGT`st4IRY9{D|N@(#x}4s=Ky66LL2&r1jYZ{-K6sZE7U4Hr(!rmSc7a&`qlD zLmfQ(`(O41If!NH*unl%{=|(NG5oi7ynkVc3Y7{j#%|RgFLsl6V`~Y?r%u?9cBq{c z0#ApTWV*QX1(Q}jyM3-y)*vFe*@05EE3{0>P?#wthuv>sC1zFuuvCOR~;?L@L(ZH7S? zhp*`Xo|b^tWEu_N*L?DYA_4 z`B|3*Bu~pD#SxelH2xm}_{MdU$y~eAM#XawjW!jkM(?e>brKBk+Ls z-6lFJaSFlMv-l9+VhS)Znb=~XRP+dJLv3`} zs(r1MRr@w6=e9See10hg0TW(D#e?zLb5$xGmDdnrltfbOTjf3ia{9FVGx0%t$QK(M zTRe4jv_e)|`t{@PWlk(sO+e(#nKJ?cPo~QJrScD=Y6<@lZ9BVF%9|w1hYIT%Ig|c; z-2Dql;Ut&b6SfXs9X;M3l@n@K>Y7g~?EjXhPwBwh2ZyJ{?#J#VI|m5Ts2g-YNT8h! zQotw(Yk1K7hKnM&sHr}*>irM6iO-^$2eOjhia*aX$sbdwtKN6u82cWt+B&6^YUV|o z`)QlsRSB559h3KA8uz!Sczj1`xDV2-9_70Vlcb4MT*QSBx-vDo`6<0`u5U|L@JymJ|f={VN%L-m%L6(K8L10H5d+*fBb|a z4Uvt3*WawpfARP|KtXh(!jVeTh%m4RZaRjL5R&XW`1zz*n%joJua9YQGxi3IKR&=X z4g7lcgf0LUsiiE*4Y4nWtth}viI%wt0CINky9YD~Tr{D3U6l8}r4Ov6akC|c3; zU-t{hX=X0fncaj-iH;q<=z`5zBU@v z-X?tABfaU-d)-oGpM=0o{->oseJmiy9hnY!7CmyQZ0H&-*&N#2vzwX>k6@4zcmqii ze}`XQuoLq)HYv@_yd`udo)epF@QbiiK(IxbYQe4V@xIgem*4{Y6YePU!LlcPoGZM_@WEXY zLFCT>50zkMe^G6n#B(WN1BCr0Xz`Huj;Zxo24W{^;4eSUGdkfmRGvP4%DP8KZR*I# zI8)%KJKJG=R#>=Bi@1K}%9R1Edq81Rd*{4xLQ({?{RV;Ud#5s9NI!9R`JvIPd}iB! zfk;!k$Y*8$^ZlrE(#b<-8&2jSIlJyH==9{u6@fuYZ}8|v07jeU%%YDZ z1TLiLop7cae~}cB z%Uwh2Q-IA0G=DV~JH!c3fgDDNisSo^Rjm*~z=xO!bcwzcq)VH|g*q>Ei`M$CD#3hU zXZqJ=TRK%K?XKAlIcY!N{pqf*W3cphLh61gMP zG2jjRo^T-EVMB@$HboKMV2SfURa_h4dI8;0dYeieV6}e2cdZ&}C`AxwBU{8Tv~#hl zv2m0N6Fmb1syho9SA&nU)`+J0W~$1o3vb@M$yP~x_b#-0SaPE0+G~5~V#G?l^nw!o zm=a9^?-yIU3?AI!dFAk{gN$Fvri+nrrQ#K|QE6>)^fl#B4C9lpr7NZq2DDcnkq6!t z&1X+8{$9GxWpeJC+IOq#wN~tVR+&-9_w0KKMtXR)lx5vDPqyoTXg36c+S1A*o7PTH5J`3eeNe#q!0@6ihn zl)2!9_6!UR-W!5r2cKvH(vV~9-IoFi3eJmfm_^TGeV0A0;kb_D0JMw-c{c`4gpD)T z1|%=LKB{n5DC@oDpQ_?!aQgYWuEQg@x^$0TJoA*yXs~4ZqQt+C zUv2D)+MO2@rXMDr#Z9=DmV3XPd{>Hfxp13B)l@oq1&f8I5lr_~kL%(>?%&tGP0nXK-2ZKH)31RR<2CtOO2tj7 z4J}ng$@{O7!uum8EGlxUb_1J)19p~`9Q7Hs)|7j`kz~i4haTDeJv?EJD&443Kjevf z&&-McHQ&f>KK2z-kTp=ps~KcZe3&+^e0yDG-YNNhTZPo>$k^ng-CKXMu8XhzvI=cf z$pegw&RqbfcXf-eAKVj#{;(lL%xpM<;ay3qh;KyH_#>+dA0L+Z9^~KKCdk8jlOXlrZ+8LA@z%@l!VY$Em;M52J9dt^0!>{O-zMG0 zrvn9xi;MH~_S0x2OS<9qW{*7c!ErV|S<@PMIG+(=h`;avEfJO1yRmifN(CebBMycg zb0`#$*svz-JWnrO6l4?x?7))&zOJLf(C%VW_;t&PhYc;*_6JBKj88Y}>r3J^Cxnng zL7-wH%4b!S7WD58Eb}LcfKhP(8u}A0x=GJBROS1U#kn zlD#S9Zv4pl12fmnQ>z`B3>(p^_HsI3C9Q7jAI}ts03xo&Dfj#gV0BOTz~dOV8C?v;Xx(6 zeSNXkr}{kam{aI}`^HsK=CNvxMry#}Uo;bj?wH*)Rlw`tTG&Uzz*7}@(8jHYZ(J?>EII^tRL zC(QkC(`Vh2NpcUKedXPgsspt|aATA19yqBzKp1zwxCfqCuipMZjy4_uYO5{NR=5M{ zXrxm*%EGB@U|nU9A>#Sezn_IN0`^O za!>EiMm}GxB?IJIq0{jdfdl^ERi8h9mV3EhDQQ0S3g2&;ZEBj=HL1q;fBrNj_+YHGEXjc?zV z|0~1mCq~lDUD`nL<~fUYFg{$Ax(&+Kz!_OE$6jhmhOv;XeAt%rEit&i?MkKSOxHt$@e!w$z> zofk^08XeuHBaT`95e!$$x$@SiMnw)|F0p@bf9bQ6S=2i-sSj>9ADXWb%v@4UJIvAu zR`~xW1*S!u_pXJSd+_$kp?q)g@0lVeib>?E3ID0pt4Xi=jSi#8$-n3f(n}D&8 z$v7Slg0o!7AZzuT_+xS#5~4WXPexacd#ijs^~;K3gKjN){0gVP>n;!3@kgxVbLFR+ z8CPn*H0zm-Ha$HXt=M+bXv?PvV{fng3e4@{?{6Rh*QhnrX7YEgDNs`9gVN`FcLp7K z_Rf(E$@7&^wZxj@I}RjSActVcY<;BbtoJQ;bovYtl>AtE^aDz9N}Nc#@YuXN{=(DO zni|(Igx%@9{*iM5ne$>Ue)8jvO6GRV!&aw>-|f*6|DGndo22 z-Ug3*08=c5;JH?-ym@Qx>Qy>IIeXm;jCVW+iGebh=;vmI2BIS(=4xSSJ#bsuYcW32 z0gkSE|Ngyx0n3DM*3D!G$EB|stG}q1yG9pa5$wb@Wca`?le)_1|~`b&xQ!6HPMJPKDtZU8(G{oN?2Sl&i`sT@yqwIU|4F*x#CciPhc7>19>BysZCZO-NDH+z zWNKJ*b%ilI+?C!h>9_ympO(|jP1_BOOq!&m9yw;mCmzN+W=~hbHM~^QWK(#x&H1Sx zS<}rEtbfF*ZJ>!L0~OW6(`GO7$fNe{r%mYe=-%PYPfrgFS0@&G%{GDh_e(SVMWxNABP^9!_jN4pqttu;QV8>lX6wLX0m)WlUbBQ2 z(KUK&gh@2H5I(WABp6j z6mEf?cvQ$@*Vb@rxO*Ub^LhrNKfJ3EPTjd0YxR=cVTdHs1iJ(P?-DBs+KgGyEYsNy zPEiT786W;{fS_F9rt3WIhN0S#%0r_Hh>GHnKy+?3YwPxI@g4MWDqcqB)f}Qp|7!D< z=sw$KF)%Pt&tkM?a6<0l#f`<=2IrdjJWGu_P;hEY%rN3&ZFF9@l7Ktv2wMiFL}8!< zcT_;O6e}V3uRH0#t|;7r%uhi=z=RfvJpf#5R(#YBL2#`poLby)@fUccXzcTCVoO8V z9NM7}vc?=;@IT04%%5(hJ#~Z7+&0KJSVgDmpl9?x+E43K@v{X6hZh}}ou>OY{l=df zZA3&@yaje#{TERq35A;a&T=qkw{y*Fe0xN^sQpIZfewojzaLg3~t%)T&Xld z=g~{s%TIe>qVu#B@{)Vu%xTWoOM59GX+wR^GcBVGUQtzeY~HMYguRz9gJ15wr@p!z zKIc!xb@_X6fk;2&qtkr_*>{e`|3fdcTo9^f5tC~3sF79`QDUR=a28%lj4uZ~QZxcu>4b4@_zZy0G4Q^=Z7~BwCe9N?*=D za}d-__(CR#4dR$)aJrQ7j4gCCyXq5EGorc2)Z9j~Qb{zcA!NXJKE-qS90gyYN8vUm z$ZR?q=b7u$ncOzsT-t+QtQ$qNE-FTY@hvk!QuN!mv8V-q;}Xx^f1|9&Y;7&Oa>Oi$ z?`~OTrYEV&3%FjDxdENxV1q@W6#)6;&*eVdsZ!`p*cR@qyAUg;Q>Xsw2)N0|?&9Gx{(5B83IdHw4&6vp3HJMuf} zMicJ454NcIVkA61m9O2^RPJE2oYLw5S$=uzTeo1F-uo$NmrFQ3VvU~M{iJG5QH1(* zw!vZUmaPKG7Pd$#IsC6@(WM**h@lB5$FG+WC0SYPV>CdLKwP4WC ze1FV!ry*}}&wj;Qfr4bjzo#j1?XE`-(Pb$l0k9E(5*fN)2d{IW-a1^=vw$854fcn_ z3HM*QJqq3$4UT(~K8bd1uD?d){dgNa!$Dt6BYf3*@CKIA|GD+9i2$Iyp*f~CVPqX4 zVsOjI$W4vP_bcU$%R)(t%{haeOXGqS;(a~JNQh@KtP?E z9!R|ZZadu%3mHO@KEeeNMZLAVbP9yaO7 z-F8uO$2U$bRh~dEd~05zJ6BktqN1K+k6FsI3mrF${=38S4B>N-kAsTata$Q0&;MLCrP6#RU;?Q2F*a?-=Q@0r51B~!~>*{O2;s!n1^1i zX)|g%E*w1@1P*)&Us= zAy*8%uwZw5@Cc5z$}d`Z$aNx6R%PLS`!DpE9g52RiWDg7Z_>O?M@#F74nQFE+qZ9T zQVHwn!o8=hp3kI4tr5I=LzyR5{ci26H626_OxZ>5lkDvO_JgO9puflbRYYEUivnYu zi}Wn%*X&s_n8lO$oi(P28<`43M5{S@5?{yY|Dxax5D_r7%w*Gq35f34;q$%|f46f_ z_iJg*@V4c|7a)iy^A9Lqh$ul#?E@?89iLKA$TD7hvuxlj((GPc2{^Tw|InYwmM~AA zoqgNH4PwXZ_l?eWh<|aIcY?uRp984%^hKP8&*P&ou|utKPO}Rq@*Cn3Rd6DPM=%f8 zoUK2v=F0no#+E&z4TBd^@(%sz-^P3vva7H5JGgl9;tMQM`DV)4BNUaOKX(s$86-kS zb7$eyEM$>vq40=<_qOn)#FbL|U5SWJLgWP6)c)eaOv~)d>~R|Zwr@AHf@pcNS(5eo z@t=}Pe{otz|G+A6%*rjCB0Xv%)D~hG&>7t)ql68l2q-E&j7D{1CbB@ z!I#c*O!&dqJWBOi?b3e9Z49Nguq1dMs3fml@H+dZ@>%mzzT09HZPLxbHhS;u2489^ol}2%#SLFoPJm)wv2_9nmSrLGNN?I4kc9&{W{`8 zz5jaOhu1OlX0pW{pGGDs?kWBA=iG1nbuSWrQrsDo1q_%et6th?rkiSyFI2Z_kS1GE zA~#=HT@_HS|G*YQqu|r``2OihPn#Vjh4CDoESh@#*td^hVr#FQXz(YuX%CmH^nQK( zjO;IlN|WdIme2Bi5_l&p+TJk_{DNnfJ<=|qg@*>)k4cn1;I-vYmEd)z&x+TaMEjc< zniIu(3xfvEh?vCKN9Nh!$Kg!e6AyV)q_lYPXwkJ)YLpWfUl*HXe6OT5J3UVm3I(Pc8%9qA!2D< zR{5COF(MzGOG+MmkK8niVv>}~KQ8ORK3uQxH>)jA#s6FJ9)63!$!l2{dKY?H7%R(= zwx=h!7jTw!prbQ{?Pry*3Ic|La|{7j7ArnnLK!~2i!J|a~yn7Fd>{AJIP z%Z6*<-}dEa^9~dWD3`v=_AolGLiOKkMI#VWOX$022~DDpYs4|XV_;=KnVlg%)Mi(8 zyVe#c%wKik`LiA*XQBGE{meLG7^>#Eu;wUAA<)!Ra8dy(5D3lS?rhH0dOq05&mJ4@ z(l`O4f1|zEff_4VmDwhE(wQ;9f*T}*8o*rTaNq78>VUguynynB+Yr<&@2m2Qz%vO} z4_JxrnR-cetD*C9ZS-}~ecz@+o}5J9kB_yF4he1l zu_Rv#3vUnJu`{I-9(?{j#KHvI;knE{Ylv|PEOA1*aP(cMNgtF^i+HK|oS^XB!IzU% z7aCZ4xkJH@VPi2p+ID9878+JWOi5}~D>H!KwSVrQ<7|Rw=J)fj1i(L^G{zsKfb`#Zu{_&#=nz=_trcJ0ayxH?8kR6C#tPYfzfW5-;( zbBdT7r=J4mW@j}uH4QhS(e>Kl(`7{}MSL2jXdi2(?7!wN=k_iHIfXMXx)e1NUXW5+ z3&?T}&60OsKsQg#p;eX9Rdf}TD5K%qe60wCDJZ#|?C}FSUi)cLl}qbb*6U+)-C@;l z$9zlV@G__WFkd5xyb@@~r=@^pYsSu1W@Rv@w6cDHyk?=-ct`W5A~)E?P6=6ExK) z`oQMLLj=P7jjGb$^emUBj2q6CeJZg^#t19{B1qZ>bh}-VV3!#t3D=_mR?7YgZ4O2F zzf^|j+^PWuxw+?%Pg>5Bz$-jE&*w~3v0dAoXGeRxL3HhVT-2^4U6NT zI7Srii@_R!E(q|2QSJVuuDYZSC_&2G zJytzIb{%)gcPY`I9&q)y`EGIyIq$Fd1zU~Vh`~4!xF&!m{!a*Qhy=TU?yKayY$t)4g})Tfy@DT<^s1+Z}reG9+b(|BT${TNfr z+aq7nJ1_UCCGvK)>u(2$Uu)9)9mR_EaxuLB!fRn`wPIkAosn0b{qukIGZEsWmcE1N z2fKMnok#cUYjDMM$N9W!hivV5%xw^g;KKOx>w?7Iieqi5Jy4v;iw+SCwduiSE39~j zQ1m@dIrKnR^BWpqz@Z%7@W zTWbEZhmYU=Dbp`BzaxrvQ%ghRROn5k#c}QrAz7-rG_xIM&C#+aIC^XfW`|u$H|vH* zwHS~A!+JJdgxI8Ffuvr%U&DzZNnI@%{WXHPPL0+2-*8}tMVGdL=j()%)N!31x^t@B zaK0gB;t{Dw>e0DRc_m>h_CX+MN6Z|$2+H!nX$oo7^Th^Xy?EFRahL2%PS0@J|5q2t z$;U~n#F!Z6#ag#nr6D0CE``WC@zK_Qb*$bU3$jcZmSZ{_$CBLl-&O+Fr^ zo8Ft~(vP8*l$4Ok)*sOLb;h`}YjY-(vgyh`JJw1%G_sd3mwrFW=L)Ycr27xc7_C1p zCCbxteR>jlwM^z~Ykyr~!ULdkq934|NEYtH0crD zxC+ql()iQD-rL-vVPU)o|ljf8t2Ay4E=Rs>q? zW>-#xh$XQAu$M10pUV}=Jz9S-KGH4j;8wACZEJsOZ5^a7DeU8GHf}Jau#9@%OMQqs ze^ej?y1^^<271@Ya8v+^SkZyRQ=-`+G7y1%ATIZ&V{aP3feWom2!&3MT&Y-oirnl>Uz*J2pPHaa z66D|7BxspKw=m6`3{Va@8T;B=JZ_sHX&irtLi$c&$)_R!=Vb@@ZUyv#3>YZU8i_z` z3bfUNX0(W8E@D62tP!qv%TzCy{c)dVZ@16Pr3$&8+Ie~5RDVRPFLM3+X#xghN%6%q zWa=j8?eV>OGcgfMtw4$+gJ0fdOi*?cq^ApV3a3xwY*QMhu`^9Uv6jCt8<}gzPvb5@ zvyL`~@&oMX29cfLWc+=pD-uP2J?gTEMzk2r%i!S2NToTGT}B25eQey#ql&ZB)7Cd` z-|pRB>VHlX?vFJk*V~lxL!Fm3v)QRkKekIXy?=R=uLQ5MN_>_5ESBT3;=8vo<7IQp z{0ZLU#_AFU2<&u{CMd-|h4=rLxkP++p06NU7jf^ulwE9-1$olTQ_=lz&fxR>r}WcJ z49K6(4q1;l6W>;M1x28VRGZ*Cr`~?3@cvg9Zt;-%ZS{L;xRknya+oE7H;Fo4wU6%! zLtIMr!04!eA=-2jNN2@R!1EH?f<%C9BjpJ3cM4VsIt7!S|40OcKM~;5S(iCFAPu|Z zfCzc}UhsJz&u;;C7rFkD#_jzUuLZzWFb0by7jhFnNZr~BXp8+erb4a0-*8Tb$;)XS zxAzG{OZ%nCT6exyje0&|tGK8rt$yq5Osw7qI$kaEN0BE>1s!`=oJK>GI!i5a{SUgYNx*v8(qjF0PLt-^)2c z(&FQPZ*buSP5-sb{L*YKm5bnl=LW&I)#y)DYN(lNyo%n`l;sz&XLY)B&u?}dvhJ4QxEHi9IX{n6jY zlgpk>2L3;ut~;E{|NS4bWoJYjk`~l(z5RttjBV=T+=U9f}W?YXyH>W0Md2aC|{Q2?%9Rm!E+a)5nC$GKS25C+yrX_fw z^cvA5?eY2th>HAg#lQ}xm14JnPSpNKB9!`w=$m1NMfpyu zpY%idf6-yR$L_O)Yiw{7AeU1cg~J^ewv zP3cD4ce0$Q*x1;mCHsU%7G;OW93-6Gye7h|1;UeGz<_OCZcFb zoIBun3&uW<5C2h_Q39i>A3uM7fjtbKhG;w3+3kcc{|dRI>@wGist*NVf2JvMp3FX~ zSw#=wl0=wqE&ef!(_cr#B=bEkjJalBB}qn67&iaGo#PVK)yjb9=8rH1&qJ3%;;};? z&83H}H(T5cj-+i0T?AA@Yd@{{)=*A78**av)Hr>apl{IiY-N2oGRw~(E`|06FUJQ3 zj11s6(tG%jg|kud8SedEfV^Covnp^D zhH}HsnP;kPP$OS%*X$ubt*+f?B&7CihRW&ImN%QR0`*gzdfhR0P`Ku{x5H!34)C7h z>OSO11a)a*(ID^MJfH<^$M=jI%%j40XXGIF7RTIvN|Y zWeJSq`H1TF_V%~-&pQ1TS>0scwpir`=c4?Kjq5VGthFtl@u7bG4gMg)&&33Jycfkh zw`YBC;Tl>!bP;B^b3~vO`e2deZ&z^d#HR?zQxo$1spmgMNe^^2z`m+`84`2w~#SqP|lTw)-`tMZTwVVs^%$BRU6 zFN9^EuIpy2OCb>$$L)WFJuNlgKr&T@M}mJsL}fwHMiqcwpYuHMV{5lD6Z;ix+$! z4VQ_o=K{S-DgO-0{C6od9?j_evOYaNfKPy8lULG4QU>F}-w?z7A54cS3y}1FolIxC%`7A*utDo;A?318#%PNlR8~E1S@G z69o1uteLoa0Sdh6*&$TkSWsXXM_#@ZxoowVfMjPckuPp&2t$r&1V>EH^*=YAuCoS^#zvmD< zEucOXVj+~BC3X5u#LzwXSn!&IeOSH>yzd1v{~HuHuu00+I1!qEZb zPuIqTKwb0twoPe8lUz)cS#yStBh28QI7Y?8d*Udtw*xpx{r`a9ty3!|sJVR~Zsgm^ z@jPsQm$#!tevZu@IdDEc{Q2{~EM0Tv8>^61l;-W*$xG$O#{nV6pAOenSLYWNl1|)7 zM1Qw$9@9>_HF%UK*@OU@7wqZr<^I!=t1vgv7WP52Zq!Vzc1%K4F2P-hCq1Y&AsFqF zXP1=7FCzeU%H8zY9bmN$e45a(OYWfiOcm_^4%)J`&R838YCzjX(Z&*G@ zDHDEF!7mdVWQ}3WkP;QeyvgfWgz5gALph8pnUz;0UGCma)K*7ln4SIvJv&xFvPZgSfl9TjkJyZ7=45gK@LRDbmbEn>PX%>HI*%Y#x{-IUfW?&l+@+ zLaXx>yy?mef*Pa`w@*AymO3eC{?Zh#iR9&+Yb}&#_%QNO+-qi>@m`CG@iS! z;QVUri=Too-s!4ts;J&A7kKhUV4&YR;u$KLa`8nwp7+O-L_WK&aoa8w+7abRr|XDj z!w)8KFY@N6GgdBN$iDF!Dm7!YnvfmsS z!3X<=x^Yt=@@Z1(_WbStgx%LA5ry&0vcxk8UwLaONlE?ph+_YZJh$ED%c7z~7djF= zbda)m3=K0T3L&EX{AFs6U1%85)-f)wBnA(S?n2E$FzV9{?|w1Ah zKH_&5^v^-D9V(uKvEs#9NS+?{Q?q(1SK_Ed6d_s(krFN=M(@WYEdMq1`eU)l7sXD* z22QEx6v5_tuGzLTpQiP$ROv&=r04yB@eFj_78hn_>@kH*t;8F`JV- z7mj{%>RB^quHf_=T^BI)uG91DcIf(w!{NqE>@0Lut5<9wHTpfXUy8Erm91*?(LwO} zRV}|nqi4Nd1wz)|7jUn*TwQwM&_6=Kouc>?5O_k(+2zP#gDl&3w;!wGq9%IUq24#J^A?y@A_jk zbz_W4vmzc<2HHB|tYL^5;Jy-(?U5#@xF>}`F?#5~EvV{=E0>D3Anb%lz%rBB_vf$B z(0kpaM-OmfKk~0*zkK?S02txpe z3iz@Bqs!oC_ZUusEF!E`f`o;ML*K+^Q5?MU;2o)K+UO1}AQIj^ghBG6Eo%*p&-04h zuLcYHN{fmd!gX?$K9VkXmV*;4k5Ru_!R>~RYi1bB9RBmy$4BoC^Z0|Lr zn$o>g*0N9KT0b%D(lD<=7jwH#s&x3M9n_-Qw~j3>#_uj~<;z^W)`zrMpA+ENCMP8v zV`o9i;xQKX;`jyUWDk~;tj_*B`Ip#)WLm8X;2!`G7PR#oD_2+JRJRU-nWLN7vMvCo zQ>YbC|0F`j@P8H{wFaW1kFk8a+pnBpkFzOq{NMAmRd@!9hpst4hxhjAhkhWO)2>+b z<#B!p{<)YDle7>lvS&Mm>&)X(kH2v1Q29?b>=XTijGY5+6Sa9I$%59$4)*s434}M% zbcr0lmMsv5X9_vdjr2@lV-LKV1u#QHjR@pt13pU!=qS+qlM+|6M&TA^m4K8%D|i<+ zD5mi-lCtwNDd8-b`wyEGB96uY?A# zVp)BChwqeKyOBJHRp2S_(H@i^f(W|5d$fgPs#WP99u6idL|km}QZlD0Q{Bzl@ zp&O}rvTshI)B6^b)^!_*kb=jdriflbfS@oX_$MaWgJyn}0T^J@0a%x-bTca!ZrLoJb(R z8x_#G5I5djRMZBHN{-Re3u{JeDPd5z<+hKn?r78XR`+WI?qWUevQd|4t}nA-5$1nB zNXQ*&M5|qQX9ZxV9kYV1j-7lNdD{GJCRI(4R4*;QVwg zw!1`Mq~^h4;W73%fMpQ8FbSgt1QrpXPphCoa1XKs4sn&FEoR`+rgmy|xbM9de`dEM5#EN-)bSxWvEFtP(S5)ofYn=Y^$a3HNz@z|;>2rBTeX;-HR55bn`UC@Lv zEv$Ed3BBLuvCBO#NldQpWGj16pI|c{wZmw<5gC3-_?%kACx<6#;b8IwP-p?VWMS(} zt`Xp7c2mIdzQNJ7pOjL{EU@$&%+9Ku1y2JhDK`v*)NMWb*46uR6g#Pm3=IW5bd=Yp zk5pF7Ngykb0o$~khMQ`H6F;s#PxNWfWkAcu7!|je6y`H` zAZaIWWzY_V=n5S+XdU<`zT33DYK{SFG)PZYD2sJ zdCi)dh*XLxuq||B8$n;r8!ju3shqdXT=@P}C|8tfg!xqw+e)B7O6+?6^pDN|?3gn- zFl#1xK(&!hkx$NDHwu)Qf4d*-UWd>-n(nrIUbcB@{g{+dfAv5%Mz)pw7Ys|~DTXhA zCP}u=uUcG#^NRIPrV7(4R3vThCf^9SvwS0)e3^S$wNEj`t0$sDG9`#N0f-!fG(4Dz z239ul0Ak+8DHD-9pyw|hVh6~2dLl&Z3hzmyIfV|-#>AInM$Hh+JlA=|wo4^Q3jDK;mMO(_kMHpWKOn# zEN*Q&_Wa{xdt37-=H{u4pzO=_QF65U_wGep5Hq~(qyhs23*hf69!ev(-XZVWf!#Q( z^7IrCe}U;X(x0MRLrDFijPq0Oi5^($Dl!ioO)}bPX&2qtcKXvOVR-6E#B^#-)6=I%?-sp(M zR*N#MoIY%0Bfis(oTmL#r#eF90vTsaf!^Y)^rxr!&Xnh=%GK`4vpcy-9+PG9Jij|D z5gj>_%{u>1O}F}3%(avIC*aAC>ZfeFd`zI0bUfAiGIOsze$zZ+=G;Q)@dHs)!F=8t z*6%d*H1uO%5!Y~A^=o{*H3NnV$+sdpXK7%<#Inm5=5vNF0$W#u$g}yY`@7X~e6(g+$9Vp;#3x}{y z=3B18$XAJSXawI`zxf|8pAjOw2x>yYi|@Y0fHq!O8)axU`tx_N(~h@xmz9`5+4Y+h z!6s2UWbQ0L#1#GHgY;6rZ}B3=_$S(g)`0Bd315-2@9v_%^A0j{H{tF!HVvPU0UYc( z+B@kfB)NL#*$XCEQicZo|OX!mTBiHjVC}=L2P-{sJE`vyg+o z)Kjv2G-A4_#vNuvHER_6S_C_!%fyrl`wnf~6gw;D)Nv6+# zd!tLU8#}O7u$m3k*3hLsG^;f#t~Ext00+%u6!T>0Vw1xTQ~+eEyj#{s)b?g;>ZAum zT!>w#Ff%xT57x5%z9~qhcM5c(Nlg1dg9x{eTe*1X3#jtc-C}Y&wSoZ~q+mPH;W}UM z^0E*(`_riD7&mK5>KYopxZ_EDOBcOiA7N=~S|ChiT;;JK+^%KmM^bC=`mAp+*5O6C zxQOAOgaIVWoo3BEI-RT=3!pR^@$Nhs1B0-i3t~IYW4NO(GmO|XQHa$Or)>5iLfWY& zgeZS9M>@<0@H`{tzjb$y)axvLL^_@c2|q~FBKd3uYAuU^5(GkO3>{-rUD5lkM19#| ze!wY4@J$0ZZ=esOZg2oM4ggyPY!(UNu@-FpCx{ln?#nDd0k6Z2{yU>#V&CM%#MrF< zr|LEEY-V+fiUb;QIF!%2aWhnh*xrI0t)TUa&g(1+A-rK-OhN=^ny^1|LWG(r3gf)& z>{v%A(SJQMJ&07^8;K%&rskwZ)4t|z)T`ZG6AM1wX}aHy6&$9!YD2V)>K?p6;X{9? z(}Z4^#FTD$p}_Yfu{cTiJ0kgvhO~As&xDY;Ki-P9;M|U(mY8hUx|sWj?&F64yoLoi z(D7sN!BNz9I9K29k(`|D-BE13(?t6A%-mV@LCDYV4Ty}ljaTx-e`Bvy7{F5i3=2>E z+5uG>M6m932f!CxCo2mdEWS;Qx{vTrBlU}#f}35xfb2YgEps1~fs@h?09y@I=}6d_ zOhAoiJ%!0)<7Y$_TFEV)$hMzSaM{_}p{=o+v;I%iKEh~U???$wbZM{U%WzB*+?*T6 z?j*KnW^z-IwSIvSo1LGXt%4#JCIb;Z1>JM32yNjm(zdn$*$=5)h4HkEhY2x=fro#c zK8wg&AcmiE!XZZ@i+MLphO0a}{5e2UYqy?}w zH5#vogRBU6@>IVJGQ(jyp1#4buBG8tQh)R(t^3=M&NsH48%*%4E@<@G;J$x)x#@ic zelbO7PmqTvtK;OsL#D}p*nVXq)EYs{q=M&%vniHOk8la^5HwwOF31N#9JUEoiGIob z9osp@#S(_a>_wCJ~oZA(Hj1X0>Ukg#*O}=0{aD z3rS0esYfOz{xE@yWEtHQ&S6bNUfS?V<{MTQ!2FuF_hXzZsP}7Zp8cF zbNb;En)Fj4?;p@TT1>~9cHF3ir_T4aTcV)T!G(!X`*ipVjCm2}+g~X!26$xD*-bsc z`+r}PSzq^_Thht7roY1**Y1!@;(m7VgL!KtX&dU35H<)I1I@>5Q)9hzf9`}Xjp^;SX>|zLaGBiyW%NRXGMltF9 z_*eKt8aV-?MPg8|etBy8naVROulboj)KL(dd{67~`%6fTli*wszPd(z*!D!e~M)gnm)TmTm`rE%ls@;{Ui`tiAI*_-h(oBS+whFi$E8vi#i$tWS z0`qXj&6FP?9QK(WQt-arWA_?vjeOl`t>ccdj{xpGY0Kvn$xYNDfNQ2iU)?;}@RJ~= zYTT!`6Nt>_Vje62U>cY9F;3iy4rZeSwMv+GFeEC=fzDM4`HX(1$a*$Q*SJ;_z|bL++CYw?jW13#rT~w|t>< zjBj!Q!N_%0KK(;1IX?wC<)uqxaAM$nQ6dz)_T|y)W}vsw>#c!7rbnYCrKKT?2H557 zBP|+ln=?&>CB@0QckgSXVzcaasjBQP9y<>X8xH7Sq(jK_YtXr`)@@tixU}Jn`!D-gHOktvdFy<}^w*(;F6QD}^z776;zRcq8 zkvU2+I}6x1woZ?XO)oRV3vd3?7`H0KgW~Y^8xvL~RCh?rd7`4$Vs7z7P7;>jY_bD( z-4fK%cqmxrf})ShpC3+3^roq9C#M$m43yOvVeRZqmzt-p#!)+f)7(8Y1sKV~MOTI; zDG>c#T#D_7EaQ@>`l|5(0M32|6M8Q9%8G%bttG!MT&uBWZ~I#)a~F_E4+L zLYzB=l2gs>hs)!2oH_OT%i6XShG(rhXt>$%V$W!op8Ug_TO>KNK4Jc+o;7$_5i9$O zC;CXOv9i{$zbQ{zH>NrX*gq?ySbVLBN zTY@CP%q69F|IW*VB1z!$C-P;`*rxO_Imo&*d_WT_$vc~4Ok+iS6`VAh#&PE>qw4s5 zW<;pEEPy;Vgk+qhaxE2|;fxMvk*E=^_3d-bSBL6!D$KbDPR{|PP|cCBn-E1rA(z1?YV+-><|e6T!1QhV;4NpPa!~V$Aa#h` z)87uZFM`wx$!T9{m~9W)e*e4620!{{7~0iU@&V=ANXg_^XQNLtAf`y2!EY({+k+d{ zgk7YIoyz@NH?S@8oc*<5|78}zd>6(eVoRde8_kdO@m2ib(yJQsx)+FZZwa<$nfDQt zkIBo65tIk=@(104JHaCG z>NOmV-rDm8@b%@toOA1W-AJekel|S&$s9P)HqzCdy}bUse;OKc6>SEJZ4@1GIdvZT zTAkYfHvLEK{gQDd0uzUv;ZHhwGJSHY!(fgHLZdo42O0Zy)<2{jFLOH@@{6uU+5DFH zP09?He7Tld{gd@j{o<0NR@ompXR-LNi%+&&I-HaiIxS^2(n1kMWaFliY4!vCM?za( zyzFQA)AR|%_vVWZ+fSb}hQ|H}kobkCJE;FGg;&8G6ULQjEde|6@QQ(B(3MY(MLZcnKZq47D^#VF7q#nVTspb1_84()Juw;@@=wu-eoGV) z!1B8AJ+ALvU0wTa07Y2TFX8K`5L`P_w?I}Evz;Yl!4Z2ld-XkKNR~$8dZ-eW(8{-* zWOz`tJZkBou@Qs^CWdqfJfw%v8WzJSv!WN2O%RXh5TXHTKKChRQ@|(*$hZ)(e*l4w zI`AVH>;kplNpQi{+CdV#;G!l0w?N!t2mVjGBH<}_n+)QWUs)Ik2P!@*?-J)UZ>yK4 z%RN0EOwdSX{6puSr=JReWg3)4=wF`^wRm&NY%N7BV zRoZV#y1Tmgm%^-rH0XZU^9WzOm~^f=k`k^TaR3e7B^3=DW+2jokt#vgE??teLul$f zHeu_B*jbqQ0aQ-PR|L>hDmXGGiy72!e8tXaEgAO<^`r|htSyX`y<(V5gNfN|tA{!t zt@@#GqFV<6n*_TGiwJ~R85;+!J$Rhx@)4#k$s04WNoNOcHFBPKZeQ?pSOquj2RCl} zwHejD*j081;Y*?!F{jEl01{%XL!V-7dht7dg% zaD;keoEz@j^G_T!rr$h2X2>>==#>Zy2?;P)6W36#C#w$IMK-SjJ{H#&BknWOTuT#0 zxRBMosycV)=3LavbIlj>56s?$a4k+zYN^1}2T_&87TbK`y-8?3ucA+(3+0zat$V-L zU_%Hq{fdpEys;GzLz$Z<^1SBfy)C*m?mV>WBriAk^V5>T7oR}-okeYI&2>+ccVa|* zH|s8Up16qf^M%x2Okvrclec+Pm8NU)?Q7bwi;C6UHCfr zvb2?JA&Q-3l>qK|=$TF_(>hb#2{}TR>d2p>h{6d24ov z#c%&@z4MhKxYSZ95>v_j^fq4WCQu}r(O|BTRYwUlM*=2u(3t`_Nw^|lO8_W(ku8Dc zNnL=P0MccXs6HS}z%8HOAfm=RNp2TOGCnJ#0?{DBT;6G)Y7Xd}{z>Jd2tB-u_+}K; zc;nerG@Ul*ht92r1wJ00=G6l2tQ^(T)2*%RW|kr2!+kd_8mMj{3~a9ZwQrSveA5^Q z+>F@yyP!rpy9-Q{X)oy#bAYcPfVX|He5wl+5V4-5T9USo_~0>^04Qb>k_~NlXLm-~ zq$wQ~ETUc@%=)arB35b{+@AwyzCD9~4#mf3(*-gFaE11QUKpE5-3lQ7o$LIy(+c`C zof7ao$ZPV-%J296hTk@@xjItb8}s#BQg!?CaTGeVCybY^=YlcvyRlqkgff!LAM_b& zMmXAAdKEt=^HNXc@WV)?ns4QfJ%bs`;U~(ln$r5f$%{P{`EO30C8NMki^eakk~h*L z$-SiSJnO5mtYC1mGdSt`xSWwwbS*Ty=Z%z+YAe@(3+!r1$EY4fyQ0c3Ti!*MVf4A` zLhbRz;Q3$V^$K{x$-5D69JG_SapEj&FWXg12^1EGD z&Cqy}yZXfn2M?PH_>oHS$HBwAEV_)ROk?jiU1gK^JilxhhTnaaX1nX44IFI*3cU0j zqc`-1Pcb$fCI3}H>A*szkZs+cir;T)3tvGzN5dDpoeDF#RFotss>=9AOF{WnsWAld?IM-0?XZMu%jz2CImm ziq!JipPEH1e{MbKOarw80BeDVdX{k)LE|&D zOOQhJ-Aza4`MbFBFT)59`8K)1Fbvu+iV`ZJK3FUhuJe z)nA6u)4uTnvmxflP#u1j^V#_|$_vVMH(!AS$9-UQ8$Bb6c^9Ar4j#WjT%^nYDu9@v zL+c?lX8`(?wD_}8qf^oh%}<2R5X$giJ^Wyt+F5xXz$af6=%mn1%Qann1w@$9k%-wn zB=XH$a_D&Og_L>*tVyL ze4{y$GPWKSZTg$0`0GgSNkq7(C*x@?b!8(&6>gb0(|52EPJa(M=N5`+`F7i~9h9f<`cX^Nz?GS5Af<{zWa zKXRqFCx3Lx6nSvpa$5XYF_7su=_*0Ntoob&=(Q0tec`SUuU8?a&nvZ%P3I`cZsjwu zpvS0_kXBP6fON(n&F3AWi*mMTJd9GOdM?rY`(` zSQ^z_|G8&tbf__PT}*cAXuP|OV@aZ{RKk7Z{$Gw@aH|KayJG?FU%cRLG4=r zo!P_PBZ>DS6V?-iPRhCfC-p&K`vMX8s4n5)eb_Dm_Uuu80U;I0ck;aTJ6uARb`}ri zvi^MH=cmb5AP?%@iHx2-dxgRxgB@4zofXGm?R|16x14U&1fq(B_i4}bC_K|zY4}a1 z(@*+a+H0kl<^3vCP(7Z%^M{E4lP7;a=dD@8_SWC8D;DiLKFoPQ_B)IjQ*)Kfnx0<_ z{pe0#LEPubn&!4VuS`TkA5hpUgRjopS%|YFoISbY5C{c26&84A`-$ePu5D65M z3U26dN8jffc+d}_oFJZV(0aRvkS8Q^GS;G{ne~ViB*0I^O4$WyHEx3%eG@&sYyN-E zE*BBU9W2Yg1|6i1y7mf3JP;Fg4Em5={8=#>M-_^AKmwefEUxZWnz^3Eb_00HggY!U zRX*JxENeV8O()t9dv8~WD4?Y`y4GhgHhMcJ$!u&jD%Q)UaruZzodNL|8`F(X08Ho> zQP{c~_%c4;u!FKHwB!OO=O>CV#{_g@-l3S780_LxvnNzU7g{I;MtyvK87OTFEL&vw zI0#KC+J)SDoyyv}{=@LapQ9^HWz2{4as8#z92E20WmKwOnDf`HC#8yh2Yb#?!gZI! z-1SRoB?=&w{0gtN?_O6~&fW{!0STz4{G1me({$w1l%bT+=kFxCG79Dg2Oma;O)!$| za2++XP%>Yen5IAkLNWei=6L8MussI-KF4r85um>Q7f7Ch8*@OJ5nS$fdq3OHcB&i( zPHjj$%0K{E8U94I9b*-PnyLBz0;**&*CQNj9*OUNU165z9|ZY+yKR>phTi7aefY4& zh_7Nf9Z|1xKK@53TsNuBKFeL$z-Oers*vMfzw%Iud&}o6(+^VKERk$?554=+rr*6d z_bVDbZ+y?|?zVY$iHcsbh*{6WlX-6P-!(50Ugr>zs!?CwzpuP`nqL1zKfwO3g}r^_ zw+lnRu$QlIgWO+OIRN)(H%T}ia`ZXOc^V8m=0kJ4Sd9giI>Uwi*DgR{~)j11zlv?-@(UM9omCRApcf4_aY>m4Uq`-GbXd6zPRAgj?y&) ztutISuO~sWkR~fDYmoHDhn?xHIsu!W#w^YwAH6agD^RxKY`-3Va!LLrI$Zb{D)>u7 z+f{=09;3+eW?;=l!n>4i>=$hk&bu2J=MnYOXX+R8MukD;<0EX^#&KEo_U99yvVr&B zlI}EG_qKT+j*Ga8T@)m+Hp!o+-rQg_u9J2*9WncKP_?p@#Znf|tIVgN2O<>BHsmzC`Z6J248jOk%JO#d>=@eS9*|Hfuy9rJc0lw>xG)K95+Gg@ z2)4Q%+xi{>}P(c7D&1e~DPV`-MSlHB4@bdUh z^A%x46diLtTDTVJCoi*bXTJ1t3c=`!5ed1A;{;IiAK+#zv1BFnn-teGqf9tSX8OC_ zvZ^Q+oWs zdpBXS4qNl~T$?w^3f35M%f{q&vE)N^3=EMGwL8l;Ha0OCor8SASo=1L^iQ()j-)24 zJ;rCICzDfJ;lHB|?ec?SLyr_)jX)a`%mIxHkNBc9iL|J6d*-@}63^u1CeU2i4G`~k znWuYoMOfYSq1St>0E69s-%fHprzveH(SKTbau=8)8 zSo*WXrDvTDa!9Q>XKfPgQAqWTPwm+;&V~9)5!|f(enGSC1vhK`If0)iI86{#4BYEk z0BT@}x@7T{hAe5*mBoBx6yL4B8shs^h-|T!T&dQF)UN#qBf-{8A=3BlK<21)8pGTe}Lfp*bzCO?6ok@zxj5=iQoWUd`P{9gFc;Z{B+&CtjQ>v!!C z1@k_4iLEQ^Hy4zG@a1tJis9aanPsI2rVuDMj%ZZmW_|$4BwOrhXR#z}9xpXX{D}h4lhp z-^0N!^s4udVG68yly{P+~tQ# z5p=p1RTDh>k@?!QxBWmg4zy5T0< zR@Mz&AbC5Y^HhSplsC%0Zz|mLjP@Gx=1vdNw4i=BlWH-VdVSWLskaZQ6;k!*)b3yy zE*GxHwzl5Jw@6J`w+!8sN;{Ya`L;JQDH zP2jC`oGN$gH2aAXe@MzxvX|)tG98^t;74d_utnDjMJT-Hqzi^6ok3BpmwdHjCi@Fv zQyLc+#5Ho*D7a5MxwZ@fX;l{5Fyi4oFjrifwJ_!{QIiR8>`TqRUGt-9Gn`7h47QR4 z|K>Q8|6au2xM0UyJYFf}I#@8YQmA@zWFX3hHnea2>Zb(GEP;}92(gp+yXpncjPuHE zf`fKvrltg$Pqq(3f1i*ht8DWQpw1>O8xl6Y~y9H00D-Lw)z-8>14U?0(hn6Q&Ta_PwiC~sX>;x45Z2Y z(gb8m<=!8eWX_CIPLX5*%I|7Ox;Cj#VNK$frB%>Q6GXEI^r03Xv1U~u=h9X$NbpSwQ?2f za9!2b%X3d-t*_nnq()J3PiCx+7e&hVv~q&hRQV%=^Lr&vpzefKHA5?~Tv!q!boSEC zhEYCN2C2h0R?YI(o)?BjULUQ?h^mXwc)@*h)d|ZXcB|=Rm_~z%la&=7nxMrbb;VP( z9U=_9e9>L>6RFo|^;tvx=CL@B0mfVlk!y}HRG9tE-9yK$CzFK6c*wqGs6d1)VodEQ zw|Bw&3&$u^fZGJ1t*(QJKbR_@u}y`preX9Frv-8lLx zz}Y0d|E^Yf5m-r%BYXD1p0wpIk1%j ze;J7^LOwn^EiCBLN$sMi^l^Sx$P--$r31Yw1eE-L58c^8#h zX>?Ip;WGRZd-9kl4ljMQC5N9lUR<#J`qUt?nI(b<&M+x8i*-EXx%5dcu`OtSK;+j^ z-DT)t`0;Yh-m=A$nrzuURtKKZ%=tfGnp4Or`aska=?BEX4UpjZaak5@a&=zDJ{C!` z`noY%hHT-VaIma8vL~D2d&n=z{3D{*ZnrnBKGw-;yz5&hzvIZdGw7S1cu-0tk|NV)ji?#z<8Qa?lrdmYi6r*d^Sa@>&4`uR&! zQccy~rd~M49o~AoTeL_jO*Ayv;sxNC4}!me`m0qhg<0Xt=+JaT4EK|u>v3)z)dJ1M z`z8go?~bdh|Ac3J%>@0wik}~YWxHW}IXt*-2TK0?Q2HwsrNyl@_iu6#zaO0tV7h{2 zFY?n8w6_R7cmPKZiB&1=x@WnQPQH3 z!_jg7j06^6CIcO;4OX+vzI%1$4-xgmVoTyzrtDf2GQ|B!pUrNn7fMUzvv-y@Lt=V* zA!S%J-Bg8bRF#?D>23PajScqiA4V%SB;P0bO4LTfT2MEWJqd2ZK9Z~Kg)ml{cl-}y z%rpEmtRf{z>b=>urTM#*pGvp99nH$#rCW;1vb+y z8uVQZnw-q^DW&6i;PwwV0;r4x72yHZ687^X^nM6JiuZ4!cZmU%kR{*L)^H1Flgi@l zR|KO>lpxiW3;zT4QM|4~L<_A)t@ydPML^78$%8JE9(bnElE=|_aj@KddZS5*@M!%C zu_n)>353;H=P#dK#A9x$b(Ci&BLfY zv@5d5)K`kr+jDV8w_Hn6OC{Pj6gS;KDq`0j2`sZY(0mHtDM=O1Px zzy}100RBNCt}6zRZZ(#$h0T$f-8|vrx@wKNNa##JCeUIiS{!oy3*ru8WPPuTQptT5 zog;@x(S7vjwQ#@3ghO%xOvGWVyGE#&rlbhF*IG2eCNZndU-)zjy3HuK$9ka6mNsS= z8=N|LV}AnM_uZhS>7BW_Ae25R<6aL-xabv5~PxF83Gjqkmn#xp)UwC-8A=C6RA$cr4JrQ+^lg*261cWQJ2!BwM5N4OQH3g& z@qEo4XHtK5IpHPt60elvcyJlr`EUHcQ<%{kd3MjIr}wOq_C71tOiLf^Yb@N=fvtTE zyUHnLLJ0qY+vxYs{CwihFBUKm=HzBhKuYzVw)Z@TDnyoH?noFYr0YU@4jVZ%JB-fuafv#i^l5s}bgT2$;Af}c4xzlgr&Smh3 zSLG4iUOy{uV^M>WXyJNIy(2DQO;U6o&Y%5UqOkt+l!6`Tj7{_UPPKHaJuef_dmWE7 z3o;MuUM<>v!GKawPp%aA{8K0WL&Ve^ioO@@sG$=O($zValvphw=4eV`q|R(7wIVf%_M zBq7@uZAGrdkw1vf;aj4F&#Cq4OCkdz zKqot_&#+lwj3NwnL$6~AQxZe`!z>sctuKdj@J@3tDnzM5tiY+Sa!?G~&9C1RLff<@N7}$r)dt z+Z!7q*lDc0$+W9E*y(@YVRS71ID=|xp+nPPOsm=RT?v5d6mlcsFb4pMrE!BAjTf=0 zi*G(Y++HT1BEj<=|H0N1QezmZjXDVZ$L8-Lssn~RDoh_!Y)KhGpG|CiYDi3JSibN*Hscse&+29&?TP41y_t*AYPG~cIVs8_sy(aRSX_e12 z)Thg)`CezcaMmJLnW9;M!t0U#eodHEC&_-z_0-RBoL+M?DaB@z(VG08W(kaUm{5TP zTK>}?X}y6rT&KMG8-KU8nJq$WB-}Jbe)MUxBUDUfxr7rtvAqUfZ!BV2i3tffBXjc+ zf#oXo4GKyb(fLU?tTLDJ{Ola?2sB&-idzkX?@LE(}sXbc-7-S21~hVm}u~f8{q3z~D!3o~SMFEL~`S)NNlOV(I&BD~z-wH@weSwgX zEq5Z5zKnydX7xbX#RE4Q645{!yq9P}4v{2lfk)kGg7Fdy(Mrbu*NY!H zyVgzt8r_-vzsG5^8JfZ23;)8(@uFE?On7aU1Y%V^T= zekC@=fujfnUWV-Y!L~08{hviFyMBHwJp(wt1a=5fdq#`k<$_4$jMIT+1r;ah4T^*8se_U&`JUv6|`=uPQI^>V9xXtzFLSO5hIN>ATU$qi0I*YYI{Y zI_xgVXS=;QS;1`0fz_3HOqcj~(tsa|&oIDx9_G7Dx=c-1Qgpz>s&tClrzKGGTP&wc?icXBK$7 zeRvns6^tUHmW-YwI^)?-f zzJFjg%?W53>RENerSK@0 z9jIscuxPTX`tb3NGWo5YmZMFX2TK5+b2A0&0D)27~b zd!Lnw5Pvig3SEXI7NE?wWa#})=8aph8#`NP33hk4sdt=JkBwCWnsp$d*mHKYN|Bzdgyh2Hz!W5BxN|b7!<=J~#xiSS|w!O*Jhuhc7Yw;pnY) za&g*i(y-U~ZsNK}lM<`-^7HM)9B~mfGygxoGiA&UM*N^(x$f0s#bo4#3*~WFFM*!H z5R^Ba2KBCOu?q;=4Ml00_$?;eoT&xlji-3XNIV?lQVQAKm@p`Q?B%+NMggqxciVGL6i@pc&b zuFoddwldSV{~dVoXDr$~q>f1PnBt%rlL6Qrj5 zQl!TADpSN5UQkl8&RkL(|ly^tOJW?jY(!c|0SdA zomiwQ{Hq}^Y}e1xMM0b&Ed$B7gp>s-A9KV*9Kh|702xuFBKun)NbwC?Ig<5j>4JPm ziTB$wciiL5F5$9&5iN+S+YXe(Q=p_1NBFjZg(u9=^~wjyThS9P9FEpmn1!A?pdzZD zuRdIK;PKd4o-JQ>;io`MvcdfrVk2gQ3u)??`!@>m%Q#(DQcFz^At|Xq8V)(Hs{DM{ z&@p!3B}U_LlEPB!?X@58Z#Ew3{k$?KbVW*AM<)*l1rg$3z7)G(1k-^0rXRO#FVPXE zd8;r}+Q7&NpC6r7I{Wga-piMLJCHIrnv5%p_g4!S(WCw z{d43t+^QP4VdrF@CSC!xgDvTqU0gM_v&;a#A&+;xhcvJAqCsYnfTYoE1ccepjQ+s> zjPIdIsD0sQ5n@G;VDPy7!7o?9<)o}d{j|$VCde1geT{rD1b;!foS9Ep&W;ZIrK^7P z=FWJW2_?!j`OTXb=c=~LJCF)d=6j4y{+~S`8My8e$`P%r4$del+oQ^nO}nBZjn$KE zLc07e)loM$WO%w}O2xTXTHWe)Wsv-zKY!G3j&jXF0~C9BKvZZfuZgo~w5kOd^nF9Gsn>L$VkJA2T5|mx=!-kjBJboqvaSkE=okW)i zyRP@8EiI2XpNR9f{*v0UAd^1GI>}EOC}%Yk5IbnxYo}(qsQmzja2{QT@QOpkFg?6P z+Daun8PDvs`hwR*fsq9Pzs9csx<(FDDbxe@tYa_{V@90LBWg}F%|L%vJKD|gkV9K0 zQ9sVijreu|b7c?uJrf|rUyDMbK!fcdd0~iJbz8Yy=Y6(uzO;YkRI z!Uf7=T=S0W)*FlL83-%gVvx$=A+!c+EcA2B51oKAfRV(gYS&d%-}mEm%v&|gx=e|FMksdmha<-heg;&B?MEF zC8z@92`xrsw}`$)r`-qF1MnyuUb#4+Z{C;6Xkc2it%o3S3A*2JmdIaO5%u-UW+a7X z=YSB?M_}Wye(pi;TSF=wdipS8GXRvZ`>vPU_;yco5V7Q{OfO)(yQJ}g&aGZIQr)o1VGScs#HrDlJeYb1#Li9}I;yTan<{Q9mD_fSx` z&2ys^CR0C3b~pQs!g%Zk6D*GXRC!QRykDsBrTA$L?D#oL>1bOjY%I?6^d zRnJ3q^D;&BwFPEh`$M~AWHevp5VBZGS-4#*cbZc;^`MK`t5sKOU} z^GEezZ<)t=$RB%eX|g-#{;5`nbyJxm5if3BB-QH0L_#)#<3`pSbLbX6DgaEPZ zq8=%?PWM2@0FMZQ)>CjAkZ|zLASf*LyTh};H|?!X{kGDRTb%C>q(I2Az+ZUai9c(cSXzwb zc&W=Qe?~vfEA`sZH|A{Z_I&D0$KEn`)Z5b&OgZ0pQ(k_$>9$mOn%46vVG*e>qPOVn zK1ylFs$NFqewdd4im2zzW1y6VgD)H8I;AppI>JCR@#5^bHXpQgof<8Qydeg^@$HB- zBop)F>kSUC?iB18Y3T%Nyr!j%T}_Tsi#nw#Gk3w3sn;@(S21IZ|lDc=4La%%J6R*&XuyuMbJI;T3e~zzREHo@1=cr*O)(c47sd-j+6f|Y}xU0C@EKdr66l{d_ak0xYk-V z%o<{7ZU2)S7M%B7Rq?jZC;vwA*LEFQ=sWU}h8{-Wz8n7VHIvp(J0m;Z9Sc%Z)bN%) z>xM2|e(h3SIb*GJw8M8~7Hxe|)ipx z5Qa8czHBRkM9_;iZhCGN%DHo7Y%l*|X26w1PyxI2MbZE5OmxB_%BJoTZU@d5bsK9l zXp;^6G*DU;&LM)!3SQwCBL!&oI#>6lk=-3ZFAsN4U#~taL$x^95e*9?jxZv6P z=ab{sRC+*Frw(#E3AV~i1Aod3`!Yp-3%4eIp8{2>8BDOryN`#is=4GnAL?xqyb%Js zVMA(LMS*N345Q`(;^V$WvkPpZD>)m>xSkPk&qpR=e#T$~BNU!KE%CcQQ8Hm|pccJ2 zK*J{aRQS`t(VCf6CDMTaY_Cq3*aHihm!* zY;)ao&aD1@?)d)5en<4B#dVbHKutYBDu2FqMni%~a{5nYN+~w@#O9K?+Q_&3)BD8`<4%xT$p~ z{39SAvh$-OSYs*>Hy$Ig-SEi$tB?ZGiU|$zJud@@y5~v&DowTa!&!y236w}b7&^%GSe}ChFuP~Bcjy8EV1jb zZ%IjfZ6abZQm`gCQRA)j)ZdgzmP_;^NS0wkVbX=KpgaZwWszvZ=X^vBKi~9FI@8(Q zttcGvCI8L34Z`Tw<}_tJrloga9kG;y>0`Y=I+9zlwfbTTAz|W6DG7U+sXtP z=J!fJJk#i}sTgoa+v170w=aWbo=3@J2Qa+l5{ffRPd-h_OKwbWCU2WXYd|&;U75$j zYz{XmuwM2K4zw4GOpm5Erf*7B3i~>vjon{bm;Gks)6hKyU9d@ehldn{$$r?P^anuk z`9_egoGLu2r!CWpqIJ~l-5(zsy-9va4ET8O2 zQ6+mLsMPH$sA;uDw#HU@Ei^k5BWg6K0<(ml#mBAGVvYqq-&76!LkOMdI0s-gFwMxv8bND@`!Z`rp)fR$_wgQ_f57>*6V#pctDWBqg zLGs5rWV}LU6$no98}310RvURqfew2LfzJW`8xr9d3{HfcccHOEc^rfa(Soo<)XOeD zcOfZ1@;xB@B+CU`COnMzLO2jhf&z@NOQxsDjaE@3=15e_c^O^M0Js;L7ja;cZK|x$ z`9-F&aVxf%G*IIX+OEC9eeKz_s7m0{*^K$Rz-k&-f#x((gd|~ZUsGbyPUi_yL72+C znxPNHC%IwJ9$AT+Ruo0#0LG+)w z4hLc;;$xt5^PWDmDm}O^ymLYl=#?c+^@~}Ybq}N!q0iqZsO7vPb{Pap1W=>fEIIQv8;KrDkR&YWSmdv{#K>X4OXr&J#xOZ=Ay-#u726K4YXHW&k^7*?)! z?2*(!{27HVxVI&|>0=;E9Aa4kcyM0t@6o(&2bMnrReYmu&OX034hs2hF52pWPSN6l zP?WP|ql|zJ7fyuY%7HzU8*hi`&=ATKm{Zyote7(ej2GP^l>a4uK2a7^YR-1vWtQbJ z)%ow!{Cn~)GojgJ#{k`pP*k=b>K9syZ$LpkTKi#(w{BuK>+N{~l3P)5_kOgfx~ zzWezxAkd7=W-s%4AE}WStDvLZ`Vl%%|9}MrpiD8IQP>(BGQ~5meY7epC=e9*V~xCg zwZO`*inQv@s%OoC3Q+=-@Lxe=ZvxOSyVr}djj)*a?{x%gGkjD%cb~ftEa@Mxx~pVP zJosUD$8gA3BIBJMsuDYDc1tsN>1mZfsk@HoEW!EPQNio&=mfI&=GHV>aNc0hsV44B z>suoO^%l#;*xxF>d4^VSTC%HlLcQ_;$hE=1#@$>hdX8R`Icz3cN;i(xJ$v|~5@0KW zBm+OEmX6M0r`fr>6xbtg{9cLhtqV#9w-v0bHlFFi z+?ku}n!ZdvA5PjjFzo=GY594mj(LGV2SqoxzJ)RYXL?o*JIW!4+u|YjSN}F;aXbs@ zQK84O4#N>;w~56I3vI^_e}PVa{<7VcVB!PuX6mPnVU-x3cS z>g?)z{*yE7xgue zu$*ri%OJD8qoJ!mLa{SlG8X412&@HF;P$sqrA+GH76}rOrQ+}=uRjC(j(E|0txvJ+ z)f~fA&pdhP!e!y!7eair zIcT}IIF%}JJ$K0EjiURj1#^(-0k+2-iM#kZeCnp_SCiDU<^buOlO(@K%q0hZqhJlJ zs5rbdJz^?WDsrW@DI^Dm!}9Z^)pXE*&Mj@3$|4jKcEJ6R`L$Ax2t7WRgepI41`4sO zs@Y?j=j#zF{&#&(??tih)-sTsi)&>n4Y&m>y4I?HrnS)L-B(~*;>@B)AT(XfscqmT z5qNNwUI69>_y+)CA|mLAH}p{rH{g@SS|ui&7>zxKRwSC99)#NYy%*@?7Bu4!Rj)do z|0svycVeTgtKX1yoq$8l<68G<02+uCR%0HjFRZL zXhEzVfhq=L`FW#^DraWd43kAgsF$y)@hE1ca-$)6voJrtb7#*=(ZNaD0BOxu!PX<< zg3}L9VI)8pc6NkXVG4DvR8=X%VYuuWSw)@U6^a?J_=JS`M1zG}#72grz#BV?M2R8D zjsl*4_1f(Gc*hRI4ASzY~oc2qG41nxm9QbHgwEpxen~qVG=!hmSoC68`gdZ z>PAMFAKrwHr`x5`k)UVIar9sAjaej1$OuLSYco&Bs9fAa1l7ogOrpYQlDE7k2jG~# zwK+{w%C8+b78WdWyS!%hWy6v_q+e~+3KbY;juPoCauRUQN{XwO^g0fruUELQ=^Hen zH*R#x(7GaTlTJD@2Tu3`A~?(AsSorXRd}#58XJ>UNcK zydSf&elHIdba$uplRnr#F-bu%BZbtPEzl?)Dk6bT)vZoD6z~T#Ubx{QSU-RI;W0p@ zBm#ihcIHF0h}GB2!?2Hm;3l7K4@D9Fbci2LnmjpVID0lXhlo$Sq5?3!xEJORIMrdk za0}AD8VOI8WXe1WB68`;H5GxAx1AgaBpm`v!t#A|(ydtHO6!x19GKU3{F&A_B;WL5 zeFTSXu+B!7Vw^!}EkqHe!9Zz-tToT;V;n=z;Km7 zkJYC%sIg>yvF)+@);g$ck8~D2{quoo40+ zeQ&A+UAYPi-N4mwbhQFK4T6EfsL`YNG{vnQ%#Sj}1bg!Mn?&-&um@VEnJ#62C-(3B znk&HqX4)~|OMd07O3m zo6qzs#ChCMSRl1rIqW+oVE~f|{A(2v2tX9*b~vP67T!Ex%Rsq!8h%VasEjnzKdC5? z^T2lK1~k7)AW>=WeuR-K-iw!~HRZ(osv#`X!9U@j*OI7?eO5=3nlsH5vZkuhwS4oz zzI(#f8yP;8nqZXG>BrK()vy}9ABs1a$2b!)mjYoP{H?R?xwEsBzWX_&BjY?;K3J)^ z6Spt$=?jI8u7XeN^Ne4-CvAH-Bu3Oo6B(97UMpU|`Wr zlhuLhHu-ru7+XPI&&j0O=`0`0nis_U-dV+gkX{ZkS+9nJ_gm#(SNk3+hHcSDw?0=S8A;U}(RozOEh=Z;R{Nb=9FPg{fIF#0}&%Y5#?ffQVG2czE zh6tlae|dI<+c(yRvGc=1U<2EfV)-OLa)~NMNy7Gh0%LdPfgr14-D7j`w!v76nb`hN zcGl_#v|$$W^Yhprbq-^KFV>ESer>0c!0G3*S%ezb*BzHAUt*V1nddL@WH6>}>IH8U z6^*n{a1;w&E$Zqiw$GR~kj1QFgdux7ka-M+-4KDtFtnQKpu3xz7^QxE(NF!0khxr$1qFt8m_|+1yV}>4clE z#*(DSv^!9=p36G7j?jHiAi-;H!qOnQ-}2RCpP=YTX}hX8n2`pBLNMhFzZY>RSiXaP z#_%SK+`KFBYj`CeCmF1we&>(w*f`NnUu74|3lIg~OI99NOlBtCgY=}NJp;y3?e=bXv{F6f_3kd(gfmwN`%5DC#Amu)1`9KT#vypGfR@>B} z2$n){{ta!tM?796y?pJWP}w8dMc9)wmy6WZdT6L4qQl0uW6U0zUb+dj`3H6nd5R-$ z8M*CWSpIsX5@0ja8hCF5HJGJ%6=@FQ4)LFvWJ)2YF35PSujFNx1aSLf3rkz><>W;c zdX|V@Z&S`9MHyY)i=Mzd(5ztL5mW*}%88Q(<_ttKBlNi6l?@K}r8q%slJI4}lKxB< zRT5cI6^2Pd5*jFcQs^KgFXjHLrpqb@W)vDiX9yeI`I7`|;blTspTc(=6>X1!@cw%qmF2GG{%yB2Q9{a)_$=Hv4%IJr%YovmHwYp-Qz^nSm zh^-?L;d?#*DHy+W-H>%YZDtpp5*Ih89or}Zzqr}$2;iKekRTE2OM(nD%eA=QOD`T8 zjnG@y1O&byL3gsDR*wTT6kRotiXfby&>T(|E z!LvKmI21Wv^KxJ;1bAx2BJiBtCqSTbPx!^cv%jlNVT4Qy0d2P)@Gh11B#~qtyL-Sy zNtZJ(r-9t0#H3q%e5;N1`(Ge>QRJkcqBWm*MJI>ccy7tZ++3Wr z!#+s&P4%HNExYV8fxe`m;8l1yB{g+B(wyXhzVB5;b@d)!l(8yYl$P~=m}bvFsfP%; zq%A6!K!=}hg)*;Qz0rlLG|4?CxWD7XaEplecSN1Bk76s9_STs?mfJgwn>!6G$jlwI zD)UeZ_=0rRtp_!^WRhz|m5wwI@5r3UJL+AOzaIajCt-F!dPZI!4H``0PJp)WTswDp zy)=Va>;JWJz_;+g1UMKCJ?E^?W*+pueP_G#^-@K-Vw!+y2rk{_Uc5WgQo!hswZb?jU`cp<-_aA zI_%^KV~1wV@xxq|lXy`SX->qG{c3RMzX@rOH5L_}fK2+%zI^#bM8x;oFm=iT^mYmL-~>KxeIJ&pP#NLmbw`!iQf#8?x%NY%f?J|XkD?h6OW2gD(8 z0QVW{)=w6E4kh*Mzb)yBK{a{>b5U?^vDZFcbUA+OeobNqk8%fOuJ4n6PJO+D$Wltq zi$Nx>31`jM&ka;~caMX1$4=gacazEFQMGPc-yZ!n%JLMgJ0O_jCfC)~op)4LHvfeD z{rh)J;Km2_0JYHc#Kceng9=U8781F4vFvxHk?3!!Hp-tV+b)l*S4H4iq;Jwq?JG%> zdNH6C*i(e0U;g?`TlPJk{GzH44focGioX6`fhSQ4mb+DV9$dI`Krd*P5K6-$4zyhI za0B&A89@4gUNq}8IR^WQy5(-bn9u&LbsOyaYbt+T_J5d2g$XWtHbZDRa|nNM&A>Yu zVks@}gp5n9J|>G=HRSbpLgx z6;!yJllsCdP!E57S3OK~)DfdLYn!fu@3;uD^jx_T$^~U-GrGEb z-kfgO;WYlQ86{x=_utA)Td>o-d|}uXeV8a(_2=}I=Nkir1_YC-T$Cw z!Azm6H;UPjeu0`47#o}PY1XUT@VqAG%Dd6%^*iGSqld9R8nj7MpZc>Nv|AzCwL2!J zk^1@;Jq0Z|n5v$QK6~~i$FUN%Y&ULV2WK9_v4M1HMq9rHh9tT7;c_U0j{xi-IrZWN zGVlIpvM2y#r3!riKCY=r84zuc*?7?n*$LaI_}nreb6EJHEXy7us>2`rmv^E-U&ht? z`IJ-URI_iYJ}e%RhX^~PnyyRz)eOYNt1Yaeh2<9fCrsXd-r0aWUIy1B6fZ=j z;%coo=c}aR_swLl;D4+7K5Z6X(9(F~yKZm@lz%`7VTi=F{;GIFt&6&I=Vhe`vm)qF z#(hPBiEp3e0{drT_gj7uxFj7TeOSnhW*kAfEjGoPK|wWw>A0=eYDilZ(1z~chq&*%8svd=v;| zYukPySOz$EYjvfs0kez3H5tZlO}uE!bp#CorG0-pV?7L;Zebx)<2?Pq^a;7JgOGKyf>d5vo^B)5c7!yoQf ztpuIIlyWibM~$G|+^QVhNVp+CQ6Ah@m5(Gt4D-ptb@%YkS;i0R?7Xrdj#^@&dX?^M zZqJ3qbKz%{D(~Jq0oR{+SB&uABC1qb>M(I_&a0HpBLozv?+#D2t>5boQqWXT@OqQ+ z?A*fnzh`23mV#BFK&X?c1H&GWuz&?Y-zykL65t5jVd&K3BTw-MVsfA<0bw=5Ws7^y z54v^a%6aF`oqkuvZjykX)ecM@YlP~&k^A_&;@xN(X+v`Z|a2;X0r}}IbK&Hk(mo8oE zm(on#(2)l2(LZB`e}oRebUdfPp7jPHi2K_2jUSaASE7|{yMA$mu&Y8O{vA(}ZC(hF4zke?(CRUi0RmV@O@%7?=xetTs4CXhl2N1mC zpcDKCH*Pq6Am_E|e;b2;P5?4cLmAfZ2mBL5Lqm_Y@^1iKgKc?+gz$|B>;Jq7>0;s0^m2hnKT12Il62;8*) zW}Z&mBYI9PBcoT8=q6anj|D&wInnXL(k`NDD-oP~(Tf72w~zKWTr=Po(Za?t6zEtP z)LZ8N>!|-O&mhJ8(o(5mC7Cv79xFZVzKrMQ#V0UJ8Mc@+ur`isv=?_qt%gazDqAAH zs#1}dULpPaSZNmc^Gh4+*Ex^=-OvA@(}azHy_d#Kls;-^Hbz%+4Z#Pub8_3IFzE<5 zg$UFyu6mQD?Fk7uhspZ&$gvQ&fs}? zc-|fQ$71WI=hCJZ^7-SH|fk zN_FULY;0s6oJQh5#(7(>G^H0J3w|tb61lADQ zGbE5MMdc{d+ul~V$;DhA69-hhQ3uGQvvoE1=`T~(J)Qj z&<(xrFI zw~uOmR`2rszkDMFf(;Gx4vgKs!q3ltoxQh{Gn&U}9>R(ekSj+(0XVl*G7xnsoebT=^_1_-<|NmbGE;8ghw1ijvpQq_R ze@9@(YqTWY?tCSG$NxHg|IujuUw;W=9L|i7Y~lYEul(m%{xA3BzyHf}0!5gwVy&!` zsO|q)F;04<1|ZAn=$yW*X2(O}W{A8hhcfl>5*7X*|M<^!qd*3(uC4-RfFBXR6doQP zSd}RLkG(+!0JyXl#R#L{zZY~17}uO)mBdP5@b~ZD?F89AQhvp(39i;J1l(M-E6tAQ zT5+wuuC807QVbkODMqzs$oY=!+`M!tw@)UKmNc*=q!nZXnRz8urKF@xoxDWZ|2ZNa zEfbTXX~X2?guPq783Tqf0;1zS;<|+dmpakB_<{o4xP+~-uBk+%5Wo&s}n0t4d=eS zPl`><$mo~5b6ZsuyTNR~GLlu;jzlPATJo4SB2JA*txqYA(eF)T6 z&rHVwS=2M<&UrNQxUgY=*kl%OMwDB1G>F^AcLO^MN)m!bRm<-}*&D`o4!*KD1C4W4 zigEG4gAo}E-t5d@Alim|1`um)?$LGEU8~ifko>AObJ`Cf}`WQ84K~8phYy8I?TOA2WOCWroGj)9-dQ~y2g9r9R#O~Y0W7+2dgcVKH zs$gZ9LVqG)Ub?U9`mZON1$c8FS3O7tLMKsq4Tsd!)DC&gcWaB4X25KWj;U6Xo>DJu zIlLNz{=QL|Ys@fiNqgn$)q-5PD%B&70NlIT!)7}`PjLE{=k_gxf}StPqSkr3WpVVk zQOkNo&$I4tiaJh`AyMlEBskQq=PHrR3$M7|`VD|f(tVz*rzMR7`!2BK%}tftFC{0& z?Oj}5-F>NkiPeyqy6WMe67NTkb^lHjG72_7djjE`Qfz99VwL)~UW4OWrlezeI@wVD z<9@>}l3A$nlVOYq?iQNP+x4oX)z{acuYy^myT6^?$_ay%W>2$Nus2QWfjdPrcGSSE zx*=2JSB%iT>R8rqLy`ukSj5+V zxel;hw>~wylkTM|3xov^Z~NgF64ND5|EOjRJO^6q%32PuB>9FKQfjkN$G#>4Z^Z+O9=m*X2EfjQQ-LbP?Ik379lo=gs{F&^4z$cRwgXpQhr%Hnqj<~)j zv)s*J>R3|<1ftYxGbNlKRcH&WrGHqD_s`4^|z|-u(&wvjJ?1Av!)yiIYrn^?C%qH24pffa&9IA ztCJ?>3S_|M32##-8$D|`grzHL_ZJ}%R)@h4>dCjx)86!YJiC~{0g4L56KJ0kC()NJ zT)k`~BFk#S^Yir!TleHC=xd)aKSzW!VTX-Xh!+VcmG=Tiey@CGpz-V zRoz+cRs~hsh_Tx=momFB&Mm&sk3$WSgybyEf{GHg`bSU~qYPAG_x|j6V{c`cPgHb! zc_{lA#yL z%;9Gfu|%etEaO>Zy|ACd86n~UrqO4Hac%c`JIDGfX0p@Ymj&j=?R*SGseNW&GU*Pu zY1B$gdGYLAt`6sifZsSdc+kNbYoDB$n8)w_;p`3Xlal`V>pqLqgM(W06;4UZdTt?7 zUjZ!dI@!;IwJ|zn3O}s{IWKJ1Q)RfKRJG7Z=#3e#)m3)a+b3k%IeIF zTrP@P7|K&HTLM8NP_v-g{0OKQ8I)Jzh$iyDLd;dXBiHy7!=(feDPNms)CF7R3VlCh zZ81!8rTT4m@tsOtOHk9EEFOn5U3-Wg%zwIgjT8FvIHc#bMcLbiUV!C{^lAEm1AQ!? zU}R}_1Lqz)(1uq~yh{pmf0is`I?yPoa?x)#*|{+$>2lmW!c=mj(UL5gJMg_`KEAV> zE$nHfv%tRI7KCUIiX)Va%Fk>hc}w>?ipq3e+NK-0z;5-vC!l??!6~LA!3J zU#32KSHA%q8w-`ayPZDSsXwUB2YHvRCA8%GUgJ5mUm{i~Pt}n>9~q)KpW`G{@w1I$ z=JZF+P)L)G(CDT%RZw&NXf9gbQfN-EKh;3~Zat@VkPCaP_t@u-4jC3LlJaaJaY5NU z4n+BUlKyCsvRtz_^NuhI0Ark@eSiR=U|2F8`THdS^(qsU_gC>0{(rtOjc!UR5WO6* zROa^Y%#3|pU9r6v_2ggPhwpwtFX~ zJm6HokY1WA60xX6qCA8jXt-3$x08M+x$AuW#;!~RpYQ{rv_p@Lp9`OVr19ciAoKV6 z(}ri#(y^94$9rQc(d>PN_nIrmuT0}KxZHp-5PBYU%U@<^(Nc*IGT(gT{OH#H$Wj^p z)qG*W`}dz5Rg<0h<-G3C2c7O8&3U-M|MmML{oo6510qyZ*}uJ@bgL7C|CqaVk0k^M zp;=LNRNpfIjU3Wm)~#EVJ8l>*Tn}~j*vs2>H3eOMc6<2J! zyP?K$O{GAkgi4mGw?Fq9aE*ahPK}iRfwn?X>Ooy8(L&ej$?)quWM;YF@JfQ8w#!(m z>5pzlfPbhRBYiY{p5lgp)x;~k8|vnJ?!J0j?OKtu&E73-5vxvnuDIO9N55m=uk|6C zhqQCsko+id<6fjDjGpR7mqqldpW&A*%Vqn34_x$8_QlIa0vo#BQk;wy& z<_SL-?9Hv6?Tu|UOLXMhXB;e7zU3B_XBKL2QCk{D-=kuC4b#`~=f0do=Q$_Sr@id$N+cLIm z#gS8tEgZIU!QZGpzwW%rL4T^YnM>OA@zKGWH6U=)WLh8Q$WW`R-5@Wi@d4~yw@To` z74X#M}1! zbNwKBD#s3vN#+_kIpq=)lIYU1D8;MgH?zh+Xb`yNuu)%7BgS^S+V`!u2nHA`lU1Jt zhqdIRryD=3ea`m^h~Zmn&laU*l9SekPidW<*-tjMC+n&as_vE}b$b8vXvM^NZThPX z3;M6{MFhPtM%i0Hn!~JS%8M8Hv0ch&Y>bF}%wC@ZKlV(;4;uWNkcKKTSJRgzHs{`v zTWv#0XC3Jteu3n%tt2I;EB9U(Ka?81I?V2r;+Oz+Txx|XBkaPZj4HBL(+{uAFcef( z8-Ipe%bJ)7ZiOhzM>ak;lL+!HrQ*asx_5a4w_=!#K11!Z*qYI$Tg^rHi5vl=9_&Co zJl*nXzVEYhNvD<_#+jgjC*hvCuEsVrp5*Dv4|=g>M>45D?7fcK_h-uN8!tKajTB%Z z=BX$ltg3Cs8MfgwxVt}JK}*l=qdpscP0aZCk@-ARS-_aEikRN7bQYc9$0gpk4=Z#D z^73-~<5oUOW6s8#CN3On;)MpK;xadSyq>Hjiwiv%6Ncl|$9yU|u6UkDSffvmy;}?D zlR7=1Acrp})mY{Ktd9St6wRA63MZDszN7DbX@Wy(^Y<5FYZsQhkNKmrKO`3Yh*P*b zdWt=S&im9uf{2WmL>_!cGrrvpG=y7n&OzKBZ~Hnhj3M?);8Bv~_f?*uuSO|zgk7a~ zvS&vu(pAFG{GgHe)vApSr)0=;f7UO+ug_h6gVE0kRFj51uFyDSU0F-lKBS(fRBdT~IsX zqqSSq*|X`a58Z-ry*9Kmzu)z>zu=<_4DefV;J)izSU+ryM^#f!@AZC=)On8!Z~jEx z?-p4jbsqbqFBE$)jiOr$Ph^WWX*$4*qc*C?)Ky4-;iQxog@s87$;uYLO!RVz1{WNv zD1)^{&>-#s5&>VRls-$V2LzMR8~QZZYQ*=dh_L<6dG$^uTY%I63AXEX5($6K*wz0euY=I17x`M*)ZwpY>ko+qeYq?rJ zg#Rz0^{}e3y2@KeYh*wDQ?8IR!b~*-x2Q|}YF;WUN8jlf$`?10H5oU_UnC&!-7{+_ z$Rc@UGW)jM;|^NwmW*$H<=5bp!YH+{LPR+&`&){n%Mm$iC;Q#Nm#=C*nC>QL0CIR7 zV46E$7O#$Cq>;Vz(5R;Du9vur#dUMyl>dS0#AxT24;`f(M=6km+(I4Z+1OB|9-O3* zoibZzs;5TWXS9kJ`*cJ3ed8g0PyyQT0j9d1ZKlL2bfCw`?0VHmKO}o~Pfrm(Ay|JA0EZ?F4 z3g2UP198LacR1e-#E0+5>quUW-bdKl+qI#F9G?8!iaxRwVIOJk6U_$tY`;dFI_9`W zYCTT6cuKinK)JT5axifI<)`K%YcW~IUGtp5N(Ke?9m}~=8;&B@bk0G0WEk6bP17la z2Duk|Sp%GO!#enUnBjl{+19m3@TMB9Jv#8lv|&{ahghdI4w5c>D+Hk);L|kE5>}Jv z{=_Ur(_Kh)PfF%9O(tNNg`F?AbmQk|?~@n8&YH7ROe@-_5gb}7z2yG%-zp0edeS21 z<%!xIQb`$oEL>D@GU&$RN^0E|;gp^3@5gG2^ulAm1Npn_Bu^lxMQ@=@XjrquKp8rApfygoE){O9cp-?&XJnS~Sr=Foj4 zU;DDiDksm>(1!!gj`v58nHt(v<9XXo0kn~DwUUL7jLLJm?F)CB1QZ8Psb6>RrTZuX z+8U=E-!(ibZc)KAqz*H3voKD^BN)~5xBjfyy!=7A9yt|TGuBSOdJpGq-1+V&Yy1mw zL9M|T@0{KTJz}A?<*D)_w;3$ z;MT7X*Kt?O4`+F3=RR&UrE2oY&)#aVF*}skijd7t(-O8CVG`FAzSA^;L$z2WUze%< z!kcUJ)}*{4aM48!8qi!^aAKy$QC6}|nH|!Dc9L!eC8VN0N&6;WTLsKlYwMm~dYc}G zR#n8xJz=5z_;B|JUxOiJ|5Iu9hFi0saJsp4PVK@_;@yb*;Q8`SW_pO zx%U{9Rd^QCc%NOJtnatiz1~vPXYg*yPU~zEtElD!l&rjWF}Vv)3rWM$_c(>ElQ(^e z%($}U>Seb>uM-8^#5*u~5&y~=tTjuX>X?!l{}SpE`Onx4JIXDw4ayG^OC)V>{vF2Z z$B#XhnR!&N8xW^^!#D1|(SiKjz*#Dyyjb8l{wu2c$u|`=Pr- zy1N?*DQW5ME@?zkI;6WFxj88GlVF=(Y9Xr%(6E=qqc%YP?}S>Pr@dH&T*dv*hS#K4tT@ z<^JxB{W?(_FG4v+0pO5QZ#;N(odL=JQwGyX`_Lukmlv>mJRllg*_CgZTNG$4U8trS zJ#(v)*C3Wu%7Iwh=?i1-%3F2i?T8{8Lm&AfH#I|Rc?G!VUTn=uGIp4@26Z|=vV5nO z2KTP7t5fIWM?f<08187K<@zV&z<&l^wWLHz`r&J8UZo5$xK65ea|{A@{jdbO`%MlG${ z41}*QANgXg^(;zf-W&kDI|h% zCwAL51v<$g@zl~!2JomiGiUrfyQ>n=-@%_n^f|kopP2FXBZ5o>vSni%Ki6ci*D`A4 zy*=sTGc@Y8AQEuRsm0J zbp931-hQ-W&*>c_ZR)5sqR|CV=ZX=;-J8lv(fe}C);lS>r!0s8VbxAzMnv{1Bo( zbNpM#1qF%(rVAZE!dr17V|X2QtuiUj+Y5j_SSTf84fD5HB-U%LcJ6|-IJ)&_$5BS* zEYbAi5ayp@UAKvA$?3DS%#eLwz_AWznuM3zkre@ zU3If}+-n=i)e9b)Cn`a=q)rG+6p{$iBzM@cOWyA0dKX2W!_I=;HX&rNRNMH@+k?uf(*?U)r=9y@+}Cu{pg$nT9}ex9&s8 z@gEgiI-q!sW2#d$w3x~>qXwsTjk)Q#{|E>~;_tTp?#)eV$7xMAsp@C56DulS?Os&K zI1HTW8ek(mx2ci+f@g36yu}~=CZXaatVnRVC(H}X(fK6cXE)Gfe}pHJ5V=kD;Mh7- z-62t+O!z>VuRcUjbEsCwXE3N1R@&Gihqa}oIvVrn8M^LTjVvto6qLCx;R3+xnYRC&GJ%8k1MdfW=^4*v!o z0nS8x#Z^BVq1caB#(RV<2aF%nfH_;;pSYB}7ljOnr;?>>u1_H{?n$xS=X?j`1duyj z)y|9c{OU5M$dqQ%Zvg3w)4<)i9!a3MU(GYTG(~+780J%+l#jDwEX?ar#awGZ-;wjw z`;hV?=#5W>eEY*<;$I=g`PT;JKv@^sxGEKrdrGsCLm=Te30zsZH+e(b=RQa6(#XXd zoC+`;uuzIXmJcY36C0_;s*olF<1*A-#>dU&MyfmStEkAJdQ(DE_$3t13XPb3z z43x6YE>h(}nQ8rJ|L^B=EPyYqJ zt#_T|HfrhYWfMM*PZp74vxvXTdBALH6|&OfKwZZL1sagA{<67DHp!GE0mq@0rY_Zg zc7M=BfWC|l0Io}$<=fBLc)v_sv@N@Ad8z!9se!p__qH5)%45psPad(dN5ln)3C%SS02zJ; z1*l$Au8)p^#-Ab$K`pYG>oY((i{{*5zosI?iBcVgj8N>9!jmLHyXhL5u;c}on9pfD z^%mgU6V>^^TyTn8CoC3J^l@*y^-JOAIdGD9I_&xcIM3vq4sS3s#CS9GfpO)Vwur1}74&-A|r zTxbTe?gJt;Z*(JC*5d~ejq44|>6X|_-0juFr+y9t$NMzRz#5|a>lLN-nt2M6WPmB= zJRn&g>rtB;AxdSahw=OykY>x?;$^EfQUqzv*Dx$~_)zf`^Zl1ae+tgemqTU>ZbD49 zD^AxQxJMMZ7vZl`=@A1&p~AIweq`DOFgy8NWJdoZu1zJ+Ox0Z|XbKOgbUik%QjygiG2r2=sptX#B;Zh7;=y#fh#cC9kJkW$u8@#VhHP>p>aD zf|t3#FF(p)UF!KUfG&E*+9@2 z(%42gKt?c55|$@T{RWqGXxFB*+);f>w)DLBemgx4V$k90?h_hug49x`B>z1Phj@M? zE#K|x#}SaHEf?cMt{(CYnJP98^rIC}Z&hz0Ws7uldS25H6vOnbkQP3>TIFQ^AYvQ= z9Mq|uiEeyo2cmwxhP2y4sz>otTmTE|)#HCf#q5W*w!dwMt24lo$;~QS37YdX)3uhV zOp+n^^B@iTn7X)p&6f#U4a^X*v);-eDCV=~u$E3Qy+jNwwT{sIa66YLjez>;l!IMqKDU+^ zkL&)ER^GXF;nF-M|ACoeyJmy*ro-73Z2m~~Y62ffu@PL+e5&)T8FM%9XeCsX;n#l( zxd^Y=3x2vT7PQ|c*(e4KJaZlNrE}*>?POJkl-4{1PVpq{8N{LyKgQm!Sy(ibU-mg! zhP|4oQQ$bur6-T`wj)8by`q%Odr1`z9JfH{vnZCRsbc*~p8*zCY6&$mN5q>LIQ-s@ zg0#Y;hq6mkEYG=<+ZBZjb#2_qBL$*m3aMG4ng8yrAl1Oy%SJc$YxkFm z9^uq~28U0})#b5@q^_v3^UhZemUT2-RSgxv;%onh>Dvh%BQrUO%~Ldq#QXen zfGOSGm_vjn`2#gde9-GBs`1&=R#$;mm--FysCBd}prGi_PSiNy|El*d3m$VYQW|5y zg_$PWLnVY8X(6-@arZel zZo|cjtzlW%s{MYzC@eqKPLtVzoWoROLNBtCbxojCh?lf8Wz(Qc zKo-U7&d7jdR`Z4_GOZ4Rc;LcF@tj^?amNOMqRL+240Ws;os zW5`D~qZccclS(fcmzc}+3E9{7c3iHLd5W`qEWZLP+ zGuqN<1vhG{{2*}j+cmH+_T@-!3zTwelTbddyr1fgCPQj!Sb3q6`MFkJgK%PeX+28^ zC54E~oWdq1M3|V->e=U?ytq;$ds=rR(;~`V3HbPyVo*!Cy_wI39Ym53C{A(r2_&@q zl|46~2h6=0*>ywdf`>$71zPoW*1^yI1#E;rHYZw`2s%&Io%;lpHQfZz(mdmgmD@X} zj~BXXG(g=hhmp|;;Tcj;tQ1w2hwDBceP$%%|Nbiql z<85(&TJguIh4}~tk#RdWp()Z-AtoavE0(p>&pE&r=mvbALq;k|fGk<;THy?Bld-VAj z2RIDY<)~OD@vjaPS~?DXqrdcu>Y(~`3R!<$`>Bj0=}|JpJ*EQdgrjQg3YzZ8zd z(9Nsrtwws-aBf1J%(AB|cdL zsz@uZax8&S(ZiH|%Um{_tTe({&2p;CV=(F_C^{$ELZ@??eH^@2idatIbj`#{hh~X(x=E<)=f@ib3C+I1a`-waF z4B4|UK0%mjx?`vbH-Y$D7Ak5;V|jA7vD_go|9%60cMu-Iu>B^KT>Z>jZsT_Bc765OXGAMz#_(k zH3MWgtQuOGX;R_Xy&YfR&YyEkN4*7Kn?;P_i>8W0P2}InQVM|eTD~Onzs}LiB-c>4 z42`%|eUaRTYud7%MF($VZnjdxH?mpIrI@+4D!7v>a-Ce$HxFR#uFq&>1oI5fdwbJMyo*3Y0*-RAgmtQ_AWN9$H5pRbZhoz-d!bgF*xZ!bl8?4D)5YVt$R}?hnyR13_PBJ!4TR5#d z(q|sgY#eI6#BY8;zzLGXwS8i#d9Mt4-G#!<=rP4+pMowEES9?jsVpN?rt*Dl*U|Uv zQPzkC@CimK&Zz3^A-OteQtuCVs&E}m5Nen*$afx(1h?oD9`=ajvk(0jnIo??T*$A? zr7(kS$yVwH<{~q^s)oOGaa3zpzUIjMhgYh_>U1Mkn)ee`$&`xcC45x zgj?!EbaS8O>SDF2CQo+D#B&2&1u>W~1VCfdG6v%%fBzE2QE2GcgxB0(7Rg2N(C^Q@ znGDbx3kH^x?9k7wn#wQHjHMX!4b0x^%{I~{R&s5q=$LMe$h@)5N_Fbdb(&`bxn;!J7QOJrs7|1Ko9%+hTReVc34N5L*KU%qax6ik_Il#b zr^Mr0=n8ub5&x0OA!65jh@*IN_vH)Z)30mWYPrZ6JKS%>2zV(B_uJd0k7Xj&49K zg3|b9XfB`c#5LL~CuSAWXPT*VyKI)B*ik~^j9mc!+ntf`7;6|Ia3CjYU+dXc=#0X$ zSMVh;v>oOoZAlI6XtDm)EYz_!Tw+NN)i>JYpMTSaZ{wmYotl))Jr;}Q`o+OP}^`0q>jWWG3~%O@g|9tM+Ahd~xp0np=4DS|+^=M`jm{bhag)7&=fEI;At--G2g96M6cG6hv10Zcu)Tq7puSc|peBU2YrCY;E zhjO7-5)rPYes&dgRHRhGP5{r1?$BUq=f$!xSsh9l181rOVvTOf80y8}F`X z(&@%0FMv#yYhHOHVnr+l8JwyS)jZD$W`k`jI!$Ws!$(QDY>|V;X6KTO_TYuB3M)(z zl&OvaIt=PJ%Zz-T9C*GiX&?IW8sWCZ2TiZOu@~7=a3d*L8bby~V*Q`T;5x$Ojbt@T z+76IsYDyR{^r!?vKmUnNnmiB_c~|A6`mT$Ta$gb;1MO|4KJ-Prd1x>9PdD92BwhSD zflH?Dcj7aMssR(EUTwL0>nXg2FF{^>X~>A0rfs-dz7K_qy1_wj_Yu|I*Ld6dS@{F* zYy%p7(

    r@DNXbT#`u}jG#4#GXxKioe(3sT9O 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≻@IqUuk`$-}sz;DvuOtF#Y&AP$hFF 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

  1. JkZ(!ECtSf;raKg9X)=044@e@iN${4 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≫br8i`S5R6xtL(ob@JAq8d>||#aO9sS&J+9>3o02yG9beR0Y~K6z>osp% zKv}bUu3NOnigK{~YlWIpL#!nXM1!E%gB16`uvYcFc_aWNS)|!&*rjB#n&Arq&MUHF z8JY0_fEUV#b9M#sF=zTE0s7;{1D~rK+TAwRCGCZD4gx{PaO7-f%(p7_n*3khBx^ zvr7ZNF2{PwfGXPbVZ1b~;;&A~xOwAGW&cyv^n^Sp>Ied=+FE|u%FH?IJ-!rQi-tK# zc}RV&L2Ib9K$8$H(UyEaD=9|dr13se)59LZV#Z9>at6Wm!|aUOT3@>hl|$8c&x@c! z-;$VGYBikE(Vu)+#e6i(Mr%3}z7UW$w-nD4mx*Rk?|CWM%{EQghAn<}yuG2Ib3~_G zylTb*Y8zcPM#`nH0Ow^x*I5^*V^rd;f=>NmV^hPSgS(!ZeOuZUU|Hh z$XCfO`TP@W`J2pGfv;@@NGCnclnJ{h%*;Y6p4|CsK|3Arf<+dIU}D$hQ{-P0O8b_( zV;M09OZ*wOd;l3}&F$Iz?CYF0W96H$x69t%ssNPa3nIpVP12?bfVJ4eB5m6Pi6l?od}bR|x~=!#{)kmQ{4k4`(xlt} zzP?3izuFnf{o~j%y0dN}N#BMUJXB+I5OLm)StunypG$GMEEZcG%{2K!Na3E#kiQPW zm^}8cPzdL58^+ELLN^I0yjBANs)q#&Rs^Bd?~YJZcgrIr?gdwAYd>$!Y5wU9Aoj+_ zXB9EZrD<8tX>$VwL{~&Agi(Z5wq8=Z_a17?_KdruCRc~NY?}vrm_qnz3*Vs`GNtIk zDy3IGk|M-GWHpjUEniZ%!J=iFxON7^921LB-6#eb`ngm4X=(FcnPY7D=))XfuSQGJ z{wyl*Ggz||A}P{aAkPDPv%n@{;%*ZvBWOo*a% zy|I)#)1-6d!!jgBeL$T?aI*6HhTdpQ4`JqAP^FIq3_r#D1LySpHUAr)mrh54GJc4- zJdh^{m;KrJYl!96T*#rh-dahfYmiiqy3ytQ$l%uFSN$GyC6YKUg{e2|C>M(=`+k44 zKB!CBZ#bH zY9YGFq<2g-p}6k0dg9g{jJh8ELX)+ofVoCbnNy46;J!T8*~ENoEqX&O5;?ipvEc#r zWRI@0k7H_`3Aq$JRn@xPcSs6(G9KChV}goRT$X--hh%swK7T2uRI4@vA6D>?F4N$w zkg%XiZZFr%pSDPBG+zIKcJG5#0i|B7C!l12$`lPD+1T8%LQN%kk@e=*O>ubYqbQKk zV|dLe$AiL;Q^1={WP7-VTYRGw{nJFA4#*1W*nN@0*;5ZW3Lx!uERHwJd_UEZcw_}Q z@K2IuN28B}%NgS2V`8^TaY^@i(-jFttA2;XNUDa6ZdeWdA{wQ)D9qtw_MH^#^?J^b zl9%oq-9!#oZw^pi8y*k0J00?UGG^n??ho8XAuB0bsaHofA%n58G!B(!y>x!lT|sS8 zbwdtV-h%b%iLEBNNAjEL>ykmb%Km}g`RwR`TS2~Qx@}e^LR|s#oqMY*IS{ZcWM-)63 zn&r3+L#Im<$foRePa3(s%?`8MfL0(~bmAeBEV{L93HX7EzQ0Cn8Mk<}`kL3I!XSxy z78vD`@I`7_<-mV`#Wyd3>GylBlJ+mZ(IZ_`~G%F-@8dBtX4YC#?cW6v2V`%5v} zo@=rkHiazD;V(DtOlaVZb(vweljaBD=}ju|5xk%_VzV6;wS<)$FLMFTZYeP_oprKs z9v=!d4V=j?PV_$K39k;VuY~VeVU0glIw-tdTbsb=%zHZJ*vmAh!P(44BgkL=;%P^b zjZj#8&<=}P7O$0L6eL%4T|?ZA_v&>Mp3F_R>6_FoxVl!(xCxf#w9u5aM7HZ!wE3FzeLO{W_=vOs}P zdQj&#>f^lE98|9&O2MT7I%84#=3%0AV*WXvwoe$rf9ORX%RvEqgv-(FT6LPfR7r7= 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 z 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�JlQAUiPd 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 z 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 BpLDm^G{+t$4z-{trLAhJ_ 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 HSmgfz-p?Fd diff --git a/pkg/airdrop/airdrop_missions.go b/pkg/airdrop/airdrop_missions.go deleted file mode 100644 index 83eeaef8..00000000 --- a/pkg/airdrop/airdrop_missions.go +++ /dev/null @@ -1,33 +0,0 @@ -package airdrop - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - launchtypes "github.com/tendermint/spn/x/launch/types" - - claimkeeper "github.com/ignite/modules/x/claim/keeper" -) - -// MissionSendRequestHooks is an implementation of launch hooks that completes a claim mission -// when sending a request to chain launch -type MissionSendRequestHooks struct { - k claimkeeper.Keeper - missionID uint64 -} - -// NewMissionSendRequestHooks returns a launch hook that triggers mission completion on sending a new request -func NewMissionSendRequestHooks(k claimkeeper.Keeper, missionID uint64) MissionSendRequestHooks { - return MissionSendRequestHooks{k, missionID} -} - -var _ launchtypes.LaunchHooks = MissionSendRequestHooks{} - -// RequestCreated completes mission when a request is created -func (h MissionSendRequestHooks) RequestCreated( - ctx sdk.Context, - creator string, - _, - _ uint64, - _ launchtypes.RequestContent, -) { - h.k.CompleteMission(ctx, h.missionID, creator) -} diff --git a/pkg/chainid/chainid_test.go b/pkg/chainid/chainid_test.go index 1c195844..f2dab260 100644 --- a/pkg/chainid/chainid_test.go +++ b/pkg/chainid/chainid_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/pkg/chainid" - "github.com/tendermint/spn/testutil/sample" + "github.com/ignite/network/pkg/chainid" + "github.com/ignite/network/testutil/sample" ) func TestNewGenesisChainID(t *testing.T) { diff --git a/pkg/errors/critical.go b/pkg/errors/critical.go new file mode 100644 index 00000000..8e2f69b2 --- /dev/null +++ b/pkg/errors/critical.go @@ -0,0 +1,26 @@ +// Package errors defines methods to handle specific error in cosmos blockchain like critical errors +package errors + +import ( + "fmt" +) + +const codespace = "NETWORK-CRITICAL" + +var ErrCritical = Register(codespace, 3, "the state of the blockchain is inconsistent or an invariant is broken") + +// Critical handles and/or returns an error in case a critical error has been encountered: +// - Inconsistent state +// - Broken invariant +func Critical(description string) error { + return Wrap(ErrCritical, description) +} + +// Criticalf extends a critical error with additional information. +// +// This function works like the Critical function with additional +// functionality of formatting the input as specified. +func Criticalf(format string, args ...interface{}) error { + desc := fmt.Sprintf(format, args...) + return Critical(desc) +} diff --git a/pkg/errors/critical_test.go b/pkg/errors/critical_test.go new file mode 100644 index 00000000..d79cd1dd --- /dev/null +++ b/pkg/errors/critical_test.go @@ -0,0 +1,17 @@ +package errors_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ignite/network/pkg/errors" +) + +func TestCritical(t *testing.T) { + require.ErrorIs(t, errors.ErrCritical, errors.Critical("foo")) +} + +func TestCriticalf(t *testing.T) { + require.ErrorIs(t, errors.ErrCritical, errors.Criticalf("foo %s", "bar")) +} diff --git a/pkg/errors/errors.go b/pkg/errors/errors.go new file mode 100644 index 00000000..5f8f853c --- /dev/null +++ b/pkg/errors/errors.go @@ -0,0 +1,166 @@ +// Package errors aliases both the `cosmos-sdk/types/errors.go` and `cosmossdk.io/errors` packages +// to give access to cosmos-sdk error definitions and functions with a single import path. +package errors + +import ( + sdkerrors "cosmossdk.io/errors" +) + +// Type Aliases to sdk errors module +var ( + SuccessABCICode = sdkerrors.SuccessABCICode + ABCIInfo = sdkerrors.ABCIInfo + UndefinedCodespace = sdkerrors.UndefinedCodespace + Register = sdkerrors.Register + ABCIError = sdkerrors.ABCIError + New = sdkerrors.New + Wrap = sdkerrors.Wrap + Wrapf = sdkerrors.Wrapf + Recover = sdkerrors.Recover + WithType = sdkerrors.WithType + IsOf = sdkerrors.IsOf + AssertNil = sdkerrors.AssertNil +) + +// Error type alias for errorsmod.Error +type Error = sdkerrors.Error + +// Codespace is the codespace for all errors defined in this package +const Codespace = "network" + +var ( + // ErrTxDecode is returned if we cannot parse a transaction + ErrTxDecode = Register(Codespace, 2, "tx parse error") + + // ErrInvalidSequence is used the sequence number (nonce) is incorrect + // for the signature + ErrInvalidSequence = Register(Codespace, 3, "invalid sequence") + + // ErrUnauthorized is used whenever a request without sufficient + // authorization is handled. + ErrUnauthorized = Register(Codespace, 4, "unauthorized") + + // ErrInsufficientFunds is used when the account cannot pay requested amount. + ErrInsufficientFunds = Register(Codespace, 5, "insufficient funds") + + // ErrUnknownRequest to doc + ErrUnknownRequest = Register(Codespace, 6, "unknown request") + + // ErrInvalidAddress to doc + ErrInvalidAddress = Register(Codespace, 7, "invalid address") + + // ErrInvalidPubKey to doc + ErrInvalidPubKey = Register(Codespace, 8, "invalid pubkey") + + // ErrUnknownAddress to doc + ErrUnknownAddress = Register(Codespace, 9, "unknown address") + + // ErrInvalidCoins to doc + ErrInvalidCoins = Register(Codespace, 10, "invalid coins") + + // ErrOutOfGas to doc + ErrOutOfGas = Register(Codespace, 11, "out of gas") + + // ErrMemoTooLarge to doc + ErrMemoTooLarge = Register(Codespace, 12, "memo too large") + + // ErrInsufficientFee to doc + ErrInsufficientFee = Register(Codespace, 13, "insufficient fee") + + // ErrTooManySignatures to doc + ErrTooManySignatures = Register(Codespace, 14, "maximum number of signatures exceeded") + + // ErrNoSignatures to doc + ErrNoSignatures = Register(Codespace, 15, "no signatures supplied") + + // ErrJSONMarshal defines an ABCI typed JSON marshalling error + ErrJSONMarshal = Register(Codespace, 16, "failed to marshal JSON bytes") + + // ErrJSONUnmarshal defines an ABCI typed JSON unmarshalling error + ErrJSONUnmarshal = Register(Codespace, 17, "failed to unmarshal JSON bytes") + + // ErrInvalidRequest defines an ABCI typed error where the request contains + // invalid data. + ErrInvalidRequest = Register(Codespace, 18, "invalid request") + + // ErrTxInMempoolCache defines an ABCI typed error where a tx already exists + // in the mempool. + ErrTxInMempoolCache = Register(Codespace, 19, "tx already in mempool") + + // ErrMempoolIsFull defines an ABCI typed error where the mempool is full. + ErrMempoolIsFull = Register(Codespace, 20, "mempool is full") + + // ErrTxTooLarge defines an ABCI typed error where tx is too large. + ErrTxTooLarge = Register(Codespace, 21, "tx too large") + + // ErrKeyNotFound defines an error when the key doesn't exist + ErrKeyNotFound = Register(Codespace, 22, "key not found") + + // ErrWrongPassword defines an error when the key password is invalid. + ErrWrongPassword = Register(Codespace, 23, "invalid account password") + + // ErrorInvalidSigner defines an error when the tx intended signer does not match the given signer. + ErrorInvalidSigner = Register(Codespace, 24, "tx intended signer does not match the given signer") + + // ErrorInvalidGasAdjustment defines an error for an invalid gas adjustment + ErrorInvalidGasAdjustment = Register(Codespace, 25, "invalid gas adjustment") + + // ErrInvalidHeight defines an error for an invalid height + ErrInvalidHeight = Register(Codespace, 26, "invalid height") + + // ErrInvalidVersion defines a general error for an invalid version + ErrInvalidVersion = Register(Codespace, 27, "invalid version") + + // ErrInvalidChainID defines an error when the chain-id is invalid. + ErrInvalidChainID = Register(Codespace, 28, "invalid chain-id") + + // ErrInvalidType defines an error an invalid type. + ErrInvalidType = Register(Codespace, 29, "invalid type") + + // ErrTxTimeoutHeight defines an error for when a tx is rejected out due to an + // explicitly set timeout height. + ErrTxTimeoutHeight = Register(Codespace, 30, "tx timeout height") + + // ErrUnknownExtensionOptions defines an error for unknown extension options. + ErrUnknownExtensionOptions = Register(Codespace, 31, "unknown extension options") + + // ErrWrongSequence defines an error where the account sequence defined in + // the signer info doesn't match the account's actual sequence number. + ErrWrongSequence = Register(Codespace, 32, "incorrect account sequence") + + // ErrPackAny defines an error when packing a protobuf message to Any fails. + ErrPackAny = Register(Codespace, 33, "failed packing protobuf message to Any") + + // ErrUnpackAny defines an error when unpacking a protobuf message from Any fails. + ErrUnpackAny = Register(Codespace, 34, "failed unpacking protobuf message from Any") + + // ErrLogic defines an internal logic error, e.g. an invariant or assertion + // that is violated. It is a programmer error, not a user-facing error. + ErrLogic = Register(Codespace, 35, "internal logic error") + + // ErrConflict defines a conflict error, e.g. when two goroutines try to access + // the same resource and one of them fails. + ErrConflict = Register(Codespace, 36, "conflict") + + // ErrNotSupported is returned when we call a branch of a code which is currently not + // supported. + ErrNotSupported = Register(Codespace, 37, "feature not supported") + + // ErrNotFound defines an error when requested entity doesn't exist in the state. + ErrNotFound = Register(Codespace, 38, "not found") + + // ErrIO should be used to wrap internal errors caused by external operation. + // Examples: not DB domain error, file writing etc... + ErrIO = Register(Codespace, 39, "Internal IO error") + + // ErrAppConfig defines an error occurred if min-gas-prices field in BaseConfig is empty. + ErrAppConfig = Register(Codespace, 40, "error in app.toml") + + // ErrInvalidGasLimit defines an error when an invalid GasWanted value is + // supplied. + ErrInvalidGasLimit = Register(Codespace, 41, "invalid gas limit") + + // ErrPanic is only set when we recover from a panic, so we know to + // redact potentially sensitive system info + ErrPanic = sdkerrors.ErrPanic +) diff --git a/pkg/types/bytes_test.go b/pkg/types/bytes_test.go index cfd1d0e9..34279355 100644 --- a/pkg/types/bytes_test.go +++ b/pkg/types/bytes_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/pkg/types" + "github.com/ignite/network/pkg/types" ) func TestUintBytes(t *testing.T) { diff --git a/pkg/types/consensus_state.go b/pkg/types/consensus_state.go index 9d8dade6..fd4483d0 100644 --- a/pkg/types/consensus_state.go +++ b/pkg/types/consensus_state.go @@ -7,8 +7,8 @@ import ( "os" "time" - committypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + committypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" + ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" "gopkg.in/yaml.v2" ) @@ -80,3 +80,10 @@ func (cs ConsensusState) ToTendermintConsensusState() (ibctm.ConsensusState, err nextValSetHashBytes, ), nil } + +// Equal compares IBC Tendermint Consensus State. +func (cs *ConsensusState) Equal(cmp *ConsensusState) bool { + return cs.Timestamp == cmp.Timestamp && + cs.NextValidatorsHash == cmp.NextValidatorsHash && + cs.Root.Hash == cmp.Root.Hash +} diff --git a/pkg/types/consensus_state_test.go b/pkg/types/consensus_state_test.go index f63fd283..c6608dd9 100644 --- a/pkg/types/consensus_state_test.go +++ b/pkg/types/consensus_state_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/pkg/types" + "github.com/ignite/network/pkg/types" ) func TestConsensusState_RootHash(t *testing.T) { diff --git a/pkg/types/ibc.pb.go b/pkg/types/ibc.pb.go index 9276224e..22b68eaf 100644 --- a/pkg/types/ibc.pb.go +++ b/pkg/types/ibc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/types/ibc.proto +// source: network/types/ibc.proto package types @@ -32,7 +32,7 @@ func (m *MerkleRoot) Reset() { *m = MerkleRoot{} } func (m *MerkleRoot) String() string { return proto.CompactTextString(m) } func (*MerkleRoot) ProtoMessage() {} func (*MerkleRoot) Descriptor() ([]byte, []int) { - return fileDescriptor_e945911ae6a1b767, []int{0} + return fileDescriptor_9dc3471ea5a77c13, []int{0} } func (m *MerkleRoot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -80,7 +80,7 @@ func (m *ConsensusState) Reset() { *m = ConsensusState{} } func (m *ConsensusState) String() string { return proto.CompactTextString(m) } func (*ConsensusState) ProtoMessage() {} func (*ConsensusState) Descriptor() ([]byte, []int) { - return fileDescriptor_e945911ae6a1b767, []int{1} + return fileDescriptor_9dc3471ea5a77c13, []int{1} } func (m *ConsensusState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -140,7 +140,7 @@ func (m *PubKey) Reset() { *m = PubKey{} } func (m *PubKey) String() string { return proto.CompactTextString(m) } func (*PubKey) ProtoMessage() {} func (*PubKey) Descriptor() ([]byte, []int) { - return fileDescriptor_e945911ae6a1b767, []int{2} + return fileDescriptor_9dc3471ea5a77c13, []int{2} } func (m *PubKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -194,7 +194,7 @@ func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} func (*Validator) Descriptor() ([]byte, []int) { - return fileDescriptor_e945911ae6a1b767, []int{3} + return fileDescriptor_9dc3471ea5a77c13, []int{3} } func (m *Validator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -254,7 +254,7 @@ func (m *ValidatorSet) Reset() { *m = ValidatorSet{} } func (m *ValidatorSet) String() string { return proto.CompactTextString(m) } func (*ValidatorSet) ProtoMessage() {} func (*ValidatorSet) Descriptor() ([]byte, []int) { - return fileDescriptor_e945911ae6a1b767, []int{4} + return fileDescriptor_9dc3471ea5a77c13, []int{4} } func (m *ValidatorSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -291,41 +291,41 @@ func (m *ValidatorSet) GetValidators() []Validator { } func init() { - proto.RegisterType((*MerkleRoot)(nil), "spn.types.MerkleRoot") - proto.RegisterType((*ConsensusState)(nil), "spn.types.ConsensusState") - proto.RegisterType((*PubKey)(nil), "spn.types.PubKey") - proto.RegisterType((*Validator)(nil), "spn.types.Validator") - proto.RegisterType((*ValidatorSet)(nil), "spn.types.ValidatorSet") + proto.RegisterType((*MerkleRoot)(nil), "network.types.MerkleRoot") + proto.RegisterType((*ConsensusState)(nil), "network.types.ConsensusState") + proto.RegisterType((*PubKey)(nil), "network.types.PubKey") + proto.RegisterType((*Validator)(nil), "network.types.Validator") + proto.RegisterType((*ValidatorSet)(nil), "network.types.ValidatorSet") } -func init() { proto.RegisterFile("spn/types/ibc.proto", fileDescriptor_e945911ae6a1b767) } +func init() { proto.RegisterFile("network/types/ibc.proto", fileDescriptor_9dc3471ea5a77c13) } -var fileDescriptor_e945911ae6a1b767 = []byte{ - // 371 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xcf, 0x8b, 0xd3, 0x40, - 0x14, 0xc7, 0x33, 0xb6, 0x16, 0xf2, 0x2a, 0xa2, 0x63, 0x85, 0x20, 0x12, 0x43, 0xbc, 0x14, 0x0f, - 0x09, 0xd4, 0x9b, 0xe0, 0xa5, 0x5e, 0x44, 0x11, 0x4a, 0x0b, 0x1e, 0xbc, 0x25, 0xed, 0x90, 0x0e, - 0x6d, 0xe6, 0x0d, 0x33, 0x2f, 0xd5, 0xfe, 0x0b, 0x5e, 0x76, 0xff, 0xac, 0x1e, 0x7b, 0xdc, 0xd3, - 0xb2, 0xb4, 0xff, 0xc8, 0x92, 0x1f, 0x9b, 0x06, 0x76, 0x6f, 0x2f, 0xdf, 0x7c, 0xf2, 0xcd, 0x67, - 0x86, 0x07, 0x6f, 0xac, 0x56, 0x31, 0xed, 0xb5, 0xb0, 0xb1, 0x4c, 0x97, 0x91, 0x36, 0x48, 0xc8, - 0x5d, 0xab, 0x55, 0x54, 0x85, 0xef, 0x46, 0x19, 0x66, 0x58, 0xa5, 0x71, 0x39, 0xd5, 0x40, 0x18, - 0x00, 0xfc, 0x12, 0x66, 0xb3, 0x15, 0x73, 0x44, 0xe2, 0x1c, 0xfa, 0xeb, 0xc4, 0xae, 0x3d, 0x16, - 0xb0, 0xb1, 0x3b, 0xaf, 0xe6, 0xf0, 0x8a, 0xc1, 0xcb, 0x6f, 0xa8, 0xac, 0x50, 0xb6, 0xb0, 0x0b, - 0x4a, 0x48, 0xf0, 0x08, 0xb8, 0x12, 0xff, 0xe8, 0x77, 0xb2, 0x95, 0xab, 0x84, 0xd0, 0xd8, 0xef, - 0x97, 0x8f, 0x9e, 0x78, 0xc3, 0xdf, 0x83, 0x4b, 0x32, 0x17, 0x96, 0x92, 0x5c, 0x7b, 0xcf, 0x2a, - 0xec, 0x12, 0xf0, 0x18, 0xfa, 0x06, 0x91, 0xbc, 0x5e, 0xc0, 0xc6, 0xc3, 0xc9, 0xdb, 0xa8, 0x55, - 0x8e, 0x2e, 0x66, 0xd3, 0xfe, 0xe1, 0xf6, 0x83, 0x33, 0xaf, 0xc0, 0x70, 0x02, 0x83, 0x59, 0x91, - 0xfe, 0x14, 0xfb, 0xd2, 0xb7, 0x24, 0x1f, 0x7c, 0xcb, 0x99, 0x8f, 0xe0, 0xf9, 0x2e, 0xd9, 0x16, - 0xa2, 0xf9, 0x51, 0xfd, 0x10, 0xfe, 0x67, 0xe0, 0xb6, 0x56, 0xfc, 0x13, 0xbc, 0xd2, 0x06, 0x35, - 0x5a, 0x61, 0x66, 0x46, 0xa2, 0x91, 0xb4, 0x6f, 0x3a, 0x1e, 0xe5, 0x3c, 0x80, 0xe1, 0x0e, 0x49, - 0xaa, 0x6c, 0x86, 0x7f, 0x85, 0x69, 0x5a, 0xbb, 0x11, 0x8f, 0x61, 0xa0, 0x2b, 0x9f, 0xe6, 0x08, - 0xaf, 0x3b, 0x47, 0xa8, 0x45, 0x1b, 0xfd, 0x06, 0x0b, 0x7f, 0xc0, 0x8b, 0xd6, 0x65, 0x21, 0x88, - 0x7f, 0x01, 0xd8, 0xb5, 0x37, 0xe6, 0xb1, 0xa0, 0x37, 0x1e, 0x4e, 0x46, 0x9d, 0x92, 0x16, 0x6e, - 0x7a, 0x3a, 0xf4, 0xf4, 0xeb, 0xe1, 0xe4, 0xb3, 0xe3, 0xc9, 0x67, 0x77, 0x27, 0x9f, 0x5d, 0x9f, - 0x7d, 0xe7, 0x78, 0xf6, 0x9d, 0x9b, 0xb3, 0xef, 0xfc, 0xf9, 0x98, 0x49, 0x5a, 0x17, 0x69, 0xb4, - 0xc4, 0x3c, 0x26, 0xa1, 0x56, 0xc2, 0xe4, 0x52, 0x51, 0x5c, 0xae, 0x89, 0xde, 0x64, 0xf5, 0xaa, - 0xa4, 0x83, 0x6a, 0x0d, 0x3e, 0xdf, 0x07, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x5a, 0x71, 0x2a, 0x3e, - 0x02, 0x00, 0x00, +var fileDescriptor_9dc3471ea5a77c13 = []byte{ + // 373 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xc1, 0x6e, 0xda, 0x40, + 0x10, 0x86, 0xbd, 0x85, 0x22, 0x31, 0xb4, 0x55, 0xb5, 0xa2, 0xaa, 0x5b, 0x55, 0xae, 0xe5, 0x5e, + 0x50, 0x0f, 0xb6, 0x04, 0xe7, 0xf6, 0x40, 0x2f, 0x95, 0xa2, 0x44, 0x08, 0xa4, 0x1c, 0x72, 0xb3, + 0xc9, 0xca, 0xac, 0x00, 0x8f, 0xb5, 0x3b, 0x86, 0xf0, 0x12, 0x51, 0xa4, 0xbc, 0x14, 0x47, 0x8e, + 0x39, 0x45, 0x11, 0xbc, 0x48, 0x64, 0x7b, 0x31, 0x84, 0xe4, 0x36, 0x9e, 0xff, 0x9f, 0xdf, 0xdf, + 0xac, 0x06, 0xbe, 0x26, 0x82, 0x96, 0xa8, 0xa6, 0x01, 0xad, 0x52, 0xa1, 0x03, 0x19, 0x8d, 0xfd, + 0x54, 0x21, 0x21, 0xff, 0x68, 0x04, 0xbf, 0x10, 0xbe, 0xb7, 0x63, 0x8c, 0xb1, 0x50, 0x82, 0xbc, + 0x2a, 0x4d, 0x9e, 0x0b, 0x70, 0x2e, 0xd4, 0x74, 0x26, 0x86, 0x88, 0xc4, 0x39, 0xd4, 0x27, 0xa1, + 0x9e, 0xd8, 0xcc, 0x65, 0x9d, 0xe6, 0xb0, 0xa8, 0xbd, 0x7b, 0x06, 0x9f, 0xfe, 0x61, 0xa2, 0x45, + 0xa2, 0x33, 0x3d, 0xa2, 0x90, 0x04, 0xf7, 0x81, 0x27, 0xe2, 0x86, 0x2e, 0xc3, 0x99, 0xbc, 0x0e, + 0x09, 0x95, 0xfe, 0x7f, 0x18, 0x7a, 0x43, 0xe1, 0x3f, 0xa0, 0x49, 0x72, 0x2e, 0x34, 0x85, 0xf3, + 0xd4, 0x7e, 0x57, 0xd8, 0x0e, 0x0d, 0xde, 0x83, 0xba, 0x42, 0x24, 0xbb, 0xe6, 0xb2, 0x4e, 0xab, + 0xfb, 0xcd, 0x7f, 0x81, 0xed, 0x1f, 0xe8, 0xfa, 0xf5, 0xf5, 0xe3, 0x4f, 0x6b, 0x58, 0x98, 0xbd, + 0x2e, 0x34, 0x06, 0x59, 0x74, 0x26, 0x56, 0x39, 0x73, 0xee, 0xdc, 0x33, 0xe7, 0x35, 0x6f, 0xc3, + 0xfb, 0x45, 0x38, 0xcb, 0x84, 0xf9, 0x59, 0xf9, 0xe1, 0xdd, 0x32, 0x68, 0x56, 0x64, 0xfc, 0x37, + 0x7c, 0x4e, 0x15, 0xa6, 0xa8, 0x85, 0x1a, 0x28, 0x89, 0x4a, 0xd2, 0xca, 0x64, 0xbc, 0xea, 0x73, + 0x17, 0x5a, 0x0b, 0x24, 0x99, 0xc4, 0x03, 0x5c, 0x0a, 0x65, 0x52, 0x8f, 0x5b, 0xbc, 0x07, 0x8d, + 0xb4, 0xe0, 0x31, 0x6b, 0x7c, 0x39, 0x59, 0xa3, 0x84, 0x35, 0x2b, 0x18, 0xab, 0x77, 0x01, 0x1f, + 0x2a, 0x9e, 0x91, 0x20, 0xfe, 0x17, 0x60, 0x51, 0xbd, 0x9c, 0xcd, 0xdc, 0x5a, 0xa7, 0xd5, 0xb5, + 0x4f, 0x82, 0xaa, 0x01, 0x93, 0x75, 0x34, 0xd1, 0xff, 0xb3, 0xde, 0x3a, 0x6c, 0xb3, 0x75, 0xd8, + 0xd3, 0xd6, 0x61, 0x77, 0x3b, 0xc7, 0xda, 0xec, 0x1c, 0xeb, 0x61, 0xe7, 0x58, 0x57, 0xbf, 0x62, + 0x49, 0x93, 0x2c, 0xf2, 0xc7, 0x38, 0x0f, 0x64, 0x9c, 0x48, 0x12, 0xc1, 0xfe, 0x6c, 0xd2, 0x69, + 0x5c, 0x9e, 0x4e, 0xd4, 0x28, 0x4e, 0xa2, 0xf7, 0x1c, 0x00, 0x00, 0xff, 0xff, 0x35, 0xda, 0x33, + 0xd3, 0x52, 0x02, 0x00, 0x00, } func (m *MerkleRoot) Marshal() (dAtA []byte, err error) { diff --git a/pkg/types/monitoring.pb.go b/pkg/types/monitoring.pb.go index ba723491..2607d1ca 100644 --- a/pkg/types/monitoring.pb.go +++ b/pkg/types/monitoring.pb.go @@ -1,12 +1,12 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/types/monitoring.proto +// source: network/types/monitoring.proto package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -36,7 +36,7 @@ func (m *MonitoringPacketData) Reset() { *m = MonitoringPacketData{} } func (m *MonitoringPacketData) String() string { return proto.CompactTextString(m) } func (*MonitoringPacketData) ProtoMessage() {} func (*MonitoringPacketData) Descriptor() ([]byte, []int) { - return fileDescriptor_8fd55e1446543ca5, []int{0} + return fileDescriptor_898d541877da83ed, []int{0} } func (m *MonitoringPacketData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -106,7 +106,7 @@ func (m *MonitoringPacketAck) Reset() { *m = MonitoringPacketAck{} } func (m *MonitoringPacketAck) String() string { return proto.CompactTextString(m) } func (*MonitoringPacketAck) ProtoMessage() {} func (*MonitoringPacketAck) Descriptor() ([]byte, []int) { - return fileDescriptor_8fd55e1446543ca5, []int{1} + return fileDescriptor_898d541877da83ed, []int{1} } func (m *MonitoringPacketAck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -145,7 +145,7 @@ func (m *MonitoringPacket) Reset() { *m = MonitoringPacket{} } func (m *MonitoringPacket) String() string { return proto.CompactTextString(m) } func (*MonitoringPacket) ProtoMessage() {} func (*MonitoringPacket) Descriptor() ([]byte, []int) { - return fileDescriptor_8fd55e1446543ca5, []int{2} + return fileDescriptor_898d541877da83ed, []int{2} } func (m *MonitoringPacket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -198,7 +198,7 @@ func (m *SignatureCounts) Reset() { *m = SignatureCounts{} } func (m *SignatureCounts) String() string { return proto.CompactTextString(m) } func (*SignatureCounts) ProtoMessage() {} func (*SignatureCounts) Descriptor() ([]byte, []int) { - return fileDescriptor_8fd55e1446543ca5, []int{3} + return fileDescriptor_898d541877da83ed, []int{3} } func (m *SignatureCounts) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -244,15 +244,15 @@ func (m *SignatureCounts) GetCounts() []SignatureCount { // SignatureCount contains information of signature reporting for one specific validator with consensus address // RelativeSignatures is the sum of all signatures relative to the validator set size type SignatureCount struct { - OpAddress string `protobuf:"bytes,1,opt,name=opAddress,proto3" json:"opAddress,omitempty"` - RelativeSignatures github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=RelativeSignatures,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"RelativeSignatures"` + OpAddress string `protobuf:"bytes,1,opt,name=opAddress,proto3" json:"opAddress,omitempty"` + RelativeSignatures cosmossdk_io_math.LegacyDec `protobuf:"bytes,2,opt,name=RelativeSignatures,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"RelativeSignatures"` } func (m *SignatureCount) Reset() { *m = SignatureCount{} } func (m *SignatureCount) String() string { return proto.CompactTextString(m) } func (*SignatureCount) ProtoMessage() {} func (*SignatureCount) Descriptor() ([]byte, []int) { - return fileDescriptor_8fd55e1446543ca5, []int{4} + return fileDescriptor_898d541877da83ed, []int{4} } func (m *SignatureCount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -289,42 +289,42 @@ func (m *SignatureCount) GetOpAddress() string { } func init() { - proto.RegisterType((*MonitoringPacketData)(nil), "spn.types.MonitoringPacketData") - proto.RegisterType((*MonitoringPacketAck)(nil), "spn.types.MonitoringPacketAck") - proto.RegisterType((*MonitoringPacket)(nil), "spn.types.MonitoringPacket") - proto.RegisterType((*SignatureCounts)(nil), "spn.types.SignatureCounts") - proto.RegisterType((*SignatureCount)(nil), "spn.types.SignatureCount") + proto.RegisterType((*MonitoringPacketData)(nil), "network.types.MonitoringPacketData") + proto.RegisterType((*MonitoringPacketAck)(nil), "network.types.MonitoringPacketAck") + proto.RegisterType((*MonitoringPacket)(nil), "network.types.MonitoringPacket") + proto.RegisterType((*SignatureCounts)(nil), "network.types.SignatureCounts") + proto.RegisterType((*SignatureCount)(nil), "network.types.SignatureCount") } -func init() { proto.RegisterFile("spn/types/monitoring.proto", fileDescriptor_8fd55e1446543ca5) } +func init() { proto.RegisterFile("network/types/monitoring.proto", fileDescriptor_898d541877da83ed) } -var fileDescriptor_8fd55e1446543ca5 = []byte{ - // 395 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0x8a, 0xda, 0x40, - 0x18, 0xc7, 0x93, 0x2a, 0xd2, 0x7c, 0x42, 0x95, 0xa9, 0x05, 0x4d, 0x4b, 0x94, 0x14, 0x8a, 0x17, - 0x13, 0xb0, 0x87, 0x5e, 0xda, 0x83, 0xa9, 0x07, 0x5b, 0x28, 0x94, 0xf4, 0xd6, 0x4b, 0x89, 0x93, - 0x21, 0xa6, 0x31, 0x33, 0x21, 0x33, 0x16, 0x7a, 0xdb, 0x47, 0xd8, 0x07, 0xd8, 0xc7, 0xd8, 0x87, - 0xf0, 0x28, 0x7b, 0x5a, 0xf6, 0x20, 0x8b, 0xbe, 0xc8, 0xe2, 0x4c, 0xd6, 0x8d, 0xd9, 0xdd, 0x53, - 0x66, 0xfe, 0xdf, 0xff, 0xff, 0xfd, 0x26, 0x7c, 0x1f, 0x98, 0x3c, 0xa3, 0xae, 0xf8, 0x9f, 0x11, - 0xee, 0xa6, 0x8c, 0xc6, 0x82, 0xe5, 0x31, 0x8d, 0x9c, 0x2c, 0x67, 0x82, 0x21, 0x83, 0x67, 0xd4, - 0x91, 0x35, 0xb3, 0x13, 0xb1, 0x88, 0x49, 0xd5, 0x3d, 0x9c, 0x94, 0xc1, 0xec, 0x61, 0xc6, 0x53, - 0xc6, 0xff, 0xa8, 0x82, 0xba, 0xa8, 0x92, 0x9d, 0x40, 0xe7, 0xc7, 0xb1, 0xdf, 0xcf, 0x00, 0x27, - 0x44, 0x4c, 0x03, 0x11, 0xa0, 0x6f, 0xd0, 0x4e, 0x2b, 0x7a, 0x57, 0x1f, 0xe8, 0xc3, 0xe6, 0xf8, - 0xad, 0x73, 0xc4, 0x39, 0xd5, 0xe8, 0x4c, 0xf3, 0x1f, 0xc5, 0xbc, 0x97, 0xd0, 0xc8, 0xe4, 0xc9, - 0x7e, 0x03, 0xaf, 0xab, 0x89, 0x09, 0x4e, 0xec, 0x33, 0x1d, 0xda, 0x55, 0x1d, 0x0d, 0xa0, 0x39, - 0x5f, 0x32, 0x9c, 0xcc, 0x48, 0x1c, 0x2d, 0x14, 0xbb, 0xe6, 0x97, 0x25, 0xf4, 0x1d, 0x5a, 0x3c, - 0x8e, 0x68, 0x20, 0x56, 0x39, 0xf9, 0xca, 0x56, 0x54, 0xf0, 0xee, 0x0b, 0xf9, 0x42, 0xb3, 0xf4, - 0xc2, 0x5f, 0xa7, 0x0e, 0xaf, 0xbe, 0xde, 0xf6, 0x35, 0xbf, 0x1a, 0xb4, 0xff, 0x42, 0xab, 0xe2, - 0x44, 0x16, 0x80, 0xa4, 0xc9, 0xab, 0xe4, 0xd7, 0xfd, 0x92, 0x82, 0x3e, 0x41, 0x03, 0xdf, 0x53, - 0x6b, 0xc3, 0xe6, 0xb8, 0xf7, 0x2c, 0xb5, 0x80, 0x16, 0x76, 0xfb, 0x42, 0x87, 0x57, 0xa7, 0x06, - 0xf4, 0x0e, 0x0c, 0x96, 0x4d, 0xc2, 0x30, 0x27, 0x9c, 0x4b, 0x94, 0xe1, 0x3f, 0x08, 0x68, 0x09, - 0xc8, 0x27, 0xcb, 0x40, 0xc4, 0xff, 0xc8, 0x31, 0xa7, 0xfe, 0xd5, 0xf0, 0x3e, 0x1f, 0x5a, 0xdf, - 0x6c, 0xfb, 0x1f, 0xa2, 0x58, 0x2c, 0x56, 0x73, 0x07, 0xb3, 0xb4, 0x18, 0x70, 0xf1, 0x19, 0xf1, - 0x30, 0x51, 0x8b, 0xe3, 0x4c, 0x09, 0xbe, 0xba, 0x1c, 0x41, 0x31, 0xff, 0x29, 0xc1, 0xfe, 0x13, - 0x7d, 0xbd, 0x2f, 0xeb, 0x9d, 0xa5, 0x6f, 0x76, 0x96, 0x7e, 0xbb, 0xb3, 0xf4, 0xf3, 0xbd, 0xa5, - 0x6d, 0xf6, 0x96, 0x76, 0xbd, 0xb7, 0xb4, 0xdf, 0xef, 0x4b, 0x0c, 0x41, 0x68, 0x48, 0xf2, 0x34, - 0xa6, 0xc2, 0x3d, 0x6c, 0x66, 0x96, 0x44, 0x0a, 0x32, 0x6f, 0xc8, 0xbd, 0xfa, 0x78, 0x17, 0x00, - 0x00, 0xff, 0xff, 0x42, 0xcb, 0x44, 0x44, 0xb1, 0x02, 0x00, 0x00, +var fileDescriptor_898d541877da83ed = []byte{ + // 392 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x41, 0xcf, 0xd2, 0x40, + 0x10, 0x6d, 0x85, 0x10, 0x19, 0xa2, 0x90, 0x15, 0x13, 0x44, 0x5d, 0x48, 0xbd, 0x70, 0xb1, 0x8d, + 0x78, 0x34, 0x1e, 0xa8, 0x1c, 0x38, 0x88, 0x31, 0xf5, 0xe6, 0xc5, 0x2c, 0xcb, 0x66, 0xd9, 0x94, + 0x76, 0x9b, 0xee, 0xa2, 0xe1, 0xee, 0x0f, 0xd0, 0xff, 0xe2, 0x8f, 0xe0, 0x48, 0x3c, 0x19, 0x0f, + 0xc4, 0xc0, 0x1f, 0x31, 0xec, 0x16, 0x84, 0xfa, 0xe5, 0xbb, 0xcd, 0xbc, 0x79, 0x6f, 0xde, 0x6c, + 0xf6, 0x01, 0x4e, 0x99, 0xfe, 0x22, 0xf3, 0x38, 0xd0, 0xeb, 0x8c, 0xa9, 0x20, 0x91, 0xa9, 0xd0, + 0x32, 0x17, 0x29, 0xf7, 0xb3, 0x5c, 0x6a, 0x89, 0xee, 0x15, 0x73, 0xdf, 0xcc, 0xbb, 0x8f, 0xa8, + 0x54, 0x89, 0x54, 0x9f, 0xcc, 0x30, 0xb0, 0x8d, 0x65, 0x76, 0xdb, 0x5c, 0x72, 0x69, 0xf1, 0x63, + 0x65, 0x51, 0x4f, 0x42, 0x7b, 0x7a, 0xde, 0xf9, 0x9e, 0xd0, 0x98, 0xe9, 0x31, 0xd1, 0x04, 0x4d, + 0xa1, 0x95, 0x94, 0xf0, 0x8e, 0xdb, 0x77, 0x07, 0x8d, 0x61, 0xcf, 0xbf, 0xb2, 0xf4, 0xcb, 0xf2, + 0x89, 0x13, 0xfd, 0x27, 0x0d, 0xef, 0x42, 0x2d, 0x33, 0x95, 0xf7, 0x10, 0x1e, 0x94, 0x15, 0x23, + 0x1a, 0x7b, 0x5f, 0x5d, 0x68, 0x95, 0x71, 0xd4, 0x87, 0xc6, 0x6c, 0x29, 0x69, 0x3c, 0x61, 0x82, + 0x2f, 0xac, 0x7f, 0x25, 0xba, 0x84, 0xd0, 0x3b, 0x68, 0x2a, 0xc1, 0x53, 0xa2, 0x57, 0x39, 0x7b, + 0x23, 0x57, 0xa9, 0x56, 0x9d, 0x3b, 0xe6, 0x4a, 0x5c, 0xba, 0xf2, 0xc3, 0x35, 0x2b, 0xac, 0x6e, + 0x76, 0x3d, 0x27, 0x2a, 0x8b, 0xbd, 0x14, 0x9a, 0x25, 0x26, 0xc2, 0x00, 0xc6, 0xd1, 0xb4, 0xe6, + 0x86, 0x6a, 0x74, 0x81, 0xa0, 0x57, 0x50, 0xa3, 0x27, 0xe7, 0xca, 0xa0, 0x31, 0x7c, 0x7a, 0xab, + 0x73, 0x61, 0x5c, 0x48, 0xbc, 0xef, 0x2e, 0xdc, 0xbf, 0x26, 0xa0, 0x27, 0x50, 0x97, 0xd9, 0x68, + 0x3e, 0xcf, 0x99, 0x52, 0xc6, 0xae, 0x1e, 0xfd, 0x03, 0x10, 0x01, 0x14, 0xb1, 0x25, 0xd1, 0xe2, + 0x33, 0x3b, 0xeb, 0xec, 0x9b, 0xeb, 0xe1, 0x8b, 0xe3, 0xea, 0xdf, 0xbb, 0xde, 0x63, 0xfb, 0xef, + 0x6a, 0x1e, 0xfb, 0x42, 0x06, 0x09, 0xd1, 0x0b, 0xff, 0x2d, 0xe3, 0x84, 0xae, 0xc7, 0x8c, 0xfe, + 0xfc, 0xf1, 0x1c, 0x8a, 0x58, 0x8c, 0x19, 0x8d, 0x6e, 0x58, 0x16, 0xbe, 0xde, 0xec, 0xb1, 0xbb, + 0xdd, 0x63, 0xf7, 0xcf, 0x1e, 0xbb, 0xdf, 0x0e, 0xd8, 0xd9, 0x1e, 0xb0, 0xf3, 0xeb, 0x80, 0x9d, + 0x8f, 0xcf, 0xb8, 0xd0, 0x8b, 0xd5, 0xcc, 0xa7, 0x32, 0x09, 0x04, 0x4f, 0x85, 0x66, 0xc1, 0x29, + 0x9e, 0x59, 0xcc, 0x6d, 0x44, 0x67, 0x35, 0x13, 0xac, 0x97, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, + 0x0a, 0xf1, 0x8e, 0x3f, 0xba, 0x02, 0x00, 0x00, } func (m *MonitoringPacketData) Marshal() (dAtA []byte, err error) { diff --git a/pkg/types/monitoring_packet_test.go b/pkg/types/monitoring_packet_test.go index cb22db2d..060bd982 100644 --- a/pkg/types/monitoring_packet_test.go +++ b/pkg/types/monitoring_packet_test.go @@ -5,9 +5,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/pkg/types" - tc "github.com/tendermint/spn/testutil/constructor" - "github.com/tendermint/spn/testutil/sample" + "github.com/ignite/network/pkg/types" + tc "github.com/ignite/network/testutil/constructor" + "github.com/ignite/network/testutil/sample" ) func TestMonitoringPacket_ValidateBasic(t *testing.T) { diff --git a/pkg/types/signature_counts.go b/pkg/types/signature_counts.go index 340febb6..7dc633a1 100644 --- a/pkg/types/signature_counts.go +++ b/pkg/types/signature_counts.go @@ -7,8 +7,6 @@ import ( sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/types/bech32" "github.com/pkg/errors" - - sdk "github.com/cosmos/cosmos-sdk/types" ) // NewSignatureCounts returns a new SignatureCounts @@ -19,7 +17,7 @@ func NewSignatureCounts() SignatureCounts { // AddSignature adds a signature for the consensus address at a specific validator set size func (m *SignatureCounts) AddSignature(opAddress string, validatorSetSize int64) { // relative signature is the signature relative to the validator set size - relSignature := sdk.OneDec().QuoInt(sdkmath.NewInt(validatorSetSize)) + relSignature := sdkmath.LegacyOneDec().QuoInt(sdkmath.NewInt(validatorSetSize)) // search for the consensus address for i, c := range m.Counts { @@ -40,7 +38,7 @@ func (m *SignatureCounts) AddSignature(opAddress string, validatorSetSize int64) // the sum of all relative signatures should not exceed the number of block func (m SignatureCounts) Validate() error { opAddr := make(map[string]struct{}) - sumSig := sdk.ZeroDec() + sumSig := sdkmath.LegacyZeroDec() // iterate all signature count for _, sc := range m.Counts { @@ -58,7 +56,7 @@ func (m SignatureCounts) Validate() error { sumSig = sumSig.Add(sc.RelativeSignatures) } - blockCountDec := sdk.NewDecFromInt(sdkmath.NewIntFromUint64(m.BlockCount)) + blockCountDec := sdkmath.LegacyNewDecFromInt(sdkmath.NewIntFromUint64(m.BlockCount)) if sumSig.GT(blockCountDec) { return fmt.Errorf( "sum of relative signatures is higher than block number %s > %s", diff --git a/pkg/types/signature_counts_test.go b/pkg/types/signature_counts_test.go index 1328d2d3..2f05579a 100644 --- a/pkg/types/signature_counts_test.go +++ b/pkg/types/signature_counts_test.go @@ -5,9 +5,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/pkg/types" - tc "github.com/tendermint/spn/testutil/constructor" - "github.com/tendermint/spn/testutil/sample" + "github.com/ignite/network/pkg/types" + tc "github.com/ignite/network/testutil/constructor" + "github.com/ignite/network/testutil/sample" ) func TestNewSignatureCounts(t *testing.T) { diff --git a/pkg/types/validator_set.go b/pkg/types/validator_set.go index 1af3975d..cf4d2e03 100644 --- a/pkg/types/validator_set.go +++ b/pkg/types/validator_set.go @@ -7,12 +7,11 @@ import ( "os" "strconv" - "gopkg.in/yaml.v2" - "github.com/cometbft/cometbft/crypto/ed25519" tmtypes "github.com/cometbft/cometbft/types" - ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + ibctmtypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" "github.com/pkg/errors" + "gopkg.in/yaml.v2" ) const TypeEd25519 = "tendermint/PubKeyEd25519" diff --git a/pkg/types/validator_set_test.go b/pkg/types/validator_set_test.go index 39e817ff..c382dbf6 100644 --- a/pkg/types/validator_set_test.go +++ b/pkg/types/validator_set_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/pkg/types" + "github.com/ignite/network/pkg/types" ) func TestParseValidatorSetFromFile(t *testing.T) { diff --git a/proto/buf.gen.pulsar.yaml b/proto/buf.gen.pulsar.yaml index e8fffdb2..e09b3c1d 100644 --- a/proto/buf.gen.pulsar.yaml +++ b/proto/buf.gen.pulsar.yaml @@ -7,12 +7,13 @@ version: v1 managed: enabled: true go_package_prefix: - default: cosmossdk.io/api + default: github.com/ignite/network/api except: - buf.build/googleapis/googleapis - buf.build/cosmos/gogo-proto - buf.build/cosmos/cosmos-proto override: + buf.build/cosmos/cosmos-sdk: cosmossdk.io/api plugins: - name: go-pulsar out: ./api diff --git a/proto/buf.gen.swagger.yaml b/proto/buf.gen.swagger.yaml index 2eafa902..58d30d86 100644 --- a/proto/buf.gen.swagger.yaml +++ b/proto/buf.gen.swagger.yaml @@ -10,5 +10,5 @@ plugins: opt: - logtostderr=true - openapi_naming_strategy=fqn - - simple_operation_ids=true - json_names_for_fields=false + - generate_unbound_methods=true \ No newline at end of file diff --git a/proto/buf.lock b/proto/buf.lock index 77287f75..c13911be 100644 --- a/proto/buf.lock +++ b/proto/buf.lock @@ -1,31 +1,43 @@ -# This file is auto-generated from Ignite. -# DO NOT EDIT -# -# buf.lock -# +# Generated by buf. DO NOT EDIT. version: v1 deps: - remote: buf.build owner: cosmos repository: cosmos-proto - commit: 1935555c206d4afb9e94615dfd0fad31 + commit: 04467658e59e44bbb22fe568206e1f70 + digest: shake256:73a640bd60e0c523b0f8237ff34eab67c45a38b64bbbde1d80224819d272dbf316ac183526bd245f994af6608b025f5130483d0133c5edd385531326b5990466 - remote: buf.build owner: cosmos repository: cosmos-sdk - commit: 954f7b05f38440fc8250134b15adec47 + commit: 05419252bcc241ea8023acf1ed4cadc5 + digest: shake256:1e54a48c19a8b59d35e0a7efa76402939f515f2d8005df099856f24c37c20a52800308f025abb8cffcd014d437b49707388aaca4865d9d063d8f25d5d4eb77d5 - remote: buf.build owner: cosmos repository: gogo-proto - commit: 34d970b699f84aa382f3c29773a60836 + commit: 88ef6483f90f478fb938c37dde52ece3 + digest: shake256:89c45df2aa11e0cff97b0d695436713db3d993d76792e9f8dc1ae90e6ab9a9bec55503d48ceedd6b86069ab07d3041b32001b2bfe0227fa725dd515ff381e5ba + - remote: buf.build + owner: cosmos + repository: ibc + commit: 41fbc441e4d645119d275150719c5441 + digest: shake256:a61d3e152909abddc91dcc1aec8ac997007bebd48a7921bc243681c708e6c9068f6484aa7ed4e6ff60101d3422c98744a4a5294bbda6aacdba07f1dfa4291020 - remote: buf.build owner: cosmos repository: ics23 - commit: 3c44d8daa8b44059ac744cd17d4a49d7 + commit: d2ad30d1af0e4e978fa1f5c143acf63b + digest: shake256:000ea62514f7d507c96905d70ef11d16b8f8f32fda5a75def40d4130058af0174142ed3cd6c4a89c5fdb3cbf138277d771d86eeb6992f054d13a82556a2ff079 - remote: buf.build owner: googleapis repository: googleapis - commit: 75b4300737fb4efca0831636be94e517 + commit: e7f8d366f5264595bcc4cd4139af9973 + digest: shake256:e5e5f1c12f82e028ea696faa43b4f9dc6258a6d1226282962a8c8b282e10946281d815884f574bd279ebd9cd7588629beb3db17b892af6c33b56f92f8f67f509 - remote: buf.build owner: protocolbuffers repository: wellknowntypes - commit: 44e83bc050a4497fa7b36b34d95ca156 + commit: d59b7d45e69d4e129a1b797e2766f067 + digest: shake256:e4bb315f5a90aace88fe39709c831eda8eb0ce66b4cf947065888100b9867c2eb9a0f61f6b8d73c51b1fcccdfe8611090f55ce5db1aee6901ec9b4e6d8fa8e52 + - remote: buf.build + owner: tendermint + repository: tendermint + commit: 33ed361a90514289beabf3189e1d7665 + digest: shake256:038267e06294714fd883610626554b04a127b576b4e253befb4206cb72d5d3c1eeccacd4b9ec8e3fb891f7c14e1cb0f770c077d2989638995b0a61c85afedb1d diff --git a/proto/buf.yaml b/proto/buf.yaml index 7a86adcf..0cf8f44b 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -1,29 +1,25 @@ -# This file is auto-generated from Ignite. You can edit -# the file content but do not change the file name or path. -# -# buf.yaml -# -version: v1 -deps: - - buf.build/protocolbuffers/wellknowntypes - - buf.build/cosmos/cosmos-sdk - - buf.build/cosmos/cosmos-proto - - buf.build/cosmos/gogo-proto - - buf.build/googleapis/googleapis - - buf.build/cosmos/ics23 breaking: - use: - - FILE + use: + - FILE +deps: + - buf.build/protocolbuffers/wellknowntypes + - buf.build/cosmos/cosmos-sdk + - buf.build/cosmos/cosmos-proto + - buf.build/cosmos/gogo-proto + - buf.build/googleapis/googleapis + - buf.build/cosmos/ics23 + - buf.build/cosmos/ibc lint: - use: - - DEFAULT - - COMMENTS - - FILE_LOWER_SNAKE_CASE - except: - - UNARY_RPC - - COMMENT_FIELD - - SERVICE_SUFFIX - - PACKAGE_VERSION_SUFFIX - - RPC_REQUEST_STANDARD_NAME - ignore: - - tendermint + except: + - UNARY_RPC + - COMMENT_FIELD + - SERVICE_SUFFIX + - PACKAGE_VERSION_SUFFIX + - RPC_REQUEST_STANDARD_NAME + ignore: + - tendermint + use: + - DEFAULT + - COMMENTS + - FILE_LOWER_SNAKE_CASE +version: v1 diff --git a/proto/network/launch/module/v1/module.proto b/proto/network/launch/module/v1/module.proto new file mode 100644 index 00000000..c5408679 --- /dev/null +++ b/proto/network/launch/module/v1/module.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package network.launch.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/ignite/network/x/launch" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; + + +} \ No newline at end of file diff --git a/proto/spn/launch/chain.proto b/proto/network/launch/v1/chain.proto similarity index 63% rename from proto/spn/launch/chain.proto rename to proto/network/launch/v1/chain.proto index da052124..4ba2cf1e 100644 --- a/proto/spn/launch/chain.proto +++ b/proto/network/launch/v1/chain.proto @@ -1,29 +1,33 @@ syntax = "proto3"; -package spn.launch; +package network.launch.v1; +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; -import "cosmos/base/v1beta1/coin.proto"; -option go_package = "github.com/tendermint/spn/x/launch/types"; +option go_package = "github.com/ignite/network/x/launch/types"; message Chain { - uint64 launchID = 1; - uint64 coordinatorID = 2; + uint64 launchID = 1; + uint64 coordinatorID = 2; string genesisChainID = 3; - int64 createdAt = 4; + int64 createdAt = 4; - string sourceURL = 5; + string sourceURL = 5; string sourceHash = 6; InitialGenesis initialGenesis = 7 [(gogoproto.nullable) = false]; - bool hasProject = 8; - uint64 projectID = 9; - bool isMainnet = 10; + bool hasProject = 8; + uint64 projectID = 9; + bool isMainnet = 10; - bool launchTriggered = 11; - google.protobuf.Timestamp launchTime = 12 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bool launchTriggered = 11; + google.protobuf.Timestamp launchTime = 12 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; int64 consumerRevisionHeight = 13; @@ -33,8 +37,10 @@ message Chain { // for this chain. If not set, the balances used will be those // contained in the requests repeated cosmos.base.v1beta1.Coin accountBalance = 15 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; @@ -44,8 +50,8 @@ message Chain { message InitialGenesis { oneof source { DefaultInitialGenesis defaultInitialGenesis = 1; - GenesisURL genesisURL = 2; - GenesisConfig genesisConfig = 3; + GenesisURL genesisURL = 2; + GenesisConfig genesisConfig = 3; } } @@ -55,7 +61,7 @@ message DefaultInitialGenesis {} // GenesisURL specifies using a custom genesis from a URL as the initial genesis message GenesisURL { - string url = 1; + string url = 1; string hash = 2; } @@ -63,4 +69,4 @@ message GenesisURL { // the file is located in the root specified by sourceURL message GenesisConfig { string file = 1; -} \ No newline at end of file +} diff --git a/proto/network/launch/v1/events.proto b/proto/network/launch/v1/events.proto new file mode 100644 index 00000000..3e2ed388 --- /dev/null +++ b/proto/network/launch/v1/events.proto @@ -0,0 +1,102 @@ +syntax = "proto3"; +package network.launch.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "network/launch/v1/chain.proto"; +import "network/launch/v1/genesis_account.proto"; +import "network/launch/v1/genesis_validator.proto"; +import "network/launch/v1/request.proto"; +import "network/launch/v1/vesting_account.proto"; + +option go_package = "github.com/ignite/network/x/launch/types"; + +message EventChainCreated { + uint64 launchID = 1; + string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 coordinatorID = 3; +} + +message EventRequestCreated { + string creator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + Request request = 2 [(gogoproto.nullable) = false]; +} + +message EventRequestSettled { + uint64 launchID = 1; + uint64 requestID = 2; + bool approved = 3; +} + +message EventGenesisAccountAdded { + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin coins = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + string coordinatorAddress = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventVestingAccountAdded { + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + VestingOptions vestingOptions = 3 [(gogoproto.nullable) = false]; + string coordinatorAddress = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventValidatorAdded { + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + bytes genTx = 3; + bytes consPubKey = 4; + cosmos.base.v1beta1.Coin selfDelegation = 5 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coin" + ]; + Peer peer = 6 [(gogoproto.nullable) = false]; + bool hasProject = 7; + uint64 projectID = 8; + string coordinatorAddress = 9 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventAccountRemoved { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; + string coordinatorAddress = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventValidatorRemoved { + string genesisValidatorAccount = 1; + uint64 launchID = 2; + bool hasProject = 3; + uint64 projectID = 4; + string coordinatorAddress = 5 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventParamChanged { + uint64 launchID = 1; + string module = 2; + string param = 3; + bytes value = 4; +} + +message EventLaunchTriggered { + uint64 launchID = 1; + google.protobuf.Timestamp launchTimeStamp = 2 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; +} + +message EventLaunchReverted { + uint64 launchID = 1; +} diff --git a/proto/network/launch/v1/genesis.proto b/proto/network/launch/v1/genesis.proto new file mode 100644 index 00000000..373bd7dd --- /dev/null +++ b/proto/network/launch/v1/genesis.proto @@ -0,0 +1,37 @@ +syntax = "proto3"; + +package network.launch.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "network/launch/v1/chain.proto"; +import "network/launch/v1/genesis_account.proto"; +import "network/launch/v1/genesis_validator.proto"; +import "network/launch/v1/param_change.proto"; +import "network/launch/v1/params.proto"; +import "network/launch/v1/request.proto"; +import "network/launch/v1/vesting_account.proto"; + +option go_package = "github.com/ignite/network/x/launch/types"; + +// GenesisState defines the launch module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + repeated Chain chainList = 2 [(gogoproto.nullable) = false]; + uint64 chainCount = 3; + repeated GenesisAccount genesisAccountList = 4 [(gogoproto.nullable) = false]; + repeated VestingAccount vestingAccountList = 5 [(gogoproto.nullable) = false]; + repeated GenesisValidator genesisValidatorList = 6 [(gogoproto.nullable) = false]; + repeated Request requestList = 7 [(gogoproto.nullable) = false]; + repeated RequestCounter requestCounters = 8 [(gogoproto.nullable) = false]; + repeated ParamChange paramChangeList = 9 [(gogoproto.nullable) = false]; +} + +message RequestCounter { + uint64 launchID = 1; + uint64 counter = 2; +} diff --git a/proto/network/launch/v1/genesis_account.proto b/proto/network/launch/v1/genesis_account.proto new file mode 100644 index 00000000..50efe3af --- /dev/null +++ b/proto/network/launch/v1/genesis_account.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +package network.launch.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/launch/types"; + +message GenesisAccount { + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin coins = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} diff --git a/proto/network/launch/v1/genesis_validator.proto b/proto/network/launch/v1/genesis_validator.proto new file mode 100644 index 00000000..a9d93a34 --- /dev/null +++ b/proto/network/launch/v1/genesis_validator.proto @@ -0,0 +1,40 @@ +syntax = "proto3"; +package network.launch.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/launch/types"; + +message GenesisValidator { + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + bytes genTx = 3; + bytes consPubKey = 4; + cosmos.base.v1beta1.Coin selfDelegation = 5 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coin" + ]; + Peer peer = 6 [(gogoproto.nullable) = false]; +} + +message Peer { + string id = 1; // e.g.: 7786ace6ddb3d771024792a46540c88587e0e8cc + + oneof connection { + string tcpAddress = 2; // use a TCP address + HTTPTunnel httpTunnel = 3; // or use an HTTP tunnel + EmptyConnection none = 4; // or don't provide any connection + } + + message HTTPTunnel { + string name = 1; // e.g.: chisel (https://github.com/jpillora/chisel) + string address = 2; // for chisel running on Gitpod, e.g.: https://3475-chocolate-capybara-kkiztq32.ws-eu21.gitpod.io/ + } + + message EmptyConnection {} +} diff --git a/proto/network/launch/v1/param_change.proto b/proto/network/launch/v1/param_change.proto new file mode 100644 index 00000000..09d90e54 --- /dev/null +++ b/proto/network/launch/v1/param_change.proto @@ -0,0 +1,11 @@ +syntax = "proto3"; +package network.launch.v1; + +option go_package = "github.com/ignite/network/x/launch/types"; + +message ParamChange { + uint64 launchID = 1; + string module = 2; + string param = 3; + bytes value = 4; +} diff --git a/proto/network/launch/v1/params.proto b/proto/network/launch/v1/params.proto new file mode 100644 index 00000000..301e7b40 --- /dev/null +++ b/proto/network/launch/v1/params.proto @@ -0,0 +1,50 @@ +syntax = "proto3"; + +package network.launch.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; + +option go_package = "github.com/ignite/network/x/launch/types"; + +// Params defines the parameters for the module. +message Params { + option (amino.name) = "network/x/launch/Params"; + option (gogoproto.equal) = true; + + LaunchTimeRange launchTimeRange = 1 [(gogoproto.nullable) = false]; + google.protobuf.Duration revertDelay = 2 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true + ]; + repeated cosmos.base.v1beta1.Coin chainCreationFee = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // requestFee is the fee for making a request to a chain + repeated cosmos.base.v1beta1.Coin requestFee = 4 [ + (gogoproto.nullable) = false, + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + uint64 maxMetadataLength = 5; +} + +message LaunchTimeRange { + google.protobuf.Duration minLaunchTime = 1 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true + ]; + google.protobuf.Duration maxLaunchTime = 2 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true + ]; +} diff --git a/proto/network/launch/v1/query.proto b/proto/network/launch/v1/query.proto new file mode 100644 index 00000000..fe2b244a --- /dev/null +++ b/proto/network/launch/v1/query.proto @@ -0,0 +1,185 @@ +syntax = "proto3"; + +package network.launch.v1; + +import "amino/amino.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "network/launch/v1/chain.proto"; +import "network/launch/v1/genesis_account.proto"; +import "network/launch/v1/genesis_validator.proto"; +import "network/launch/v1/param_change.proto"; +import "network/launch/v1/params.proto"; +import "network/launch/v1/request.proto"; +import "network/launch/v1/vesting_account.proto"; + +option go_package = "github.com/ignite/network/x/launch/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ignite/network/launch/v1/params"; + } + + // Queries a list of Chain items. + rpc GetChain(QueryGetChainRequest) returns (QueryGetChainResponse) { + option (google.api.http).get = "/ignite/network/launch/chain/{launchID}"; + } + rpc ListChain(QueryAllChainRequest) returns (QueryAllChainResponse) { + option (google.api.http).get = "/ignite/network/launch/chain"; + } + + // Queries a list of GenesisAccount items. + rpc GetGenesisAccount(QueryGetGenesisAccountRequest) returns (QueryGetGenesisAccountResponse) { + option (google.api.http).get = "/ignite/network/launch/genesis_account/{launchID}/{address}"; + } + rpc ListGenesisAccount(QueryAllGenesisAccountRequest) returns (QueryAllGenesisAccountResponse) { + option (google.api.http).get = "/ignite/network/launch/genesis_account/{launchID}"; + } + + // Queries a list of GenesisValidator items. + rpc GetGenesisValidator(QueryGetGenesisValidatorRequest) returns (QueryGetGenesisValidatorResponse) { + option (google.api.http).get = "/ignite/network/launch/genesis_validator/{launchID}/{address}"; + } + rpc ListGenesisValidator(QueryAllGenesisValidatorRequest) returns (QueryAllGenesisValidatorResponse) { + option (google.api.http).get = "/ignite/network/launch/genesis_validator/{launchID}"; + } + + // Queries a list of VestingAccount items. + rpc GetVestingAccount(QueryGetVestingAccountRequest) returns (QueryGetVestingAccountResponse) { + option (google.api.http).get = "/ignite/network/launch/vesting_account/{launchID}/{address}"; + } + rpc ListVestingAccount(QueryAllVestingAccountRequest) returns (QueryAllVestingAccountResponse) { + option (google.api.http).get = "/ignite/network/launch/vesting_account/{launchID}"; + } + + // Queries a list of Request items. + rpc GetRequest(QueryGetRequestRequest) returns (QueryGetRequestResponse) { + option (google.api.http).get = "/ignite/network/launch/request/{launchID}/{requestID}"; + } + rpc ListRequest(QueryAllRequestRequest) returns (QueryAllRequestResponse) { + option (google.api.http).get = "/ignite/network/launch/request/{launchID}"; + } + + rpc ListParamChange(QueryAllParamChangeRequest) returns (QueryAllParamChangeResponse) { + option (google.api.http).get = "/ignite/network/launch/param_change"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +message QueryGetChainRequest { + uint64 launchID = 1; +} + +message QueryGetChainResponse { + Chain Chain = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllChainRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllChainResponse { + repeated Chain Chain = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetGenesisAccountRequest { + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryGetGenesisAccountResponse { + GenesisAccount genesisAccount = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllGenesisAccountRequest { + uint64 launchID = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryAllGenesisAccountResponse { + repeated GenesisAccount genesisAccount = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetGenesisValidatorRequest { + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryGetGenesisValidatorResponse { + GenesisValidator genesisValidator = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllGenesisValidatorRequest { + uint64 launchID = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryAllGenesisValidatorResponse { + repeated GenesisValidator genesisValidator = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetVestingAccountRequest { + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryGetVestingAccountResponse { + VestingAccount vestingAccount = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllVestingAccountRequest { + uint64 launchID = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryAllVestingAccountResponse { + repeated VestingAccount vestingAccount = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetRequestRequest { + uint64 launchID = 1; + uint64 requestID = 2; +} + +message QueryGetRequestResponse { + Request Request = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllRequestRequest { + uint64 launchID = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryAllRequestResponse { + repeated Request Request = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryAllParamChangeRequest { + uint64 launchID = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryAllParamChangeResponse { + repeated ParamChange paramChange = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/proto/network/launch/v1/request.proto b/proto/network/launch/v1/request.proto new file mode 100644 index 00000000..47691719 --- /dev/null +++ b/proto/network/launch/v1/request.proto @@ -0,0 +1,44 @@ +syntax = "proto3"; +package network.launch.v1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/launch/v1/genesis_account.proto"; +import "network/launch/v1/genesis_validator.proto"; +import "network/launch/v1/param_change.proto"; +import "network/launch/v1/vesting_account.proto"; + +option go_package = "github.com/ignite/network/x/launch/types"; + +message Request { + uint64 launchID = 1; + uint64 requestID = 2; + string creator = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + int64 createdAt = 4; + RequestContent content = 5 [(gogoproto.nullable) = false]; + enum Status { + PENDING = 0; + APPROVED = 1; + REJECTED = 2; + } + Status status = 6; +} + +message RequestContent { + oneof content { + GenesisAccount genesisAccount = 1; + VestingAccount vestingAccount = 2; + GenesisValidator genesisValidator = 3; + AccountRemoval accountRemoval = 4; + ValidatorRemoval validatorRemoval = 5; + ParamChange paramChange = 6; + } +} + +message AccountRemoval { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message ValidatorRemoval { + string valAddress = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} diff --git a/proto/network/launch/v1/tx.proto b/proto/network/launch/v1/tx.proto new file mode 100644 index 00000000..2a33a923 --- /dev/null +++ b/proto/network/launch/v1/tx.proto @@ -0,0 +1,140 @@ +syntax = "proto3"; + +package network.launch.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "network/launch/v1/chain.proto"; +import "network/launch/v1/params.proto"; +import "network/launch/v1/request.proto"; + +option go_package = "github.com/ignite/network/x/launch/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + rpc CreateChain(MsgCreateChain) returns (MsgCreateChainResponse); + rpc EditChain(MsgEditChain) returns (MsgEditChainResponse); + rpc UpdateLaunchInformation(MsgUpdateLaunchInformation) returns (MsgUpdateLaunchInformationResponse); + rpc SendRequest(MsgSendRequest) returns (MsgSendRequestResponse); + rpc SettleRequest(MsgSettleRequest) returns (MsgSettleRequestResponse); + rpc TriggerLaunch(MsgTriggerLaunch) returns (MsgTriggerLaunchResponse); + rpc RevertLaunch(MsgRevertLaunch) returns (MsgRevertLaunchResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "network/x/launch/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the module parameters to update. + + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} + +message MsgCreateChain { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string genesisChainID = 2; + string sourceURL = 3; + string sourceHash = 4; + InitialGenesis initialGenesis = 5 [(gogoproto.nullable) = false]; + bool hasProject = 6; + uint64 projectID = 7; + repeated cosmos.base.v1beta1.Coin accountBalance = 8 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + bytes metadata = 9; +} + +message MsgCreateChainResponse { + uint64 launchID = 1; +} + +message MsgEditChain { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; + bool setProjectID = 3; + uint64 projectID = 4; + bytes metadata = 5; +} + +message MsgEditChainResponse {} + +message MsgUpdateLaunchInformation { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; + string genesisChainID = 3; + string sourceURL = 4; + string sourceHash = 5; + InitialGenesis initialGenesis = 6; +} + +message MsgUpdateLaunchInformationResponse {} + +message MsgSendRequest { + option (cosmos.msg.v1.signer) = "creator"; + string creator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; + RequestContent content = 3 [(gogoproto.nullable) = false]; +} + +message MsgSendRequestResponse { + uint64 requestID = 1; + bool autoApproved = 2; +} + +message MsgSettleRequest { + option (cosmos.msg.v1.signer) = "signer"; + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; + uint64 requestID = 3; + bool approve = 4; +} + +message MsgSettleRequestResponse {} + +message MsgTriggerLaunch { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; + google.protobuf.Timestamp launchTime = 3 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; +} + +message MsgTriggerLaunchResponse {} + +message MsgRevertLaunch { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; +} + +message MsgRevertLaunchResponse {} diff --git a/proto/spn/launch/vesting_account.proto b/proto/network/launch/v1/vesting_account.proto similarity index 54% rename from proto/spn/launch/vesting_account.proto rename to proto/network/launch/v1/vesting_account.proto index 794ae9f2..1851c5dd 100644 --- a/proto/spn/launch/vesting_account.proto +++ b/proto/network/launch/v1/vesting_account.proto @@ -1,16 +1,17 @@ syntax = "proto3"; -package spn.launch; +package network.launch.v1; -option go_package = "github.com/tendermint/spn/x/launch/types"; - -import "gogoproto/gogo.proto"; +import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; +option go_package = "github.com/ignite/network/x/launch/types"; + message VestingAccount { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; VestingOptions vestingOptions = 3 [(gogoproto.nullable) = false]; } @@ -25,14 +26,21 @@ message VestingOptions { // once end time is reached message DelayedVesting { repeated cosmos.base.v1beta1.Coin totalBalance = 1 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; repeated cosmos.base.v1beta1.Coin vesting = 2 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; - google.protobuf.Timestamp endTime = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp endTime = 3 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; } diff --git a/proto/network/monitoringc/module/v1/module.proto b/proto/network/monitoringc/module/v1/module.proto new file mode 100644 index 00000000..3b608366 --- /dev/null +++ b/proto/network/monitoringc/module/v1/module.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package network.monitoringc.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/ignite/network/x/monitoringc" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; + + +} \ No newline at end of file diff --git a/proto/network/monitoringc/v1/genesis.proto b/proto/network/monitoringc/v1/genesis.proto new file mode 100644 index 00000000..c4ab24a0 --- /dev/null +++ b/proto/network/monitoringc/v1/genesis.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +package network.monitoringc.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "network/monitoringc/v1/launch_id_from_channel_id.proto"; +import "network/monitoringc/v1/launch_id_from_verified_client_id.proto"; +import "network/monitoringc/v1/monitoring_history.proto"; +import "network/monitoringc/v1/params.proto"; +import "network/monitoringc/v1/provider_client_id.proto"; +import "network/monitoringc/v1/verified_client_id.proto"; + +option go_package = "github.com/ignite/network/x/monitoringc/types"; + +// GenesisState defines the monitoringc module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string portID = 2; + repeated LaunchIDFromChannelID launchIDFromChannelIDList = 3 [(gogoproto.nullable) = false]; + repeated LaunchIDFromVerifiedClientID launchIDFromVerifiedClientIDList = 4 [(gogoproto.nullable) = false]; + repeated MonitoringHistory monitoringHistoryList = 5 [(gogoproto.nullable) = false]; + repeated VerifiedClientID verifiedClientIDList = 6 [(gogoproto.nullable) = false]; + repeated ProviderClientID providerClientIDList = 7 [(gogoproto.nullable) = false]; +} diff --git a/proto/spn/monitoringc/launch_id_from_channel_id.proto b/proto/network/monitoringc/v1/launch_id_from_channel_id.proto similarity index 52% rename from proto/spn/monitoringc/launch_id_from_channel_id.proto rename to proto/network/monitoringc/v1/launch_id_from_channel_id.proto index 0f8dc954..5ce1c58f 100644 --- a/proto/spn/monitoringc/launch_id_from_channel_id.proto +++ b/proto/network/monitoringc/v1/launch_id_from_channel_id.proto @@ -1,9 +1,10 @@ syntax = "proto3"; -package spn.monitoringc; +package network.monitoringc.v1; -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; +option go_package = "github.com/ignite/network/x/monitoringc/types"; message LaunchIDFromChannelID { string channelID = 1; uint64 launchID = 2; } + diff --git a/proto/spn/monitoringc/launch_id_from_verified_client_id.proto b/proto/network/monitoringc/v1/launch_id_from_verified_client_id.proto similarity index 54% rename from proto/spn/monitoringc/launch_id_from_verified_client_id.proto rename to proto/network/monitoringc/v1/launch_id_from_verified_client_id.proto index 758e11cd..0703ce80 100644 --- a/proto/spn/monitoringc/launch_id_from_verified_client_id.proto +++ b/proto/network/monitoringc/v1/launch_id_from_verified_client_id.proto @@ -1,7 +1,7 @@ syntax = "proto3"; -package spn.monitoringc; +package network.monitoringc.v1; -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; +option go_package = "github.com/ignite/network/x/monitoringc/types"; message LaunchIDFromVerifiedClientID { string clientID = 1; diff --git a/proto/network/monitoringc/v1/monitoring_history.proto b/proto/network/monitoringc/v1/monitoring_history.proto new file mode 100644 index 00000000..66eba7d9 --- /dev/null +++ b/proto/network/monitoringc/v1/monitoring_history.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package network.monitoringc.v1; + +option go_package = "github.com/ignite/network/x/monitoringc/types"; + +message MonitoringHistory { + uint64 launchID = 1; + string latestMonitoringPacket = 2; +} diff --git a/proto/network/monitoringc/v1/packet.proto b/proto/network/monitoringc/v1/packet.proto new file mode 100644 index 00000000..3936f8d6 --- /dev/null +++ b/proto/network/monitoringc/v1/packet.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +package network.monitoringc.v1; + +option go_package = "github.com/ignite/network/x/monitoringc/types"; + +message MonitoringcPacketData { + oneof packet { + NoData noData = 1; + } +} + +message NoData { +} diff --git a/proto/network/monitoringc/v1/params.proto b/proto/network/monitoringc/v1/params.proto new file mode 100644 index 00000000..bb1f786b --- /dev/null +++ b/proto/network/monitoringc/v1/params.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +package network.monitoringc.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/monitoringc/types"; + +// Params defines the parameters for the module. +message Params { + option (amino.name) = "network/x/monitoringc/Params"; + option (gogoproto.equal) = true; +} diff --git a/proto/spn/monitoringc/provider_client_id.proto b/proto/network/monitoringc/v1/provider_client_id.proto similarity index 51% rename from proto/spn/monitoringc/provider_client_id.proto rename to proto/network/monitoringc/v1/provider_client_id.proto index a179c6a5..a8e7b61f 100644 --- a/proto/spn/monitoringc/provider_client_id.proto +++ b/proto/network/monitoringc/v1/provider_client_id.proto @@ -1,7 +1,7 @@ syntax = "proto3"; -package spn.monitoringc; +package network.monitoringc.v1; -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; +option go_package = "github.com/ignite/network/x/monitoringc/types"; message ProviderClientID { uint64 launchID = 1; diff --git a/proto/network/monitoringc/v1/query.proto b/proto/network/monitoringc/v1/query.proto new file mode 100644 index 00000000..0f778de0 --- /dev/null +++ b/proto/network/monitoringc/v1/query.proto @@ -0,0 +1,111 @@ +syntax = "proto3"; + +package network.monitoringc.v1; + +import "amino/amino.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "network/monitoringc/v1/launch_id_from_channel_id.proto"; +import "network/monitoringc/v1/monitoring_history.proto"; +import "network/monitoringc/v1/params.proto"; +import "network/monitoringc/v1/provider_client_id.proto"; +import "network/monitoringc/v1/verified_client_id.proto"; + +option go_package = "github.com/ignite/network/x/monitoringc/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ignite/network/monitoringc/v1/params"; + } + + // Queries a list of LaunchIDFromChannelID items. + rpc GetLaunchIDFromChannelID(QueryGetLaunchIDFromChannelIDRequest) returns (QueryGetLaunchIDFromChannelIDResponse) { + option (google.api.http).get = "/ignite/network/monitoringc/launch_id_from_channel_id/{channelID}"; + } + rpc ListLaunchIDFromChannelID(QueryAllLaunchIDFromChannelIDRequest) returns (QueryAllLaunchIDFromChannelIDResponse) { + option (google.api.http).get = "/ignite/network/monitoringc/launch_id_from_channel_id"; + } + + // Queries a list of MonitoringHistory items. + rpc GetMonitoringHistory(QueryGetMonitoringHistoryRequest) returns (QueryGetMonitoringHistoryResponse) { + option (google.api.http).get = "/ignite/network/monitoringc/monitoring_history/{launchID}"; + } + + // Queries a list of VerifiedClientID items. + rpc GetVerifiedClientID(QueryGetVerifiedClientIDRequest) returns (QueryGetVerifiedClientIDResponse) { + option (google.api.http).get = "/ignite/network/monitoringc/verified_client_id/{launchID}"; + } + + // Queries a list of ProviderClientID items. + rpc GetProviderClientID(QueryGetProviderClientIDRequest) returns (QueryGetProviderClientIDResponse) { + option (google.api.http).get = "/ignite/network/monitoringc/provider_client_id/{launchID}"; + } + rpc ListProviderClientID(QueryAllProviderClientIDRequest) returns (QueryAllProviderClientIDResponse) { + option (google.api.http).get = "/ignite/network/monitoringc/provider_client_id"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +message QueryGetLaunchIDFromChannelIDRequest { + string channelID = 1; +} + +message QueryGetLaunchIDFromChannelIDResponse { + LaunchIDFromChannelID launchIDFromChannelID = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllLaunchIDFromChannelIDRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllLaunchIDFromChannelIDResponse { + repeated LaunchIDFromChannelID launchIDFromChannelID = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetMonitoringHistoryRequest { + uint64 launchID = 1; +} + +message QueryGetMonitoringHistoryResponse { + MonitoringHistory monitoringHistory = 1 [(gogoproto.nullable) = false]; +} + +message QueryGetVerifiedClientIDRequest { + uint64 launchID = 1; +} + +message QueryGetVerifiedClientIDResponse { + VerifiedClientID verifiedClientID = 1 [(gogoproto.nullable) = false]; +} + +message QueryGetProviderClientIDRequest { + uint64 launchID = 1; +} + +message QueryGetProviderClientIDResponse { + ProviderClientID providerClientID = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllProviderClientIDRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllProviderClientIDResponse { + repeated ProviderClientID providerClientID = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/proto/network/monitoringc/v1/tx.proto b/proto/network/monitoringc/v1/tx.proto new file mode 100644 index 00000000..33028fb3 --- /dev/null +++ b/proto/network/monitoringc/v1/tx.proto @@ -0,0 +1,57 @@ +syntax = "proto3"; + +package network.monitoringc.v1; + +import "amino/amino.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/monitoringc/v1/params.proto"; +import "network/types/ibc.proto"; + +option go_package = "github.com/ignite/network/x/monitoringc/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + rpc CreateClient(MsgCreateClient) returns (MsgCreateClientResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "network/x/monitoringc/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the module parameters to update. + + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} + +message MsgCreateClient { + option (cosmos.msg.v1.signer) = "creator"; + string creator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; + network.types.ConsensusState consensusState = 3 [(gogoproto.nullable) = false]; + network.types.ValidatorSet validatorSet = 4 [(gogoproto.nullable) = false]; + int64 unbondingPeriod = 5; + uint64 revisionHeight = 6; +} + +message MsgCreateClientResponse { + string clientID = 1; +} diff --git a/proto/network/monitoringc/v1/verified_client_id.proto b/proto/network/monitoringc/v1/verified_client_id.proto new file mode 100644 index 00000000..9d54e97d --- /dev/null +++ b/proto/network/monitoringc/v1/verified_client_id.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package network.monitoringc.v1; + +option go_package = "github.com/ignite/network/x/monitoringc/types"; + +message VerifiedClientID { + uint64 launchID = 1; + repeated string clientIDs = 2; +} diff --git a/proto/network/monitoringp/module/v1/module.proto b/proto/network/monitoringp/module/v1/module.proto new file mode 100644 index 00000000..804055a2 --- /dev/null +++ b/proto/network/monitoringp/module/v1/module.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package network.monitoringp.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/ignite/network/x/monitoringp" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; + + +} \ No newline at end of file diff --git a/proto/network/monitoringp/v1/connection_channel_id.proto b/proto/network/monitoringp/v1/connection_channel_id.proto new file mode 100644 index 00000000..7eb9d289 --- /dev/null +++ b/proto/network/monitoringp/v1/connection_channel_id.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; +package network.monitoringp.v1; + +option go_package = "github.com/ignite/network/x/monitoringp/types"; + +message ConnectionChannelID { + string channelID = 1; +} diff --git a/proto/network/monitoringp/v1/consumer_client_id.proto b/proto/network/monitoringp/v1/consumer_client_id.proto new file mode 100644 index 00000000..02230830 --- /dev/null +++ b/proto/network/monitoringp/v1/consumer_client_id.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; +package network.monitoringp.v1; + +option go_package = "github.com/ignite/network/x/monitoringp/types"; + +message ConsumerClientID { + string clientID = 1; +} diff --git a/proto/network/monitoringp/v1/genesis.proto b/proto/network/monitoringp/v1/genesis.proto new file mode 100644 index 00000000..c5ff3efd --- /dev/null +++ b/proto/network/monitoringp/v1/genesis.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; + +package network.monitoringp.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "network/monitoringp/v1/connection_channel_id.proto"; +import "network/monitoringp/v1/consumer_client_id.proto"; +import "network/monitoringp/v1/monitoring_info.proto"; +import "network/monitoringp/v1/params.proto"; + +option go_package = "github.com/ignite/network/x/monitoringp/types"; + +// GenesisState defines the monitoringp module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string portID = 2; + MonitoringInfo monitoringInfo = 3; + ConnectionChannelID connectionChannelID = 4; + ConsumerClientID consumerClientID = 5; +} diff --git a/proto/network/monitoringp/v1/monitoring_info.proto b/proto/network/monitoringp/v1/monitoring_info.proto new file mode 100644 index 00000000..6a9236df --- /dev/null +++ b/proto/network/monitoringp/v1/monitoring_info.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package network.monitoringp.v1; + +import "gogoproto/gogo.proto"; +import "network/types/monitoring.proto"; + +option go_package = "github.com/ignite/network/x/monitoringp/types"; + +message MonitoringInfo { + bool transmitted = 1; + network.types.SignatureCounts signatureCounts = 2 [(gogoproto.nullable) = false]; +} diff --git a/proto/network/monitoringp/v1/packet.proto b/proto/network/monitoringp/v1/packet.proto new file mode 100644 index 00000000..a19a8951 --- /dev/null +++ b/proto/network/monitoringp/v1/packet.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package network.monitoringp.v1; + +option go_package = "github.com/ignite/network/x/monitoringp/types"; + +message MonitoringpPacketData { + oneof packet { + NoData noData = 1; + } +} + +message NoData {} diff --git a/proto/network/monitoringp/v1/params.proto b/proto/network/monitoringp/v1/params.proto new file mode 100644 index 00000000..87f6a45d --- /dev/null +++ b/proto/network/monitoringp/v1/params.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; + +package network.monitoringp.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "network/types/ibc.proto"; + +option go_package = "github.com/ignite/network/x/monitoringp/types"; + +// Params defines the parameters for the module. +message Params { + option (amino.name) = "network/x/monitoringp/Params"; + option (gogoproto.equal) = true; + int64 lastBlockHeight = 1; + string consumerChainID = 2; + network.types.ConsensusState consumerConsensusState = 3 [(gogoproto.nullable) = false]; + int64 consumerUnbondingPeriod = 4; + uint64 consumerRevisionHeight = 5; +} diff --git a/proto/spn/monitoringp/query.proto b/proto/network/monitoringp/v1/query.proto similarity index 51% rename from proto/spn/monitoringp/query.proto rename to proto/network/monitoringp/v1/query.proto index 41beed39..067eba9a 100644 --- a/proto/spn/monitoringp/query.proto +++ b/proto/network/monitoringp/v1/query.proto @@ -1,49 +1,51 @@ syntax = "proto3"; -package spn.monitoringp; +package network.monitoringp.v1; + +import "amino/amino.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "spn/monitoringp/params.proto"; -import "spn/monitoringp/consumer_client_id.proto"; -import "spn/monitoringp/connection_channel_id.proto"; -import "spn/monitoringp/monitoring_info.proto"; +import "network/monitoringp/v1/connection_channel_id.proto"; +import "network/monitoringp/v1/consumer_client_id.proto"; +import "network/monitoringp/v1/monitoring_info.proto"; +import "network/monitoringp/v1/params.proto"; -option go_package = "github.com/tendermint/spn/x/monitoringp/types"; +option go_package = "github.com/ignite/network/x/monitoringp/types"; // Query defines the gRPC querier service. service Query { - // Queries a ConsumerClientID by index. - rpc ConsumerClientID(QueryGetConsumerClientIDRequest) returns (QueryGetConsumerClientIDResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringp/consumer_client_id"; - } - - // Queries a ConnectionChannelID by index. - rpc ConnectionChannelID(QueryGetConnectionChannelIDRequest) returns (QueryGetConnectionChannelIDResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringp/connection_channel_id"; + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ignite/network/monitoringp/v1/params"; } // Queries a MonitoringInfo by index. - rpc MonitoringInfo(QueryGetMonitoringInfoRequest) returns (QueryGetMonitoringInfoResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringp/monitoring_info"; + rpc GetMonitoringInfo(QueryGetMonitoringInfoRequest) returns (QueryGetMonitoringInfoResponse) { + option (google.api.http).get = "/ignite/network/monitoringp/monitoring_info"; } - // Params queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringp/params"; + // Queries a ConnectionChannelID by index. + rpc GetConnectionChannelID(QueryGetConnectionChannelIDRequest) returns (QueryGetConnectionChannelIDResponse) { + option (google.api.http).get = "/ignite/network/monitoringp/connection_channel_id"; } -} - -message QueryGetConsumerClientIDRequest {} -message QueryGetConsumerClientIDResponse { - ConsumerClientID ConsumerClientID = 1 [(gogoproto.nullable) = false]; + // Queries a ConsumerClientID by index. + rpc GetConsumerClientID(QueryGetConsumerClientIDRequest) returns (QueryGetConsumerClientIDResponse) { + option (google.api.http).get = "/ignite/network/monitoringp/consumer_client_id"; + } } -message QueryGetConnectionChannelIDRequest {} +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} -message QueryGetConnectionChannelIDResponse { - ConnectionChannelID ConnectionChannelID = 1 [(gogoproto.nullable) = false]; +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } message QueryGetMonitoringInfoRequest {} @@ -52,10 +54,14 @@ message QueryGetMonitoringInfoResponse { MonitoringInfo MonitoringInfo = 1 [(gogoproto.nullable) = false]; } -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} +message QueryGetConnectionChannelIDRequest {} -// QueryParamsResponse is response type for the Query/Params RPC method. -message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; +message QueryGetConnectionChannelIDResponse { + ConnectionChannelID ConnectionChannelID = 1 [(gogoproto.nullable) = false]; +} + +message QueryGetConsumerClientIDRequest {} + +message QueryGetConsumerClientIDResponse { + ConsumerClientID ConsumerClientID = 1 [(gogoproto.nullable) = false]; } diff --git a/proto/network/monitoringp/v1/tx.proto b/proto/network/monitoringp/v1/tx.proto new file mode 100644 index 00000000..c8c5d670 --- /dev/null +++ b/proto/network/monitoringp/v1/tx.proto @@ -0,0 +1,40 @@ +syntax = "proto3"; +package network.monitoringp.v1; + +import "amino/amino.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/monitoringp/v1/params.proto"; + +option go_package = "github.com/ignite/network/x/monitoringp/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "network/x/monitoringp/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the module parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} diff --git a/proto/network/participation/module/v1/module.proto b/proto/network/participation/module/v1/module.proto new file mode 100644 index 00000000..51f07f30 --- /dev/null +++ b/proto/network/participation/module/v1/module.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package network.participation.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/ignite/network/x/participation" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; + + +} \ No newline at end of file diff --git a/proto/network/participation/v1/auction_used_allocations.proto b/proto/network/participation/v1/auction_used_allocations.proto new file mode 100644 index 00000000..5ea87751 --- /dev/null +++ b/proto/network/participation/v1/auction_used_allocations.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +package network.participation.v1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/participation/types"; + +message AuctionUsedAllocations { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 auctionID = 2; + bool withdrawn = 3; + string numAllocations = 4 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; +} diff --git a/proto/network/participation/v1/events.proto b/proto/network/participation/v1/events.proto new file mode 100644 index 00000000..e793f9ca --- /dev/null +++ b/proto/network/participation/v1/events.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; +package network.participation.v1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/participation/types"; + +message EventAllocationsUsed { + string participant = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 auctionID = 2; + string numAllocations = 3 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; +} + +message EventAllocationsWithdrawn { + string participant = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 auctionID = 2; +} diff --git a/proto/network/participation/v1/genesis.proto b/proto/network/participation/v1/genesis.proto new file mode 100644 index 00000000..cac23f39 --- /dev/null +++ b/proto/network/participation/v1/genesis.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; + +package network.participation.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "network/participation/v1/params.proto"; +import "network/participation/v1/auction_used_allocations.proto"; +import "network/participation/v1/used_allocations.proto"; + +option go_package = "github.com/ignite/network/x/participation/types"; + +// GenesisState defines the participation module's genesis state. +message GenesisState { + + // params defines all the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated AuctionUsedAllocations auctionUsedAllocationsList = 2 [(gogoproto.nullable) = false] ; + repeated UsedAllocations usedAllocationsList = 3 [(gogoproto.nullable) = false] ; +} + diff --git a/proto/network/participation/v1/params.proto b/proto/network/participation/v1/params.proto new file mode 100644 index 00000000..d7a18367 --- /dev/null +++ b/proto/network/participation/v1/params.proto @@ -0,0 +1,58 @@ +syntax = "proto3"; + +package network.participation.v1; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; + +option go_package = "github.com/ignite/network/x/participation/types"; + +// Params defines the parameters for the module. +message Params { + option (amino.name) = "network/x/participation/Params"; + option (gogoproto.equal) = true; + + AllocationPrice allocationPrice = 1 [(gogoproto.nullable) = false]; + repeated Tier participationTierList = 2 [(gogoproto.nullable) = false]; + // Time frame before auction starts where MsgParticipate can be called + google.protobuf.Duration registrationPeriod = 3 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true + ]; + // Delay after auction starts when allocations can be withdrawn + google.protobuf.Duration withdrawalDelay = 4 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true + ]; +} + +message AllocationPrice { + // number of bonded tokens necessary to get one allocation + string bonded = 1 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; +} + +// Matches a number of required allocations with benefits +message Tier { + uint64 tierID = 1; + string requiredAllocations = 2 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; + TierBenefits benefits = 3 [(gogoproto.nullable) = false]; +} + +message TierBenefits { + // maximum amount an auction participant can bid + string maxBidAmount = 1 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; +} diff --git a/proto/network/participation/v1/query.proto b/proto/network/participation/v1/query.proto new file mode 100644 index 00000000..5035ccc6 --- /dev/null +++ b/proto/network/participation/v1/query.proto @@ -0,0 +1,120 @@ +syntax = "proto3"; + +package network.participation.v1; + +import "amino/amino.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "network/participation/v1/auction_used_allocations.proto"; +import "network/participation/v1/params.proto"; +import "network/participation/v1/used_allocations.proto"; + +option go_package = "github.com/ignite/network/x/participation/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ignite/network/participation/v1/params"; + } + + // Queries a list of AuctionUsedAllocations items. + rpc GetAuctionUsedAllocations(QueryGetAuctionUsedAllocationsRequest) returns (QueryGetAuctionUsedAllocationsResponse) { + option (google.api.http).get = "/ignite/network/participation/auction_used_allocations/{address}"; + } + rpc ListAuctionUsedAllocations(QueryAllAuctionUsedAllocationsRequest) returns (QueryAllAuctionUsedAllocationsResponse) { + option (google.api.http).get = "/ignite/network/participation/auction_used_allocations"; + } + + // Queries a list of UsedAllocations items. + rpc GetUsedAllocations(QueryGetUsedAllocationsRequest) returns (QueryGetUsedAllocationsResponse) { + option (google.api.http).get = "/ignite/network/participation/used_allocations/{address}"; + } + rpc ListUsedAllocations(QueryAllUsedAllocationsRequest) returns (QueryAllUsedAllocationsResponse) { + option (google.api.http).get = "/ignite/network/participation/used_allocations"; + } + + // Queries a list of TotalAllocations items. + rpc TotalAllocations(QueryTotalAllocationsRequest) returns (QueryTotalAllocationsResponse) { + option (google.api.http).get = "/ignite/network/participation/total_allocations/{address}"; + } + + // Queries a list of AvailableAllocations items. + rpc AvailableAllocations(QueryAvailableAllocationsRequest) returns (QueryAvailableAllocationsResponse) { + option (google.api.http).get = "/ignite/network/participation/available_allocations/{address}"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +message QueryGetAuctionUsedAllocationsRequest { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 auctionID = 2; +} + +message QueryGetAuctionUsedAllocationsResponse { + AuctionUsedAllocations auctionUsedAllocations = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllAuctionUsedAllocationsRequest { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryAllAuctionUsedAllocationsResponse { + repeated AuctionUsedAllocations auctionUsedAllocations = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetUsedAllocationsRequest { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryGetUsedAllocationsResponse { + UsedAllocations usedAllocations = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllUsedAllocationsRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllUsedAllocationsResponse { + repeated UsedAllocations usedAllocations = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryTotalAllocationsRequest { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryTotalAllocationsResponse { + string totalAllocations = 1 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; +} + +message QueryAvailableAllocationsRequest { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryAvailableAllocationsResponse { + string availableAllocations = 1 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; +} diff --git a/proto/network/participation/v1/tx.proto b/proto/network/participation/v1/tx.proto new file mode 100644 index 00000000..ea9cdb33 --- /dev/null +++ b/proto/network/participation/v1/tx.proto @@ -0,0 +1,60 @@ +syntax = "proto3"; + +package network.participation.v1; + +import "amino/amino.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/participation/v1/params.proto"; + +option go_package = "github.com/ignite/network/x/participation/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + rpc Participate(MsgParticipate) returns (MsgParticipateResponse); + rpc WithdrawAllocations(MsgWithdrawAllocations) returns (MsgWithdrawAllocationsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "network/x/participation/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the module parameters to update. + + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} + +message MsgParticipate { + option (cosmos.msg.v1.signer) = "participant"; + string participant = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 auctionID = 2; + uint64 tierID = 3; +} + +message MsgParticipateResponse {} + +message MsgWithdrawAllocations { + option (cosmos.msg.v1.signer) = "participant"; + string participant = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 auctionID = 2; +} + +message MsgWithdrawAllocationsResponse {} diff --git a/proto/network/participation/v1/used_allocations.proto b/proto/network/participation/v1/used_allocations.proto new file mode 100644 index 00000000..6d59aeba --- /dev/null +++ b/proto/network/participation/v1/used_allocations.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package network.participation.v1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/participation/types"; + +message UsedAllocations { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string numAllocations = 2 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; +} diff --git a/proto/network/profile/module/v1/module.proto b/proto/network/profile/module/v1/module.proto new file mode 100644 index 00000000..e03dc56a --- /dev/null +++ b/proto/network/profile/module/v1/module.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package network.profile.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/ignite/network/x/profile" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; + + +} \ No newline at end of file diff --git a/proto/network/profile/v1/coordinator.proto b/proto/network/profile/v1/coordinator.proto new file mode 100644 index 00000000..d5cb0b20 --- /dev/null +++ b/proto/network/profile/v1/coordinator.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package network.profile.v1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/profile/types"; + +message Coordinator { + uint64 coordinatorID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + CoordinatorDescription description = 3 [(gogoproto.nullable) = false]; + bool active = 4; +} + +message CoordinatorDescription { + string identity = 1; + string website = 2; + string details = 3; +} + +message CoordinatorByAddress { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 coordinatorID = 2; +} diff --git a/proto/network/profile/v1/events.proto b/proto/network/profile/v1/events.proto new file mode 100644 index 00000000..0a1f667c --- /dev/null +++ b/proto/network/profile/v1/events.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package network.profile.v1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/profile/v1/coordinator.proto"; +import "network/profile/v1/validator.proto"; + +option go_package = "github.com/ignite/network/x/profile/types"; + +message EventCoordinatorCreated { + uint64 coordinatorID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventCoordinatorAddressUpdated { + uint64 coordinatorID = 1; + string newAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventCoordinatorDisabled { + uint64 coordinatorID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventValidatorCreated { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated string operatorAddresses = 2; +} + +message EventValidatorOperatorAddressesUpdated { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated string operatorAddresses = 2; +} diff --git a/proto/network/profile/v1/genesis.proto b/proto/network/profile/v1/genesis.proto new file mode 100644 index 00000000..1c6912c4 --- /dev/null +++ b/proto/network/profile/v1/genesis.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; + +package network.profile.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "network/profile/v1/coordinator.proto"; +import "network/profile/v1/params.proto"; +import "network/profile/v1/validator.proto"; + +option go_package = "github.com/ignite/network/x/profile/types"; + +// GenesisState defines the profile module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + repeated Validator validatorList = 2 [(gogoproto.nullable) = false]; + repeated ValidatorByOperatorAddress validatorsByOperatorAddress = 3 [(gogoproto.nullable) = false]; + repeated Coordinator coordinatorList = 4 [(gogoproto.nullable) = false]; + uint64 coordinatorCount = 5; + repeated CoordinatorByAddress coordinatorsByAddress = 6 [(gogoproto.nullable) = false]; +} diff --git a/proto/network/profile/v1/params.proto b/proto/network/profile/v1/params.proto new file mode 100644 index 00000000..83167d41 --- /dev/null +++ b/proto/network/profile/v1/params.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +package network.profile.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/profile/types"; + +// Params defines the parameters for the module. +message Params { + option (amino.name) = "network/x/profile/Params"; + option (gogoproto.equal) = true; +} diff --git a/proto/network/profile/v1/query.proto b/proto/network/profile/v1/query.proto new file mode 100644 index 00000000..0ed718d5 --- /dev/null +++ b/proto/network/profile/v1/query.proto @@ -0,0 +1,110 @@ +syntax = "proto3"; + +package network.profile.v1; + +import "amino/amino.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "network/profile/v1/coordinator.proto"; +import "network/profile/v1/params.proto"; +import "network/profile/v1/validator.proto"; + +option go_package = "github.com/ignite/network/x/profile/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ignite/network/profile/v1/params"; + } + + // Queries a list of Coordinator items. + rpc GetCoordinator(QueryGetCoordinatorRequest) returns (QueryGetCoordinatorResponse) { + option (google.api.http).get = "/ignite/network/profile/coordinator/{ID}"; + } + rpc ListCoordinator(QueryAllCoordinatorRequest) returns (QueryAllCoordinatorResponse) { + option (google.api.http).get = "/ignite/network/profile/coordinator"; + } + + // Queries a list of Validator items. + rpc GetValidator(QueryGetValidatorRequest) returns (QueryGetValidatorResponse) { + option (google.api.http).get = "/ignite/network/profile/validator/{address}"; + } + rpc ListValidator(QueryAllValidatorRequest) returns (QueryAllValidatorResponse) { + option (google.api.http).get = "/ignite/network/profile/validator"; + } + + // Queries a list of GetCoordinatorByAddress items. + rpc GetCoordinatorByAddress(QueryGetCoordinatorByAddressRequest) returns (QueryGetCoordinatorByAddressResponse) { + option (google.api.http).get = "/ignite/network/profile/get_coordinator_by_address/{address}"; + } + + // Queries a list of GetValidatorByOperatorAddress items. + rpc GetValidatorByOperatorAddress(QueryGetValidatorByOperatorAddressRequest) returns (QueryGetValidatorByOperatorAddressResponse) { + option (google.api.http).get = "/ignite/network/profile/get_validator_by_operator_address/{address}"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +message QueryGetCoordinatorRequest { + uint64 ID = 1; +} + +message QueryGetCoordinatorResponse { + Coordinator Coordinator = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllCoordinatorRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllCoordinatorResponse { + repeated Coordinator Coordinator = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetValidatorRequest { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryGetValidatorResponse { + Validator validator = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllValidatorRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllValidatorResponse { + repeated Validator validator = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetCoordinatorByAddressRequest { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryGetCoordinatorByAddressResponse { + Coordinator coordinator = 1 [(gogoproto.nullable) = false]; +} + +message QueryGetValidatorByOperatorAddressRequest { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryGetValidatorByOperatorAddressResponse { + Validator validator = 1 [(gogoproto.nullable) = false]; +} diff --git a/proto/network/profile/v1/tx.proto b/proto/network/profile/v1/tx.proto new file mode 100644 index 00000000..7c0849f1 --- /dev/null +++ b/proto/network/profile/v1/tx.proto @@ -0,0 +1,98 @@ +syntax = "proto3"; + +package network.profile.v1; + +import "amino/amino.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/profile/v1/coordinator.proto"; +import "network/profile/v1/params.proto"; +import "network/profile/v1/validator.proto"; + +option go_package = "github.com/ignite/network/x/profile/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + rpc UpdateValidatorDescription(MsgUpdateValidatorDescription) returns (MsgUpdateValidatorDescriptionResponse); + rpc AddValidatorOperatorAddress(MsgAddValidatorOperatorAddress) returns (MsgAddValidatorOperatorAddressResponse); + rpc CreateCoordinator(MsgCreateCoordinator) returns (MsgCreateCoordinatorResponse); + rpc UpdateCoordinatorDescription(MsgUpdateCoordinatorDescription) returns (MsgUpdateCoordinatorDescriptionResponse); + rpc UpdateCoordinatorAddress(MsgUpdateCoordinatorAddress) returns (MsgUpdateCoordinatorAddressResponse); + rpc DisableCoordinator(MsgDisableCoordinator) returns (MsgDisableCoordinatorResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "network/x/profile/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the module parameters to update. + + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} + +message MsgUpdateValidatorDescription { + option (cosmos.msg.v1.signer) = "address"; + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + ValidatorDescription description = 2 [(gogoproto.nullable) = false]; +} + +message MsgUpdateValidatorDescriptionResponse {} + +message MsgAddValidatorOperatorAddress { + option (cosmos.msg.v1.signer) = "validatorAddress"; + string validatorAddress = 1; + string operatorAddress = 2; +} + +message MsgAddValidatorOperatorAddressResponse {} + +message MsgCreateCoordinator { + option (cosmos.msg.v1.signer) = "address"; + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + CoordinatorDescription description = 2 [(gogoproto.nullable) = false]; +} + +message MsgCreateCoordinatorResponse { + uint64 coordinatorID = 1; +} + +message MsgUpdateCoordinatorDescription { + option (cosmos.msg.v1.signer) = "address"; + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + CoordinatorDescription description = 2 [(gogoproto.nullable) = false]; +} + +message MsgUpdateCoordinatorDescriptionResponse {} + +message MsgUpdateCoordinatorAddress { + option (cosmos.msg.v1.signer) = "address"; + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string newAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message MsgUpdateCoordinatorAddressResponse {} + +message MsgDisableCoordinator { + option (cosmos.msg.v1.signer) = "address"; + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message MsgDisableCoordinatorResponse {} diff --git a/proto/network/profile/v1/validator.proto b/proto/network/profile/v1/validator.proto new file mode 100644 index 00000000..33f6dc6d --- /dev/null +++ b/proto/network/profile/v1/validator.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package network.profile.v1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/profile/types"; + +message Validator { + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated string operatorAddresses = 2; + ValidatorDescription description = 3 [(gogoproto.nullable) = false]; +} + +message ValidatorDescription { + string identity = 1; + string moniker = 2; + string website = 3; + string securityContact = 4; + string details = 5; +} + +message ValidatorByOperatorAddress { + string operatorAddress = 1; + string validatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} diff --git a/proto/network/project/module/v1/module.proto b/proto/network/project/module/v1/module.proto new file mode 100644 index 00000000..b1fd7156 --- /dev/null +++ b/proto/network/project/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package network.project.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the module. +message Module { + option (cosmos.app.v1alpha1.module) = {go_import: "github.com/ignite/network/x/project"}; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/proto/network/project/v1/events.proto b/proto/network/project/v1/events.proto new file mode 100644 index 00000000..8772c54e --- /dev/null +++ b/proto/network/project/v1/events.proto @@ -0,0 +1,104 @@ +syntax = "proto3"; +package network.project.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/project/v1/vesting.proto"; + +option go_package = "github.com/ignite/network/x/project/types"; + +message EventProjectCreated { + uint64 projectID = 1; + string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 coordinatorID = 3; +} + +message EventProjectChainAdded { + uint64 projectID = 1; + uint64 launchID = 2; +} + +message EventProjectInfoUpdated { + uint64 projectID = 1; + string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string projectName = 3; + bytes metadata = 4; +} + +message EventProjectSharesUpdated { + uint64 projectID = 1; + string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin allocatedShares = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; +} + +message EventProjectTotalSupplyUpdated { + uint64 projectID = 1; + string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin totalSupply = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message EventProjectMainnetInitialized { + uint64 projectID = 1; + string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 mainnetID = 3; +} + +message EventMainnetAccountCreated { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin shares = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; +} + +message EventMainnetAccountUpdated { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin shares = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; +} + +message EventMainnetAccountRemoved { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventMainnetVestingAccountCreated { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + ShareVestingOptions vestingOptions = 3 [(gogoproto.nullable) = false]; +} + +message EventMainnetVestingAccountUpdated { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + ShareVestingOptions vestingOptions = 3 [(gogoproto.nullable) = false]; +} + +message EventProjectAuctionCreated { + uint64 projectID = 1; + uint64 auctionID = 2; +} diff --git a/proto/network/project/v1/genesis.proto b/proto/network/project/v1/genesis.proto new file mode 100644 index 00000000..ae887543 --- /dev/null +++ b/proto/network/project/v1/genesis.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package network.project.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "network/project/v1/mainnet_account.proto"; +import "network/project/v1/params.proto"; +import "network/project/v1/project.proto"; +import "network/project/v1/project_chains.proto"; + +option go_package = "github.com/ignite/network/x/project/types"; + +// GenesisState defines the project module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + repeated Project projectList = 2 [(gogoproto.nullable) = false]; + uint64 projectCount = 3; + repeated ProjectChains projectChainsList = 4 [(gogoproto.nullable) = false]; + repeated MainnetAccount mainnetAccountList = 5 [(gogoproto.nullable) = false]; + uint64 totalShares = 6; +} diff --git a/proto/network/project/v1/mainnet_account.proto b/proto/network/project/v1/mainnet_account.proto new file mode 100644 index 00000000..01fe0173 --- /dev/null +++ b/proto/network/project/v1/mainnet_account.proto @@ -0,0 +1,33 @@ +syntax = "proto3"; +package network.project.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/project/types"; + +message MainnetAccount { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin shares = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; +} + +message MainnetAccountBalance { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin coins = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} diff --git a/proto/network/project/v1/params.proto b/proto/network/project/v1/params.proto new file mode 100644 index 00000000..5f9658a3 --- /dev/null +++ b/proto/network/project/v1/params.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; + +package network.project.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/project/types"; + +// Params defines the parameters for the module. +message Params { + option (amino.name) = "network/x/project/Params"; + option (gogoproto.equal) = true; + + TotalSupplyRange totalSupplyRange = 1 [(gogoproto.nullable) = false]; + + repeated cosmos.base.v1beta1.Coin projectCreationFee = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + uint64 maxMetadataLength = 3; +} + +// TotalSupplyRange defines the range of allowed values for total supply +message TotalSupplyRange { + string minTotalSupply = 1 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; + + string maxTotalSupply = 2 [ + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (cosmos_proto.scalar) = "cosmos.Int" + ]; +} diff --git a/proto/network/project/v1/project.proto b/proto/network/project/v1/project.proto new file mode 100644 index 00000000..90ace24f --- /dev/null +++ b/proto/network/project/v1/project.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; +package network.project.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/project/v1/special_allocations.proto"; + +option go_package = "github.com/ignite/network/x/project/types"; + +message Project { + uint64 projectID = 1; + string projectName = 2; + uint64 coordinatorID = 3; + int64 createdAt = 4; + uint64 mainnetID = 5; + bool mainnetInitialized = 6; + repeated cosmos.base.v1beta1.Coin totalSupply = 7 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + repeated cosmos.base.v1beta1.Coin allocatedShares = 8 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; + SpecialAllocations specialAllocations = 9 [(gogoproto.nullable) = false]; + bytes metadata = 10; +} diff --git a/proto/network/project/v1/project_chains.proto b/proto/network/project/v1/project_chains.proto new file mode 100644 index 00000000..d3be63a1 --- /dev/null +++ b/proto/network/project/v1/project_chains.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package network.project.v1; + +option go_package = "github.com/ignite/network/x/project/types"; + +message ProjectChains { + uint64 projectID = 1; + repeated uint64 chains = 2; +} diff --git a/proto/network/project/v1/query.proto b/proto/network/project/v1/query.proto new file mode 100644 index 00000000..41a9f6d8 --- /dev/null +++ b/proto/network/project/v1/query.proto @@ -0,0 +1,167 @@ +syntax = "proto3"; + +package network.project.v1; + +import "amino/amino.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "network/project/v1/mainnet_account.proto"; +import "network/project/v1/params.proto"; +import "network/project/v1/project.proto"; +import "network/project/v1/project_chains.proto"; + +option go_package = "github.com/ignite/network/x/project/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ignite/network/project/v1/params"; + } + + // Queries a list of MainnetAccount items. + rpc GetMainnetAccount(QueryGetMainnetAccountRequest) returns (QueryGetMainnetAccountResponse) { + option (google.api.http).get = "/ignite/network/project/mainnet_account/{projectID}/{address}"; + } + rpc ListMainnetAccount(QueryAllMainnetAccountRequest) returns (QueryAllMainnetAccountResponse) { + option (google.api.http).get = "/ignite/network/project/mainnet_account/{projectID}"; + } + + // Queries a list of Project items. + rpc GetProject(QueryGetProjectRequest) returns (QueryGetProjectResponse) { + option (google.api.http).get = "/ignite/network/project/project/{projectID}"; + } + rpc ListProject(QueryAllProjectRequest) returns (QueryAllProjectResponse) { + option (google.api.http).get = "/ignite/network/project/project"; + } + + // Queries a list of ProjectChains items. + rpc GetProjectChains(QueryGetProjectChainsRequest) returns (QueryGetProjectChainsResponse) { + option (google.api.http).get = "/ignite/network/project/project_chains/{projectID}"; + } + + // Queries a list of SpecialAllocationsBalance items. + rpc SpecialAllocationsBalance(QuerySpecialAllocationsBalanceRequest) returns (QuerySpecialAllocationsBalanceResponse) { + option (google.api.http).get = "/ignite/network/project/special_allocations_balance/{projectID}"; + } + + // Queries a list of MainnetAccountBalance items. + rpc MainnetAccountBalance(QueryMainnetAccountBalanceRequest) returns (QueryMainnetAccountBalanceResponse) { + option (google.api.http).get = "/ignite/network/project/mainnet_account_balance/{projectID}/{address}"; + } + + // Queries a list of ListMainnetAccountBalance items. + rpc ListMainnetAccountBalance(QueryListMainnetAccountBalanceRequest) returns (QueryListMainnetAccountBalanceResponse) { + option (google.api.http).get = "/ignite/network/project/list_mainnet_account_balance/{projectID}"; + } + + // Queries a list of TotalShares items. + rpc TotalShares(QueryTotalSharesRequest) returns (QueryTotalSharesResponse) { + option (google.api.http).get = "/ignite/network/project/total_shares"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +message QueryGetMainnetAccountRequest { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryGetMainnetAccountResponse { + MainnetAccount mainnetAccount = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllMainnetAccountRequest { + uint64 projectID = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryAllMainnetAccountResponse { + repeated MainnetAccount mainnetAccount = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetProjectRequest { + uint64 projectID = 1; +} + +message QueryGetProjectResponse { + Project Project = 1 [(gogoproto.nullable) = false]; +} + +message QueryAllProjectRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllProjectResponse { + repeated Project Project = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetProjectChainsRequest { + uint64 projectID = 1; +} + +message QueryGetProjectChainsResponse { + ProjectChains projectChains = 1 [(gogoproto.nullable) = false]; +} + +message QuerySpecialAllocationsBalanceRequest { + uint64 projectID = 1; +} + +message QuerySpecialAllocationsBalanceResponse { + repeated cosmos.base.v1beta1.Coin genesisDistribution = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + repeated cosmos.base.v1beta1.Coin claimableAirdrop = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message QueryMainnetAccountBalanceRequest { + uint64 projectID = 1; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message QueryMainnetAccountBalanceResponse { + MainnetAccountBalance mainnetAccountBalance = 1 [(gogoproto.nullable) = false]; +} + +message QueryListMainnetAccountBalanceRequest { + uint64 projectID = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +message QueryListMainnetAccountBalanceResponse { + repeated MainnetAccountBalance mainnetAccountBalance = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryTotalSharesRequest {} + +message QueryTotalSharesResponse { + uint64 totalShares = 1; +} diff --git a/proto/network/project/v1/special_allocations.proto b/proto/network/project/v1/special_allocations.proto new file mode 100644 index 00000000..173c882d --- /dev/null +++ b/proto/network/project/v1/special_allocations.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package network.project.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/project/types"; + +message SpecialAllocations { + repeated cosmos.base.v1beta1.Coin genesisDistribution = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; + repeated cosmos.base.v1beta1.Coin claimableAirdrop = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; +} diff --git a/proto/network/project/v1/tx.proto b/proto/network/project/v1/tx.proto new file mode 100644 index 00000000..0cd34128 --- /dev/null +++ b/proto/network/project/v1/tx.proto @@ -0,0 +1,178 @@ +syntax = "proto3"; + +package network.project.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/project/v1/params.proto"; +import "network/project/v1/special_allocations.proto"; + +option go_package = "github.com/ignite/network/x/project/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + rpc CreateProject(MsgCreateProject) returns (MsgCreateProjectResponse); + rpc EditProject(MsgEditProject) returns (MsgEditProjectResponse); + rpc UpdateTotalSupply(MsgUpdateTotalSupply) returns (MsgUpdateTotalSupplyResponse); + rpc UpdateSpecialAllocations(MsgUpdateSpecialAllocations) returns (MsgUpdateSpecialAllocationsResponse); + rpc InitializeMainnet(MsgInitializeMainnet) returns (MsgInitializeMainnetResponse); + rpc MintVouchers(MsgMintVouchers) returns (MsgMintVouchersResponse); + rpc BurnVouchers(MsgBurnVouchers) returns (MsgBurnVouchersResponse); + rpc RedeemVouchers(MsgRedeemVouchers) returns (MsgRedeemVouchersResponse); + rpc UnredeemVouchers(MsgUnredeemVouchers) returns (MsgUnredeemVouchersResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "network/x/project/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the module parameters to update. + + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} + +message MsgCreateProject { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string projectName = 2; + repeated cosmos.base.v1beta1.Coin totalSupply = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + bytes metadata = 4; +} + +message MsgCreateProjectResponse { + uint64 projectID = 1; +} + +message MsgEditProject { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 projectID = 2; + string name = 3; + bytes metadata = 4; +} + +message MsgEditProjectResponse {} + +message MsgUpdateTotalSupply { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 projectID = 2; + repeated cosmos.base.v1beta1.Coin totalSupplyUpdate = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message MsgUpdateTotalSupplyResponse {} + +message MsgUpdateSpecialAllocations { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 projectID = 2; + SpecialAllocations specialAllocations = 3 [(gogoproto.nullable) = false]; +} + +message MsgUpdateSpecialAllocationsResponse {} + +message MsgInitializeMainnet { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 projectID = 2; + string sourceURL = 3; + string sourceHash = 4; + string mainnetChainID = 5; +} + +message MsgInitializeMainnetResponse { + uint64 mainnetID = 1; +} + +message MsgMintVouchers { + option (cosmos.msg.v1.signer) = "coordinator"; + string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 projectID = 2; + repeated cosmos.base.v1beta1.Coin shares = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; +} + +message MsgMintVouchersResponse {} + +message MsgBurnVouchers { + option (cosmos.msg.v1.signer) = "sender"; + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 projectID = 2; + repeated cosmos.base.v1beta1.Coin vouchers = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message MsgBurnVouchersResponse {} + +message MsgRedeemVouchers { + option (cosmos.msg.v1.signer) = "sender"; + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 projectID = 2; + string account = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin vouchers = 4 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message MsgRedeemVouchersResponse {} + +message MsgUnredeemVouchers { + option (cosmos.msg.v1.signer) = "sender"; + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 projectID = 2; + repeated cosmos.base.v1beta1.Coin shares = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "Shares" + ]; +} + +message MsgUnredeemVouchersResponse {} diff --git a/proto/spn/project/vesting.proto b/proto/network/project/v1/vesting.proto similarity index 50% rename from proto/spn/project/vesting.proto rename to proto/network/project/v1/vesting.proto index c7b0f06e..7773b137 100644 --- a/proto/spn/project/vesting.proto +++ b/proto/network/project/v1/vesting.proto @@ -1,12 +1,13 @@ syntax = "proto3"; -package spn.project; +package network.project.v1; -import "google/protobuf/timestamp.proto"; - -import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; -option go_package = "github.com/tendermint/spn/x/project/types"; +option go_package = "github.com/ignite/network/x/project/types"; message ShareVestingOptions { oneof options { @@ -19,14 +20,21 @@ message ShareVestingOptions { // once end time is reached message ShareDelayedVesting { repeated cosmos.base.v1beta1.Coin totalShares = 1 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.castrepeated) = "Shares" ]; repeated cosmos.base.v1beta1.Coin vesting = 2 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.castrepeated) = "Shares" ]; - google.protobuf.Timestamp endTime = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp endTime = 3 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; } diff --git a/proto/network/reward/module/v1/module.proto b/proto/network/reward/module/v1/module.proto new file mode 100644 index 00000000..951d2472 --- /dev/null +++ b/proto/network/reward/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package network.reward.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the module. +message Module { + option (cosmos.app.v1alpha1.module) = {go_import: "github.com/ignite/network/x/reward"}; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/proto/network/reward/v1/events.proto b/proto/network/reward/v1/events.proto new file mode 100644 index 00000000..d1d333a1 --- /dev/null +++ b/proto/network/reward/v1/events.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; +package network.reward.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/reward/v1/reward_pool.proto"; + +option go_package = "github.com/ignite/network/x/reward/types"; + +message EventRewardPoolCreated { + uint64 launchID = 1; + string provider = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +message EventRewardPoolRemoved { + uint64 launchID = 1; +} + +message EventRewardsDistributed { + uint64 launchID = 1; + string receiver = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin rewards = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} diff --git a/proto/network/reward/v1/genesis.proto b/proto/network/reward/v1/genesis.proto new file mode 100644 index 00000000..b1b06862 --- /dev/null +++ b/proto/network/reward/v1/genesis.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; + +package network.reward.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "network/reward/v1/params.proto"; +import "network/reward/v1/reward_pool.proto"; + +option go_package = "github.com/ignite/network/x/reward/types"; + +// GenesisState defines the reward module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + repeated RewardPool rewardPoolList = 2 [(gogoproto.nullable) = false]; +} diff --git a/proto/network/reward/v1/params.proto b/proto/network/reward/v1/params.proto new file mode 100644 index 00000000..64830068 --- /dev/null +++ b/proto/network/reward/v1/params.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +package network.reward.v1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/reward/types"; + +// Params defines the parameters for the module. +message Params { + option (amino.name) = "network/x/reward/Params"; + option (gogoproto.equal) = true; +} diff --git a/proto/spn/reward/query.proto b/proto/network/reward/v1/query.proto similarity index 54% rename from proto/spn/reward/query.proto rename to proto/network/reward/v1/query.proto index d93db95b..82c9b2be 100644 --- a/proto/spn/reward/query.proto +++ b/proto/network/reward/v1/query.proto @@ -1,33 +1,45 @@ syntax = "proto3"; -package spn.reward; -import "google/api/annotations.proto"; +package network.reward.v1; + +import "amino/amino.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; -import "spn/reward/params.proto"; -import "spn/reward/reward_pool.proto"; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "network/reward/v1/params.proto"; +import "network/reward/v1/reward_pool.proto"; -option go_package = "github.com/tendermint/spn/x/reward/types"; +option go_package = "github.com/ignite/network/x/reward/types"; // Query defines the gRPC querier service. service Query { - // Queries a RewardPool by index. - rpc RewardPool(QueryGetRewardPoolRequest) returns (QueryGetRewardPoolResponse) { - option (google.api.http).get = "/tendermint/spn/reward/reward_pool/{launchID}"; + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ignite/network/reward/v1/params"; } // Queries a list of RewardPool items. - rpc RewardPoolAll(QueryAllRewardPoolRequest) returns (QueryAllRewardPoolResponse) { - option (google.api.http).get = "/tendermint/spn/reward/reward_pool"; + rpc GetRewardPool(QueryGetRewardPoolRequest) returns (QueryGetRewardPoolResponse) { + option (google.api.http).get = "/ignite/network/reward/reward_pool/{launchID}"; } - - // Params queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/tendermint/spn/reward/params"; + rpc ListRewardPool(QueryAllRewardPoolRequest) returns (QueryAllRewardPoolResponse) { + option (google.api.http).get = "/ignite/network/reward/reward_pool"; } } +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + message QueryGetRewardPoolRequest { uint64 launchID = 1; } @@ -41,14 +53,6 @@ message QueryAllRewardPoolRequest { } message QueryAllRewardPoolResponse { - repeated RewardPool rewardPool = 1 [(gogoproto.nullable) = false]; + repeated RewardPool rewardPool = 1 [(gogoproto.nullable) = false]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } - -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} - -// QueryParamsResponse is response type for the Query/Params RPC method. -message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; -} diff --git a/proto/network/reward/v1/reward_pool.proto b/proto/network/reward/v1/reward_pool.proto new file mode 100644 index 00000000..128b310d --- /dev/null +++ b/proto/network/reward/v1/reward_pool.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; +package network.reward.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/ignite/network/x/reward/types"; + +message RewardPool { + uint64 launchID = 1; + string provider = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin initialCoins = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + repeated cosmos.base.v1beta1.Coin remainingCoins = 4 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + int64 lastRewardHeight = 5; + int64 currentRewardHeight = 6; + bool closed = 7; +} diff --git a/proto/network/reward/v1/tx.proto b/proto/network/reward/v1/tx.proto new file mode 100644 index 00000000..79622120 --- /dev/null +++ b/proto/network/reward/v1/tx.proto @@ -0,0 +1,77 @@ +syntax = "proto3"; + +package network.reward.v1; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "network/reward/v1/params.proto"; + +option go_package = "github.com/ignite/network/x/reward/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + rpc SetRewards(MsgSetRewards) returns (MsgSetRewardsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "network/x/reward/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the module parameters to update. + + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} + +message MsgSetRewards { + option (cosmos.msg.v1.signer) = "provider"; + string provider = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + uint64 launchID = 2; + repeated cosmos.base.v1beta1.Coin coins = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + int64 lastRewardHeight = 4; +} + +message MsgSetRewardsResponse { + repeated cosmos.base.v1beta1.Coin previousCoins = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + int64 previousLastRewardHeight = 2; + repeated cosmos.base.v1beta1.Coin newCoins = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + int64 newLastRewardHeight = 4; +} diff --git a/proto/spn/types/ibc.proto b/proto/network/types/ibc.proto similarity index 68% rename from proto/spn/types/ibc.proto rename to proto/network/types/ibc.proto index fee7de43..432244e7 100644 --- a/proto/spn/types/ibc.proto +++ b/proto/network/types/ibc.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -package spn.types; +package network.types; import "gogoproto/gogo.proto"; -option go_package = "github.com/tendermint/spn/pkg/types"; +option go_package = "github.com/ignite/network/pkg/types"; // MerkleRoot represents a Merkle Root in ConsensusState message MerkleRoot { @@ -13,22 +13,22 @@ message MerkleRoot { // ConsensusState represents a Consensus State // it is compatible with the dumped state from `appd q ibc client self-consensus-state` command message ConsensusState { - string nextValidatorsHash = 1; - string timestamp = 2; - MerkleRoot root = 3 [(gogoproto.nullable) = false]; + string nextValidatorsHash = 1; + string timestamp = 2; + MerkleRoot root = 3 [(gogoproto.nullable) = false]; } // PubKey represents a public key in Validator message PubKey { - string type = 1; + string type = 1; string value = 2; } // Validator represents a validator in ValSet message Validator { string proposerPriority = 1; - string votingPower = 2; - PubKey pubKey = 3 [(gogoproto.nullable) = false]; + string votingPower = 2; + PubKey pubKey = 3 [(gogoproto.nullable) = false]; } // ValidatorSet represents a Validator Set diff --git a/proto/spn/types/monitoring.proto b/proto/network/types/monitoring.proto similarity index 70% rename from proto/spn/types/monitoring.proto rename to proto/network/types/monitoring.proto index 2d52b715..8465a502 100644 --- a/proto/spn/types/monitoring.proto +++ b/proto/network/types/monitoring.proto @@ -1,10 +1,10 @@ syntax = "proto3"; -package spn.types; +package network.types; -import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; -option go_package = "github.com/tendermint/spn/pkg/types"; +option go_package = "github.com/ignite/network/pkg/types"; // MonitoringPacketData is the IBC packet for monitoring modules message MonitoringPacketData { @@ -19,23 +19,23 @@ message MonitoringPacketAck {} // MonitoringPacket is the packet sent over IBC that contains all the signature counts message MonitoringPacket { - int64 blockHeight = 1; + int64 blockHeight = 1; SignatureCounts signatureCounts = 2 [(gogoproto.nullable) = false]; } // SignatureCounts contains information about signature reporting for a number of blocks message SignatureCounts { - uint64 blockCount = 1; - repeated SignatureCount counts = 2 [(gogoproto.nullable) = false]; + uint64 blockCount = 1; + repeated SignatureCount counts = 2 [(gogoproto.nullable) = false]; } // SignatureCount contains information of signature reporting for one specific validator with consensus address // RelativeSignatures is the sum of all signatures relative to the validator set size message SignatureCount { - string opAddress = 1; + string opAddress = 1; string RelativeSignatures = 2 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (cosmos_proto.scalar) = "cosmos.Dec" + (gogoproto.nullable) = false, + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (cosmos_proto.scalar) = "cosmos.Dec" ]; } diff --git a/proto/spn/launch/events.proto b/proto/spn/launch/events.proto deleted file mode 100644 index 0d69d289..00000000 --- a/proto/spn/launch/events.proto +++ /dev/null @@ -1,92 +0,0 @@ -syntax = "proto3"; -package spn.launch; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; -import "google/protobuf/timestamp.proto"; - -import "spn/launch/chain.proto"; -import "spn/launch/request.proto"; -import "spn/launch/genesis_account.proto"; -import "spn/launch/vesting_account.proto"; -import "spn/launch/genesis_validator.proto"; - -option go_package = "github.com/tendermint/spn/x/launch/types"; - -message EventChainCreated { - uint64 launchID = 1; - string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 coordinatorID = 3; -} - -message EventRequestCreated { - string creator = 1; - Request request = 2 [(gogoproto.nullable) = false]; -} - -message EventRequestSettled { - uint64 launchID = 1; - uint64 requestID = 2; - bool approved = 3; -} - -message EventGenesisAccountAdded { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin coins = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - string coordinatorAddress = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventVestingAccountAdded { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - VestingOptions vestingOptions = 3 [(gogoproto.nullable) = false]; - string coordinatorAddress = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventValidatorAdded { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - bytes genTx = 3; - bytes consPubKey = 4; - cosmos.base.v1beta1.Coin selfDelegation = 5 [(gogoproto.nullable) = false]; - Peer peer = 6 [(gogoproto.nullable) = false]; - bool hasProject = 7; - uint64 projectID = 8; - string coordinatorAddress = 9 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventAccountRemoved { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 launchID = 2; - string coordinatorAddress = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventValidatorRemoved { - string genesisValidatorAccount = 1; - uint64 launchID = 2; - bool hasProject = 3; - uint64 projectID = 4; - string coordinatorAddress = 5 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventParamChanged { - uint64 launchID = 1; - string module = 2; - string param = 3; - bytes value = 4; -} - -message EventLaunchTriggered { - uint64 launchID = 1; - google.protobuf.Timestamp launchTimeStamp = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; -} - -message EventLaunchReverted { - uint64 launchID = 1; -} diff --git a/proto/spn/launch/genesis.proto b/proto/spn/launch/genesis.proto deleted file mode 100644 index 580ed800..00000000 --- a/proto/spn/launch/genesis.proto +++ /dev/null @@ -1,30 +0,0 @@ -syntax = "proto3"; -package spn.launch; - -import "gogoproto/gogo.proto"; -import "spn/launch/request.proto"; -import "spn/launch/vesting_account.proto"; -import "spn/launch/genesis_account.proto"; -import "spn/launch/genesis_validator.proto"; -import "spn/launch/chain.proto"; -import "spn/launch/params.proto"; - -option go_package = "github.com/tendermint/spn/x/launch/types"; - -// GenesisState defines the launch module's genesis state. -message GenesisState { - repeated Chain chains = 1 [(gogoproto.nullable) = false]; - uint64 chainCounter = 2; - repeated GenesisAccount genesisAccounts = 3 [(gogoproto.nullable) = false]; - repeated VestingAccount vestingAccounts = 4 [(gogoproto.nullable) = false]; - repeated GenesisValidator genesisValidators = 5 [(gogoproto.nullable) = false]; - repeated ParamChange paramChanges = 6 [(gogoproto.nullable) = false]; - repeated Request requests = 7 [(gogoproto.nullable) = false]; - repeated RequestCounter requestCounters = 8 [(gogoproto.nullable) = false]; - Params params = 9 [(gogoproto.nullable) = false]; -} - -message RequestCounter { - uint64 launchID = 1; - uint64 counter = 2; -} diff --git a/proto/spn/launch/genesis_account.proto b/proto/spn/launch/genesis_account.proto deleted file mode 100644 index 1e82af9a..00000000 --- a/proto/spn/launch/genesis_account.proto +++ /dev/null @@ -1,18 +0,0 @@ -syntax = "proto3"; -package spn.launch; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/launch/types"; - -message GenesisAccount { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin coins = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} diff --git a/proto/spn/launch/genesis_validator.proto b/proto/spn/launch/genesis_validator.proto deleted file mode 100644 index f6809688..00000000 --- a/proto/spn/launch/genesis_validator.proto +++ /dev/null @@ -1,35 +0,0 @@ -syntax = "proto3"; -package spn.launch; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/launch/types"; - -message GenesisValidator { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - bytes genTx = 3; - bytes consPubKey = 4; - cosmos.base.v1beta1.Coin selfDelegation = 5 [(gogoproto.nullable) = false]; - Peer peer = 6 [(gogoproto.nullable) = false]; -} - -message Peer { - string id = 1; // e.g.: 7786ace6ddb3d771024792a46540c88587e0e8cc - - oneof connection { - string tcpAddress = 2; // use a TCP address - HTTPTunnel httpTunnel = 3; // or use an HTTP tunnel - EmptyConnection none = 4; // or don't provide any connection - } - - message HTTPTunnel { - string name = 1; // e.g.: chisel (https://github.com/jpillora/chisel) - string address = - 2; // for chisel running on Gitpod, e.g.: https://3475-chocolate-capybara-kkiztq32.ws-eu21.gitpod.io/ - } - - message EmptyConnection {} -} diff --git a/proto/spn/launch/params.proto b/proto/spn/launch/params.proto deleted file mode 100644 index 5f046a35..00000000 --- a/proto/spn/launch/params.proto +++ /dev/null @@ -1,35 +0,0 @@ -syntax = "proto3"; -package spn.launch; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "google/protobuf/duration.proto"; - -option go_package = "github.com/tendermint/spn/x/launch/types"; - -// Params defines the parameters for the staking module. -message Params { - option (gogoproto.goproto_stringer) = false; - - LaunchTimeRange launchTimeRange = 1 [(gogoproto.nullable) = false]; - google.protobuf.Duration revertDelay = 2 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; - repeated cosmos.base.v1beta1.Coin chainCreationFee = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - - // requestFee is the fee for making a request to a chain - repeated cosmos.base.v1beta1.Coin requestFee = 4 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - - uint64 maxMetadataLength = 5; -} - -message LaunchTimeRange { - google.protobuf.Duration minLaunchTime = 1 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; - google.protobuf.Duration maxLaunchTime = 2 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; -} diff --git a/proto/spn/launch/query.proto b/proto/spn/launch/query.proto deleted file mode 100644 index f4400ace..00000000 --- a/proto/spn/launch/query.proto +++ /dev/null @@ -1,186 +0,0 @@ -syntax = "proto3"; -package spn.launch; - -import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "cosmos_proto/cosmos.proto"; - -import "spn/launch/request.proto"; -import "spn/launch/vesting_account.proto"; -import "spn/launch/genesis_account.proto"; -import "spn/launch/genesis_validator.proto"; -import "spn/launch/chain.proto"; -import "spn/launch/params.proto"; - -option go_package = "github.com/tendermint/spn/x/launch/types"; - -// Query defines the gRPC querier service. -service Query { - // Queries a chain by index. - rpc Chain(QueryGetChainRequest) returns (QueryGetChainResponse) { - option (google.api.http).get = "/tendermint/spn/launch/chain/{launchID}"; - } - // Queries a list of chain items. - rpc ChainAll(QueryAllChainRequest) returns (QueryAllChainResponse) { - option (google.api.http).get = "/tendermint/spn/launch/chain"; - } - - // Queries a genesisAccount by index. - rpc GenesisAccount(QueryGetGenesisAccountRequest) returns (QueryGetGenesisAccountResponse) { - option (google.api.http).get = "/tendermint/spn/launch/genesis_account/{launchID}/{address}"; - } - // Queries a list of genesisAccount items. - rpc GenesisAccountAll(QueryAllGenesisAccountRequest) returns (QueryAllGenesisAccountResponse) { - option (google.api.http).get = "/tendermint/spn/launch/genesis_account/{launchID}"; - } - - // Queries a vestingAccount by index. - rpc VestingAccount(QueryGetVestingAccountRequest) returns (QueryGetVestingAccountResponse) { - option (google.api.http).get = "/tendermint/spn/launch/vesting_account/{launchID}/{address}"; - } - // Queries a list of vestingAccount items. - rpc VestingAccountAll(QueryAllVestingAccountRequest) returns (QueryAllVestingAccountResponse) { - option (google.api.http).get = "/tendermint/spn/launch/vesting_account/{launchID}"; - } - - // Queries a genesisValidator by index. - rpc GenesisValidator(QueryGetGenesisValidatorRequest) returns (QueryGetGenesisValidatorResponse) { - option (google.api.http).get = "/tendermint/spn/launch/genesis_validator/{launchID}/{address}"; - } - - // Queries a list of genesisValidator items. - rpc GenesisValidatorAll(QueryAllGenesisValidatorRequest) returns (QueryAllGenesisValidatorResponse) { - option (google.api.http).get = "/tendermint/spn/launch/genesis_validator/{launchID}"; - } - - // Queries a list of ParamChange items. - rpc ParamChangeAll(QueryAllParamChangeRequest) returns (QueryAllParamChangeResponse) { - option (google.api.http).get = "/tendermint/spn/launch/paramChange/{launchID}"; - } - - // Queries a request by index. - rpc Request(QueryGetRequestRequest) returns (QueryGetRequestResponse) { - option (google.api.http).get = "/tendermint/spn/launch/request/{launchID}/{requestID}"; - } - // Queries a list of request for a chain. - rpc RequestAll(QueryAllRequestRequest) returns (QueryAllRequestResponse) { - option (google.api.http).get = "/tendermint/spn/launch/request/{launchID}"; - } - - // Params queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/tendermint/spn/launch/params"; - } -} - -message QueryGetChainRequest { - uint64 launchID = 1; -} - -message QueryGetChainResponse { - Chain chain = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllChainRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllChainResponse { - repeated Chain chain = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetGenesisAccountRequest { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message QueryGetGenesisAccountResponse { - GenesisAccount genesisAccount = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllGenesisAccountRequest { - uint64 launchID = 1; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -message QueryAllGenesisAccountResponse { - repeated GenesisAccount genesisAccount = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetVestingAccountRequest { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message QueryGetVestingAccountResponse { - VestingAccount vestingAccount = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllVestingAccountRequest { - uint64 launchID = 1; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -message QueryAllVestingAccountResponse { - repeated VestingAccount vestingAccount = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetGenesisValidatorRequest { - uint64 launchID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message QueryGetGenesisValidatorResponse { - GenesisValidator genesisValidator = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllGenesisValidatorRequest { - uint64 launchID = 1; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -message QueryAllGenesisValidatorResponse { - repeated GenesisValidator genesisValidator = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetRequestRequest { - uint64 launchID = 1; - uint64 requestID = 2; -} - -message QueryGetRequestResponse { - Request request = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllRequestRequest { - uint64 launchID = 1; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -message QueryAllRequestResponse { - repeated Request request = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} - -// QueryParamsResponse is response type for the Query/Params RPC method. -message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllParamChangeRequest { - uint64 launchID = 1; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -message QueryAllParamChangeResponse { - repeated ParamChange paramChanges = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} diff --git a/proto/spn/launch/request.proto b/proto/spn/launch/request.proto deleted file mode 100644 index aaf873ac..00000000 --- a/proto/spn/launch/request.proto +++ /dev/null @@ -1,51 +0,0 @@ -syntax = "proto3"; -package spn.launch; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -import "spn/launch/genesis_account.proto"; -import "spn/launch/vesting_account.proto"; -import "spn/launch/genesis_validator.proto"; - -option go_package = "github.com/tendermint/spn/x/launch/types"; - -message Request { - uint64 launchID = 1; - uint64 requestID = 2; - string creator = 3; - int64 createdAt = 4; - RequestContent content = 5 [(gogoproto.nullable) = false]; - enum Status { - PENDING = 0; - APPROVED = 1; - REJECTED = 2; - } - Status status = 6; -} - -message RequestContent { - oneof content { - GenesisAccount genesisAccount = 1; - VestingAccount vestingAccount = 2; - GenesisValidator genesisValidator = 3; - AccountRemoval accountRemoval = 4; - ValidatorRemoval validatorRemoval = 5; - ParamChange paramChange = 6; - } -} - -message AccountRemoval { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message ValidatorRemoval { - string valAddress = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message ParamChange { - uint64 launchID = 1; - string module = 2; - string param = 3; - bytes value = 4; -} \ No newline at end of file diff --git a/proto/spn/launch/tx.proto b/proto/spn/launch/tx.proto deleted file mode 100644 index acd185ec..00000000 --- a/proto/spn/launch/tx.proto +++ /dev/null @@ -1,99 +0,0 @@ -syntax = "proto3"; -package spn.launch; - -import "gogoproto/gogo.proto"; -import "google/protobuf/timestamp.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; - -import "spn/launch/chain.proto"; -import "spn/launch/request.proto"; - -option go_package = "github.com/tendermint/spn/x/launch/types"; - -// Msg defines the Msg service. -service Msg { - rpc CreateChain(MsgCreateChain) returns (MsgCreateChainResponse); - rpc EditChain(MsgEditChain) returns (MsgEditChainResponse); - rpc UpdateLaunchInformation(MsgUpdateLaunchInformation) returns (MsgUpdateLaunchInformationResponse); - rpc SendRequest(MsgSendRequest) returns (MsgSendRequestResponse); - rpc SettleRequest(MsgSettleRequest) returns (MsgSettleRequestResponse); - rpc TriggerLaunch(MsgTriggerLaunch) returns (MsgTriggerLaunchResponse); - rpc RevertLaunch(MsgRevertLaunch) returns (MsgRevertLaunchResponse); -} - -message MsgCreateChain { - string coordinator = 1; - string genesisChainID = 2; - string sourceURL = 3; - string sourceHash = 4; - InitialGenesis initialGenesis = 5 [(gogoproto.nullable) = false]; - bool hasProject = 6; - uint64 projectID = 7; - repeated cosmos.base.v1beta1.Coin AccountBalance = 8 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - bytes metadata = 9; -} - -message MsgCreateChainResponse { - uint64 launchID = 1; -} - -message MsgEditChain { - string coordinator = 1; - uint64 launchID = 2; - bool setProjectID = 3; - uint64 projectID = 4; - bytes metadata = 5; -} - -message MsgEditChainResponse {} - -message MsgUpdateLaunchInformation { - string coordinator = 1; - uint64 launchID = 2; - string genesisChainID = 3; - string sourceURL = 4; - string sourceHash = 5; - InitialGenesis initialGenesis = 6; -} - -message MsgUpdateLaunchInformationResponse {} - -message MsgSendRequest { - string creator = 1; - uint64 launchID = 2; - RequestContent content = 3 [(gogoproto.nullable) = false]; -} - -message MsgSendRequestResponse { - uint64 requestID = 1; - bool autoApproved = 2; -} - -message MsgSettleRequest { - string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 launchID = 2; - uint64 requestID = 3; - bool approve = 4; -} - -message MsgSettleRequestResponse {} - -message MsgTriggerLaunch { - string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 launchID = 2; - google.protobuf.Timestamp launchTime = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; -} - -message MsgTriggerLaunchResponse {} - -message MsgRevertLaunch { - string coordinator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 launchID = 2; -} - -message MsgRevertLaunchResponse {} diff --git a/proto/spn/monitoringc/genesis.proto b/proto/spn/monitoringc/genesis.proto deleted file mode 100644 index 99b0de86..00000000 --- a/proto/spn/monitoringc/genesis.proto +++ /dev/null @@ -1,23 +0,0 @@ -syntax = "proto3"; -package spn.monitoringc; - -import "gogoproto/gogo.proto"; -import "spn/monitoringc/params.proto"; -import "spn/monitoringc/verified_client_id.proto"; -import "spn/monitoringc/provider_client_id.proto"; -import "spn/monitoringc/launch_id_from_verified_client_id.proto"; -import "spn/monitoringc/launch_id_from_channel_id.proto"; -import "spn/monitoringc/monitoring_history.proto"; - -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; - -// GenesisState defines the monitoringc module's genesis state. -message GenesisState { - string port_id = 1; - repeated VerifiedClientID verifiedClientIDs = 2 [(gogoproto.nullable) = false]; - repeated ProviderClientID providerClientIDs = 3 [(gogoproto.nullable) = false]; - repeated LaunchIDFromVerifiedClientID launchIDsFromVerifiedClientID = 4 [(gogoproto.nullable) = false]; - repeated LaunchIDFromChannelID launchIDsFromChannelID = 5 [(gogoproto.nullable) = false]; - repeated MonitoringHistory monitoringHistories = 6 [(gogoproto.nullable) = false]; - Params params = 7 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/monitoringc/monitoring_history.proto b/proto/spn/monitoringc/monitoring_history.proto deleted file mode 100644 index f72a62d5..00000000 --- a/proto/spn/monitoringc/monitoring_history.proto +++ /dev/null @@ -1,12 +0,0 @@ -syntax = "proto3"; -package spn.monitoringc; - -import "gogoproto/gogo.proto"; -import "spn/types/monitoring.proto"; - -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; - -message MonitoringHistory { - uint64 launchID = 1; - spn.types.MonitoringPacket latestMonitoringPacket = 2 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/monitoringc/params.proto b/proto/spn/monitoringc/params.proto deleted file mode 100644 index 4246cf19..00000000 --- a/proto/spn/monitoringc/params.proto +++ /dev/null @@ -1,11 +0,0 @@ -syntax = "proto3"; -package spn.monitoringc; - -import "gogoproto/gogo.proto"; - -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; - -// Params defines the parameters for the module. -message Params { - option (gogoproto.goproto_stringer) = false; -} diff --git a/proto/spn/monitoringc/query.proto b/proto/spn/monitoringc/query.proto deleted file mode 100644 index ee49535e..00000000 --- a/proto/spn/monitoringc/query.proto +++ /dev/null @@ -1,110 +0,0 @@ -syntax = "proto3"; -package spn.monitoringc; - -import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; - -import "spn/monitoringc/params.proto"; -import "spn/monitoringc/provider_client_id.proto"; -import "spn/monitoringc/launch_id_from_verified_client_id.proto"; -import "spn/monitoringc/launch_id_from_channel_id.proto"; -import "spn/monitoringc/monitoring_history.proto"; - -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; - -// Query defines the gRPC querier service. -service Query { - // Queries a list of VerifiedClientIds items. - rpc VerifiedClientIds(QueryGetVerifiedClientIdsRequest) returns (QueryGetVerifiedClientIdsResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringc/verified_client_ids/{launchID}"; - } - - // Queries a ProviderClientID by index. - rpc ProviderClientID(QueryGetProviderClientIDRequest) returns (QueryGetProviderClientIDResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringc/provider_client_id/{launchID}"; - } - - // Queries a list of ProviderClientID items. - rpc ProviderClientIDAll(QueryAllProviderClientIDRequest) returns (QueryAllProviderClientIDResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringc/provider_client_id"; - } - - // Queries a LaunchIDFromChannelID by index. - rpc LaunchIDFromChannelID(QueryGetLaunchIDFromChannelIDRequest) returns (QueryGetLaunchIDFromChannelIDResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringc/launch_id_from_channel_id/{channelID}"; - } - - // Queries a list of LaunchIDFromChannelID items. - rpc LaunchIDFromChannelIDAll(QueryAllLaunchIDFromChannelIDRequest) returns (QueryAllLaunchIDFromChannelIDResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringc/launch_id_from_channel_id"; - } - - // Queries a MonitoringHistory by launch id. - rpc MonitoringHistory(QueryGetMonitoringHistoryRequest) returns (QueryGetMonitoringHistoryResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringc/monitoring_history/{launchID}"; - } - - // Params queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/tendermint/spn/monitoringc/params"; - } -} - -message QueryGetVerifiedClientIdsRequest { - uint64 launchID = 1; -} - -message QueryGetVerifiedClientIdsResponse { - repeated string clientIds = 1; -} - -message QueryGetProviderClientIDRequest { - uint64 launchID = 1; -} - -message QueryGetProviderClientIDResponse { - ProviderClientID providerClientID = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllProviderClientIDRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllProviderClientIDResponse { - repeated ProviderClientID providerClientID = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetLaunchIDFromChannelIDRequest { - string channelID = 1; -} - -message QueryGetLaunchIDFromChannelIDResponse { - LaunchIDFromChannelID launchIDFromChannelID = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllLaunchIDFromChannelIDRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllLaunchIDFromChannelIDResponse { - repeated LaunchIDFromChannelID launchIDFromChannelID = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetMonitoringHistoryRequest { - uint64 launchID = 1; -} - -message QueryGetMonitoringHistoryResponse { - MonitoringHistory monitoringHistory = 1 [(gogoproto.nullable) = false]; -} - -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} - -// QueryParamsResponse is response type for the Query/Params RPC method. -message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/monitoringc/tx.proto b/proto/spn/monitoringc/tx.proto deleted file mode 100644 index 3bcecd4c..00000000 --- a/proto/spn/monitoringc/tx.proto +++ /dev/null @@ -1,26 +0,0 @@ -syntax = "proto3"; -package spn.monitoringc; - -import "cosmos/base/query/v1beta1/pagination.proto"; -import "gogoproto/gogo.proto"; -import "spn/types/ibc.proto"; - -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; - -// Msg defines the Msg service. -service Msg { - rpc CreateClient(MsgCreateClient) returns (MsgCreateClientResponse); -} - -message MsgCreateClient { - string creator = 1; - uint64 launchID = 2; - spn.types.ConsensusState consensusState = 3 [(gogoproto.nullable) = false]; - spn.types.ValidatorSet validatorSet = 4 [(gogoproto.nullable) = false]; - int64 unbondingPeriod = 5; - uint64 revisionHeight = 6; -} - -message MsgCreateClientResponse { - string clientID = 1; -} diff --git a/proto/spn/monitoringc/verified_client_id.proto b/proto/spn/monitoringc/verified_client_id.proto deleted file mode 100644 index 1bcf22ce..00000000 --- a/proto/spn/monitoringc/verified_client_id.proto +++ /dev/null @@ -1,9 +0,0 @@ -syntax = "proto3"; -package spn.monitoringc; - -option go_package = "github.com/tendermint/spn/x/monitoringc/types"; - -message VerifiedClientID { - uint64 launchID = 1; - repeated string clientIDs = 2; -} diff --git a/proto/spn/monitoringp/connection_channel_id.proto b/proto/spn/monitoringp/connection_channel_id.proto deleted file mode 100644 index c3b6ad46..00000000 --- a/proto/spn/monitoringp/connection_channel_id.proto +++ /dev/null @@ -1,8 +0,0 @@ -syntax = "proto3"; -package spn.monitoringp; - -option go_package = "github.com/tendermint/spn/x/monitoringp/types"; - -message ConnectionChannelID { - string channelID = 1; -} diff --git a/proto/spn/monitoringp/consumer_client_id.proto b/proto/spn/monitoringp/consumer_client_id.proto deleted file mode 100644 index 2c4d8b28..00000000 --- a/proto/spn/monitoringp/consumer_client_id.proto +++ /dev/null @@ -1,8 +0,0 @@ -syntax = "proto3"; -package spn.monitoringp; - -option go_package = "github.com/tendermint/spn/x/monitoringp/types"; - -message ConsumerClientID { - string clientID = 1; -} diff --git a/proto/spn/monitoringp/genesis.proto b/proto/spn/monitoringp/genesis.proto deleted file mode 100644 index 250ac4f3..00000000 --- a/proto/spn/monitoringp/genesis.proto +++ /dev/null @@ -1,19 +0,0 @@ -syntax = "proto3"; -package spn.monitoringp; - -import "gogoproto/gogo.proto"; -import "spn/monitoringp/params.proto"; -import "spn/monitoringp/consumer_client_id.proto"; -import "spn/monitoringp/connection_channel_id.proto"; -import "spn/monitoringp/monitoring_info.proto"; - -option go_package = "github.com/tendermint/spn/x/monitoringp/types"; - -// GenesisState defines the monitoringp module's genesis state. -message GenesisState { - string port_id = 1; - ConsumerClientID consumerClientID = 2; - ConnectionChannelID connectionChannelID = 3; - MonitoringInfo monitoringInfo = 4; - Params params = 5 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/monitoringp/monitoring_info.proto b/proto/spn/monitoringp/monitoring_info.proto deleted file mode 100644 index 965b1cb5..00000000 --- a/proto/spn/monitoringp/monitoring_info.proto +++ /dev/null @@ -1,12 +0,0 @@ -syntax = "proto3"; -package spn.monitoringp; - -import "gogoproto/gogo.proto"; -import "spn/types/monitoring.proto"; - -option go_package = "github.com/tendermint/spn/x/monitoringp/types"; - -message MonitoringInfo { - bool transmitted = 1; - spn.types.SignatureCounts signatureCounts = 2 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/monitoringp/params.proto b/proto/spn/monitoringp/params.proto deleted file mode 100644 index cb33de28..00000000 --- a/proto/spn/monitoringp/params.proto +++ /dev/null @@ -1,18 +0,0 @@ -syntax = "proto3"; -package spn.monitoringp; - -import "gogoproto/gogo.proto"; -import "spn/types/ibc.proto"; - -option go_package = "github.com/tendermint/spn/x/monitoringp/types"; - -// Params defines the parameters for the module. -message Params { - option (gogoproto.goproto_stringer) = false; - - int64 lastBlockHeight = 1; - string consumerChainID = 2; - spn.types.ConsensusState consumerConsensusState = 3 [(gogoproto.nullable) = false]; - int64 consumerUnbondingPeriod = 4; - uint64 consumerRevisionHeight = 5; -} diff --git a/proto/spn/monitoringp/tx.proto b/proto/spn/monitoringp/tx.proto deleted file mode 100644 index e9710b96..00000000 --- a/proto/spn/monitoringp/tx.proto +++ /dev/null @@ -1,7 +0,0 @@ -syntax = "proto3"; -package spn.monitoringp; - -option go_package = "github.com/tendermint/spn/x/monitoringp/types"; - -// Msg defines the Msg service. -service Msg {} diff --git a/proto/spn/participation/auction_used_allocations.proto b/proto/spn/participation/auction_used_allocations.proto deleted file mode 100644 index fb1ff1f3..00000000 --- a/proto/spn/participation/auction_used_allocations.proto +++ /dev/null @@ -1,19 +0,0 @@ -syntax = "proto3"; -package spn.participation; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/participation/types"; - -// Allocations used by a user for a specific auction -message AuctionUsedAllocations { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 auctionID = 2; - bool withdrawn = 3; - string numAllocations = 4 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; -} diff --git a/proto/spn/participation/events.proto b/proto/spn/participation/events.proto deleted file mode 100644 index 8b77f387..00000000 --- a/proto/spn/participation/events.proto +++ /dev/null @@ -1,22 +0,0 @@ -syntax = "proto3"; -package spn.participation; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/participation/types"; - -message EventAllocationsUsed { - string participant = 1; - uint64 auctionID = 2; - string numAllocations = 3 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; -} - -message EventAllocationsWithdrawn { - string participant = 1; - uint64 auctionID = 2; -} \ No newline at end of file diff --git a/proto/spn/participation/genesis.proto b/proto/spn/participation/genesis.proto deleted file mode 100644 index 3afb8262..00000000 --- a/proto/spn/participation/genesis.proto +++ /dev/null @@ -1,16 +0,0 @@ -syntax = "proto3"; -package spn.participation; - -import "gogoproto/gogo.proto"; -import "spn/participation/params.proto"; -import "spn/participation/used_allocations.proto"; -import "spn/participation/auction_used_allocations.proto"; - -option go_package = "github.com/tendermint/spn/x/participation/types"; - -// GenesisState defines the participation module's genesis state. -message GenesisState { - repeated UsedAllocations usedAllocationsList = 1 [(gogoproto.nullable) = false]; - repeated AuctionUsedAllocations auctionUsedAllocationsList = 2 [(gogoproto.nullable) = false]; - Params params = 3 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/participation/params.proto b/proto/spn/participation/params.proto deleted file mode 100644 index 3018aa62..00000000 --- a/proto/spn/participation/params.proto +++ /dev/null @@ -1,49 +0,0 @@ -syntax = "proto3"; -package spn.participation; - -import "gogoproto/gogo.proto"; -import "google/protobuf/duration.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/participation/types"; - -// Params defines the parameters for the module. -message Params { - option (gogoproto.goproto_stringer) = false; - - AllocationPrice allocationPrice = 1 [(gogoproto.nullable) = false]; - repeated Tier participationTierList = 2 [(gogoproto.nullable) = false]; - // Time frame before auction starts where MsgParticipate can be called - google.protobuf.Duration registrationPeriod = 3 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; - // Delay after auction starts when allocations can be withdrawn - google.protobuf.Duration withdrawalDelay = 4 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; -} - -message AllocationPrice { - // number of bonded tokens necessary to get one allocation - string bonded = 1 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; -} - -// Matches a number of required allocations with benefits -message Tier { - uint64 tierID = 1; - string requiredAllocations = 2 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; - TierBenefits benefits = 3 [(gogoproto.nullable) = false]; -} - -message TierBenefits { - // maximum amount an auction participant can bid - string maxBidAmount = 1 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; -} diff --git a/proto/spn/participation/query.proto b/proto/spn/participation/query.proto deleted file mode 100644 index e95d7a01..00000000 --- a/proto/spn/participation/query.proto +++ /dev/null @@ -1,120 +0,0 @@ -syntax = "proto3"; -package spn.participation; - -import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "cosmos_proto/cosmos.proto"; - -import "spn/participation/params.proto"; -import "spn/participation/used_allocations.proto"; -import "spn/participation/auction_used_allocations.proto"; - -option go_package = "github.com/tendermint/spn/x/participation/types"; - -// Query defines the gRPC querier service. -service Query { - // Queries a UsedAllocations by address. - rpc UsedAllocations(QueryGetUsedAllocationsRequest) returns (QueryGetUsedAllocationsResponse) { - option (google.api.http).get = "/tendermint/spn/participation/used_allocations/{address}"; - } - - // Queries a list of UsedAllocations items. - rpc UsedAllocationsAll(QueryAllUsedAllocationsRequest) returns (QueryAllUsedAllocationsResponse) { - option (google.api.http).get = "/tendermint/spn/participation/used_allocations"; - } - - // Queries a AuctionUsedAllocations by address and auctionID. - rpc AuctionUsedAllocations(QueryGetAuctionUsedAllocationsRequest) returns (QueryGetAuctionUsedAllocationsResponse) { - option (google.api.http).get = "/tendermint/spn/participation/auction_used_allocations/{address}/{auctionID}"; - } - - // Queries a list of AuctionUsedAllocations items. - rpc AuctionUsedAllocationsAll(QueryAllAuctionUsedAllocationsRequest) - returns (QueryAllAuctionUsedAllocationsResponse) { - option (google.api.http).get = "/tendermint/spn/participation/auction_used_allocations/{address}"; - } - - // Queries a TotalAllocation of address. - rpc TotalAllocations(QueryGetTotalAllocationsRequest) returns (QueryGetTotalAllocationsResponse) { - option (google.api.http).get = "/tendermint/spn/participation/total_allocations/{address}"; - } - - // Queries the AvailableAllocation of address. - rpc AvailableAllocations(QueryGetAvailableAllocationsRequest) returns (QueryGetAvailableAllocationsResponse) { - option (google.api.http).get = "/tendermint/spn/participation/available_allocations/{address}"; - } - - // Params queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/tendermint/spn/participation/params"; - } -} - -message QueryGetUsedAllocationsRequest { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message QueryGetUsedAllocationsResponse { - UsedAllocations usedAllocations = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllUsedAllocationsRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllUsedAllocationsResponse { - repeated UsedAllocations usedAllocations = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetAuctionUsedAllocationsRequest { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 auctionID = 2; -} - -message QueryGetAuctionUsedAllocationsResponse { - AuctionUsedAllocations auctionUsedAllocations = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllAuctionUsedAllocationsRequest { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -message QueryAllAuctionUsedAllocationsResponse { - repeated AuctionUsedAllocations auctionUsedAllocations = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetTotalAllocationsRequest { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message QueryGetTotalAllocationsResponse { - string totalAllocations = 1 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; -} - -message QueryGetAvailableAllocationsRequest { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message QueryGetAvailableAllocationsResponse { - string availableAllocations = 1 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; -} - -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} - -// QueryParamsResponse is response type for the Query/Params RPC method. -message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/participation/tx.proto b/proto/spn/participation/tx.proto deleted file mode 100644 index d8adb8be..00000000 --- a/proto/spn/participation/tx.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto3"; -package spn.participation; - -option go_package = "github.com/tendermint/spn/x/participation/types"; - -// Msg defines the Msg service. -service Msg { - rpc Participate(MsgParticipate) returns (MsgParticipateResponse); - rpc WithdrawAllocations(MsgWithdrawAllocations) returns (MsgWithdrawAllocationsResponse); -} - -message MsgParticipate { - string participant = 1; - uint64 auctionID = 2; - uint64 tierID = 3; -} - -message MsgParticipateResponse {} - -message MsgWithdrawAllocations { - string participant = 1; - uint64 auctionID = 2; -} - -message MsgWithdrawAllocationsResponse {} diff --git a/proto/spn/participation/used_allocations.proto b/proto/spn/participation/used_allocations.proto deleted file mode 100644 index f59c6092..00000000 --- a/proto/spn/participation/used_allocations.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; -package spn.participation; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/participation/types"; - -// Describes the number of allocations already used by a user for existing auctions -message UsedAllocations { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string numAllocations = 2 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; -} diff --git a/proto/spn/profile/coordinator.proto b/proto/spn/profile/coordinator.proto deleted file mode 100644 index 03eee7d1..00000000 --- a/proto/spn/profile/coordinator.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto3"; -package spn.profile; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/profile/types"; - -message Coordinator { - uint64 coordinatorID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - CoordinatorDescription description = 3 [(gogoproto.nullable) = false]; - bool active = 4; -} - -message CoordinatorDescription { - string identity = 1; - string website = 2; - string details = 3; -} - -message CoordinatorByAddress { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 coordinatorID = 2; -} diff --git a/proto/spn/profile/events.proto b/proto/spn/profile/events.proto deleted file mode 100644 index 7ba4678c..00000000 --- a/proto/spn/profile/events.proto +++ /dev/null @@ -1,35 +0,0 @@ -syntax = "proto3"; -package spn.profile; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -import "spn/profile/coordinator.proto"; -import "spn/profile/validator.proto"; - -option go_package = "github.com/tendermint/spn/x/profile/types"; - -message EventCoordinatorCreated { - uint64 coordinatorID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventCoordinatorAddressUpdated { - uint64 coordinatorID = 1; - string newAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventCoordinatorDisabled { - uint64 coordinatorID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventValidatorCreated { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated string operatorAddresses = 2; -} - -message EventValidatorOperatorAddressesUpdated { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated string operatorAddresses = 2; -} \ No newline at end of file diff --git a/proto/spn/profile/genesis.proto b/proto/spn/profile/genesis.proto deleted file mode 100644 index 6324f77b..00000000 --- a/proto/spn/profile/genesis.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; -package spn.profile; - -import "gogoproto/gogo.proto"; -import "spn/profile/validator.proto"; -import "spn/profile/coordinator.proto"; - -option go_package = "github.com/tendermint/spn/x/profile/types"; - -// GenesisState defines the profile module's genesis state. -message GenesisState { - repeated Validator validators = 1 [(gogoproto.nullable) = false]; - repeated ValidatorByOperatorAddress validatorsByOperatorAddress = 2 [(gogoproto.nullable) = false]; - repeated Coordinator coordinators = 3 [(gogoproto.nullable) = false]; - uint64 coordinatorCounter = 4; - repeated CoordinatorByAddress coordinatorsByAddress = 5 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/profile/query.proto b/proto/spn/profile/query.proto deleted file mode 100644 index c88393be..00000000 --- a/proto/spn/profile/query.proto +++ /dev/null @@ -1,94 +0,0 @@ -syntax = "proto3"; -package spn.profile; - -import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "spn/profile/validator.proto"; -import "spn/profile/coordinator.proto"; - -option go_package = "github.com/tendermint/spn/x/profile/types"; - -// Query defines the gRPC querier service. -service Query { - // Queries a validator by index. - rpc Validator(QueryGetValidatorRequest) returns (QueryGetValidatorResponse) { - option (google.api.http).get = "/tendermint/spn/profile/validator/{address}"; - } - - // Queries a list of validator items. - rpc ValidatorAll(QueryAllValidatorRequest) returns (QueryAllValidatorResponse) { - option (google.api.http).get = "/tendermint/spn/profile/validator"; - } - - // Queries a ValidatorByConsAddress by consensus address. - rpc ValidatorByOperatorAddress(QueryGetValidatorByOperatorAddressRequest) - returns (QueryGetValidatorByOperatorAddressResponse) { - option (google.api.http).get = "/tendermint/spn/profile/validator_by_operator_address/{operatorAddress}"; - } - - // Queries a coordinator by id. - rpc Coordinator(QueryGetCoordinatorRequest) returns (QueryGetCoordinatorResponse) { - option (google.api.http).get = "/tendermint/spn/profile/coordinator/{coordinatorID}"; - } - - // Queries a list of coordinator items. - rpc CoordinatorAll(QueryAllCoordinatorRequest) returns (QueryAllCoordinatorResponse) { - option (google.api.http).get = "/tendermint/spn/profile/coordinator"; - } - - // Queries a coordinatorByAddress by index. - rpc CoordinatorByAddress(QueryGetCoordinatorByAddressRequest) returns (QueryGetCoordinatorByAddressResponse) { - option (google.api.http).get = "/tendermint/spn/profile/coordinator_by_address/{address}"; - } -} - -message QueryGetValidatorRequest { - string address = 1; -} - -message QueryGetValidatorResponse { - Validator validator = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllValidatorRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllValidatorResponse { - repeated Validator validator = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetValidatorByOperatorAddressRequest { - string operatorAddress = 1; -} - -message QueryGetValidatorByOperatorAddressResponse { - ValidatorByOperatorAddress validatorByOperatorAddress = 1 [(gogoproto.nullable) = false]; -} - -message QueryGetCoordinatorRequest { - uint64 coordinatorID = 1; -} - -message QueryGetCoordinatorResponse { - Coordinator coordinator = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllCoordinatorRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllCoordinatorResponse { - repeated Coordinator coordinator = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetCoordinatorByAddressRequest { - string address = 1; -} - -message QueryGetCoordinatorByAddressResponse { - CoordinatorByAddress coordinatorByAddress = 1 [(gogoproto.nullable) = false]; -} \ No newline at end of file diff --git a/proto/spn/profile/tx.proto b/proto/spn/profile/tx.proto deleted file mode 100644 index e86e87d2..00000000 --- a/proto/spn/profile/tx.proto +++ /dev/null @@ -1,65 +0,0 @@ -syntax = "proto3"; -package spn.profile; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -import "spn/profile/coordinator.proto"; -import "spn/profile/validator.proto"; - -option go_package = "github.com/tendermint/spn/x/profile/types"; - -// Msg defines the Msg service. -service Msg { - rpc UpdateValidatorDescription(MsgUpdateValidatorDescription) returns (MsgUpdateValidatorDescriptionResponse); - rpc AddValidatorOperatorAddress(MsgAddValidatorOperatorAddress) returns (MsgAddValidatorOperatorAddressResponse); - rpc CreateCoordinator(MsgCreateCoordinator) returns (MsgCreateCoordinatorResponse); - rpc UpdateCoordinatorDescription(MsgUpdateCoordinatorDescription) returns (MsgUpdateCoordinatorDescriptionResponse); - rpc UpdateCoordinatorAddress(MsgUpdateCoordinatorAddress) returns (MsgUpdateCoordinatorAddressResponse); - rpc DisableCoordinator(MsgDisableCoordinator) returns (MsgDisableCoordinatorResponse); -} - -message MsgUpdateValidatorDescription { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - ValidatorDescription description = 2 [(gogoproto.nullable) = false]; -} - -message MsgUpdateValidatorDescriptionResponse {} - -message MsgAddValidatorOperatorAddress { - string validatorAddress = 1; - string operatorAddress = 2; -} - -message MsgAddValidatorOperatorAddressResponse {} - -message MsgCreateCoordinator { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - CoordinatorDescription description = 2 [(gogoproto.nullable) = false]; -} - -message MsgCreateCoordinatorResponse { - uint64 coordinatorID = 1; -} - -message MsgUpdateCoordinatorDescription { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - CoordinatorDescription description = 2 [(gogoproto.nullable) = false]; -} - -message MsgUpdateCoordinatorDescriptionResponse {} - -message MsgUpdateCoordinatorAddress { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string newAddress = 2; -} - -message MsgUpdateCoordinatorAddressResponse {} - -message MsgDisableCoordinator { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message MsgDisableCoordinatorResponse { - uint64 coordinatorID = 1; -} diff --git a/proto/spn/profile/validator.proto b/proto/spn/profile/validator.proto deleted file mode 100644 index a3cf773a..00000000 --- a/proto/spn/profile/validator.proto +++ /dev/null @@ -1,26 +0,0 @@ -syntax = "proto3"; -package spn.profile; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/profile/types"; - -message Validator { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated string operatorAddresses = 2; - ValidatorDescription description = 3 [(gogoproto.nullable) = false]; -} - -message ValidatorDescription { - string identity = 1; - string moniker = 2; - string website = 3; - string securityContact = 4; - string details = 5; -} - -message ValidatorByOperatorAddress { - string operatorAddress = 1; - string validatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} diff --git a/proto/spn/project/events.proto b/proto/spn/project/events.proto deleted file mode 100644 index 81e5ed4d..00000000 --- a/proto/spn/project/events.proto +++ /dev/null @@ -1,96 +0,0 @@ -syntax = "proto3"; -package spn.project; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; - -import "spn/project/vesting.proto"; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -message EventProjectCreated { - uint64 projectID = 1; - string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 coordinatorID = 3; -} - -message EventProjectChainAdded { - uint64 projectID = 1; - uint64 launchID = 2; -} - -message EventProjectInfoUpdated { - uint64 projectID = 1; - string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string projectName = 3; - bytes metadata = 4; -} - -message EventProjectSharesUpdated { - uint64 projectID = 1; - string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin allocatedShares = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; -} - -message EventProjectTotalSupplyUpdated { - uint64 projectID = 1; - string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin totalSupply = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -message EventProjectMainnetInitialized { - uint64 projectID = 1; - string coordinatorAddress = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 mainnetID = 3; -} - -message EventMainnetAccountCreated { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin shares = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; -} - -message EventMainnetAccountUpdated { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin shares = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; -} - -message EventMainnetAccountRemoved { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message EventMainnetVestingAccountCreated { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - ShareVestingOptions vestingOptions = 3 [(gogoproto.nullable) = false]; -} - -message EventMainnetVestingAccountUpdated { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - ShareVestingOptions vestingOptions = 3 [(gogoproto.nullable) = false]; -} - -message EventProjectAuctionCreated { - uint64 projectID = 1; - uint64 auctionID = 2; -} diff --git a/proto/spn/project/genesis.proto b/proto/spn/project/genesis.proto deleted file mode 100644 index c6be0a2b..00000000 --- a/proto/spn/project/genesis.proto +++ /dev/null @@ -1,21 +0,0 @@ -syntax = "proto3"; -package spn.project; - -import "gogoproto/gogo.proto"; -import "spn/project/project_chains.proto"; -import "spn/project/vesting.proto"; -import "spn/project/project.proto"; -import "spn/project/mainnet_account.proto"; -import "spn/project/params.proto"; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -// GenesisState defines the project module's genesis state. -message GenesisState { - repeated Project projects = 1 [(gogoproto.nullable) = false]; - uint64 projectCounter = 2; - repeated ProjectChains projectChains = 3 [(gogoproto.nullable) = false]; - repeated MainnetAccount mainnetAccounts = 4 [(gogoproto.nullable) = false]; - uint64 totalShares = 5; - Params params = 6 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/project/mainnet_account.proto b/proto/spn/project/mainnet_account.proto deleted file mode 100644 index 72f66a12..00000000 --- a/proto/spn/project/mainnet_account.proto +++ /dev/null @@ -1,28 +0,0 @@ -syntax = "proto3"; -package spn.project; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; - -message MainnetAccount { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin shares = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; -} - -message MainnetAccountBalance { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin coins = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} diff --git a/proto/spn/project/params.proto b/proto/spn/project/params.proto deleted file mode 100644 index d0601025..00000000 --- a/proto/spn/project/params.proto +++ /dev/null @@ -1,35 +0,0 @@ -syntax = "proto3"; -package spn.project; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -// Params defines the set of params for the project module. -message Params { - option (gogoproto.goproto_stringer) = false; - - TotalSupplyRange totalSupplyRange = 1 [(gogoproto.nullable) = false]; - repeated cosmos.base.v1beta1.Coin projectCreationFee = 2 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - uint64 maxMetadataLength = 3; -} - -// TotalSupplyRange defines the range of allowed values for total supply -message TotalSupplyRange { - string minTotalSupply = 1 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; - string maxTotalSupply = 2 [ - (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (cosmos_proto.scalar) = "cosmos.Int" - ]; -} \ No newline at end of file diff --git a/proto/spn/project/project.proto b/proto/spn/project/project.proto deleted file mode 100644 index 52706960..00000000 --- a/proto/spn/project/project.proto +++ /dev/null @@ -1,29 +0,0 @@ -syntax = "proto3"; -package spn.project; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "spn/project/special_allocations.proto"; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -message Project { - uint64 projectID = 1; - string projectName = 2; - uint64 coordinatorID = 3; - int64 createdAt = 4; - uint64 mainnetID = 5; - bool mainnetInitialized = 6; - repeated cosmos.base.v1beta1.Coin totalSupply = 7 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - repeated cosmos.base.v1beta1.Coin allocatedShares = 8 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; - SpecialAllocations specialAllocations = 9 [(gogoproto.nullable) = false]; - bytes metadata = 10; -} diff --git a/proto/spn/project/project_chains.proto b/proto/spn/project/project_chains.proto deleted file mode 100644 index ee73b565..00000000 --- a/proto/spn/project/project_chains.proto +++ /dev/null @@ -1,9 +0,0 @@ -syntax = "proto3"; -package spn.project; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -message ProjectChains { - uint64 projectID = 1; - repeated uint64 chains = 2; -} \ No newline at end of file diff --git a/proto/spn/project/query.proto b/proto/spn/project/query.proto deleted file mode 100644 index 869f9aa7..00000000 --- a/proto/spn/project/query.proto +++ /dev/null @@ -1,164 +0,0 @@ -syntax = "proto3"; -package spn.project; - -import "google/api/annotations.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; - -import "spn/project/project_chains.proto"; -import "spn/project/project.proto"; -import "spn/project/vesting.proto"; -import "spn/project/mainnet_account.proto"; -import "spn/project/params.proto"; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -// Query defines the gRPC querier service. -service Query { - // Queries a project by id. - rpc Project(QueryGetProjectRequest) returns (QueryGetProjectResponse) { - option (google.api.http).get = "/tendermint/spn/project/project/{projectID}"; - } - - // Queries a list of project items. - rpc ProjectAll(QueryAllProjectRequest) returns (QueryAllProjectResponse) { - option (google.api.http).get = "/tendermint/spn/project/project"; - } - - // Queries a projectChains by index. - rpc ProjectChains(QueryGetProjectChainsRequest) returns (QueryGetProjectChainsResponse) { - option (google.api.http).get = "/tendermint/spn/project/project_chains/{projectID}"; - } - - // Queries a list of SpecialAllocationsBalance items. - rpc SpecialAllocationsBalance(QuerySpecialAllocationsBalanceRequest) - returns (QuerySpecialAllocationsBalanceResponse) { - option (google.api.http).get = "/tendermint/spn/project/special_allocations_balance/{projectID}"; - } - - // Queries a mainnetAccount by index. - rpc MainnetAccount(QueryGetMainnetAccountRequest) returns (QueryGetMainnetAccountResponse) { - option (google.api.http).get = "/tendermint/spn/project/mainnet_account/{projectID}/{address}"; - } - - // Queries a list of mainnetAccount items. - rpc MainnetAccountAll(QueryAllMainnetAccountRequest) returns (QueryAllMainnetAccountResponse) { - option (google.api.http).get = "/tendermint/spn/project/mainnet_account/{projectID}"; - } - - // Queries a mainnetAccountBalance by index. - rpc MainnetAccountBalance(QueryGetMainnetAccountBalanceRequest) returns (QueryGetMainnetAccountBalanceResponse) { - option (google.api.http).get = "/tendermint/spn/project/mainnet_account_balance/{projectID}/{address}"; - } - - // Queries a list of mainnetAccountBalance items. - rpc MainnetAccountBalanceAll(QueryAllMainnetAccountBalanceRequest) returns (QueryAllMainnetAccountBalanceResponse) { - option (google.api.http).get = "/tendermint/spn/project/mainnet_account_balance/{projectID}"; - } - - // Params queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/tendermint/spn/project/params"; - } - - // Queries the TotalShares value - rpc TotalShares(QueryTotalSharesRequest) returns (QueryTotalSharesResponse) { - option (google.api.http).get = "/tendermint/spn/project/total_shares"; - } -} - -message QueryGetProjectRequest { - uint64 projectID = 1; -} - -message QueryGetProjectResponse { - Project project = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllProjectRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllProjectResponse { - repeated Project project = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetProjectChainsRequest { - uint64 projectID = 1; -} - -message QueryGetProjectChainsResponse { - ProjectChains projectChains = 1 [(gogoproto.nullable) = false]; -} - -message QuerySpecialAllocationsBalanceRequest { - uint64 projectID = 1; -} - -message QuerySpecialAllocationsBalanceResponse { - repeated cosmos.base.v1beta1.Coin genesisDistribution = 1 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - repeated cosmos.base.v1beta1.Coin claimableAirdrop = 2 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -message QueryGetMainnetAccountRequest { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message QueryGetMainnetAccountResponse { - MainnetAccount mainnetAccount = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllMainnetAccountRequest { - uint64 projectID = 1; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -message QueryAllMainnetAccountResponse { - repeated MainnetAccount mainnetAccount = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -message QueryGetMainnetAccountBalanceRequest { - uint64 projectID = 1; - string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -message QueryGetMainnetAccountBalanceResponse { - MainnetAccountBalance mainnetAccountBalance = 1 [(gogoproto.nullable) = false]; -} - -message QueryAllMainnetAccountBalanceRequest { - uint64 projectID = 1; - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -message QueryAllMainnetAccountBalanceResponse { - repeated MainnetAccountBalance mainnetAccountBalance = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} - -// QueryParamsResponse is response type for the Query/Params RPC method. -message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; -} - -message QueryTotalSharesRequest {} - -message QueryTotalSharesResponse { - uint64 totalShares = 1; -} diff --git a/proto/spn/project/special_allocations.proto b/proto/spn/project/special_allocations.proto deleted file mode 100644 index 9e84fb44..00000000 --- a/proto/spn/project/special_allocations.proto +++ /dev/null @@ -1,20 +0,0 @@ -syntax = "proto3"; -package spn.project; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -message SpecialAllocations { - repeated cosmos.base.v1beta1.Coin genesisDistribution = 1 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; - repeated cosmos.base.v1beta1.Coin claimableAirdrop = 2 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; -} diff --git a/proto/spn/project/tx.proto b/proto/spn/project/tx.proto deleted file mode 100644 index a5022588..00000000 --- a/proto/spn/project/tx.proto +++ /dev/null @@ -1,127 +0,0 @@ -syntax = "proto3"; -package spn.project; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "spn/project/vesting.proto"; -import "spn/project/special_allocations.proto"; - -option go_package = "github.com/tendermint/spn/x/project/types"; - -// Msg defines the Msg service. -service Msg { - rpc CreateProject(MsgCreateProject) returns (MsgCreateProjectResponse); - rpc EditProject(MsgEditProject) returns (MsgEditProjectResponse); - rpc UpdateTotalSupply(MsgUpdateTotalSupply) returns (MsgUpdateTotalSupplyResponse); - rpc UpdateSpecialAllocations(MsgUpdateSpecialAllocations) returns (MsgUpdateSpecialAllocationsResponse); - rpc InitializeMainnet(MsgInitializeMainnet) returns (MsgInitializeMainnetResponse); - rpc MintVouchers(MsgMintVouchers) returns (MsgMintVouchersResponse); - rpc BurnVouchers(MsgBurnVouchers) returns (MsgBurnVouchersResponse); - rpc RedeemVouchers(MsgRedeemVouchers) returns (MsgRedeemVouchersResponse); - rpc UnredeemVouchers(MsgUnredeemVouchers) returns (MsgUnredeemVouchersResponse); -} - -message MsgCreateProject { - string coordinator = 1; - string projectName = 2; - repeated cosmos.base.v1beta1.Coin totalSupply = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - bytes metadata = 4; -} - -message MsgCreateProjectResponse { - uint64 projectID = 1; -} - -message MsgEditProject { - string coordinator = 1; - uint64 projectID = 2; - string name = 3; - bytes metadata = 4; -} - -message MsgEditProjectResponse {} - -message MsgUpdateTotalSupply { - string coordinator = 1; - uint64 projectID = 2; - repeated cosmos.base.v1beta1.Coin totalSupplyUpdate = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -message MsgUpdateTotalSupplyResponse {} - -message MsgUpdateSpecialAllocations { - string coordinator = 1; - uint64 projectID = 2; - SpecialAllocations specialAllocations = 3 [(gogoproto.nullable) = false]; -} - -message MsgUpdateSpecialAllocationsResponse {} - -message MsgInitializeMainnet { - string coordinator = 1; - uint64 projectID = 2; - string sourceURL = 3; - string sourceHash = 4; - string mainnetChainID = 5; -} - -message MsgInitializeMainnetResponse { - uint64 mainnetID = 1; -} - -message MsgMintVouchers { - string coordinator = 1; - uint64 projectID = 2; - repeated cosmos.base.v1beta1.Coin shares = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; -} - -message MsgMintVouchersResponse {} - -message MsgBurnVouchers { - string sender = 1; - uint64 projectID = 2; - repeated cosmos.base.v1beta1.Coin vouchers = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -message MsgBurnVouchersResponse {} - -message MsgRedeemVouchers { - string sender = 1; - uint64 projectID = 2; - string account = 3; - repeated cosmos.base.v1beta1.Coin vouchers = 4 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -message MsgRedeemVouchersResponse {} - -message MsgUnredeemVouchers { - string sender = 1; - uint64 projectID = 2; - repeated cosmos.base.v1beta1.Coin shares = 4 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "Shares" - ]; -} - -message MsgUnredeemVouchersResponse {} diff --git a/proto/spn/reward/events.proto b/proto/spn/reward/events.proto deleted file mode 100644 index eb25fd63..00000000 --- a/proto/spn/reward/events.proto +++ /dev/null @@ -1,27 +0,0 @@ -syntax = "proto3"; -package spn.reward; - -import "gogoproto/gogo.proto"; -import "spn/reward/reward_pool.proto"; -import "cosmos/base/v1beta1/coin.proto"; - -option go_package = "github.com/tendermint/spn/x/reward/types"; - -message EventRewardPoolCreated { - uint64 launchID = 1; - string provider = 2; -} - -message EventRewardPoolRemoved { - uint64 launchID = 1; -} - -message EventRewardsDistributed { - uint64 launchID = 1; - string receiver = 2; - repeated cosmos.base.v1beta1.Coin rewards = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} \ No newline at end of file diff --git a/proto/spn/reward/genesis.proto b/proto/spn/reward/genesis.proto deleted file mode 100644 index 67bf1bbe..00000000 --- a/proto/spn/reward/genesis.proto +++ /dev/null @@ -1,14 +0,0 @@ -syntax = "proto3"; -package spn.reward; - -import "gogoproto/gogo.proto"; -import "spn/reward/params.proto"; -import "spn/reward/reward_pool.proto"; - -option go_package = "github.com/tendermint/spn/x/reward/types"; - -// GenesisState defines the reward module's genesis state. -message GenesisState { - repeated RewardPool rewardPools = 1 [(gogoproto.nullable) = false]; - Params params = 2 [(gogoproto.nullable) = false]; -} diff --git a/proto/spn/reward/params.proto b/proto/spn/reward/params.proto deleted file mode 100644 index 63c356a8..00000000 --- a/proto/spn/reward/params.proto +++ /dev/null @@ -1,11 +0,0 @@ -syntax = "proto3"; -package spn.reward; - -import "gogoproto/gogo.proto"; - -option go_package = "github.com/tendermint/spn/x/reward/types"; - -// Params defines the parameters for the module. -message Params { - option (gogoproto.goproto_stringer) = false; -} diff --git a/proto/spn/reward/reward_pool.proto b/proto/spn/reward/reward_pool.proto deleted file mode 100644 index bf6c4e36..00000000 --- a/proto/spn/reward/reward_pool.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto3"; -package spn.reward; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; - -option go_package = "github.com/tendermint/spn/x/reward/types"; - -message RewardPool { - uint64 launchID = 1; - string provider = 2; - repeated cosmos.base.v1beta1.Coin initialCoins = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - repeated cosmos.base.v1beta1.Coin remainingCoins = 4 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - int64 lastRewardHeight = 5; - int64 currentRewardHeight = 6; - bool closed = 7; -} diff --git a/proto/spn/reward/tx.proto b/proto/spn/reward/tx.proto deleted file mode 100644 index 12392cc8..00000000 --- a/proto/spn/reward/tx.proto +++ /dev/null @@ -1,38 +0,0 @@ -syntax = "proto3"; -package spn.reward; - -import "cosmos/base/v1beta1/coin.proto"; -import "gogoproto/gogo.proto"; - -option go_package = "github.com/tendermint/spn/x/reward/types"; - -// Msg defines the Msg service. -service Msg { - rpc SetRewards(MsgSetRewards) returns (MsgSetRewardsResponse); -} - -message MsgSetRewards { - string provider = 1; - uint64 launchID = 2; - repeated cosmos.base.v1beta1.Coin coins = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - int64 lastRewardHeight = 4; -} - -message MsgSetRewardsResponse { - repeated cosmos.base.v1beta1.Coin previousCoins = 1 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - int64 previousLastRewardHeight = 2; - repeated cosmos.base.v1beta1.Coin newCoins = 3 [ - (gogoproto.nullable) = false, - (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.Coin", - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - int64 newLastRewardHeight = 4; -} diff --git a/readme.md b/readme.md index 0d6a7d71..5bdf5f33 100644 --- a/readme.md +++ b/readme.md @@ -6,24 +6,24 @@ License: Apache-2.0 - - GoDoc + + GoDoc - - Go report card + + Go report card
    - - Lines Of Code + + Lines Of Code - Test Status - Lint Status + Test Status + Lint Status
    **spn** is a blockchain built using Cosmos SDK and Tendermint and created with [Ignite](https://github.com/ignite/cli). diff --git a/scripts/metadata_sample.yml b/scripts/metadata_sample.yml deleted file mode 100644 index 42b960c1..00000000 --- a/scripts/metadata_sample.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: alpha -launchpad: - overview: - repository: https://github.com/ignite/example - description: project/description.md - cover: project/cover.jpg - logo: project/logo.jpg -cli: - version: - release: v0.24.0 diff --git a/scripts/populate.sh b/scripts/populate.sh deleted file mode 100755 index 8ffc78f8..00000000 --- a/scripts/populate.sh +++ /dev/null @@ -1,73 +0,0 @@ -# SPN_NODE env var should contain the node to connect to -if [[ -z "${SPN_NODE}" ]]; then - SPN_NODE="http://0.0.0.0:26657" -else - SPN_NODE="${SPN_NODE}" -fi - -# check spnd is installed -spnd > /dev/null -if [ $? != 0 ]; then - echo "spnd binary not installed" - exit 1 -fi - -CreateAccount () { - spnd keys delete $1 -y > /dev/null - echo $2 | spnd keys add $1 --recover > /dev/null -} - -SpndCommand () { - command="spnd tx $1 --from $2 -y --node ${SPN_NODE}" - $command > /dev/null -} - -# install keys -echo "adding keys..." -CreateAccount alice "slide moment original seven milk crawl help text kick fluid boring awkward doll wonder sure fragile plate grid hard next casual expire okay body" -CreateAccount bob "trap possible liquid elite embody host segment fantasy swim cable digital eager tiny broom burden diary earn hen grow engine pigeon fringe claim program" -CreateAccount carol "great immense still pill defense fetch pencil slow purchase symptom speed arm shoot fence have divorce cigar rapid hen vehicle pear evolve correct nerve" -CreateAccount dave "resist portion leisure lawn shell lunch inhale start pupil add fault segment hour dwarf toddler insect frame math remove twist easy paddle nice rhythm" -CreateAccount joe "diary behind allow lawn loop assault armor survey media toe rural mass skull way crater tobacco pair glare window soon lift pistol fitness annual" -CreateAccount steve "initial aisle blush gift shuffle hat solar dove dwarf soup credit acid update seed mercy thumb swear main verb image dove rose chat inmate" -CreateAccount olivia "dinosaur submit around jacket movie garden crash weather matter option time cabbage butter mind skin nature ride mosquito seat lock elephant merit empower come" - -# commands -echo "creating coordinators..." -SpndCommand "profile create-coordinator" alice -SpndCommand "profile create-coordinator" bob -SpndCommand "profile create-coordinator" carol -SpndCommand "profile create-coordinator" dave -SpndCommand "profile create-coordinator" joe -SpndCommand "profile create-coordinator" steve -SpndCommand "profile create-coordinator" olivia - -echo "creating chains..." -SpndCommand 'launch create-chain example-10 https://github.com/ignite/example.git 0xaaa --metadata-file scripts/metadata_sample.yml' alice -SpndCommand 'launch create-chain mars-1 https://github.com/lubtd/planet.git 0xbbb' bob -SpndCommand 'launch create-chain spn-11 https://github.com/tendermint/spn.git 0xccc' carol -SpndCommand 'launch create-chain spn-11 https://github.com/tendermint/spn.git 0xccc --account-balance 10000foo' carol - -echo "add requests to chain 1..." -SpndCommand 'launch request-add-account 1 1000foo,500bar' alice -SpndCommand 'launch request-add-account 1 10000foo,5500bar' bob -SpndCommand 'launch request-add-account 1 1000foo' carol -SpndCommand 'launch request-add-account 1 12938500bar' dave -SpndCommand 'launch request-add-account 1 1234baz' steve - -echo "gentx content" > gentx.json -SpndCommand 'launch request-add-validator 1 gentx.json d/s5BWDjOgZAUT3Jp/MlPAS2Ob9w6mfnWiLYn0VelpE= 50foo aaa alice.com' alice -SpndCommand 'launch request-add-validator 1 gentx.json d/s5BWDjOgZAUT3Jp/MlPAS2Ob9w6mfnWiLYn0VelpE= 150foo bbb bob.com' bob -SpndCommand 'launch request-add-validator 1 gentx.json d/s5BWDjOgZAUT3Jp/MlPAS2Ob9w6mfnWiLYn0VelpE= 500foo ccc carol.com' carol -rm gentx.json - -SpndCommand 'launch request-remove-validator 1 spn1aqn8ynvr3jmq67879qulzrwhchq5dtrvtx0nhe' dave -SpndCommand 'launch request-remove-account 1 spn1aqn8ynvr3jmq67879qulzrwhchq5dtrvtx0nhe' steve - -echo "settling requests for chain 1..." -SpndCommand 'launch settle-request approve 1 2' alice -SpndCommand 'launch settle-request approve 1 3' alice -SpndCommand 'launch settle-request reject 1 4' alice - -SpndCommand 'launch settle-request approve 1 7' alice -SpndCommand 'launch settle-request reject 1 8' alice diff --git a/testutil/constructor/constructor.go b/testutil/constructor/constructor.go index b24f2da8..98014b07 100644 --- a/testutil/constructor/constructor.go +++ b/testutil/constructor/constructor.go @@ -4,19 +4,21 @@ package constructor import ( "testing" + sdkmath "cosmossdk.io/math" abci "github.com/cometbft/cometbft/abci/types" + prototypes "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - monitoringptypes "github.com/tendermint/spn/x/monitoringp/types" - projecttypes "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/pkg/types" + monitoringptypes "github.com/ignite/network/x/monitoringp/types" + projecttypes "github.com/ignite/network/x/project/types" ) // Vote is a simplified type for abci.VoteInfo for testing purpose type Vote struct { Address []byte - Signed bool + BlockID prototypes.BlockIDFlag } // LastCommitInfo creates a ABCI LastCommitInfo object for test purpose from a list of vote @@ -29,7 +31,7 @@ func LastCommitInfo(votes ...Vote) abci.CommitInfo { Validator: abci.Validator{ Address: vote.Address, }, - SignedLastBlock: vote.Signed, + BlockIdFlag: vote.BlockID, }) } return lci @@ -50,30 +52,30 @@ func Coins(t testing.TB, str string) sdk.Coins { } // Dec returns a sdk.Dec from a string -func Dec(t testing.TB, str string) sdk.Dec { - dec, err := sdk.NewDecFromStr(str) +func Dec(t testing.TB, str string) sdkmath.LegacyDec { + dec, err := sdkmath.LegacyNewDecFromStr(str) require.NoError(t, err) return dec } // SignatureCount returns a signature count object for test from a operator address and a decimal string for relative signatures -func SignatureCount(t testing.TB, opAddr string, relSig string) spntypes.SignatureCount { - return spntypes.SignatureCount{ +func SignatureCount(t testing.TB, opAddr string, relSig string) types.SignatureCount { + return types.SignatureCount{ OpAddress: opAddr, RelativeSignatures: Dec(t, relSig), } } // SignatureCounts returns a signature counts object for tests from a a block count and list of signature counts -func SignatureCounts(blockCount uint64, sc ...spntypes.SignatureCount) spntypes.SignatureCounts { - return spntypes.SignatureCounts{ +func SignatureCounts(blockCount uint64, sc ...types.SignatureCount) types.SignatureCounts { + return types.SignatureCounts{ BlockCount: blockCount, Counts: sc, } } // MonitoringInfo returns a monitoring info object for tests from a a block count and list of signature counts -func MonitoringInfo(blockCount uint64, sc ...spntypes.SignatureCount) (mi monitoringptypes.MonitoringInfo) { +func MonitoringInfo(blockCount uint64, sc ...types.SignatureCount) (mi monitoringptypes.MonitoringInfo) { mi.SignatureCounts = SignatureCounts(blockCount, sc...) return } diff --git a/testutil/encoding/encoding.go b/testutil/encoding/encoding.go deleted file mode 100644 index ab88d5d8..00000000 --- a/testutil/encoding/encoding.go +++ /dev/null @@ -1,27 +0,0 @@ -package encoding - -import ( - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/std" - "github.com/cosmos/cosmos-sdk/x/auth/tx" - "github.com/tendermint/spn/cmd" - "github.com/tendermint/spn/testutil/sample" -) - -// MakeTestEncodingConfig creates a test EncodingConfig for an amino based test configuration. -func MakeTestEncodingConfig() cmd.EncodingConfig { - amino := codec.NewLegacyAmino() - interfaceRegistry := sample.InterfaceRegistry() - marshaler := codec.NewProtoCodec(interfaceRegistry) - txCfg := tx.NewTxConfig(marshaler, tx.DefaultSignModes) - - std.RegisterLegacyAminoCodec(amino) - std.RegisterInterfaces(interfaceRegistry) - - return cmd.EncodingConfig{ - InterfaceRegistry: interfaceRegistry, - Marshaler: marshaler, - TxConfig: txCfg, - Amino: amino, - } -} diff --git a/testutil/gen_app.go b/testutil/gen_app.go deleted file mode 100644 index eec482b3..00000000 --- a/testutil/gen_app.go +++ /dev/null @@ -1,133 +0,0 @@ -package testutil - -import ( - "time" - - sdkmath "cosmossdk.io/math" - dbm "github.com/cometbft/cometbft-db" - "github.com/cometbft/cometbft/libs/log" - tmtypes "github.com/cometbft/cometbft/types" - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/codec" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - "github.com/cosmos/cosmos-sdk/testutil/mock" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - spnapp "github.com/tendermint/spn/app" - "github.com/tendermint/spn/cmd" -) - -func GenApp(chainID string, withGenesis bool, invCheckPeriod uint) (*spnapp.App, spnapp.GenesisState) { - var ( - db = dbm.NewMemDB() - encCdc = cmd.MakeEncodingConfig(spnapp.ModuleBasics) - app = spnapp.New( - log.NewNopLogger(), - db, - nil, - true, - map[int64]bool{}, - spnapp.DefaultNodeHome, - invCheckPeriod, - encCdc, - simtestutil.EmptyAppOptions{}, - baseapp.SetChainID(chainID), - ) - ) - - originalApp := app.(*spnapp.App) - if withGenesis { - genesisState := spnapp.NewDefaultGenesisState(encCdc.Marshaler) - privVal := mock.NewPV() - pubKey, _ := privVal.GetPubKey() - // create validator set with single validator - validator := tmtypes.NewValidator(pubKey, 1) - valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) - - // generate genesis account - senderPrivKey := secp256k1.GenPrivKey() - acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) - balances := banktypes.Balance{ - Address: acc.GetAddress().String(), - Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(100000000000000))), - } - genesisState = genesisStateWithValSet(encCdc.Marshaler, genesisState, valSet, []authtypes.GenesisAccount{acc}, balances) - return originalApp, genesisState - } - - return originalApp, spnapp.GenesisState{} -} - -func genesisStateWithValSet( - cdc codec.Codec, - genesisState spnapp.GenesisState, - valSet *tmtypes.ValidatorSet, - genAccs []authtypes.GenesisAccount, - balances ...banktypes.Balance, -) spnapp.GenesisState { // set genesis accounts - authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) - genesisState[authtypes.ModuleName] = cdc.MustMarshalJSON(authGenesis) - - validators := make([]stakingtypes.Validator, 0, len(valSet.Validators)) - delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators)) - - bondAmt := sdk.DefaultPowerReduction - - for _, val := range valSet.Validators { - pk, _ := cryptocodec.FromTmPubKeyInterface(val.PubKey) - pkAny, _ := codectypes.NewAnyWithValue(pk) - validator := stakingtypes.Validator{ - OperatorAddress: sdk.ValAddress(val.Address).String(), - ConsensusPubkey: pkAny, - Jailed: false, - Status: stakingtypes.Bonded, - Tokens: bondAmt, - DelegatorShares: sdk.OneDec(), - Description: stakingtypes.Description{}, - UnbondingHeight: int64(0), - UnbondingTime: time.Unix(0, 0).UTC(), - Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), - MinSelfDelegation: sdkmath.ZeroInt(), - } - validators = append(validators, validator) - delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec())) - - } - // set validators and delegations - stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations) - genesisState[stakingtypes.ModuleName] = cdc.MustMarshalJSON(stakingGenesis) - - totalSupply := sdk.NewCoins() - for _, b := range balances { - // add genesis acc tokens to total supply - totalSupply = totalSupply.Add(b.Coins...) - } - - for range delegations { - // add delegated tokens to total supply - totalSupply = totalSupply.Add(sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)) - } - - // add bonded amount to bonded pool module account - balances = append(balances, banktypes.Balance{ - Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(), - Coins: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)}, - }) - - // update total supply - bankGenesis := banktypes.NewGenesisState( - banktypes.DefaultGenesisState().Params, - balances, - totalSupply, - []banktypes.Metadata{}, - []banktypes.SendEnabled{}, - ) - genesisState[banktypes.ModuleName] = cdc.MustMarshalJSON(bankGenesis) - - return genesisState -} diff --git a/testutil/keeper/bank_test.go b/testutil/keeper/bank_test.go index c13f5ae5..4c1f48d9 100644 --- a/testutil/keeper/bank_test.go +++ b/testutil/keeper/bank_test.go @@ -7,14 +7,13 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" ) func TestTestKeepers_Mint(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) + ctx, tk, _ := testkeeper.NewTestSetup(t) r := sample.Rand() - ctx := sdk.WrapSDKContext(sdkCtx) address := sample.Address(r) coins, otherCoins := sample.Coins(r), sample.Coins(r) @@ -28,11 +27,11 @@ func TestTestKeepers_Mint(t *testing.T) { } // should create the account - tk.Mint(sdkCtx, address, coins) - require.True(t, getBalances(address).IsEqual(coins)) + tk.Mint(ctx, address, coins) + require.True(t, getBalances(address).Equal(coins)) // should add the minted coins in the balance previousBalance := getBalances(address) - tk.Mint(sdkCtx, address, otherCoins) - require.True(t, getBalances(address).IsEqual(previousBalance.Add(otherCoins...))) + tk.Mint(ctx, address, otherCoins) + require.True(t, getBalances(address).Equal(previousBalance.Add(otherCoins...))) } diff --git a/testutil/keeper/fundraising.go b/testutil/keeper/fundraising.go index e9a15a3a..9d2200c9 100644 --- a/testutil/keeper/fundraising.go +++ b/testutil/keeper/fundraising.go @@ -7,7 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" + "github.com/ignite/network/testutil/sample" ) // CreateFixedPriceAuction makes the provided address create a fixed price auction with the specified selling coin and diff --git a/testutil/keeper/initializer.go b/testutil/keeper/initializer.go index b13a0203..36df0274 100644 --- a/testutil/keeper/initializer.go +++ b/testutil/keeper/initializer.go @@ -1,17 +1,21 @@ package keeper import ( - tmdb "github.com/cometbft/cometbft-db" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + upgradekeeper "cosmossdk.io/x/upgrade/keeper" + upgradetypes "cosmossdk.io/x/upgrade/types" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/store" - storetypes "github.com/cosmos/cosmos-sdk/store/types" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" @@ -19,34 +23,34 @@ import ( paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - fundraisingkeeper "github.com/tendermint/fundraising/x/fundraising/keeper" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + portkeeper "github.com/cosmos/ibc-go/v8/modules/core/05-port/keeper" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" claimkeeper "github.com/ignite/modules/x/claim/keeper" claimtypes "github.com/ignite/modules/x/claim/types" + fundraisingkeeper "github.com/ignite/modules/x/fundraising/keeper" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" minttypes "github.com/ignite/modules/x/mint/types" - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/testutil/sample" - launchkeeper "github.com/tendermint/spn/x/launch/keeper" - launchtypes "github.com/tendermint/spn/x/launch/types" - monitoringckeeper "github.com/tendermint/spn/x/monitoringc/keeper" - monitoringctypes "github.com/tendermint/spn/x/monitoringc/types" - monitoringpkeeper "github.com/tendermint/spn/x/monitoringp/keeper" - monitoringptypes "github.com/tendermint/spn/x/monitoringp/types" - participationkeeper "github.com/tendermint/spn/x/participation/keeper" - participationtypes "github.com/tendermint/spn/x/participation/types" - profilekeeper "github.com/tendermint/spn/x/profile/keeper" - profiletypes "github.com/tendermint/spn/x/profile/types" - projectkeeper "github.com/tendermint/spn/x/project/keeper" - projecttypes "github.com/tendermint/spn/x/project/types" - rewardkeeper "github.com/tendermint/spn/x/reward/keeper" - rewardtypes "github.com/tendermint/spn/x/reward/types" + networktypes "github.com/ignite/network/pkg/types" + "github.com/ignite/network/testutil/sample" + launchkeeper "github.com/ignite/network/x/launch/keeper" + launchtypes "github.com/ignite/network/x/launch/types" + monitoringckeeper "github.com/ignite/network/x/monitoringc/keeper" + monitoringctypes "github.com/ignite/network/x/monitoringc/types" + monitoringpkeeper "github.com/ignite/network/x/monitoringp/keeper" + monitoringptypes "github.com/ignite/network/x/monitoringp/types" + participationkeeper "github.com/ignite/network/x/participation/keeper" + participationtypes "github.com/ignite/network/x/participation/types" + profilekeeper "github.com/ignite/network/x/profile/keeper" + profiletypes "github.com/ignite/network/x/profile/types" + projectkeeper "github.com/ignite/network/x/project/keeper" + projecttypes "github.com/ignite/network/x/project/types" + rewardkeeper "github.com/ignite/network/x/reward/keeper" + rewardtypes "github.com/ignite/network/x/reward/types" ) var moduleAccountPerms = map[string][]string{ @@ -65,16 +69,32 @@ var moduleAccountPerms = map[string][]string{ // initializer allows to initialize each module keeper type initializer struct { Codec codec.Codec - DB *tmdb.MemDB + Amino *codec.LegacyAmino + DB *dbm.MemDB StateStore store.CommitMultiStore } +type invalid struct{} + +type s struct { + I int +} + +func createTestCodec() *codec.LegacyAmino { + cdc := codec.NewLegacyAmino() + sdk.RegisterLegacyAminoCodec(cdc) + cdc.RegisterConcrete(s{}, "test/s", nil) + cdc.RegisterConcrete(invalid{}, "test/invalid", nil) + return cdc +} + func newInitializer() initializer { - db := tmdb.NewMemDB() + db := dbm.NewMemDB() return initializer{ DB: db, Codec: sample.Codec(), - StateStore: store.NewCommitMultiStore(db), + Amino: createTestCodec(), + StateStore: store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()), } } @@ -89,52 +109,54 @@ func ModuleAccountAddrs(maccPerms map[string][]string) map[string]bool { } func (i initializer) Param() paramskeeper.Keeper { - storeKey := sdk.NewKVStoreKey(paramstypes.StoreKey) - tkeys := sdk.NewTransientStoreKey(paramstypes.TStoreKey) + storeKey := storetypes.NewKVStoreKey(paramstypes.StoreKey) + tkeys := storetypes.NewTransientStoreKey(paramstypes.TStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(tkeys, storetypes.StoreTypeTransient, i.DB) return paramskeeper.NewKeeper( i.Codec, - launchtypes.Amino, + i.Amino, storeKey, tkeys, ) } func (i initializer) Auth(paramKeeper paramskeeper.Keeper) authkeeper.AccountKeeper { - storeKey := sdk.NewKVStoreKey(authtypes.StoreKey) + storeKey := storetypes.NewKVStoreKey(authtypes.StoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) paramKeeper.Subspace(authtypes.ModuleName) return authkeeper.NewAccountKeeper( i.Codec, - storeKey, + runtime.NewKVStoreService(storeKey), authtypes.ProtoBaseAccount, moduleAccountPerms, - spntypes.AccountAddressPrefix, + addresscodec.NewBech32Codec(sdk.Bech32MainPrefix), + networktypes.AccountAddressPrefix, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) } func (i initializer) Bank(paramKeeper paramskeeper.Keeper, authKeeper authkeeper.AccountKeeper) bankkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(banktypes.StoreKey) + storeKey := storetypes.NewKVStoreKey(banktypes.StoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) paramKeeper.Subspace(banktypes.ModuleName) modAccAddrs := ModuleAccountAddrs(moduleAccountPerms) return bankkeeper.NewBaseKeeper( i.Codec, - storeKey, + runtime.NewKVStoreService(storeKey), authKeeper, modAccAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + log.NewNopLogger(), ) } func (i initializer) Capability() *capabilitykeeper.Keeper { - storeKey := sdk.NewKVStoreKey(capabilitytypes.StoreKey) + storeKey := storetypes.NewKVStoreKey(capabilitytypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(capabilitytypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) @@ -150,7 +172,7 @@ type ProtocolVersionSetter struct{} func (vs ProtocolVersionSetter) SetProtocolVersion(uint64) {} func (i initializer) Upgrade() *upgradekeeper.Keeper { - storeKey := sdk.NewKVStoreKey(upgradetypes.StoreKey) + storeKey := storetypes.NewKVStoreKey(upgradetypes.StoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) skipUpgradeHeights := make(map[int64]bool) @@ -158,7 +180,7 @@ func (i initializer) Upgrade() *upgradekeeper.Keeper { return upgradekeeper.NewKeeper( skipUpgradeHeights, - storeKey, + runtime.NewKVStoreService(storeKey), i.Codec, "", vs, @@ -171,16 +193,18 @@ func (i initializer) Staking( bankKeeper bankkeeper.Keeper, paramKeeper paramskeeper.Keeper, ) *stakingkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(stakingtypes.StoreKey) + storeKey := storetypes.NewKVStoreKey(stakingtypes.StoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) paramKeeper.Subspace(stakingtypes.ModuleName) return stakingkeeper.NewKeeper( i.Codec, - storeKey, + runtime.NewKVStoreService(storeKey), authKeeper, bankKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + addresscodec.NewBech32Codec("cosmosvaloper"), + addresscodec.NewBech32Codec("cosmosvalcons"), ) } @@ -190,8 +214,7 @@ func (i initializer) IBC( capabilityKeeper capabilitykeeper.Keeper, upgradeKeeper *upgradekeeper.Keeper, ) *ibckeeper.Keeper { - storeKey := sdk.NewKVStoreKey(ibcexported.StoreKey) - + storeKey := storetypes.NewKVStoreKey(ibcexported.StoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) return ibckeeper.NewKeeper( @@ -201,6 +224,7 @@ func (i initializer) IBC( stakingKeeper, upgradeKeeper, capabilityKeeper.ScopeToModule(ibcexported.ModuleName), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) } @@ -209,12 +233,12 @@ func (i initializer) Distribution( bankKeeper bankkeeper.Keeper, stakingKeeper *stakingkeeper.Keeper, ) distrkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(distrtypes.StoreKey) + storeKey := storetypes.NewKVStoreKey(distrtypes.StoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) return distrkeeper.NewKeeper( i.Codec, - storeKey, + runtime.NewKVStoreService(storeKey), authKeeper, bankKeeper, stakingKeeper, @@ -223,8 +247,8 @@ func (i initializer) Distribution( ) } -func (i initializer) Profile() *profilekeeper.Keeper { - storeKey := sdk.NewKVStoreKey(profiletypes.StoreKey) +func (i initializer) Profile() profilekeeper.Keeper { + storeKey := storetypes.NewKVStoreKey(profiletypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(profiletypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) @@ -232,84 +256,79 @@ func (i initializer) Profile() *profilekeeper.Keeper { return profilekeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) } func (i initializer) Launch( - profileKeeper *profilekeeper.Keeper, + profileKeeper profilekeeper.Keeper, distrKeeper distrkeeper.Keeper, - paramKeeper paramskeeper.Keeper, -) *launchkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(launchtypes.StoreKey) +) launchkeeper.Keeper { + storeKey := storetypes.NewKVStoreKey(launchtypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(launchtypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) - paramKeeper.Subspace(launchtypes.ModuleName) - launchSubspace, _ := paramKeeper.GetSubspace(launchtypes.ModuleName) - return launchkeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, - launchSubspace, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), distrKeeper, profileKeeper, + nil, + nil, ) } func (i initializer) Project( - launchKeeper *launchkeeper.Keeper, - profileKeeper *profilekeeper.Keeper, + launchKeeper launchkeeper.Keeper, + profileKeeper profilekeeper.Keeper, bankKeeper bankkeeper.Keeper, distrKeeper distrkeeper.Keeper, - paramKeeper paramskeeper.Keeper, -) *projectkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(projecttypes.StoreKey) +) projectkeeper.Keeper { + storeKey := storetypes.NewKVStoreKey(projecttypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(projecttypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) - paramKeeper.Subspace(projecttypes.ModuleName) - subspace, _ := paramKeeper.GetSubspace(projecttypes.ModuleName) - return projectkeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, - subspace, - launchKeeper, - bankKeeper, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), distrKeeper, profileKeeper, + bankKeeper, + launchKeeper, ) } func (i initializer) Reward( authKeeper authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, - profileKeeper *profilekeeper.Keeper, - launchKeeper *launchkeeper.Keeper, - paramKeeper paramskeeper.Keeper, -) *rewardkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(rewardtypes.StoreKey) + profileKeeper profilekeeper.Keeper, + launchKeeper launchkeeper.Keeper, +) rewardkeeper.Keeper { + storeKey := storetypes.NewKVStoreKey(rewardtypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(rewardtypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) - paramKeeper.Subspace(rewardtypes.ModuleName) - subspace, _ := paramKeeper.GetSubspace(rewardtypes.ModuleName) - return rewardkeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, - subspace, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), authKeeper, bankKeeper, profileKeeper, @@ -320,22 +339,17 @@ func (i initializer) Reward( func (i initializer) Monitoringc( ibcKeeper ibckeeper.Keeper, capabilityKeeper capabilitykeeper.Keeper, - launchKeeper *launchkeeper.Keeper, - rewardKeeper *rewardkeeper.Keeper, - paramKeeper paramskeeper.Keeper, + launchKeeper launchkeeper.Keeper, + rewardKeeper rewardkeeper.Keeper, connectionMock []Connection, channelMock []Channel, -) *monitoringckeeper.Keeper { - storeKey := sdk.NewKVStoreKey(monitoringctypes.StoreKey) +) monitoringckeeper.Keeper { + storeKey := storetypes.NewKVStoreKey(monitoringctypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(monitoringctypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) - paramKeeper.Subspace(monitoringctypes.ModuleName) - subspace, _ := paramKeeper.GetSubspace(monitoringctypes.ModuleName) - scopedMonitoringKeeper := capabilityKeeper.ScopeToModule(monitoringctypes.ModuleName) - // check if ibc mocks should be used for connection and channel var ( connKeeper monitoringctypes.ConnectionKeeper = ibcKeeper.ConnectionKeeper @@ -348,39 +362,49 @@ func (i initializer) Monitoringc( channelKeeper = NewChannelMock(channelMock) } - return monitoringckeeper.NewKeeper( + scopedKeeper := capabilityKeeper.ScopeToModule(ibcexported.ModuleName) + portKeeper := portkeeper.NewKeeper(scopedKeeper) + scopeModule := capabilityKeeper.ScopeToModule(monitoringctypes.ModuleName) + + k := monitoringckeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, - subspace, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + func() *ibckeeper.Keeper { + return &ibckeeper.Keeper{ + PortKeeper: &portKeeper, + } + }, + func(string) capabilitykeeper.ScopedKeeper { + return scopeModule + }, + launchKeeper, + rewardKeeper, + ) + k.SetIBCKeepers( ibcKeeper.ClientKeeper, connKeeper, channelKeeper, - &ibcKeeper.PortKeeper, - scopedMonitoringKeeper, - launchKeeper, - rewardKeeper, + ibcKeeper.PortKeeper, ) + return k } func (i initializer) Monitoringp( stakingKeeper *stakingkeeper.Keeper, ibcKeeper ibckeeper.Keeper, capabilityKeeper capabilitykeeper.Keeper, - paramKeeper paramskeeper.Keeper, connectionMock []Connection, channelMock []Channel, -) *monitoringpkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(monitoringptypes.StoreKey) +) monitoringpkeeper.Keeper { + storeKey := storetypes.NewKVStoreKey(monitoringptypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(monitoringptypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) - paramKeeper.Subspace(monitoringptypes.ModuleName) - subspace, _ := paramKeeper.GetSubspace(monitoringptypes.ModuleName) - scopedMonitoringKeeper := capabilityKeeper.ScopeToModule(monitoringptypes.ModuleName) - // check if ibc mocks should be used for connection and channel var ( connKeeper monitoringctypes.ConnectionKeeper = ibcKeeper.ConnectionKeeper @@ -393,40 +417,52 @@ func (i initializer) Monitoringp( channelKeeper = NewChannelMock(channelMock) } - return monitoringpkeeper.NewKeeper( + scopedKeeper := capabilityKeeper.ScopeToModule(ibcexported.ModuleName) + portKeeper := portkeeper.NewKeeper(scopedKeeper) + scopeModule := capabilityKeeper.ScopeToModule(monitoringctypes.ModuleName) + + k := monitoringpkeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, - subspace, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + func() *ibckeeper.Keeper { + return &ibckeeper.Keeper{ + PortKeeper: &portKeeper, + } + }, + func(string) capabilitykeeper.ScopedKeeper { + return scopeModule + }, stakingKeeper, + ) + k.SetIBCKeepers( ibcKeeper.ClientKeeper, connKeeper, channelKeeper, - &ibcKeeper.PortKeeper, - scopedMonitoringKeeper, + ibcKeeper.PortKeeper, ) + return k } func (i initializer) Fundraising( - paramKeeper paramskeeper.Keeper, authKeeper authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, disKeeper distrkeeper.Keeper, ) fundraisingkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(fundraisingtypes.StoreKey) + storeKey := storetypes.NewKVStoreKey(fundraisingtypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(fundraisingtypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) - paramKeeper.Subspace(fundraisingtypes.ModuleName) - subspace, _ := paramKeeper.GetSubspace(fundraisingtypes.ModuleName) - return fundraisingkeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, - subspace, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), authKeeper, bankKeeper, disKeeper, @@ -434,51 +470,45 @@ func (i initializer) Fundraising( } func (i initializer) Participation( - paramKeeper paramskeeper.Keeper, fundraisingKeeper fundraisingkeeper.Keeper, stakingKeeper *stakingkeeper.Keeper, -) *participationkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(participationtypes.StoreKey) +) participationkeeper.Keeper { + storeKey := storetypes.NewKVStoreKey(participationtypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(participationtypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) - paramKeeper.Subspace(participationtypes.ModuleName) - subspace, _ := paramKeeper.GetSubspace(participationtypes.ModuleName) - return participationkeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, - subspace, - fundraisingKeeper, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), stakingKeeper, + fundraisingKeeper, ) } func (i initializer) Claim( - paramKeeper paramskeeper.Keeper, accountKeeper authkeeper.AccountKeeper, distrKeeper distrkeeper.Keeper, bankKeeper bankkeeper.Keeper, -) *claimkeeper.Keeper { - storeKey := sdk.NewKVStoreKey(claimtypes.StoreKey) +) claimkeeper.Keeper { + storeKey := storetypes.NewKVStoreKey(claimtypes.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(claimtypes.MemStoreKey) i.StateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, i.DB) i.StateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) - paramKeeper.Subspace(claimtypes.ModuleName) - subspace, _ := paramKeeper.GetSubspace(claimtypes.ModuleName) - return claimkeeper.NewKeeper( i.Codec, - storeKey, - memStoreKey, - subspace, + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), accountKeeper, - distrKeeper, bankKeeper, + distrKeeper, ) } diff --git a/testutil/keeper/keeper.go b/testutil/keeper/keeper.go index b3eb69dd..0870a86b 100644 --- a/testutil/keeper/keeper.go +++ b/testutil/keeper/keeper.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/log" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -14,31 +14,30 @@ import ( distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcconnectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - "github.com/stretchr/testify/require" - fundraisingkeeper "github.com/tendermint/fundraising/x/fundraising/keeper" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - + ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" claimkeeper "github.com/ignite/modules/x/claim/keeper" claimtypes "github.com/ignite/modules/x/claim/types" + fundraisingkeeper "github.com/ignite/modules/x/fundraising/keeper" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" + "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/testutil/keeper/mocks" - launchkeeper "github.com/tendermint/spn/x/launch/keeper" - launchtypes "github.com/tendermint/spn/x/launch/types" - monitoringckeeper "github.com/tendermint/spn/x/monitoringc/keeper" - monitoringctypes "github.com/tendermint/spn/x/monitoringc/types" - monitoringpkeeper "github.com/tendermint/spn/x/monitoringp/keeper" - participationkeeper "github.com/tendermint/spn/x/participation/keeper" - participationtypes "github.com/tendermint/spn/x/participation/types" - profilekeeper "github.com/tendermint/spn/x/profile/keeper" - profiletypes "github.com/tendermint/spn/x/profile/types" - projectkeeper "github.com/tendermint/spn/x/project/keeper" - projecttypes "github.com/tendermint/spn/x/project/types" - rewardkeeper "github.com/tendermint/spn/x/reward/keeper" - rewardtypes "github.com/tendermint/spn/x/reward/types" + networktypes "github.com/ignite/network/pkg/types" + "github.com/ignite/network/testutil/keeper/mocks" + launchkeeper "github.com/ignite/network/x/launch/keeper" + launchtypes "github.com/ignite/network/x/launch/types" + monitoringckeeper "github.com/ignite/network/x/monitoringc/keeper" + monitoringctypes "github.com/ignite/network/x/monitoringc/types" + monitoringpkeeper "github.com/ignite/network/x/monitoringp/keeper" + participationkeeper "github.com/ignite/network/x/participation/keeper" + participationtypes "github.com/ignite/network/x/participation/types" + profilekeeper "github.com/ignite/network/x/profile/keeper" + profiletypes "github.com/ignite/network/x/profile/types" + projectkeeper "github.com/ignite/network/x/project/keeper" + projecttypes "github.com/ignite/network/x/project/types" + rewardkeeper "github.com/ignite/network/x/reward/keeper" + rewardtypes "github.com/ignite/network/x/reward/types" ) var ( @@ -50,28 +49,28 @@ var ( ) // HookMocks holds mocks for the module hooks -type HooksMocks struct { +type HookMocks struct { LaunchHooksMock *mocks.LaunchHooks } // TestKeepers holds all keepers used during keeper tests for all modules type TestKeepers struct { T testing.TB - ProjectKeeper *projectkeeper.Keeper - LaunchKeeper *launchkeeper.Keeper - ProfileKeeper *profilekeeper.Keeper - RewardKeeper *rewardkeeper.Keeper - MonitoringConsumerKeeper *monitoringckeeper.Keeper - MonitoringProviderKeeper *monitoringpkeeper.Keeper + ProjectKeeper projectkeeper.Keeper + LaunchKeeper launchkeeper.Keeper + ProfileKeeper profilekeeper.Keeper + RewardKeeper rewardkeeper.Keeper + MonitoringConsumerKeeper monitoringckeeper.Keeper + MonitoringProviderKeeper monitoringpkeeper.Keeper AccountKeeper authkeeper.AccountKeeper BankKeeper bankkeeper.Keeper DistrKeeper distrkeeper.Keeper IBCKeeper *ibckeeper.Keeper StakingKeeper *stakingkeeper.Keeper FundraisingKeeper fundraisingkeeper.Keeper - ParticipationKeeper *participationkeeper.Keeper - ClaimKeeper *claimkeeper.Keeper - HooksMocks HooksMocks + ParticipationKeeper participationkeeper.Keeper + ClaimKeeper claimkeeper.Keeper + HooksMocks HookMocks } // TestMsgServers holds all message servers used during keeper tests for all modules @@ -94,7 +93,7 @@ type setupOptions struct { LaunchHooksMock bool } -// WithHooksMock sets a mock for the hooks in testing launch keeper +// WithLaunchHooksMock sets a mock for the hooks in testing launch keeper func WithLaunchHooksMock() func(*setupOptions) { return func(o *setupOptions) { o.LaunchHooksMock = true @@ -119,24 +118,23 @@ func NewTestSetup(t testing.TB, options ...SetupOption) (sdk.Context, TestKeeper distrKeeper := initializer.Distribution(authKeeper, bankKeeper, stakingKeeper) upgradeKeeper := initializer.Upgrade() ibcKeeper := initializer.IBC(paramKeeper, stakingKeeper, *capabilityKeeper, upgradeKeeper) - fundraisingKeeper := initializer.Fundraising(paramKeeper, authKeeper, bankKeeper, distrKeeper) + fundraisingKeeper := initializer.Fundraising(authKeeper, bankKeeper, distrKeeper) profileKeeper := initializer.Profile() - launchKeeper := initializer.Launch(profileKeeper, distrKeeper, paramKeeper) - rewardKeeper := initializer.Reward(authKeeper, bankKeeper, profileKeeper, launchKeeper, paramKeeper) - projectKeeper := initializer.Project(launchKeeper, profileKeeper, bankKeeper, distrKeeper, paramKeeper) - participationKeeper := initializer.Participation(paramKeeper, fundraisingKeeper, stakingKeeper) + launchKeeper := initializer.Launch(profileKeeper, distrKeeper) + rewardKeeper := initializer.Reward(authKeeper, bankKeeper, profileKeeper, launchKeeper) + projectKeeper := initializer.Project(launchKeeper, profileKeeper, bankKeeper, distrKeeper) + participationKeeper := initializer.Participation(fundraisingKeeper, stakingKeeper) launchKeeper.SetProjectKeeper(projectKeeper) monitoringConsumerKeeper := initializer.Monitoringc( *ibcKeeper, *capabilityKeeper, launchKeeper, rewardKeeper, - paramKeeper, []Connection{}, []Channel{}, ) launchKeeper.SetMonitoringcKeeper(monitoringConsumerKeeper) - claimKeeper := initializer.Claim(paramKeeper, authKeeper, distrKeeper, bankKeeper) + claimKeeper := initializer.Claim(authKeeper, distrKeeper, bankKeeper) require.NoError(t, initializer.StateStore.LoadLatestVersion()) // Create a context using a custom timestamp @@ -146,40 +144,43 @@ func NewTestSetup(t testing.TB, options ...SetupOption) (sdk.Context, TestKeeper }, false, log.NewNopLogger()) // Initialize community pool - distrKeeper.SetFeePool(ctx, distrtypes.InitialFeePool()) + + require.NoError(t, distrKeeper.FeePool.Set(ctx, distrtypes.InitialFeePool())) // Initialize params - distrKeeper.SetParams(ctx, distrtypes.DefaultParams()) - stakingKeeper.SetParams(ctx, stakingtypes.DefaultParams()) - launchKeeper.SetParams(ctx, launchtypes.DefaultParams()) - rewardKeeper.SetParams(ctx, rewardtypes.DefaultParams()) - projectKeeper.SetParams(ctx, projecttypes.DefaultParams()) + require.NoError(t, distrKeeper.Params.Set(ctx, distrtypes.DefaultParams())) + require.NoError(t, stakingKeeper.SetParams(ctx, stakingtypes.DefaultParams())) + require.NoError(t, launchKeeper.Params.Set(ctx, launchtypes.DefaultParams())) + require.NoError(t, rewardKeeper.Params.Set(ctx, rewardtypes.DefaultParams())) + require.NoError(t, projectKeeper.Params.Set(ctx, projecttypes.DefaultParams())) fundraisingParams := fundraisingtypes.DefaultParams() fundraisingParams.AuctionCreationFee = sdk.NewCoins() - fundraisingKeeper.SetParams(ctx, fundraisingParams) - participationKeeper.SetParams(ctx, participationtypes.DefaultParams()) - monitoringConsumerKeeper.SetParams(ctx, monitoringctypes.DefaultParams()) - claimKeeper.SetParams(ctx, claimtypes.DefaultParams()) + require.NoError(t, fundraisingKeeper.Params.Set(ctx, fundraisingParams)) + require.NoError(t, participationKeeper.Params.Set(ctx, participationtypes.DefaultParams())) + require.NoError(t, monitoringConsumerKeeper.Params.Set(ctx, monitoringctypes.DefaultParams())) + require.NoError(t, claimKeeper.Params.Set(ctx, claimtypes.DefaultParams())) setIBCDefaultParams(ctx, ibcKeeper) // Set hooks - var hooksMocks HooksMocks + var hooksMocks HookMocks if so.LaunchHooksMock { + var err error launchHooksMock := mocks.NewLaunchHooks(t) - launchKeeper = launchKeeper.SetHooks(launchHooksMock) + launchKeeper, err = launchKeeper.SetHooks(launchHooksMock) + require.NoError(t, err) hooksMocks.LaunchHooksMock = launchHooksMock } - profileSrv := profilekeeper.NewMsgServerImpl(*profileKeeper) - launchSrv := launchkeeper.NewMsgServerImpl(*launchKeeper) - projectSrv := projectkeeper.NewMsgServerImpl(*projectKeeper) - rewardSrv := rewardkeeper.NewMsgServerImpl(*rewardKeeper) - monitoringcSrv := monitoringckeeper.NewMsgServerImpl(*monitoringConsumerKeeper) - participationSrv := participationkeeper.NewMsgServerImpl(*participationKeeper) - claimSrv := claimkeeper.NewMsgServerImpl(*claimKeeper) + profileSrv := profilekeeper.NewMsgServerImpl(profileKeeper) + launchSrv := launchkeeper.NewMsgServerImpl(launchKeeper) + projectSrv := projectkeeper.NewMsgServerImpl(projectKeeper) + rewardSrv := rewardkeeper.NewMsgServerImpl(rewardKeeper) + monitoringcSrv := monitoringckeeper.NewMsgServerImpl(monitoringConsumerKeeper) + participationSrv := participationkeeper.NewMsgServerImpl(participationKeeper) + claimSrv := claimkeeper.NewMsgServerImpl(claimKeeper) // set max shares - only set during app InitGenesis - projectKeeper.SetTotalShares(ctx, spntypes.TotalShareNumber) + require.NoError(t, projectKeeper.TotalShares.Set(ctx, networktypes.TotalShareNumber)) return ctx, TestKeepers{ T: t, @@ -225,24 +226,23 @@ func NewTestSetupWithIBCMocks( distrKeeper := initializer.Distribution(authKeeper, bankKeeper, stakingKeeper) upgradeKeeper := initializer.Upgrade() ibcKeeper := initializer.IBC(paramKeeper, stakingKeeper, *capabilityKeeper, upgradeKeeper) - fundraisingKeeper := initializer.Fundraising(paramKeeper, authKeeper, bankKeeper, distrKeeper) + fundraisingKeeper := initializer.Fundraising(authKeeper, bankKeeper, distrKeeper) profileKeeper := initializer.Profile() - launchKeeper := initializer.Launch(profileKeeper, distrKeeper, paramKeeper) - rewardKeeper := initializer.Reward(authKeeper, bankKeeper, profileKeeper, launchKeeper, paramKeeper) - projectKeeper := initializer.Project(launchKeeper, profileKeeper, bankKeeper, distrKeeper, paramKeeper) - participationKeeper := initializer.Participation(paramKeeper, fundraisingKeeper, stakingKeeper) + launchKeeper := initializer.Launch(profileKeeper, distrKeeper) + rewardKeeper := initializer.Reward(authKeeper, bankKeeper, profileKeeper, launchKeeper) + projectKeeper := initializer.Project(launchKeeper, profileKeeper, bankKeeper, distrKeeper) + participationKeeper := initializer.Participation(fundraisingKeeper, stakingKeeper) launchKeeper.SetProjectKeeper(projectKeeper) monitoringConsumerKeeper := initializer.Monitoringc( *ibcKeeper, *capabilityKeeper, launchKeeper, rewardKeeper, - paramKeeper, connectionMock, channelMock, ) launchKeeper.SetMonitoringcKeeper(monitoringConsumerKeeper) - claimKeeper := initializer.Claim(paramKeeper, authKeeper, distrKeeper, bankKeeper) + claimKeeper := initializer.Claim(authKeeper, distrKeeper, bankKeeper) require.NoError(t, initializer.StateStore.LoadLatestVersion()) // Create a context using a custom timestamp @@ -252,29 +252,29 @@ func NewTestSetupWithIBCMocks( }, false, log.NewNopLogger()) // Initialize community pool - distrKeeper.SetFeePool(ctx, distrtypes.InitialFeePool()) + require.NoError(t, distrKeeper.FeePool.Set(ctx, distrtypes.InitialFeePool())) // Initialize params - distrKeeper.SetParams(ctx, distrtypes.DefaultParams()) - stakingKeeper.SetParams(ctx, stakingtypes.DefaultParams()) - launchKeeper.SetParams(ctx, launchtypes.DefaultParams()) - rewardKeeper.SetParams(ctx, rewardtypes.DefaultParams()) - projectKeeper.SetParams(ctx, projecttypes.DefaultParams()) - fundraisingKeeper.SetParams(ctx, fundraisingtypes.DefaultParams()) - participationKeeper.SetParams(ctx, participationtypes.DefaultParams()) - monitoringConsumerKeeper.SetParams(ctx, monitoringctypes.DefaultParams()) - claimKeeper.SetParams(ctx, claimtypes.DefaultParams()) + require.NoError(t, distrKeeper.Params.Set(ctx, distrtypes.DefaultParams())) + require.NoError(t, stakingKeeper.SetParams(ctx, stakingtypes.DefaultParams())) + require.NoError(t, launchKeeper.Params.Set(ctx, launchtypes.DefaultParams())) + require.NoError(t, rewardKeeper.Params.Set(ctx, rewardtypes.DefaultParams())) + require.NoError(t, projectKeeper.Params.Set(ctx, projecttypes.DefaultParams())) + require.NoError(t, fundraisingKeeper.Params.Set(ctx, fundraisingtypes.DefaultParams())) + require.NoError(t, participationKeeper.Params.Set(ctx, participationtypes.DefaultParams())) + require.NoError(t, monitoringConsumerKeeper.Params.Set(ctx, monitoringctypes.DefaultParams())) + require.NoError(t, claimKeeper.Params.Set(ctx, claimtypes.DefaultParams())) setIBCDefaultParams(ctx, ibcKeeper) - profileSrv := profilekeeper.NewMsgServerImpl(*profileKeeper) - launchSrv := launchkeeper.NewMsgServerImpl(*launchKeeper) - projectSrv := projectkeeper.NewMsgServerImpl(*projectKeeper) - rewardSrv := rewardkeeper.NewMsgServerImpl(*rewardKeeper) - monitoringcSrv := monitoringckeeper.NewMsgServerImpl(*monitoringConsumerKeeper) - participationSrv := participationkeeper.NewMsgServerImpl(*participationKeeper) + profileSrv := profilekeeper.NewMsgServerImpl(profileKeeper) + launchSrv := launchkeeper.NewMsgServerImpl(launchKeeper) + projectSrv := projectkeeper.NewMsgServerImpl(projectKeeper) + rewardSrv := rewardkeeper.NewMsgServerImpl(rewardKeeper) + monitoringcSrv := monitoringckeeper.NewMsgServerImpl(monitoringConsumerKeeper) + participationSrv := participationkeeper.NewMsgServerImpl(participationKeeper) // set max shares - only set during app InitGenesis - projectKeeper.SetTotalShares(ctx, spntypes.TotalShareNumber) + require.NoError(t, projectKeeper.TotalShares.Set(ctx, networktypes.TotalShareNumber)) return ctx, TestKeepers{ T: t, diff --git a/testutil/keeper/launch.go b/testutil/keeper/launch.go index 16410340..01475977 100644 --- a/testutil/keeper/launch.go +++ b/testutil/keeper/launch.go @@ -3,12 +3,64 @@ package keeper import ( "context" "math/rand" + "testing" + "cosmossdk.io/core/address" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" ) +func LaunchKeeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + + db := dbm.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + + k := keeper.NewKeeper( + cdc, + addressCodec, + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authority.String(), + nil, + nil, + nil, + nil, + ) + + ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { + t.Fatalf("failed to set params: %v", err) + } + + return k, ctx, addressCodec +} + // CreateChain creates a chain in the store and returns launch ID. func (tm TestMsgServers) CreateChain(ctx context.Context, r *rand.Rand, coordAddress string, genesisURL string, hasProject bool, projectID uint64) uint64 { msgCreateChain := sample.MsgCreateChain(r, coordAddress, genesisURL, hasProject, projectID) diff --git a/testutil/keeper/mock_ibc.go b/testutil/keeper/mock_ibc.go index 24a1016b..72c441c8 100644 --- a/testutil/keeper/mock_ibc.go +++ b/testutil/keeper/mock_ibc.go @@ -2,11 +2,11 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/cosmos/ibc-go/v7/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" ) // Connection is an IBC connection end associated to a connection ID diff --git a/testutil/keeper/mock_launch_hooks.go b/testutil/keeper/mock_launch_hooks.go index 2abfcb0f..adcc07cf 100644 --- a/testutil/keeper/mock_launch_hooks.go +++ b/testutil/keeper/mock_launch_hooks.go @@ -1,7 +1,7 @@ package keeper import ( - launchtypes "github.com/tendermint/spn/x/launch/types" + launchtypes "github.com/ignite/network/x/launch/types" ) //go:generate mockery --name LaunchHooks --filename mock_launch_hooks.go --case underscore --output ./mocks diff --git a/testutil/keeper/mocks/mock_launch_hooks.go b/testutil/keeper/mocks/mock_launch_hooks.go index 7b3e35c8..f9d068e1 100644 --- a/testutil/keeper/mocks/mock_launch_hooks.go +++ b/testutil/keeper/mocks/mock_launch_hooks.go @@ -1,13 +1,13 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.27.1. DO NOT EDIT. package mocks import ( - mock "github.com/stretchr/testify/mock" + context "context" - launchtypes "github.com/tendermint/spn/x/launch/types" + mock "github.com/stretchr/testify/mock" - types "github.com/cosmos/cosmos-sdk/types" + types "github.com/ignite/network/x/launch/types" ) // LaunchHooks is an autogenerated mock type for the LaunchHooks type @@ -16,8 +16,17 @@ type LaunchHooks struct { } // RequestCreated provides a mock function with given fields: ctx, creator, launchID, requestID, content -func (_m *LaunchHooks) RequestCreated(ctx types.Context, creator string, launchID uint64, requestID uint64, content launchtypes.RequestContent) { - _m.Called(ctx, creator, launchID, requestID, content) +func (_m *LaunchHooks) RequestCreated(ctx context.Context, creator string, launchID uint64, requestID uint64, content types.RequestContent) error { + ret := _m.Called(ctx, creator, launchID, requestID, content) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, uint64, uint64, types.RequestContent) error); ok { + r0 = rf(ctx, creator, launchID, requestID, content) + } else { + r0 = ret.Error(0) + } + + return r0 } type mockConstructorTestingTNewLaunchHooks interface { diff --git a/testutil/keeper/monitoring_provider.go b/testutil/keeper/monitoring_provider.go index 744809f8..880c1b92 100644 --- a/testutil/keeper/monitoring_provider.go +++ b/testutil/keeper/monitoring_provider.go @@ -3,25 +3,25 @@ package keeper import ( "testing" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/log" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" "github.com/stretchr/testify/require" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - spntypes "github.com/tendermint/spn/pkg/types" - launchkeeper "github.com/tendermint/spn/x/launch/keeper" - launchtypes "github.com/tendermint/spn/x/launch/types" - monitoringptypes "github.com/tendermint/spn/x/monitoringp/types" - participationkeeper "github.com/tendermint/spn/x/participation/keeper" - participationtypes "github.com/tendermint/spn/x/participation/types" - profilekeeper "github.com/tendermint/spn/x/profile/keeper" - projectkeeper "github.com/tendermint/spn/x/project/keeper" - projecttypes "github.com/tendermint/spn/x/project/types" - rewardkeeper "github.com/tendermint/spn/x/reward/keeper" - rewardtypes "github.com/tendermint/spn/x/reward/types" + networktypes "github.com/ignite/network/pkg/types" + launchkeeper "github.com/ignite/network/x/launch/keeper" + launchtypes "github.com/ignite/network/x/launch/types" + monitoringptypes "github.com/ignite/network/x/monitoringp/types" + participationkeeper "github.com/ignite/network/x/participation/keeper" + participationtypes "github.com/ignite/network/x/participation/types" + profilekeeper "github.com/ignite/network/x/profile/keeper" + projectkeeper "github.com/ignite/network/x/project/keeper" + projecttypes "github.com/ignite/network/x/project/types" + rewardkeeper "github.com/ignite/network/x/reward/keeper" + rewardtypes "github.com/ignite/network/x/reward/types" ) // NewTestSetupWithMonitoringp returns a test keepers struct and servers struct with the monitoring provider module @@ -49,16 +49,15 @@ func NewTestSetupWithIBCMocksMonitoringp( stakingKeeper, *ibcKeeper, *capabilityKeeper, - paramKeeper, connectionMock, channelMock, ) - fundraisingKeeper := initializer.Fundraising(paramKeeper, authKeeper, bankKeeper, distrKeeper) + fundraisingKeeper := initializer.Fundraising(authKeeper, bankKeeper, distrKeeper) profileKeeper := initializer.Profile() - launchKeeper := initializer.Launch(profileKeeper, distrKeeper, paramKeeper) - rewardKeeper := initializer.Reward(authKeeper, bankKeeper, profileKeeper, launchKeeper, paramKeeper) - projectKeeper := initializer.Project(launchKeeper, profileKeeper, bankKeeper, distrKeeper, paramKeeper) - participationKeeper := initializer.Participation(paramKeeper, fundraisingKeeper, stakingKeeper) + launchKeeper := initializer.Launch(profileKeeper, distrKeeper) + rewardKeeper := initializer.Reward(authKeeper, bankKeeper, profileKeeper, launchKeeper) + projectKeeper := initializer.Project(launchKeeper, profileKeeper, bankKeeper, distrKeeper) + participationKeeper := initializer.Participation(fundraisingKeeper, stakingKeeper) launchKeeper.SetProjectKeeper(projectKeeper) require.NoError(t, initializer.StateStore.LoadLatestVersion()) @@ -70,27 +69,27 @@ func NewTestSetupWithIBCMocksMonitoringp( }, false, log.NewNopLogger()) // Initialize community pool - distrKeeper.SetFeePool(ctx, distrtypes.InitialFeePool()) + require.NoError(t, distrKeeper.FeePool.Set(ctx, distrtypes.InitialFeePool())) // Initialize params - distrKeeper.SetParams(ctx, distrtypes.DefaultParams()) - stakingKeeper.SetParams(ctx, stakingtypes.DefaultParams()) - launchKeeper.SetParams(ctx, launchtypes.DefaultParams()) - rewardKeeper.SetParams(ctx, rewardtypes.DefaultParams()) - projectKeeper.SetParams(ctx, projecttypes.DefaultParams()) - fundraisingKeeper.SetParams(ctx, fundraisingtypes.DefaultParams()) - participationKeeper.SetParams(ctx, participationtypes.DefaultParams()) - monitoringProviderKeeper.SetParams(ctx, monitoringptypes.DefaultParams()) + require.NoError(t, distrKeeper.Params.Set(ctx, distrtypes.DefaultParams())) + require.NoError(t, stakingKeeper.SetParams(ctx, stakingtypes.DefaultParams())) + require.NoError(t, launchKeeper.Params.Set(ctx, launchtypes.DefaultParams())) + require.NoError(t, rewardKeeper.Params.Set(ctx, rewardtypes.DefaultParams())) + require.NoError(t, projectKeeper.Params.Set(ctx, projecttypes.DefaultParams())) + require.NoError(t, fundraisingKeeper.Params.Set(ctx, fundraisingtypes.DefaultParams())) + require.NoError(t, participationKeeper.Params.Set(ctx, participationtypes.DefaultParams())) + require.NoError(t, monitoringProviderKeeper.Params.Set(ctx, monitoringptypes.DefaultParams())) setIBCDefaultParams(ctx, ibcKeeper) - profileSrv := profilekeeper.NewMsgServerImpl(*profileKeeper) - launchSrv := launchkeeper.NewMsgServerImpl(*launchKeeper) - projectSrv := projectkeeper.NewMsgServerImpl(*projectKeeper) - rewardSrv := rewardkeeper.NewMsgServerImpl(*rewardKeeper) - participationSrv := participationkeeper.NewMsgServerImpl(*participationKeeper) + profileSrv := profilekeeper.NewMsgServerImpl(profileKeeper) + launchSrv := launchkeeper.NewMsgServerImpl(launchKeeper) + projectSrv := projectkeeper.NewMsgServerImpl(projectKeeper) + rewardSrv := rewardkeeper.NewMsgServerImpl(rewardKeeper) + participationSrv := participationkeeper.NewMsgServerImpl(participationKeeper) // set max shares - only set during app InitGenesis - projectKeeper.SetTotalShares(ctx, spntypes.TotalShareNumber) + require.NoError(t, projectKeeper.TotalShares.Set(ctx, networktypes.TotalShareNumber)) return ctx, TestKeepers{ T: t, diff --git a/testutil/keeper/monitoringc.go b/testutil/keeper/monitoringc.go new file mode 100644 index 00000000..22e84f0c --- /dev/null +++ b/testutil/keeper/monitoringc.go @@ -0,0 +1,76 @@ +package keeper + +import ( + "testing" + + "cosmossdk.io/core/address" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + portkeeper "github.com/cosmos/ibc-go/v8/modules/core/05-port/keeper" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + "github.com/stretchr/testify/require" + + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" +) + +func MonitoringcKeeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + memStoreKey := storetypes.NewMemoryStoreKey(types.MemStoreKey) + + db := dbm.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + stateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + appCodec := codec.NewProtoCodec(registry) + capabilityKeeper := capabilitykeeper.NewKeeper(appCodec, storeKey, memStoreKey) + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + + scopedKeeper := capabilityKeeper.ScopeToModule(ibcexported.ModuleName) + portKeeper := portkeeper.NewKeeper(scopedKeeper) + scopeModule := capabilityKeeper.ScopeToModule(types.ModuleName) + + k := keeper.NewKeeper( + appCodec, + addressCodec, + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authority.String(), + func() *ibckeeper.Keeper { + return &ibckeeper.Keeper{ + PortKeeper: &portKeeper, + } + }, + func(string) capabilitykeeper.ScopedKeeper { + return scopeModule + }, + nil, + nil, + ) + + ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { + t.Fatalf("failed to set params: %v", err) + } + + return k, ctx, addressCodec +} diff --git a/testutil/keeper/monitoringp.go b/testutil/keeper/monitoringp.go new file mode 100644 index 00000000..a328dd90 --- /dev/null +++ b/testutil/keeper/monitoringp.go @@ -0,0 +1,75 @@ +package keeper + +import ( + "testing" + + "cosmossdk.io/core/address" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + portkeeper "github.com/cosmos/ibc-go/v8/modules/core/05-port/keeper" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + "github.com/stretchr/testify/require" + + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +func MonitoringpKeeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + memStoreKey := storetypes.NewMemoryStoreKey(types.MemStoreKey) + + db := dbm.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + stateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + appCodec := codec.NewProtoCodec(registry) + capabilityKeeper := capabilitykeeper.NewKeeper(appCodec, storeKey, memStoreKey) + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + + scopedKeeper := capabilityKeeper.ScopeToModule(ibcexported.ModuleName) + portKeeper := portkeeper.NewKeeper(scopedKeeper) + scopeModule := capabilityKeeper.ScopeToModule(types.ModuleName) + + k := keeper.NewKeeper( + appCodec, + addressCodec, + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authority.String(), + func() *ibckeeper.Keeper { + return &ibckeeper.Keeper{ + PortKeeper: &portKeeper, + } + }, + func(string) capabilitykeeper.ScopedKeeper { + return scopeModule + }, + nil, + ) + + ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { + t.Fatalf("failed to set params: %v", err) + } + + return k, ctx, addressCodec +} diff --git a/testutil/keeper/participation.go b/testutil/keeper/participation.go new file mode 100644 index 00000000..90353a00 --- /dev/null +++ b/testutil/keeper/participation.go @@ -0,0 +1,57 @@ +package keeper + +import ( + "testing" + + "cosmossdk.io/core/address" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" +) + +func ParticipationKeeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + + db := dbm.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + + k := keeper.NewKeeper( + cdc, + addressCodec, + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authority.String(), + nil, + nil, + ) + + ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { + t.Fatalf("failed to set params: %v", err) + } + + return k, ctx, addressCodec +} diff --git a/testutil/keeper/profile.go b/testutil/keeper/profile.go index 7d736b4f..b6067e44 100644 --- a/testutil/keeper/profile.go +++ b/testutil/keeper/profile.go @@ -3,13 +3,61 @@ package keeper import ( "context" "math/rand" + "testing" + "cosmossdk.io/core/address" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - profiletypes "github.com/tendermint/spn/x/profile/types" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" + profiletypes "github.com/ignite/network/x/profile/types" ) +func ProfileKeeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + + db := dbm.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + + k := keeper.NewKeeper( + cdc, + addressCodec, + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authority.String(), + ) + + ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { + t.Fatalf("failed to set params: %v", err) + } + + return k, ctx, addressCodec +} + // CreateCoordinator creates a coordinator in the store and returns ID with associated address func (tm TestMsgServers) CreateCoordinator(ctx context.Context, r *rand.Rand) (id uint64, address sdk.AccAddress) { return tm.CreateCoordinatorWithAddr(ctx, r, sample.Address(r)) diff --git a/testutil/keeper/profile_test.go b/testutil/keeper/profile_test.go index a99c63c8..a754595c 100644 --- a/testutil/keeper/profile_test.go +++ b/testutil/keeper/profile_test.go @@ -3,25 +3,23 @@ package keeper_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" ) func TestTestMsgServers_CreateCoordinator(t *testing.T) { - sdkCtx, tk, tm := testkeeper.NewTestSetup(t) + ctx, tk, tm := testkeeper.NewTestSetup(t) r := sample.Rand() - ctx := sdk.WrapSDKContext(sdkCtx) id, addr := tm.CreateCoordinator(ctx, r) - coord, found := tk.ProfileKeeper.GetCoordinator(sdkCtx, id) - require.True(t, found) - require.Equal(t, id, coord.CoordinatorID) - require.Equal(t, addr.String(), coord.Address) - coordByAddr, err := tk.ProfileKeeper.GetCoordinatorByAddress(sdkCtx, addr.String()) + coordinator, err := tk.ProfileKeeper.GetCoordinator(ctx, id) require.NoError(t, err) - require.Equal(t, id, coordByAddr.CoordinatorID) - require.Equal(t, addr.String(), coordByAddr.Address) + require.Equal(t, id, coordinator.CoordinatorID) + require.Equal(t, addr.String(), coordinator.Address) + coordinatorByAddress, err := tk.ProfileKeeper.GetCoordinatorByAddress(ctx, addr) + require.NoError(t, err) + require.Equal(t, id, coordinatorByAddress.CoordinatorID) + require.Equal(t, addr.String(), coordinatorByAddress.Address) } diff --git a/testutil/keeper/project.go b/testutil/keeper/project.go index b06591df..cafae55e 100644 --- a/testutil/keeper/project.go +++ b/testutil/keeper/project.go @@ -3,14 +3,67 @@ package keeper import ( "context" "math/rand" + "testing" + "cosmossdk.io/core/address" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" ) +func ProjectKeeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + + db := dbm.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + + k := keeper.NewKeeper( + cdc, + addressCodec, + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authority.String(), + nil, + nil, + nil, + nil, + ) + + ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { + t.Fatalf("failed to set params: %v", err) + } + + return k, ctx, addressCodec +} + // CreateProject creates a coordinator in the store and returns ID with associated address -func (tm TestMsgServers) CreateProject(ctx context.Context, r *rand.Rand, coordAddress string) (id uint64) { - msgCreateProject := sample.MsgCreateProject(r, coordAddress) +func (tm TestMsgServers) CreateProject(ctx context.Context, r *rand.Rand, coordinatorAddress string) (id uint64) { + msgCreateProject := sample.MsgCreateProject(r, coordinatorAddress) resProject, err := tm.ProjectSrv.CreateProject(ctx, &msgCreateProject) require.NoError(tm.T, err) return resProject.ProjectID diff --git a/testutil/keeper/reward.go b/testutil/keeper/reward.go new file mode 100644 index 00000000..3a518c96 --- /dev/null +++ b/testutil/keeper/reward.go @@ -0,0 +1,59 @@ +package keeper + +import ( + "testing" + + "cosmossdk.io/core/address" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/metrics" + storetypes "cosmossdk.io/store/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" +) + +func RewardKeeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + + db := dbm.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + + k := keeper.NewKeeper( + cdc, + addressCodec, + runtime.NewKVStoreService(storeKey), + log.NewNopLogger(), + authority.String(), + nil, + nil, + nil, + nil, + ) + + ctx := sdk.NewContext(stateStore, cmtproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { + t.Fatalf("failed to set params: %v", err) + } + + return k, ctx, addressCodec +} diff --git a/testutil/keeper/staking.go b/testutil/keeper/staking.go index 0d061bb8..f48f3b19 100644 --- a/testutil/keeper/staking.go +++ b/testutil/keeper/staking.go @@ -3,29 +3,34 @@ package keeper import ( "math/rand" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/tendermint/spn/testutil/sample" + "github.com/ignite/network/testutil/sample" ) // DelegateN creates N delegations from the same address -func (tk TestKeepers) DelegateN(ctx sdk.Context, r *rand.Rand, address string, shareAmt int64, n int) ([]stakingtypes.Delegation, sdk.Dec) { +func (tk TestKeepers) DelegateN(ctx sdk.Context, r *rand.Rand, address string, shareAmt int64, n int) ([]stakingtypes.Delegation, sdkmath.LegacyDec, error) { items := make([]stakingtypes.Delegation, n) - totalShares := sdk.ZeroDec() + totalShares := sdkmath.LegacyZeroDec() for i := range items { - items[i] = tk.Delegate(ctx, r, address, shareAmt) + item, err := tk.Delegate(ctx, r, address, shareAmt) + if err != nil { + return nil, totalShares, err + } + + items[i] = item totalShares = totalShares.Add(items[i].Shares) } - return items, totalShares + return items, totalShares, nil } // Delegate creates a sample delegation and sets it in the keeper -func (tk TestKeepers) Delegate(ctx sdk.Context, r *rand.Rand, address string, amt int64) stakingtypes.Delegation { +func (tk TestKeepers) Delegate(ctx sdk.Context, r *rand.Rand, address string, amt int64) (stakingtypes.Delegation, error) { del := sample.Delegation(tk.T, r, address) - del.Shares = sdk.NewDec(amt) - tk.StakingKeeper.SetDelegation(ctx, del) - return del + del.Shares = sdkmath.LegacyNewDec(amt) + return del, tk.StakingKeeper.SetDelegation(ctx, del) } diff --git a/testutil/network/network.go b/testutil/network/network.go index 0cc9bbbd..72057f1e 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -1,25 +1,13 @@ -// Package network allows to programmatically spin up a local network for CLI tests package network import ( "fmt" "testing" - "time" - tmdb "github.com/cometbft/cometbft-db" - tmrand "github.com/cometbft/cometbft/libs/rand" - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/crypto/hd" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - servertypes "github.com/cosmos/cosmos-sdk/server/types" - pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" "github.com/cosmos/cosmos-sdk/testutil/network" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/app" - "github.com/tendermint/spn/cmd" + + "github.com/ignite/network/app" ) type ( @@ -29,9 +17,21 @@ type ( // New creates instance with fully configured cosmos network. // Accepts optional config, that will be used in place of the DefaultConfig() if provided. -func New(t *testing.T, cfg network.Config) *network.Network { +func New(t *testing.T, configs ...Config) *Network { + t.Helper() + if len(configs) > 1 { + panic("at most one config should be provided") + } + var cfg network.Config + if len(configs) == 0 { + cfg = DefaultConfig() + } else { + cfg = configs[0] + } net, err := network.New(t, t.TempDir(), cfg) require.NoError(t, err) + _, err = net.WaitForHeight(1) + require.NoError(t, err) t.Cleanup(net.Cleanup) return net } @@ -39,44 +39,42 @@ func New(t *testing.T, cfg network.Config) *network.Network { // DefaultConfig will initialize config for the network with custom application, // genesis and single validator. All other parameters are inherited from cosmos-sdk/testutil/network.DefaultConfig func DefaultConfig() network.Config { - var ( - cdc = cmd.MakeEncodingConfig(app.ModuleBasics) - chainID = "chain-" + tmrand.NewRand().Str(6) - ) - return network.Config{ - Codec: cdc.Marshaler, - TxConfig: cdc.TxConfig, - LegacyAmino: cdc.Amino, - InterfaceRegistry: cdc.InterfaceRegistry, - AccountRetriever: authtypes.AccountRetriever{}, - AppConstructor: func(val network.ValidatorI) servertypes.Application { - return app.New( - val.GetCtx().Logger, - tmdb.NewMemDB(), - nil, - true, - map[int64]bool{}, - val.GetCtx().Config.RootDir, - 0, - cdc, - simtestutil.EmptyAppOptions{}, - baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(val.GetAppConfig().Pruning)), - baseapp.SetMinGasPrices(val.GetAppConfig().MinGasPrices), - baseapp.SetChainID(chainID), - ) - }, - GenesisState: app.ModuleBasics.DefaultGenesis(cdc.Marshaler), - TimeoutCommit: 2 * time.Second, - ChainID: chainID, - NumValidators: 1, - BondDenom: sdk.DefaultBondDenom, - MinGasPrices: fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), - AccountTokens: sdk.TokensFromConsensusPower(1000, sdk.DefaultPowerReduction), - StakingTokens: sdk.TokensFromConsensusPower(500, sdk.DefaultPowerReduction), - BondedTokens: sdk.TokensFromConsensusPower(100, sdk.DefaultPowerReduction), - PruningStrategy: pruningtypes.PruningOptionNothing, - CleanupDir: true, - SigningAlgo: string(hd.Secp256k1Type), - KeyringOptions: []keyring.Option{}, + cfg, err := network.DefaultConfigWithAppConfig(app.AppConfig()) + if err != nil { + panic(err) + } + ports, err := freePorts(3) + if err != nil { + panic(err) + } + if cfg.APIAddress == "" { + cfg.APIAddress = fmt.Sprintf("tcp://0.0.0.0:%s", ports[0]) + } + if cfg.RPCAddress == "" { + cfg.RPCAddress = fmt.Sprintf("tcp://0.0.0.0:%s", ports[1]) + } + if cfg.GRPCAddress == "" { + cfg.GRPCAddress = fmt.Sprintf("0.0.0.0:%s", ports[2]) + } + return cfg +} + +// freePorts return the available ports based on the number of requested ports. +func freePorts(n int) ([]string, error) { + closeFns := make([]func() error, n) + ports := make([]string, n) + for i := 0; i < n; i++ { + _, port, closeFn, err := network.FreeTCPAddr() + if err != nil { + return nil, err + } + ports[i] = port + closeFns[i] = closeFn + } + for _, closeFn := range closeFns { + if err := closeFn(); err != nil { + return nil, err + } } + return ports, nil } diff --git a/testutil/networksuite/networksuite.go b/testutil/networksuite/networksuite.go index fca25725..9136b9ba 100644 --- a/testutil/networksuite/networksuite.go +++ b/testutil/networksuite/networksuite.go @@ -6,22 +6,21 @@ import ( "strconv" sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" claim "github.com/ignite/modules/x/claim/types" - "github.com/tendermint/spn/testutil/network" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/testutil/sample" - launch "github.com/tendermint/spn/x/launch/types" - monitoringc "github.com/tendermint/spn/x/monitoringc/types" - participation "github.com/tendermint/spn/x/participation/types" - profile "github.com/tendermint/spn/x/profile/types" - project "github.com/tendermint/spn/x/project/types" - reward "github.com/tendermint/spn/x/reward/types" + "github.com/ignite/network/testutil/network" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/testutil/sample" + launch "github.com/ignite/network/x/launch/types" + monitoringc "github.com/ignite/network/x/monitoringc/types" + participation "github.com/ignite/network/x/participation/types" + profile "github.com/ignite/network/x/profile/types" + project "github.com/ignite/network/x/project/types" + reward "github.com/ignite/network/x/reward/types" ) // NetworkTestSuite is a test suite for query tests that initializes a network instance @@ -92,50 +91,50 @@ func populateLaunch(r *rand.Rand, launchState launch.GenesisState) launch.Genesi // add chains for i := 0; i < 5; i++ { chain := sample.Chain(r, uint64(i), uint64(i)) - launchState.Chains = append( - launchState.Chains, + launchState.ChainList = append( + launchState.ChainList, chain, ) } // add genesis accounts for i := 0; i < 5; i++ { - launchState.GenesisAccounts = append( - launchState.GenesisAccounts, + launchState.GenesisAccountList = append( + launchState.GenesisAccountList, sample.GenesisAccount(r, 0, sample.Address(r)), ) } // add vesting accounts for i := 0; i < 5; i++ { - launchState.VestingAccounts = append( - launchState.VestingAccounts, + launchState.VestingAccountList = append( + launchState.VestingAccountList, sample.VestingAccount(r, 0, sample.Address(r)), ) } // add genesis validators for i := 0; i < 5; i++ { - launchState.GenesisValidators = append( - launchState.GenesisValidators, + launchState.GenesisValidatorList = append( + launchState.GenesisValidatorList, sample.GenesisValidator(r, uint64(0), sample.Address(r)), ) } // add param chagne - for i := 0; i < 5; i++ { - launchState.ParamChanges = append( - launchState.ParamChanges, - sample.ParamChange(r, uint64(0)), - ) - } + //for i := 0; i < 5; i++ { + // launchState.ParamChange = append( + // launchState.ParamChanges, + // sample.ParamChange(r, uint64(0)), + // ) + //} // add request for i := 0; i < 5; i++ { request := sample.Request(r, 0, sample.Address(r)) request.RequestID = uint64(i) - launchState.Requests = append( - launchState.Requests, + launchState.RequestList = append( + launchState.RequestList, request, ) } @@ -150,12 +149,12 @@ func populateProject(r *rand.Rand, projectState project.GenesisState) project.Ge ProjectID: uint64(i), } nullify.Fill(&prjt) - projectState.Projects = append(projectState.Projects, prjt) + projectState.ProjectList = append(projectState.ProjectList, prjt) } // add project chains for i := 0; i < 5; i++ { - projectState.ProjectChains = append(projectState.ProjectChains, project.ProjectChains{ + projectState.ProjectChainsList = append(projectState.ProjectChainsList, project.ProjectChains{ ProjectID: uint64(i), Chains: []uint64{uint64(i)}, }) @@ -164,8 +163,8 @@ func populateProject(r *rand.Rand, projectState project.GenesisState) project.Ge // add mainnet accounts projectID := uint64(5) for i := 0; i < 5; i++ { - projectState.MainnetAccounts = append( - projectState.MainnetAccounts, + projectState.MainnetAccountList = append( + projectState.MainnetAccountList, sample.MainnetAccount(r, projectID, sample.Address(r)), ) } @@ -174,7 +173,7 @@ func populateProject(r *rand.Rand, projectState project.GenesisState) project.Ge } func populateClaim(r *rand.Rand, claimState claim.GenesisState) claim.GenesisState { - claimState.AirdropSupply = sample.Coin(r) + claimState.AirdropSupply.Supply = sample.Coin(r) totalSupply := sdkmath.ZeroInt() for i := 0; i < 5; i++ { // fill claim records @@ -185,18 +184,18 @@ func populateClaim(r *rand.Rand, claimState claim.GenesisState) claim.GenesisSta } totalSupply = totalSupply.Add(accSupply) nullify.Fill(&claimRecord) - claimState.ClaimRecords = append(claimState.ClaimRecords, claimRecord) + claimState.ClaimRecordList = append(claimState.ClaimRecordList, claimRecord) } - claimState.AirdropSupply.Amount = totalSupply + claimState.AirdropSupply.Supply.Amount = totalSupply // add missions for i := 0; i < 5; i++ { mission := claim.Mission{ MissionID: uint64(i), - Weight: sdk.NewDec(r.Int63()), + Weight: sdkmath.LegacyNewDec(r.Int63()), } nullify.Fill(&mission) - claimState.Missions = append(claimState.Missions, mission) + claimState.MissionList = append(claimState.MissionList, mission) } return claimState @@ -209,8 +208,8 @@ func populateMonitoringc(monitoringcState monitoringc.GenesisState) monitoringc. ChannelID: strconv.Itoa(i), } nullify.Fill(&launchIDFromChannelID) - monitoringcState.LaunchIDsFromChannelID = append( - monitoringcState.LaunchIDsFromChannelID, + monitoringcState.LaunchIDFromChannelIDList = append( + monitoringcState.LaunchIDFromChannelIDList, launchIDFromChannelID, ) } @@ -221,7 +220,7 @@ func populateMonitoringc(monitoringcState monitoringc.GenesisState) monitoringc. LaunchID: uint64(i), } nullify.Fill(&monitoringHistory) - monitoringcState.MonitoringHistories = append(monitoringcState.MonitoringHistories, monitoringHistory) + monitoringcState.MonitoringHistoryList = append(monitoringcState.MonitoringHistoryList, monitoringHistory) } // add provider client ID @@ -230,7 +229,7 @@ func populateMonitoringc(monitoringcState monitoringc.GenesisState) monitoringc. LaunchID: uint64(i), } nullify.Fill(&providerClientID) - monitoringcState.ProviderClientIDs = append(monitoringcState.ProviderClientIDs, providerClientID) + monitoringcState.ProviderClientIDList = append(monitoringcState.ProviderClientIDList, providerClientID) } // add verified client IDs @@ -239,7 +238,7 @@ func populateMonitoringc(monitoringcState monitoringc.GenesisState) monitoringc. LaunchID: uint64(i), } nullify.Fill(&verifiedClientID) - monitoringcState.VerifiedClientIDs = append(monitoringcState.VerifiedClientIDs, verifiedClientID) + monitoringcState.VerifiedClientIDList = append(monitoringcState.VerifiedClientIDList, verifiedClientID) } return monitoringcState @@ -274,8 +273,8 @@ func populateParticipation(r *rand.Rand, participationState participation.Genesi func populateProfile(r *rand.Rand, profileState profile.GenesisState) profile.GenesisState { // add coordinators for i := 0; i < 5; i++ { - profileState.Coordinators = append( - profileState.Coordinators, + profileState.CoordinatorList = append( + profileState.CoordinatorList, profile.Coordinator{CoordinatorID: uint64(i)}, ) } @@ -290,7 +289,7 @@ func populateProfile(r *rand.Rand, profileState profile.GenesisState) profile.Ge // add validator for i := 0; i < 5; i++ { - profileState.Validators = append(profileState.Validators, profile.Validator{ + profileState.ValidatorList = append(profileState.ValidatorList, profile.Validator{ Address: sample.Address(r), }) } @@ -305,7 +304,7 @@ func populateReward(rewardState reward.GenesisState) reward.GenesisState { LaunchID: uint64(i), } nullify.Fill(&rewardPool) - rewardState.RewardPools = append(rewardState.RewardPools, rewardPool) + rewardState.RewardPoolList = append(rewardState.RewardPoolList, rewardPool) } return rewardState diff --git a/testutil/sample/claim.go b/testutil/sample/claim.go index b0aeb9e2..c639d4e6 100644 --- a/testutil/sample/claim.go +++ b/testutil/sample/claim.go @@ -4,7 +4,6 @@ import ( "math/rand" sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" claim "github.com/ignite/modules/x/claim/types" ) @@ -19,8 +18,8 @@ func ClaimRecord(r *rand.Rand) claim.ClaimRecord { func Mission(r *rand.Rand) claim.Mission { const max = 1_000_000 - maxInt := sdk.NewDec(max) - weight := sdk.NewDec(r.Int63n(max)).Quo(maxInt) + maxInt := sdkmath.LegacyNewDec(max) + weight := sdkmath.LegacyNewDec(r.Int63n(max)).Quo(maxInt) return claim.Mission{ MissionID: Uint64(r), diff --git a/testutil/sample/fundraising.go b/testutil/sample/fundraising.go index a7584317..d110c386 100644 --- a/testutil/sample/fundraising.go +++ b/testutil/sample/fundraising.go @@ -4,10 +4,10 @@ import ( "math/rand" "time" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" ) // MsgCreateFixedAuction create a sample MsgCreateFixedAuction message @@ -22,7 +22,7 @@ func MsgCreateFixedAuction( return &fundraisingtypes.MsgCreateFixedPriceAuction{ Auctioneer: auctioneer, - StartPrice: sdk.NewDec(sellingPrice), + StartPrice: sdkmath.LegacyNewDec(sellingPrice), SellingCoin: sellingCoin, PayingCoinDenom: stakingtypes.DefaultParams().BondDenom, VestingSchedules: []fundraisingtypes.VestingSchedule{}, diff --git a/testutil/sample/launch.go b/testutil/sample/launch.go index b0f95c50..a125eeb3 100644 --- a/testutil/sample/launch.go +++ b/testutil/sample/launch.go @@ -9,8 +9,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/pkg/chainid" - launch "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/pkg/chainid" + launch "github.com/ignite/network/x/launch/types" ) // Metadata returns sample metadata bytes @@ -370,27 +370,27 @@ func LaunchGenesisState(r *rand.Rand, addresses ...string) launch.GenesisState { addresses = append(addresses, Address(r)) } return launch.GenesisState{ - Chains: []launch.Chain{ + ChainList: []launch.Chain{ Chain(r, 0, 0), Chain(r, 1, 1), }, - ChainCounter: 2, - GenesisAccounts: []launch.GenesisAccount{ + ChainCount: 2, + GenesisAccountList: []launch.GenesisAccount{ GenesisAccount(r, 0, addresses[0]), GenesisAccount(r, 0, addresses[1]), GenesisAccount(r, 1, addresses[2]), }, - VestingAccounts: []launch.VestingAccount{ + VestingAccountList: []launch.VestingAccount{ VestingAccount(r, 0, addresses[3]), VestingAccount(r, 0, addresses[4]), VestingAccount(r, 1, addresses[5]), }, - GenesisValidators: []launch.GenesisValidator{ + GenesisValidatorList: []launch.GenesisValidator{ GenesisValidator(r, 0, addresses[6]), GenesisValidator(r, 0, addresses[7]), GenesisValidator(r, 1, addresses[8]), }, - Requests: []launch.Request{ + RequestList: []launch.Request{ Request(r, 0, addresses[9]), Request(r, 1, addresses[10]), }, diff --git a/testutil/sample/monitoring.go b/testutil/sample/monitoring.go index 66312040..fa95786c 100644 --- a/testutil/sample/monitoring.go +++ b/testutil/sample/monitoring.go @@ -3,9 +3,9 @@ package sample import ( "math/rand" - "github.com/tendermint/spn/pkg/types" - monitoringc "github.com/tendermint/spn/x/monitoringc/types" - monitoringp "github.com/tendermint/spn/x/monitoringp/types" + "github.com/ignite/network/pkg/types" + monitoringc "github.com/ignite/network/x/monitoringc/types" + monitoringp "github.com/ignite/network/x/monitoringp/types" ) const ConsensusStateNb = 2 diff --git a/testutil/sample/participation.go b/testutil/sample/participation.go index aa23ce3d..16f0c2a7 100644 --- a/testutil/sample/participation.go +++ b/testutil/sample/participation.go @@ -6,7 +6,7 @@ import ( sdkmath "cosmossdk.io/math" - participation "github.com/tendermint/spn/x/participation/types" + participation "github.com/ignite/network/x/participation/types" ) // ParticipationParams returns a sample of params for the participation module diff --git a/testutil/sample/profile.go b/testutil/sample/profile.go index 45636cbf..85b4bdae 100644 --- a/testutil/sample/profile.go +++ b/testutil/sample/profile.go @@ -3,7 +3,7 @@ package sample import ( "math/rand" - profile "github.com/tendermint/spn/x/profile/types" + profile "github.com/ignite/network/x/profile/types" ) // MsgCreateCoordinator returns a sample MsgCreateCoordinator @@ -69,7 +69,7 @@ func ProfileGenesisState(r *rand.Rand, addresses ...string) profile.GenesisState } operatorAddresses := []string{OperatorAddress(r), OperatorAddress(r)} return profile.GenesisState{ - Coordinators: []profile.Coordinator{ + CoordinatorList: []profile.Coordinator{ { CoordinatorID: 0, Address: addresses[0], @@ -123,8 +123,8 @@ func ProfileGenesisState(r *rand.Rand, addresses ...string) profile.GenesisState CoordinatorID: 4, }, }, - CoordinatorCounter: 5, - Validators: []profile.Validator{ + CoordinatorCount: 5, + ValidatorList: []profile.Validator{ { Address: addresses[5], Description: ValidatorDescription(String(r, 10)), diff --git a/testutil/sample/project.go b/testutil/sample/project.go index fb311a57..bbd9c6ac 100644 --- a/testutil/sample/project.go +++ b/testutil/sample/project.go @@ -6,8 +6,8 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - spntypes "github.com/tendermint/spn/pkg/types" - project "github.com/tendermint/spn/x/project/types" + networktypes "github.com/ignite/network/pkg/types" + project "github.com/ignite/network/x/project/types" ) // Shares returns a sample shares @@ -107,18 +107,18 @@ func ProjectGenesisState(r *rand.Rand) project.GenesisState { project1, project2 := Project(r, 0), Project(r, 1) return project.GenesisState{ - Projects: []project.Project{ + ProjectList: []project.Project{ project1, project2, }, - ProjectCounter: 2, - ProjectChains: []project.ProjectChains{ + ProjectCount: 2, + ProjectChainsList: []project.ProjectChains{ { ProjectID: 0, Chains: []uint64{0, 1}, }, }, - TotalShares: spntypes.TotalShareNumber, + TotalShares: networktypes.TotalShareNumber, Params: ProjectParams(r), } } @@ -126,17 +126,17 @@ func ProjectGenesisState(r *rand.Rand) project.GenesisState { // ProjectGenesisStateWithAccounts returns a sample genesis state for the project module that includes accounts func ProjectGenesisStateWithAccounts(r *rand.Rand) project.GenesisState { genState := ProjectGenesisState(r) - genState.MainnetAccounts = make([]project.MainnetAccount, 0) + genState.MainnetAccountList = make([]project.MainnetAccount, 0) - for i, c := range genState.Projects { + for i, c := range genState.ProjectList { for j := 0; j < 5; j++ { mainnetAccount := MainnetAccount(r, c.ProjectID, Address(r)) - genState.MainnetAccounts = append(genState.MainnetAccounts, mainnetAccount) + genState.MainnetAccountList = append(genState.MainnetAccountList, mainnetAccount) // increase project allocated shares accordingly c.AllocatedShares = project.IncreaseShares(c.AllocatedShares, mainnetAccount.Shares) } - genState.Projects[i] = c + genState.ProjectList[i] = c } return genState diff --git a/testutil/sample/reward.go b/testutil/sample/reward.go index 82427b1a..4f6bf372 100644 --- a/testutil/sample/reward.go +++ b/testutil/sample/reward.go @@ -3,7 +3,7 @@ package sample import ( "math/rand" - reward "github.com/tendermint/spn/x/reward/types" + reward "github.com/ignite/network/x/reward/types" ) // RewardPool returns a sample RewardPool diff --git a/testutil/sample/sample.go b/testutil/sample/sample.go index 7544dda3..0cfc235c 100644 --- a/testutil/sample/sample.go +++ b/testutil/sample/sample.go @@ -8,6 +8,9 @@ import ( "time" sdkmath "cosmossdk.io/math" + evidencetypes "cosmossdk.io/x/evidence/types" + "cosmossdk.io/x/feegrant" + upgradetypes "cosmossdk.io/x/upgrade/types" "github.com/cometbft/cometbft/crypto" "github.com/cometbft/cometbft/crypto/ed25519" "github.com/cosmos/cosmos-sdk/codec" @@ -22,32 +25,28 @@ import ( consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" - "github.com/cosmos/cosmos-sdk/x/feegrant" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" - icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" - ibcfeetypes "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibctypes "github.com/cosmos/ibc-go/v7/modules/core/types" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctypes "github.com/cosmos/ibc-go/v8/modules/core/types" + ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + claimtypes "github.com/ignite/modules/x/claim/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" + minttypes "github.com/ignite/modules/x/mint/types" "github.com/stretchr/testify/require" - fundraising "github.com/tendermint/fundraising/x/fundraising/types" - launch "github.com/tendermint/spn/x/launch/types" - monitoringc "github.com/tendermint/spn/x/monitoringc/types" - monitoringp "github.com/tendermint/spn/x/monitoringp/types" - participation "github.com/tendermint/spn/x/participation/types" - profile "github.com/tendermint/spn/x/profile/types" - project "github.com/tendermint/spn/x/project/types" - reward "github.com/tendermint/spn/x/reward/types" - claimtypes "github.com/ignite/modules/x/claim/types" + launch "github.com/ignite/network/x/launch/types" + monitoringc "github.com/ignite/network/x/monitoringc/types" + monitoringp "github.com/ignite/network/x/monitoringp/types" + participation "github.com/ignite/network/x/participation/types" + profile "github.com/ignite/network/x/profile/types" + project "github.com/ignite/network/x/project/types" + reward "github.com/ignite/network/x/reward/types" ) func InterfaceRegistry() codectypes.InterfaceRegistry { @@ -73,7 +72,7 @@ func InterfaceRegistry() codectypes.InterfaceRegistry { vestingtypes.RegisterInterfaces(interfaceRegistry) claimtypes.RegisterInterfaces(interfaceRegistry) feegrant.RegisterInterfaces(interfaceRegistry) - govtypes.RegisterInterfaces(interfaceRegistry) + // govtypes.RegisterInterfaces(interfaceRegistry) evidencetypes.RegisterInterfaces(interfaceRegistry) crisistypes.RegisterInterfaces(interfaceRegistry) @@ -85,7 +84,7 @@ func InterfaceRegistry() codectypes.InterfaceRegistry { reward.RegisterInterfaces(interfaceRegistry) participation.RegisterInterfaces(interfaceRegistry) minttypes.RegisterInterfaces(interfaceRegistry) - fundraising.RegisterInterfaces(interfaceRegistry) + fundraisingtypes.RegisterInterfaces(interfaceRegistry) return interfaceRegistry } @@ -180,7 +179,7 @@ func OperatorAddress(r *rand.Rand) string { func Validator(t testing.TB, r *rand.Rand) stakingtypes.Validator { seed := []byte(strconv.Itoa(r.Int())) val, err := stakingtypes.NewValidator( - ValAddress(r), + ValAddress(r).String(), cosmosed25519.GenPrivKeyFromSecret(seed).PubKey(), stakingtypes.Description{}) require.NoError(t, err) @@ -193,9 +192,9 @@ func Delegation(t testing.TB, r *rand.Rand, addr string) stakingtypes.Delegation require.NoError(t, err) return stakingtypes.NewDelegation( - delAcc, - ValAddress(r), - sdk.NewDec(int64(r.Intn(10000))), + delAcc.String(), + ValAddress(r).String(), + sdkmath.LegacyNewDec(int64(r.Intn(10000))), ) } diff --git a/testutil/simulation/util.go b/testutil/simulation/util.go deleted file mode 100644 index f5e4a719..00000000 --- a/testutil/simulation/util.go +++ /dev/null @@ -1,56 +0,0 @@ -package simulation - -import ( - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - sdksimulation "github.com/cosmos/cosmos-sdk/x/simulation" - - "github.com/tendermint/spn/testutil/sample" -) - -// GenAndDeliverTxWithRandFees generates a transaction with a random fee and delivers it. -func GenAndDeliverTxWithRandFees(txCtx sdksimulation.OperationInput, gas uint64) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - account := txCtx.AccountKeeper.GetAccount(txCtx.Context, txCtx.SimAccount.Address) - spendable := txCtx.Bankkeeper.SpendableCoins(txCtx.Context, account.GetAddress()) - - var fees sdk.Coins - var err error - - coins, hasNeg := spendable.SafeSub(txCtx.CoinsSpentInMsg...) - if hasNeg { - return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "message doesn't leave room for fees"), nil, err - } - - fees, err = sample.Fees(txCtx.R, coins) - if err != nil { - return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to generate fees"), nil, err - } - return GenAndDeliverTx(txCtx, fees, gas) -} - -// GenAndDeliverTx generates a transactions and delivers it. -func GenAndDeliverTx(txCtx sdksimulation.OperationInput, fees sdk.Coins, gas uint64) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - account := txCtx.AccountKeeper.GetAccount(txCtx.Context, txCtx.SimAccount.Address) - tx, err := simtestutil.GenSignedMockTx( - txCtx.R, - txCtx.TxGen, - []sdk.Msg{txCtx.Msg}, - fees, - gas, - txCtx.Context.ChainID(), - []uint64{account.GetAccountNumber()}, - []uint64{account.GetSequence()}, - txCtx.SimAccount.PrivKey, - ) - if err != nil { - return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to generate mock tx"), nil, err - } - - _, _, err = txCtx.App.SimDeliver(txCtx.TxGen.TxEncoder(), tx) - if err != nil { - return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to deliver tx"), nil, err - } - - return simtypes.NewOperationMsg(txCtx.Msg, true, "", txCtx.Cdc), nil, nil -} diff --git a/tools/tools.go b/tools/tools.go index 36ee7b2e..a3beb5a1 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -6,10 +6,8 @@ import ( _ "github.com/bufbuild/buf/cmd/buf" _ "github.com/cosmos/cosmos-proto/cmd/protoc-gen-go-pulsar" _ "github.com/cosmos/gogoproto/protoc-gen-gocosmos" - _ "github.com/golang/protobuf/protoc-gen-go" _ "github.com/golangci/golangci-lint/cmd/golangci-lint" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2" _ "golang.org/x/tools/cmd/goimports" _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" diff --git a/x/launch/client/cli/query.go b/x/launch/client/cli/query.go deleted file mode 100644 index 75055444..00000000 --- a/x/launch/client/cli/query.go +++ /dev/null @@ -1,45 +0,0 @@ -package cli - -import ( - "fmt" - // "strings" - - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - // "github.com/cosmos/cosmos-sdk/client/flags" - // sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" -) - -// GetQueryCmd returns the cli query commands for this module -func GetQueryCmd(queryRoute string) *cobra.Command { - // Group launch queries under a subcommand - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdShowChain(), - CmdListChain(), - CmdShowGenesisAccount(), - CmdListGenesisAccount(), - CmdShowVestingAccount(), - CmdListVestingAccount(), - CmdShowGenesisValidator(), - CmdListGenesisValidator(), - CmdListParamChange(), - CmdShowRequest(), - CmdListRequest(), - CmdQueryParams(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/launch/client/cli/query_chain.go b/x/launch/client/cli/query_chain.go deleted file mode 100644 index e814126f..00000000 --- a/x/launch/client/cli/query_chain.go +++ /dev/null @@ -1,78 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdListChain() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-chain", - Short: "List all chains", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllChainRequest{ - Pagination: pageReq, - } - - res, err := queryClient.ChainAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowChain() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-chain [launch-id]", - Short: "Shows a chain", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - id, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryGetChainRequest{ - LaunchID: id, - } - - res, err := queryClient.Chain(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/query_chain_test.go b/x/launch/client/cli/query_chain_test.go deleted file mode 100644 index d5c7687f..00000000 --- a/x/launch/client/cli/query_chain_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package cli_test - -import ( - "fmt" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/client/cli" - "github.com/tendermint/spn/x/launch/types" -) - -func (suite *QueryTestSuite) TestShowChain() { - ctx := suite.Network.Validators[0].ClientCtx - chains := suite.LaunchState.Chains - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - id string - args []string - err error - obj types.Chain - }{ - { - desc: "should show an existing chain", - id: fmt.Sprintf("%d", chains[0].LaunchID), - args: common, - obj: chains[0], - }, - { - desc: "should send error for a non existing chain", - id: "10", - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{tc.id} - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowChain(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetChainResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.Chain) - require.Equal(t, tc.obj, resp.Chain) - } - }) - } -} - -func (suite *QueryTestSuite) TestListChain() { - ctx := suite.Network.Validators[0].ClientCtx - chains := suite.LaunchState.Chains - - request := func(next []byte, offset, limit uint64, total bool) []string { - args := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should allow listing chains by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(chains); i += step { - args := request(nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListChain(), args) - require.NoError(t, err) - var resp types.QueryAllChainResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Chain), step) - require.Subset(t, chains, resp.Chain) - } - }) - suite.T().Run("should allow listing chains by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(chains); i += step { - args := request(next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListChain(), args) - require.NoError(t, err) - var resp types.QueryAllChainResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Chain), step) - require.Subset(t, chains, resp.Chain) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should allow listing all chains", func(t *testing.T) { - args := request(nil, 0, uint64(len(chains)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListChain(), args) - require.NoError(t, err) - var resp types.QueryAllChainResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(chains), int(resp.Pagination.Total)) - require.ElementsMatch(t, chains, resp.Chain) - }) -} diff --git a/x/launch/client/cli/query_genesis_account.go b/x/launch/client/cli/query_genesis_account.go deleted file mode 100644 index 9fc47158..00000000 --- a/x/launch/client/cli/query_genesis_account.go +++ /dev/null @@ -1,86 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdListGenesisAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-genesis-account [launch-id]", - Short: "List all genesis accounts for a launch", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryAllGenesisAccountRequest{ - LaunchID: launchID, - Pagination: pageReq, - } - - res, err := queryClient.GenesisAccountAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowGenesisAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-genesis-account [launch-id] [address]", - Short: "Shows the genesis account for a launch", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryGetGenesisAccountRequest{ - LaunchID: launchID, - Address: args[1], - } - - res, err := queryClient.GenesisAccount(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/query_genesis_account_test.go b/x/launch/client/cli/query_genesis_account_test.go deleted file mode 100644 index 012782b4..00000000 --- a/x/launch/client/cli/query_genesis_account_test.go +++ /dev/null @@ -1,131 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/client/cli" - "github.com/tendermint/spn/x/launch/types" -) - -func (suite *QueryTestSuite) TestShowGenesisAccount() { - ctx := suite.Network.Validators[0].ClientCtx - accs := suite.LaunchState.GenesisAccounts - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idLaunchID string - idAddress string - - args []string - err error - obj types.GenesisAccount - }{ - { - desc: "should show an existing genesis account", - idLaunchID: strconv.Itoa(int(accs[0].LaunchID)), - idAddress: accs[0].Address, - - args: common, - obj: accs[0], - }, - { - desc: "should send error for a non existing genesis account", - idLaunchID: strconv.Itoa(100000), - idAddress: strconv.Itoa(100000), - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - tc.idLaunchID, - tc.idAddress, - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowGenesisAccount(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetGenesisAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.GenesisAccount) - require.Equal(t, tc.obj, resp.GenesisAccount) - } - }) - } -} - -func (suite *QueryTestSuite) TestListGenesisAccount() { - ctx := suite.Network.Validators[0].ClientCtx - accs := suite.LaunchState.GenesisAccounts - - chainID := accs[0].LaunchID - request := func(chainID uint64, next []byte, offset, limit uint64, total bool) []string { - args := []string{ - strconv.Itoa(int(chainID)), - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should allow listing genesis accounts by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(accs); i += step { - args := request(chainID, nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListGenesisAccount(), args) - require.NoError(t, err) - var resp types.QueryAllGenesisAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.GenesisAccount), step) - require.Subset(t, accs, resp.GenesisAccount) - } - }) - suite.T().Run("should allow listing genesis accounts by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(accs); i += step { - args := request(chainID, next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListGenesisAccount(), args) - require.NoError(t, err) - var resp types.QueryAllGenesisAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.GenesisAccount), step) - require.Subset(t, accs, resp.GenesisAccount) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should allow listing all genesis accounts", func(t *testing.T) { - args := request(chainID, nil, 0, uint64(len(accs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListGenesisAccount(), args) - require.NoError(t, err) - var resp types.QueryAllGenesisAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(accs), int(resp.Pagination.Total)) - require.ElementsMatch(t, accs, resp.GenesisAccount) - }) -} diff --git a/x/launch/client/cli/query_genesis_validator.go b/x/launch/client/cli/query_genesis_validator.go deleted file mode 100644 index 7470242d..00000000 --- a/x/launch/client/cli/query_genesis_validator.go +++ /dev/null @@ -1,86 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdListGenesisValidator() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-genesis-validator [launch-id]", - Short: "List all genesis validators", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryAllGenesisValidatorRequest{ - LaunchID: launchID, - Pagination: pageReq, - } - - res, err := queryClient.GenesisValidatorAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowGenesisValidator() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-genesis-validator [launch-id] [address]", - Short: "Shows a genesis validator", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryGetGenesisValidatorRequest{ - LaunchID: launchID, - Address: args[1], - } - - res, err := queryClient.GenesisValidator(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/query_genesis_validator_test.go b/x/launch/client/cli/query_genesis_validator_test.go deleted file mode 100644 index 7de63211..00000000 --- a/x/launch/client/cli/query_genesis_validator_test.go +++ /dev/null @@ -1,131 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/client/cli" - "github.com/tendermint/spn/x/launch/types" -) - -func (suite *QueryTestSuite) TestShowGenesisValidator() { - ctx := suite.Network.Validators[0].ClientCtx - accs := suite.LaunchState.GenesisValidators - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idChainID string - idAddress string - - args []string - err error - obj types.GenesisValidator - }{ - { - desc: "should show an existing genesis validator", - idChainID: strconv.Itoa(int(accs[0].LaunchID)), - idAddress: accs[0].Address, - - args: common, - obj: accs[0], - }, - { - desc: "should send error for a non existing genesis validator", - idChainID: strconv.Itoa(100000), - idAddress: strconv.Itoa(100000), - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - tc.idChainID, - tc.idAddress, - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowGenesisValidator(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetGenesisValidatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.GenesisValidator) - require.Equal(t, tc.obj, resp.GenesisValidator) - } - }) - } -} - -func (suite *QueryTestSuite) TestListGenesisValidator() { - ctx := suite.Network.Validators[0].ClientCtx - accs := suite.LaunchState.GenesisValidators - - chainID := accs[0].LaunchID - request := func(chainID uint64, next []byte, offset, limit uint64, total bool) []string { - args := []string{ - strconv.Itoa(int(chainID)), - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should allow listing genesis validators by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(accs); i += step { - args := request(chainID, nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListGenesisValidator(), args) - require.NoError(t, err) - var resp types.QueryAllGenesisValidatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.GenesisValidator), step) - require.Subset(t, accs, resp.GenesisValidator) - } - }) - suite.T().Run("should allow listing genesis validators by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(accs); i += step { - args := request(chainID, next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListGenesisValidator(), args) - require.NoError(t, err) - var resp types.QueryAllGenesisValidatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.GenesisValidator), step) - require.Subset(t, accs, resp.GenesisValidator) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should allow listing all genesis validators", func(t *testing.T) { - args := request(chainID, nil, 0, uint64(len(accs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListGenesisValidator(), args) - require.NoError(t, err) - var resp types.QueryAllGenesisValidatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(accs), int(resp.Pagination.Total)) - require.ElementsMatch(t, accs, resp.GenesisValidator) - }) -} diff --git a/x/launch/client/cli/query_param_change.go b/x/launch/client/cli/query_param_change.go deleted file mode 100644 index a153a682..00000000 --- a/x/launch/client/cli/query_param_change.go +++ /dev/null @@ -1,51 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdListParamChange() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-param-change [launchID]", - Short: "List all param changes", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryAllParamChangeRequest{ - LaunchID: launchID, - Pagination: pageReq, - } - - res, err := queryClient.ParamChangeAll(cmd.Context(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/query_param_change_test.go b/x/launch/client/cli/query_param_change_test.go deleted file mode 100644 index e81a9605..00000000 --- a/x/launch/client/cli/query_param_change_test.go +++ /dev/null @@ -1,74 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/x/launch/client/cli" - "github.com/tendermint/spn/x/launch/types" -) - -func (suite *QueryTestSuite) TestListParamChange() { - ctx := suite.Network.Validators[0].ClientCtx - paramChanges := suite.LaunchState.ParamChanges - - chainID := paramChanges[0].LaunchID - request := func(chainID uint64, next []byte, offset, limit uint64, total bool) []string { - args := []string{ - strconv.Itoa(int(chainID)), - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should allow listing param change by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(paramChanges); i += step { - args := request(chainID, nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListParamChange(), args) - require.NoError(t, err) - var resp types.QueryAllParamChangeResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.ParamChanges), step) - require.Subset(t, paramChanges, resp.ParamChanges) - } - }) - suite.T().Run("should allow listing param change by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(paramChanges); i += step { - args := request(chainID, next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListParamChange(), args) - require.NoError(t, err) - var resp types.QueryAllParamChangeResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.ParamChanges), step) - require.Subset(t, paramChanges, resp.ParamChanges) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should allow listing all param change", func(t *testing.T) { - args := request(chainID, nil, 0, uint64(len(paramChanges)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListParamChange(), args) - require.NoError(t, err) - var resp types.QueryAllParamChangeResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(paramChanges), int(resp.Pagination.Total)) - require.ElementsMatch(t, paramChanges, resp.ParamChanges) - }) -} diff --git a/x/launch/client/cli/query_params.go b/x/launch/client/cli/query_params.go deleted file mode 100644 index 2629a2f0..00000000 --- a/x/launch/client/cli/query_params.go +++ /dev/null @@ -1,35 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdQueryParams() *cobra.Command { - cmd := &cobra.Command{ - Use: "params", - Short: "Shows the parameter of the module", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/query_request.go b/x/launch/client/cli/query_request.go deleted file mode 100644 index 8b5f1a6b..00000000 --- a/x/launch/client/cli/query_request.go +++ /dev/null @@ -1,92 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdListRequest() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-request [launch-id]", - Short: "List all requests", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryAllRequestRequest{ - LaunchID: launchID, - Pagination: pageReq, - } - - res, err := queryClient.RequestAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowRequest() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-request [launch-id] [request-id]", - Short: "shows a request", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argsRequestID, err := cast.ToUint64E(args[1]) - if err != nil { - return err - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryGetRequestRequest{ - LaunchID: launchID, - RequestID: argsRequestID, - } - - res, err := queryClient.Request(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/query_request_test.go b/x/launch/client/cli/query_request_test.go deleted file mode 100644 index 543bd4b0..00000000 --- a/x/launch/client/cli/query_request_test.go +++ /dev/null @@ -1,130 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/client/cli" - "github.com/tendermint/spn/x/launch/types" -) - -func (suite *QueryTestSuite) TestShowRequest() { - ctx := suite.Network.Validators[0].ClientCtx - requests := suite.LaunchState.Requests - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idLaunchID string - idRequestID uint64 - - args []string - err error - obj types.Request - }{ - { - desc: "should show an existing request", - idLaunchID: strconv.Itoa(int(requests[0].LaunchID)), - idRequestID: requests[0].RequestID, - - args: common, - obj: requests[0], - }, - { - desc: "should send error for a non existing request", - idLaunchID: strconv.Itoa(100000), - idRequestID: 100000, - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - tc.idLaunchID, - strconv.Itoa(int(tc.idRequestID)), - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowRequest(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetRequestResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.Request) - require.Equal(t, tc.obj, resp.Request) - } - }) - } -} - -func (suite *QueryTestSuite) TestListRequest() { - ctx := suite.Network.Validators[0].ClientCtx - requests := suite.LaunchState.Requests - - request := func(launchID string, next []byte, offset, limit uint64, total bool) []string { - args := []string{ - launchID, - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should allow listing requests by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(requests); i += step { - args := request("0", nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListRequest(), args) - require.NoError(t, err) - var resp types.QueryAllRequestResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Request), step) - require.Subset(t, requests, resp.Request) - } - }) - suite.T().Run("should allow listing requests by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(requests); i += step { - args := request("0", next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListRequest(), args) - require.NoError(t, err) - var resp types.QueryAllRequestResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Request), step) - require.Subset(t, requests, resp.Request) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should allow listing all requests", func(t *testing.T) { - args := request("0", nil, 0, uint64(len(requests)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListRequest(), args) - require.NoError(t, err) - var resp types.QueryAllRequestResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(requests), int(resp.Pagination.Total)) - require.ElementsMatch(t, requests, resp.Request) - }) -} diff --git a/x/launch/client/cli/query_test.go b/x/launch/client/cli/query_test.go deleted file mode 100644 index d7b54620..00000000 --- a/x/launch/client/cli/query_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package cli_test - -import ( - "testing" - - "github.com/stretchr/testify/suite" - - "github.com/tendermint/spn/testutil/networksuite" -) - -// QueryTestSuite is a test suite for query tests -type QueryTestSuite struct { - networksuite.NetworkTestSuite -} - -// TestQueryTestSuite runs test of the query suite -func TestQueryTestSuite(t *testing.T) { - suite.Run(t, new(QueryTestSuite)) -} diff --git a/x/launch/client/cli/query_vesting_account.go b/x/launch/client/cli/query_vesting_account.go deleted file mode 100644 index d84f9315..00000000 --- a/x/launch/client/cli/query_vesting_account.go +++ /dev/null @@ -1,86 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdListVestingAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-vesting-account [launch-id]", - Short: "list all vesting accounts for a launch", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryAllVestingAccountRequest{ - LaunchID: launchID, - Pagination: pageReq, - } - - res, err := queryClient.VestingAccountAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowVestingAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-vesting-account [launch-id] [address]", - Short: "shows the vesting account for a launch", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryGetVestingAccountRequest{ - LaunchID: launchID, - Address: args[1], - } - - res, err := queryClient.VestingAccount(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/query_vesting_account_test.go b/x/launch/client/cli/query_vesting_account_test.go deleted file mode 100644 index 7e2134df..00000000 --- a/x/launch/client/cli/query_vesting_account_test.go +++ /dev/null @@ -1,131 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/client/cli" - "github.com/tendermint/spn/x/launch/types" -) - -func (suite *QueryTestSuite) TestShowVestingAccount() { - ctx := suite.Network.Validators[0].ClientCtx - accs := suite.LaunchState.VestingAccounts - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idChainID string - idAddress string - - args []string - err error - obj types.VestingAccount - }{ - { - desc: "should show an existing vesting account", - idChainID: strconv.Itoa(int(accs[0].LaunchID)), - idAddress: accs[0].Address, - - args: common, - obj: accs[0], - }, - { - desc: "should send error for a non existing vesting account", - idChainID: strconv.Itoa(100000), - idAddress: strconv.Itoa(100000), - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - tc.idChainID, - tc.idAddress, - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowVestingAccount(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetVestingAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.VestingAccount) - require.Equal(t, tc.obj, resp.VestingAccount) - } - }) - } -} - -func (suite *QueryTestSuite) TestListVestingAccount() { - ctx := suite.Network.Validators[0].ClientCtx - accs := suite.LaunchState.VestingAccounts - - chainID := strconv.Itoa(int(accs[0].LaunchID)) - request := func(chainID string, next []byte, offset, limit uint64, total bool) []string { - args := []string{ - chainID, - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should allow listing vesting accounts by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(accs); i += step { - args := request(chainID, nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListVestingAccount(), args) - require.NoError(t, err) - var resp types.QueryAllVestingAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.VestingAccount), step) - require.Subset(t, accs, resp.VestingAccount) - } - }) - suite.T().Run("should allow listing vesting accounts by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(accs); i += step { - args := request(chainID, next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListVestingAccount(), args) - require.NoError(t, err) - var resp types.QueryAllVestingAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.VestingAccount), step) - require.Subset(t, accs, resp.VestingAccount) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should allow listing all vesting accounts", func(t *testing.T) { - args := request(chainID, nil, 0, uint64(len(accs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListVestingAccount(), args) - require.NoError(t, err) - var resp types.QueryAllVestingAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(accs), int(resp.Pagination.Total)) - require.ElementsMatch(t, accs, resp.VestingAccount) - }) -} diff --git a/x/launch/client/cli/tx.go b/x/launch/client/cli/tx.go deleted file mode 100644 index b2e3c652..00000000 --- a/x/launch/client/cli/tx.go +++ /dev/null @@ -1,39 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -// GetTxCmd returns the transaction commands for this module -func GetTxCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdCreateChain(), - CmdEditChain(), - CmdUpdateLaunchInformation(), - CmdRequestAddAccount(), - CmdRequestAddVestingAccount(), - CmdRequestRemoveAccount(), - CmdRequestAddValidator(), - CmdRequestRemoveValidator(), - CmdRequestParamChange(), - CmdSettleRequest(), - CmdTriggerLaunch(), - CmdRevertLaunch(), - ) - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/launch/client/cli/tx_create_chain.go b/x/launch/client/cli/tx_create_chain.go deleted file mode 100644 index c14ada5c..00000000 --- a/x/launch/client/cli/tx_create_chain.go +++ /dev/null @@ -1,172 +0,0 @@ -package cli - -import ( - "context" - "errors" - "fmt" - "io" - "net" - "net/http" - neturl "net/url" - "os" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -const ( - flagMetadataFile = "metadata-file" - flagGenesisURL = "genesis-url" - flagGenesisConfigFile = "genesis-config" - flagProjectID = "project-id" - flagAccountBalance = "account-balance" -) - -func CmdCreateChain() *cobra.Command { - cmd := &cobra.Command{ - Use: "create-chain [genesis-chain-id] [source-url] [source-hash]", - Short: "Create a new chain for launch", - Args: cobra.ExactArgs(3), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - argProjectID, err := cmd.Flags().GetInt64(flagProjectID) - if err != nil { - return err - } - - hasProject := false - projectID := uint64(0) - if argProjectID >= 0 { - hasProject = true - projectID = uint64(argProjectID) - } - - initialGenesis := types.NewDefaultInitialGenesis() - - // parse genesis url for initialGenesis - genesisURL, err := cmd.Flags().GetString(flagGenesisURL) - if err != nil { - return err - } - var genesisHash string - if genesisURL != "" { - genesisHash, err = getHashFromURL(cmd.Context(), genesisURL) - if err != nil { - return err - } - initialGenesis = types.NewGenesisURL(genesisURL, genesisHash) - } - - // parse genesis config file for initialGenesis - genesisConfigFile, err := cmd.Flags().GetString(flagGenesisConfigFile) - if err != nil { - return err - } - if genesisConfigFile != "" { - initialGenesis = types.NewGenesisConfig(genesisConfigFile) - } - - // ensure genesisURL and config not being used simultaneously - if genesisURL != "" && genesisConfigFile != "" { - return errors.New("cannot use genesisURL and genesis config file") - } - - var metadataBytes []byte - metadataFile, _ := cmd.Flags().GetString(flagMetadataFile) - if metadataFile != "" { - metadataBytes, err = os.ReadFile(metadataFile) - if err != nil { - return err - } - } else { - metadata, _ := cmd.Flags().GetString(flagMetadata) - metadataBytes = []byte(metadata) - } - - balanceCoins := sdk.NewCoins() - balance, err := cmd.Flags().GetString(flagAccountBalance) - if err != nil { - return err - } - if balance != "" { - // parse coins argument - balanceCoins, err = sdk.ParseCoinsNormalized(balance) - if err != nil { - return err - } - } - - msg := types.NewMsgCreateChain( - clientCtx.GetFromAddress().String(), - args[0], - args[1], - args[2], - initialGenesis, - hasProject, - projectID, - balanceCoins, - metadataBytes, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagGenesisURL, "", "URL for a custom genesis") - cmd.Flags().String(flagMetadataFile, "", "Set metadata for chain from file content") - cmd.Flags().String(flagGenesisConfigFile, "", "config file for a custom genesis") - cmd.Flags().Int64(flagProjectID, -1, "The project id") - cmd.Flags().String(flagMetadata, "", "Set metadata field for the chain") - cmd.Flags().String(flagAccountBalance, "", "Set the chain account coin balance") - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} - -// getHashFromURL fetches content from url and returns the hash based on the genesis hash method -func getHashFromURL(ctx context.Context, url string) (string, error) { - // check url port - parsedURL, err := neturl.Parse(url) - if err != nil { - return "", err - } - _, port, err := net.SplitHostPort(parsedURL.Host) - if err != nil { - return "", err - } - if port != "443" { - return "", errors.New("port must be 443") - } - - req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) - if err != nil { - return "", err - } - res, err := http.DefaultClient.Do(req) - if err != nil { - return "", err - } - defer res.Body.Close() - - if res.StatusCode != http.StatusOK { - return "", fmt.Errorf("genesis url fetch error %s", res.Status) - } - initialGenesis, err := io.ReadAll(res.Body) - if err != nil { - return "", err - } - return types.GenesisURLHash(string(initialGenesis)), nil -} diff --git a/x/launch/client/cli/tx_edit_chain.go b/x/launch/client/cli/tx_edit_chain.go deleted file mode 100644 index 8d11e538..00000000 --- a/x/launch/client/cli/tx_edit_chain.go +++ /dev/null @@ -1,63 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -const ( - flagMetadata = "metadata" -) - -func CmdEditChain() *cobra.Command { - cmd := &cobra.Command{ - Use: "edit-chain [launch-id]", - Short: "Edit chain information", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - var ( - metadata, _ = cmd.Flags().GetString(flagMetadata) - projectID, _ = cmd.Flags().GetUint64(flagProjectID) - ) - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - setProjectID := cmd.Flags().Changed(flagProjectID) - - metadataBytes := []byte(metadata) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - msg := types.NewMsgEditChain( - clientCtx.GetFromAddress().String(), - launchID, - setProjectID, - projectID, - metadataBytes, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagMetadata, "", "Set metadata field for the chain") - cmd.Flags().Uint64(flagProjectID, 0, "Set the project ID if the chain is not associated with a project") - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_request_add_account.go b/x/launch/client/cli/tx_request_add_account.go deleted file mode 100644 index 7d1ecfb3..00000000 --- a/x/launch/client/cli/tx_request_add_account.go +++ /dev/null @@ -1,63 +0,0 @@ -package cli - -import ( - "fmt" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -const ( - flagAccountAddress = "account-address" -) - -func CmdRequestAddAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "request-add-account [launch-id] [coins]", - Short: "Request to add an account", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - coins, err := sdk.ParseCoinsNormalized(args[1]) - if err != nil { - return fmt.Errorf("failed to parse coins: %w", err) - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - fromAddr := clientCtx.GetFromAddress().String() - accountAddr, _ := cmd.Flags().GetString(flagAccountAddress) - if accountAddr == "" { - accountAddr = fromAddr - } - - msg := types.NewMsgSendRequest( - fromAddr, - launchID, - types.NewGenesisAccount(launchID, accountAddr, coins), - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagAccountAddress, "", "Address of the genesis account to request") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_request_add_validator.go b/x/launch/client/cli/tx_request_add_validator.go deleted file mode 100644 index 26919255..00000000 --- a/x/launch/client/cli/tx_request_add_validator.go +++ /dev/null @@ -1,87 +0,0 @@ -package cli - -import ( - "encoding/base64" - "os" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -const ( - flagValidatorAddress = "validator-address" - flagValidatorPeerTunnel = "validator-peer-tunnel" -) - -func CmdRequestAddValidator() *cobra.Command { - cmd := &cobra.Command{ - Use: "request-add-validator [launch-id] [gentx-file] [consensus-public-key] [self-delegation] [peer-id] [peer-address]", - Short: "Send a request for a genesis validator", - Args: cobra.ExactArgs(6), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - // Read gentxFile - gentxBytes, err := os.ReadFile(args[1]) - if err != nil { - return err - } - - // Read consensus pub key - consPubKey, err := base64.StdEncoding.DecodeString(args[2]) - if err != nil { - return err - } - - // Read self-delegation - selfDelegation, err := sdk.ParseCoinNormalized(args[3]) - if err != nil { - return err - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - fromAddr := clientCtx.GetFromAddress().String() - valAddr, _ := cmd.Flags().GetString(flagValidatorAddress) - if valAddr == "" { - valAddr = fromAddr - } - - valPeerTunnel, _ := cmd.Flags().GetString(flagValidatorPeerTunnel) - var peer types.Peer - if valPeerTunnel != "" { - peer = types.NewPeerTunnel(args[4], valPeerTunnel, args[5]) - } else { - peer = types.NewPeerConn(args[4], args[5]) - } - - msg := types.NewMsgSendRequest( - fromAddr, - launchID, - types.NewGenesisValidator(launchID, valAddr, gentxBytes, consPubKey, selfDelegation, peer), - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagValidatorAddress, "", "Address of the genesis validator to request") - cmd.Flags().String(flagValidatorPeerTunnel, "", "Add the validator peer as a tunnel and create a name") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_request_add_vesting_account.go b/x/launch/client/cli/tx_request_add_vesting_account.go deleted file mode 100644 index d9886b20..00000000 --- a/x/launch/client/cli/tx_request_add_vesting_account.go +++ /dev/null @@ -1,74 +0,0 @@ -package cli - -import ( - "fmt" - "strconv" - - "github.com/aws/smithy-go/time" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdRequestAddVestingAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "request-add-vesting-account [launch-id] [total-balance] [vesting-coins] [vesting-end-time]", - Short: "Request to add a vesting account", - Args: cobra.ExactArgs(4), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - totalBalance, err := sdk.ParseCoinsNormalized(args[1]) - if err != nil { - return fmt.Errorf("failed to parse coins: %w", err) - } - - vestingCoins, err := sdk.ParseCoinsNormalized(args[2]) - if err != nil { - return fmt.Errorf("failed to parse coins: %w", err) - } - - endTime, err := time.ParseDateTime(args[3]) - if err != nil { - return err - } - - delayedVesting := *types.NewDelayedVesting(totalBalance, vestingCoins, endTime) - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - fromAddr := clientCtx.GetFromAddress().String() - accountAddr, _ := cmd.Flags().GetString(flagAccountAddress) - if accountAddr == "" { - accountAddr = fromAddr - } - - msg := types.NewMsgSendRequest( - fromAddr, - launchID, - types.NewVestingAccount(launchID, accountAddr, delayedVesting), - ) - - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagAccountAddress, "", "Address of the vesting account to request") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_request_change_param.go b/x/launch/client/cli/tx_request_change_param.go deleted file mode 100644 index fd82a544..00000000 --- a/x/launch/client/cli/tx_request_change_param.go +++ /dev/null @@ -1,50 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdRequestParamChange() *cobra.Command { - cmd := &cobra.Command{ - Use: "request-change-param [launch-ID] [module] [param] [value]", - Short: "Send a request for a module param change", - Args: cobra.ExactArgs(4), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - fromAddr := clientCtx.GetFromAddress().String() - module := args[1] - param := args[2] - value := []byte(args[3]) - - msg := types.NewMsgSendRequest( - fromAddr, - launchID, - types.NewParamChange(launchID, module, param, value), - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_request_remove_account.go b/x/launch/client/cli/tx_request_remove_account.go deleted file mode 100644 index 51f49c20..00000000 --- a/x/launch/client/cli/tx_request_remove_account.go +++ /dev/null @@ -1,52 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdRequestRemoveAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "request-remove-account [launch-id] [address]", - Short: "Request to remove an account", - Args: cobra.RangeArgs(1, 2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - creator := clientCtx.GetFromAddress().String() - address := creator - if len(args) > 1 { - address = args[1] - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - msg := types.NewMsgSendRequest( - creator, - launchID, - types.NewAccountRemoval(address), - ) - - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_request_remove_validator.go b/x/launch/client/cli/tx_request_remove_validator.go deleted file mode 100644 index 47da2205..00000000 --- a/x/launch/client/cli/tx_request_remove_validator.go +++ /dev/null @@ -1,52 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdRequestRemoveValidator() *cobra.Command { - cmd := &cobra.Command{ - Use: "request-remove-validator [launch-id] [validator-address]", - Short: "Request to remove a genesis validator", - Args: cobra.RangeArgs(1, 2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - creator := clientCtx.GetFromAddress().String() - validator := creator - if len(args) > 1 { - validator = args[1] - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - msg := types.NewMsgSendRequest( - creator, - launchID, - types.NewValidatorRemoval(validator), - ) - - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_revert_launch.go b/x/launch/client/cli/tx_revert_launch.go deleted file mode 100644 index 44c79c35..00000000 --- a/x/launch/client/cli/tx_revert_launch.go +++ /dev/null @@ -1,41 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdRevertLaunch() *cobra.Command { - cmd := &cobra.Command{ - Use: "revert-launch [launch-id]", - Short: "Revert the launch of a chain", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - msg := types.NewMsgRevertLaunch(clientCtx.GetFromAddress().String(), launchID) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_settle_request.go b/x/launch/client/cli/tx_settle_request.go deleted file mode 100644 index 6d31df35..00000000 --- a/x/launch/client/cli/tx_settle_request.go +++ /dev/null @@ -1,65 +0,0 @@ -package cli - -import ( - "fmt" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -var approveMap = map[string]bool{ - "approve": true, - "reject": false, -} - -func CmdSettleRequest() *cobra.Command { - cmd := &cobra.Command{ - Use: "settle-request [approve|reject] [launch-id] [request-id]", - Short: "Approve or reject a pending request", - Args: cobra.ExactArgs(3), - RunE: func(cmd *cobra.Command, args []string) error { - approve, ok := approveMap[args[0]] - if !ok { - return fmt.Errorf( - "invalid approve type '%s'. approvals must be %v", - args[0], approveMap, - ) - } - - requestID, err := strconv.ParseUint(args[2], 10, 64) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - launchID, err := strconv.ParseUint(args[1], 10, 64) - if err != nil { - return err - } - - msg := types.NewMsgSettleRequest( - clientCtx.GetFromAddress().String(), - launchID, - requestID, - approve, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_trigger_launch.go b/x/launch/client/cli/tx_trigger_launch.go deleted file mode 100644 index 25a29e94..00000000 --- a/x/launch/client/cli/tx_trigger_launch.go +++ /dev/null @@ -1,47 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/aws/smithy-go/time" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -func CmdTriggerLaunch() *cobra.Command { - cmd := &cobra.Command{ - Use: "trigger-launch [launch-id] [launch-time]", - Short: "Trigger the launch of a chain", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - launchtime, err := time.ParseDateTime(args[1]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - msg := types.NewMsgTriggerLaunch(clientCtx.GetFromAddress().String(), launchID, launchtime) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/client/cli/tx_update_launch_information.go b/x/launch/client/cli/tx_update_launch_information.go deleted file mode 100644 index 55b94f29..00000000 --- a/x/launch/client/cli/tx_update_launch_information.go +++ /dev/null @@ -1,86 +0,0 @@ -package cli - -import ( - "errors" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/types" -) - -const ( - flagGenesisChainID = "genesis-chain-id" - flagSourceURL = "source-url" - flagSourceHash = "source-hash" - flagDefaultGenesis = "default-genesis" -) - -func CmdUpdateLaunchInformation() *cobra.Command { - cmd := &cobra.Command{ - Use: "update-launch-information [launch-id]", - Short: "Update initial information for the launch of the chain", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - var ( - genesisChainID, _ = cmd.Flags().GetString(flagGenesisChainID) - sourceURL, _ = cmd.Flags().GetString(flagSourceURL) - sourceHash, _ = cmd.Flags().GetString(flagSourceHash) - defaultGenesis, _ = cmd.Flags().GetBool(flagDefaultGenesis) - genesisURL, _ = cmd.Flags().GetString(flagGenesisURL) - ) - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - var initialGenesis *types.InitialGenesis - if defaultGenesis && genesisURL != "" { - return errors.New("the initial genesis can't be the default genesis and a custom genesis from URL at the same time") - } - if defaultGenesis { - defaultInitialGenesis := types.NewDefaultInitialGenesis() - initialGenesis = &defaultInitialGenesis - } else if genesisURL != "" { - genesisHash, err := getHashFromURL(cmd.Context(), genesisURL) - if err != nil { - return err - } - genesisURL := types.NewGenesisURL(genesisURL, genesisHash) - initialGenesis = &genesisURL - } - - launchID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - msg := types.NewMsgUpdateLaunchInformation( - clientCtx.GetFromAddress().String(), - launchID, - genesisChainID, - sourceURL, - sourceHash, - initialGenesis, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagGenesisChainID, "", "Chain ID for the genesis of the chain") - cmd.Flags().String(flagSourceURL, "", "Set a new source URL for the chain") - cmd.Flags().String(flagSourceHash, "", "Hash from the new source URL for the chain") - cmd.Flags().Bool(flagDefaultGenesis, false, "Set the initial genesis to the default genesis of the chain") - cmd.Flags().String(flagGenesisURL, "", "Set the initial genesis from a URL containing a custom genesis") - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/launch/genesis.go b/x/launch/genesis.go deleted file mode 100644 index 05bf132f..00000000 --- a/x/launch/genesis.go +++ /dev/null @@ -1,80 +0,0 @@ -package launch - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -// InitGenesis initializes the launch module's state from a provided genesis -// state. -func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { - // this line is used by starport scaffolding # genesis/module/init - // Set all the chain - for _, elem := range genState.Chains { - k.SetChain(ctx, elem) - } - - k.SetChainCounter(ctx, genState.ChainCounter) - - // Set all the genesisAccount - for _, elem := range genState.GenesisAccounts { - k.SetGenesisAccount(ctx, elem) - } - - // Set all the vestingAccount - for _, elem := range genState.VestingAccounts { - k.SetVestingAccount(ctx, elem) - } - - // Set all the genesisValidator - for _, elem := range genState.GenesisValidators { - k.SetGenesisValidator(ctx, elem) - } - - // Set all the paramChange - for _, elem := range genState.ParamChanges { - k.SetParamChange(ctx, elem) - } - - // Set all the request - for _, elem := range genState.Requests { - k.SetRequest(ctx, elem) - } - - // Set all request counter - for _, elem := range genState.RequestCounters { - k.SetRequestCounter(ctx, elem.LaunchID, elem.Counter) - } - - k.SetParams(ctx, genState.Params) -} - -// ExportGenesis returns the launch module's exported genesis. -func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - genesis := types.DefaultGenesis() - - genesis.Chains = k.GetAllChain(ctx) - genesis.ChainCounter = k.GetChainCounter(ctx) - genesis.GenesisAccounts = k.GetAllGenesisAccount(ctx) - genesis.VestingAccounts = k.GetAllVestingAccount(ctx) - genesis.GenesisValidators = k.GetAllGenesisValidator(ctx) - genesis.ParamChanges = k.GetAllParamChange(ctx) - genesis.Requests = k.GetAllRequest(ctx) - genesis.Params = k.GetParams(ctx) - - // Get request counts - for _, elem := range genesis.Chains { - // Get request count - counter := k.GetRequestCounter(ctx, elem.LaunchID) - genesis.RequestCounters = append(genesis.RequestCounters, types.RequestCounter{ - LaunchID: elem.LaunchID, - Counter: counter, - }) - } - - // this line is used by starport scaffolding # genesis/module/export - - return genesis -} diff --git a/x/launch/genesis_test.go b/x/launch/genesis_test.go deleted file mode 100644 index 957f2198..00000000 --- a/x/launch/genesis_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package launch_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch" -) - -/* -// We use a genesis template from sample package, therefore this placeholder is not used -// this line is used by starport scaffolding # genesis/test/state -*/ - -func TestGenesis(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - r := sample.Rand() - - t.Run("should allow import and export the genesis state", func(t *testing.T) { - genesisState := sample.LaunchGenesisState(r) - launch.InitGenesis(ctx, *tk.LaunchKeeper, genesisState) - got := launch.ExportGenesis(ctx, *tk.LaunchKeeper) - - // Compare lists - require.ElementsMatch(t, genesisState.Chains, got.Chains) - require.Equal(t, genesisState.ChainCounter, got.ChainCounter) - - require.ElementsMatch(t, genesisState.GenesisAccounts, got.GenesisAccounts) - require.ElementsMatch(t, genesisState.VestingAccounts, got.VestingAccounts) - require.ElementsMatch(t, genesisState.GenesisValidators, got.GenesisValidators) - require.ElementsMatch(t, genesisState.Requests, got.Requests) - require.ElementsMatch(t, genesisState.RequestCounters, got.RequestCounters) - - require.Equal(t, genesisState.Params, got.Params) - }) - // this line is used by starport scaffolding # genesis/test/assert -} diff --git a/x/launch/keeper/chain.go b/x/launch/keeper/chain.go index 4eee6dae..b91d5db1 100644 --- a/x/launch/keeper/chain.go +++ b/x/launch/keeper/chain.go @@ -1,19 +1,22 @@ package keeper import ( - "encoding/binary" + "context" "fmt" "time" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/collections" + sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pkg/errors" - "github.com/tendermint/spn/x/launch/types" + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/launch/types" ) // CreateNewChain creates a new chain in the store from the provided information func (k Keeper) CreateNewChain( - ctx sdk.Context, + ctx context.Context, coordinatorID uint64, genesisChainID, sourceURL, @@ -25,15 +28,16 @@ func (k Keeper) CreateNewChain( accountBalance sdk.Coins, metadata []byte, ) (uint64, error) { - coord, found := k.profileKeeper.GetCoordinator(ctx, coordinatorID) - if !found { - return 0, fmt.Errorf("the coordinator %d doesn't exist", coordinatorID) + sdkCtx := sdk.UnwrapSDKContext(ctx) + coordinator, err := k.profileKeeper.GetCoordinator(ctx, coordinatorID) + if err != nil { + return 0, sdkerrors.Wrapf(err, "%d", coordinatorID) } chain := types.Chain{ CoordinatorID: coordinatorID, GenesisChainID: genesisChainID, - CreatedAt: ctx.BlockTime().Unix(), + CreatedAt: sdkCtx.BlockTime().Unix(), SourceURL: sourceURL, SourceHash: sourceHash, InitialGenesis: initialGenesis, @@ -52,9 +56,9 @@ func (k Keeper) CreateNewChain( // If the chain is associated to a project, project existence and coordinator is checked if hasProject { - project, found := k.projectKeeper.GetProject(ctx, projectID) - if !found { - return 0, fmt.Errorf("project %d doesn't exist", projectID) + project, err := k.projectKeeper.GetProject(ctx, projectID) + if err != nil { + return 0, sdkerrors.Wrapf(err, "%d", projectID) } if project.CoordinatorID != coordinatorID { return 0, fmt.Errorf( @@ -66,7 +70,7 @@ func (k Keeper) CreateNewChain( } // Append the chain to the store - launchID := k.AppendChain(ctx, chain) + launchID, err := k.AppendChain(ctx, chain) // Register the chain to the project if hasProject { @@ -75,102 +79,40 @@ func (k Keeper) CreateNewChain( } } - return launchID, ctx.EventManager().EmitTypedEvent(&types.EventChainCreated{ + return launchID, sdkCtx.EventManager().EmitTypedEvent(&types.EventChainCreated{ LaunchID: launchID, - CoordinatorAddress: coord.Address, + CoordinatorAddress: coordinator.Address, CoordinatorID: coordinatorID, }) } -// GetChainCounter get the counter for chains -func (k Keeper) GetChainCounter(ctx sdk.Context) uint64 { - store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) - byteKey := types.KeyPrefix(types.ChainCounterKey) - bz := store.Get(byteKey) - - // Counter doesn't exist: no element - if bz == nil { - return 0 - } - - // Parse bytes - return binary.BigEndian.Uint64(bz) -} - -// SetChainCounter set the counter for chains -func (k Keeper) SetChainCounter(ctx sdk.Context, counter uint64) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) - byteKey := types.KeyPrefix(types.ChainCounterKey) - bz := make([]byte, 8) - binary.BigEndian.PutUint64(bz, counter) - store.Set(byteKey, bz) -} - -// AppendChain appends a chain in the store with a new id and update the counter -func (k Keeper) AppendChain(ctx sdk.Context, chain types.Chain) uint64 { - counter := k.GetChainCounter(ctx) - - // Set the ID of the appended value - chain.LaunchID = counter - - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ChainKeyPrefix)) - appendedValue := k.cdc.MustMarshal(&chain) - store.Set(types.ChainKey(chain.LaunchID), appendedValue) - - // Update chain counter - k.SetChainCounter(ctx, counter+1) - - return counter -} - -// SetChain set a specific chain in the store from its index -func (k Keeper) SetChain(ctx sdk.Context, chain types.Chain) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ChainKeyPrefix)) - b := k.cdc.MustMarshal(&chain) - store.Set(types.ChainKey(chain.LaunchID), b) -} - -// EnableMonitoringConnection sets a chain with MonitoringConnected set to true -func (k Keeper) EnableMonitoringConnection(ctx sdk.Context, launchID uint64) error { - chain, found := k.GetChain(ctx, launchID) - if !found { - return types.ErrChainNotFound +// AppendChain appends a chain in the store with a new launch id and update the count +func (k Keeper) AppendChain(ctx context.Context, chain types.Chain) (uint64, error) { + launchID, err := k.ChainSeq.Next(ctx) + if err != nil { + return 0, ignterrors.Criticalf("failed to get next chain sequence %s", err.Error()) } - - if chain.MonitoringConnected { - return types.ErrChainMonitoringConnected + chain.LaunchID = launchID + if err := k.Chain.Set(ctx, launchID, chain); err != nil { + return 0, ignterrors.Criticalf("chain not set %s", err.Error()) } - - chain.MonitoringConnected = true - k.SetChain(ctx, chain) - return nil + return launchID, nil } -// GetChain returns a chain from its index -func (k Keeper) GetChain(ctx sdk.Context, launchID uint64) (val types.Chain, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ChainKeyPrefix)) - - b := store.Get(types.ChainKey(launchID)) - if b == nil { - return val, false +func (k Keeper) GetChain(ctx context.Context, launchID uint64) (types.Chain, error) { + chain, err := k.Chain.Get(ctx, launchID) + if errors.Is(err, collections.ErrNotFound) { + return types.Chain{}, types.ErrChainNotFound } - - k.cdc.MustUnmarshal(b, &val) - return val, true + return chain, err } -// GetAllChain returns all chain -func (k Keeper) GetAllChain(ctx sdk.Context) (list []types.Chain) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ChainKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.Chain - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return +// Chains returns all Chain. +func (k Keeper) Chains(ctx context.Context) ([]types.Chain, error) { + chains := make([]types.Chain, 0) + err := k.Chain.Walk(ctx, nil, func(_ uint64, chain types.Chain) (bool, error) { + chains = append(chains, chain) + return false, nil + }) + return chains, err } diff --git a/x/launch/keeper/chain_test.go b/x/launch/keeper/chain_test.go index a637af6d..207c7bf6 100644 --- a/x/launch/keeper/chain_test.go +++ b/x/launch/keeper/chain_test.go @@ -1,20 +1,20 @@ package keeper_test import ( + "context" "testing" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" ) func TestKeeper_CreateNewChain(t *testing.T) { - sdkCtx, tk, ts := testkeeper.NewTestSetup(t) - ctx := sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts := testkeeper.NewTestSetup(t) // Create coordinators coordID, coordAddress := ts.CreateCoordinator(ctx, r) @@ -180,7 +180,7 @@ func TestKeeper_CreateNewChain(t *testing.T) { } { t.Run(tc.name, func(t *testing.T) { id, err := tk.LaunchKeeper.CreateNewChain( - sdkCtx, + ctx, tc.coordinatorID, tc.genesisChainID, tc.sourceURL, @@ -199,8 +199,8 @@ func TestKeeper_CreateNewChain(t *testing.T) { } require.EqualValues(t, tc.wantedID, id) - chain, found := tk.LaunchKeeper.GetChain(sdkCtx, id) - require.True(t, found) + chain, err := tk.LaunchKeeper.GetChain(ctx, id) + require.NoError(t, err) require.EqualValues(t, tc.coordinatorID, chain.CoordinatorID) require.EqualValues(t, tc.genesisChainID, chain.GenesisChainID) require.EqualValues(t, tc.sourceURL, chain.SourceURL) @@ -213,27 +213,19 @@ func TestKeeper_CreateNewChain(t *testing.T) { // Check chain has been appended in the project if tc.hasProject { - projectChains, found := tk.ProjectKeeper.GetProjectChains(sdkCtx, tc.projectID) - require.True(t, found) + projectChains, err := tk.ProjectKeeper.GetProjectChains(ctx, tc.projectID) + require.NoError(t, err) require.Contains(t, projectChains.Chains, id) } }) } } -func createNChain(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.Chain { - items := make([]types.Chain, n) - for i := range items { - items[i].LaunchID = keeper.AppendChain(ctx, items[i]) - } - return items -} - -func createNChainForCoordinator(keeper *keeper.Keeper, ctx sdk.Context, coordinatorID uint64, n int) []types.Chain { +func createNChainForCoordinator(keeper keeper.Keeper, ctx context.Context, coordinatorID uint64, n int) []types.Chain { items := make([]types.Chain, n) for i := range items { items[i].CoordinatorID = coordinatorID - items[i].LaunchID = keeper.AppendChain(ctx, items[i]) + items[i].LaunchID, _ = keeper.AppendChain(ctx, items[i]) } return items } @@ -244,8 +236,8 @@ func TestGetChain(t *testing.T) { t.Run("should get a chain", func(t *testing.T) { for _, item := range items { - rst, found := tk.LaunchKeeper.GetChain(ctx, item.LaunchID) - require.True(t, found) + rst, err := tk.LaunchKeeper.GetChain(ctx, item.LaunchID) + require.NoError(t, err) require.Equal(t, item, rst) } }) @@ -256,11 +248,12 @@ func TestEnableMonitoringConnection(t *testing.T) { t.Run("should enable monitoring connection for a chain", func(t *testing.T) { validChain := types.Chain{} - validChainID := tk.LaunchKeeper.AppendChain(ctx, validChain) - err := tk.LaunchKeeper.EnableMonitoringConnection(ctx, validChainID) + validChainID, err := tk.LaunchKeeper.AppendChain(ctx, validChain) + require.NoError(t, err) + err = tk.LaunchKeeper.EnableMonitoringConnection(ctx, validChainID) + require.NoError(t, err) + rst, err := tk.LaunchKeeper.GetChain(ctx, validChainID) require.NoError(t, err) - rst, found := tk.LaunchKeeper.GetChain(ctx, validChainID) - require.True(t, found) validChain.MonitoringConnected = true require.Equal(t, validChain, rst) }) @@ -273,29 +266,11 @@ func TestEnableMonitoringConnection(t *testing.T) { t.Run("should prevent enabling monitoring connection if already enabled", func(t *testing.T) { chain := types.Chain{} - chainID := tk.LaunchKeeper.AppendChain(ctx, chain) - err := tk.LaunchKeeper.EnableMonitoringConnection(ctx, chainID) + chainID, err := tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + err = tk.LaunchKeeper.EnableMonitoringConnection(ctx, chainID) require.NoError(t, err) err = tk.LaunchKeeper.EnableMonitoringConnection(ctx, chainID) require.ErrorIs(t, err, types.ErrChainMonitoringConnected) }) } - -func TestGetAllChain(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNChain(tk.LaunchKeeper, ctx, 10) - - t.Run("should get all chains", func(t *testing.T) { - require.ElementsMatch(t, items, tk.LaunchKeeper.GetAllChain(ctx)) - }) -} - -func TestChainCounter(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNChain(tk.LaunchKeeper, ctx, 10) - - t.Run("should get chain counter", func(t *testing.T) { - counter := uint64(len(items)) - require.Equal(t, counter, tk.LaunchKeeper.GetChainCounter(ctx)) - }) -} diff --git a/x/launch/keeper/genesis_account.go b/x/launch/keeper/genesis_account.go index c7d255f3..b9ef2bc9 100644 --- a/x/launch/keeper/genesis_account.go +++ b/x/launch/keeper/genesis_account.go @@ -1,61 +1,40 @@ package keeper import ( - "github.com/cosmos/cosmos-sdk/store/prefix" + "context" + "encoding/base64" + + "cosmossdk.io/collections" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/types" ) -// SetGenesisAccount set a specific genesisAccount in the store from its index -func (k Keeper) SetGenesisAccount(ctx sdk.Context, genesisAccount types.GenesisAccount) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.GenesisAccountKeyPrefix)) - b := k.cdc.MustMarshal(&genesisAccount) - store.Set(types.AccountKeyPath( - genesisAccount.LaunchID, - genesisAccount.Address, - ), b) -} - -// GetGenesisAccount returns a genesisAccount from its index -func (k Keeper) GetGenesisAccount( - ctx sdk.Context, +// GetValidatorsAndTotalDelegation returns the genesisValidator map by +// consensus address and total of self delegation +func (k Keeper) GetValidatorsAndTotalDelegation( + ctx context.Context, launchID uint64, - address string, -) (val types.GenesisAccount, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.GenesisAccountKeyPrefix)) - - b := store.Get(types.AccountKeyPath(launchID, address)) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true +) (map[string]types.GenesisValidator, sdkmath.LegacyDec, error) { + validators := make(map[string]types.GenesisValidator) + totalDelegation := sdkmath.LegacyZeroDec() + rng := collections.NewPrefixedPairRange[uint64, sdk.AccAddress](launchID) + err := k.GenesisValidator.Walk(ctx, rng, func(key collections.Pair[uint64, sdk.AccAddress], val types.GenesisValidator) (bool, error) { + consPubKey := base64.StdEncoding.EncodeToString(val.ConsPubKey) + validators[consPubKey] = val + totalDelegation = totalDelegation.Add(sdkmath.LegacyNewDecFromInt(val.SelfDelegation.Amount)) + return false, nil + }) + return validators, totalDelegation, err } -// RemoveGenesisAccount removes a genesisAccount from the store -func (k Keeper) RemoveGenesisAccount( - ctx sdk.Context, - launchID uint64, - address string, -) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.GenesisAccountKeyPrefix)) - store.Delete(types.AccountKeyPath(launchID, address)) -} - -// GetAllGenesisAccount returns all genesisAccount -func (k Keeper) GetAllGenesisAccount(ctx sdk.Context) (list []types.GenesisAccount) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.GenesisAccountKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.GenesisAccount - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return +// AllGenesisAccount returns all GenesisAccount. +func (k Keeper) AllGenesisAccount(ctx context.Context) ([]types.GenesisAccount, error) { + genesisAccounts := make([]types.GenesisAccount, 0) + err := k.GenesisAccount.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], value types.GenesisAccount) (bool, error) { + genesisAccounts = append(genesisAccounts, value) + return false, nil + }) + return genesisAccounts, err } diff --git a/x/launch/keeper/genesis_account_test.go b/x/launch/keeper/genesis_account_test.go deleted file mode 100644 index b8a209d8..00000000 --- a/x/launch/keeper/genesis_account_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -func createNGenesisAccount(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.GenesisAccount { - items := make([]types.GenesisAccount, n) - for i := range items { - keeper.SetChain(ctx, sample.Chain(r, uint64(i), sample.Uint64(r))) - items[i] = sample.GenesisAccount(r, uint64(i), sample.Address(r)) - keeper.SetGenesisAccount(ctx, items[i]) - } - return items -} - -func TestGenesisAccountGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNGenesisAccount(tk.LaunchKeeper, ctx, 10) - - t.Run("should get a genesis account", func(t *testing.T) { - for _, item := range items { - rst, found := tk.LaunchKeeper.GetGenesisAccount(ctx, - item.LaunchID, - item.Address, - ) - require.True(t, found) - require.Equal(t, item, rst) - } - }) -} - -func TestGenesisAccountRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNGenesisAccount(tk.LaunchKeeper, ctx, 10) - - t.Run("should remove a genesis account", func(t *testing.T) { - for _, item := range items { - tk.LaunchKeeper.RemoveGenesisAccount(ctx, - item.LaunchID, - item.Address, - ) - _, found := tk.LaunchKeeper.GetGenesisAccount(ctx, - item.LaunchID, - item.Address, - ) - require.False(t, found) - } - }) -} - -func TestGenesisAccountGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNGenesisAccount(tk.LaunchKeeper, ctx, 10) - - t.Run("should get all genesis account", func(t *testing.T) { - require.ElementsMatch(t, items, tk.LaunchKeeper.GetAllGenesisAccount(ctx)) - }) -} diff --git a/x/launch/keeper/genesis_validator.go b/x/launch/keeper/genesis_validator.go index e39f72b1..437d59fb 100644 --- a/x/launch/keeper/genesis_validator.go +++ b/x/launch/keeper/genesis_validator.go @@ -1,82 +1,20 @@ package keeper import ( - "encoding/base64" + "context" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/types" ) -// SetGenesisValidator set a specific genesisValidator in the store from its index -func (k Keeper) SetGenesisValidator(ctx sdk.Context, genesisValidator types.GenesisValidator) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.GenesisValidatorKeyPrefix)) - b := k.cdc.MustMarshal(&genesisValidator) - store.Set(types.AccountKeyPath( - genesisValidator.LaunchID, - genesisValidator.Address, - ), b) -} - -// GetGenesisValidator returns a genesisValidator from its index -func (k Keeper) GetGenesisValidator( - ctx sdk.Context, - launchID uint64, - address string, -) (val types.GenesisValidator, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.GenesisValidatorKeyPrefix)) - - b := store.Get(types.AccountKeyPath(launchID, address)) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveGenesisValidator removes a genesisValidator from the store -func (k Keeper) RemoveGenesisValidator(ctx sdk.Context, launchID uint64, address string) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.GenesisValidatorKeyPrefix)) - store.Delete(types.AccountKeyPath(launchID, address)) -} - -// GetAllGenesisValidator returns all genesisValidator -func (k Keeper) GetAllGenesisValidator(ctx sdk.Context) (list []types.GenesisValidator) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.GenesisValidatorKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.GenesisValidator - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} - -// GetValidatorsAndTotalDelegation returns the genesisValidator map by -// consensus address and total of self delegation -func (k Keeper) GetValidatorsAndTotalDelegation( - ctx sdk.Context, - launchID uint64, -) (map[string]types.GenesisValidator, sdk.Dec) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.GenesisValidatorAllKey(launchID)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - validators := make(map[string]types.GenesisValidator) - totalDelegation := sdk.ZeroDec() - for ; iterator.Valid(); iterator.Next() { - var val types.GenesisValidator - k.cdc.MustUnmarshal(iterator.Value(), &val) - consPubKey := base64.StdEncoding.EncodeToString(val.ConsPubKey) - validators[consPubKey] = val - totalDelegation = totalDelegation.Add(sdk.NewDecFromInt(val.SelfDelegation.Amount)) - } - return validators, totalDelegation +// AllGenesisValidator returns all GenesisValidator. +func (k Keeper) AllGenesisValidator(ctx context.Context) ([]types.GenesisValidator, error) { + genesisValidators := make([]types.GenesisValidator, 0) + err := k.GenesisValidator.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], value types.GenesisValidator) (bool, error) { + genesisValidators = append(genesisValidators, value) + return false, nil + }) + return genesisValidators, err } diff --git a/x/launch/keeper/genesis_validator_test.go b/x/launch/keeper/genesis_validator_test.go index d828480c..e35087bf 100644 --- a/x/launch/keeper/genesis_validator_test.go +++ b/x/launch/keeper/genesis_validator_test.go @@ -1,96 +1,45 @@ package keeper_test import ( + "context" "encoding/base64" - "strconv" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + "cosmossdk.io/collections" + sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" ) -func createNGenesisValidator(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.GenesisValidator { - items := make([]types.GenesisValidator, n) - for i := range items { - items[i] = sample.GenesisValidator(r, uint64(i), strconv.Itoa(i)) - keeper.SetGenesisValidator(ctx, items[i]) - } - return items -} - -func createNGenesisValidatorByLaunchID(keeper *keeper.Keeper, ctx sdk.Context, launchID int) []types.GenesisValidator { +func createNGenesisValidatorByLaunchID(keeper keeper.Keeper, ctx context.Context, launchID int) []types.GenesisValidator { items := make([]types.GenesisValidator, launchID) - for i := range items { - items[i] = sample.GenesisValidator(r, uint64(launchID), strconv.Itoa(i)) - keeper.SetGenesisValidator(ctx, items[i]) + addr := sample.AccAddress(r) + items[i] = sample.GenesisValidator(r, uint64(launchID), addr.String()) + _ = keeper.GenesisValidator.Set(ctx, collections.Join(items[i].LaunchID, addr), items[i]) } return items } -func TestGenesisValidatorGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNGenesisValidator(tk.LaunchKeeper, ctx, 10) - - t.Run("should get a genesis validator", func(t *testing.T) { - for _, item := range items { - rst, found := tk.LaunchKeeper.GetGenesisValidator(ctx, - item.LaunchID, - item.Address, - ) - require.True(t, found) - require.Equal(t, item, rst) - } - }) -} - -func TestGenesisValidatorRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNGenesisValidator(tk.LaunchKeeper, ctx, 10) - - t.Run("should remove a genesis validator", func(t *testing.T) { - for _, item := range items { - tk.LaunchKeeper.RemoveGenesisValidator(ctx, - item.LaunchID, - item.Address, - ) - _, found := tk.LaunchKeeper.GetGenesisValidator(ctx, - item.LaunchID, - item.Address, - ) - require.False(t, found) - } - }) -} - -func TestGenesisValidatorGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNGenesisValidator(tk.LaunchKeeper, ctx, 10) - - t.Run("should get all genesis validator", func(t *testing.T) { - require.ElementsMatch(t, items, tk.LaunchKeeper.GetAllGenesisValidator(ctx)) - }) -} - func TestKeeper_GetValidatorsAndTotalDelegation(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) launchID := 10 validators := createNGenesisValidatorByLaunchID(tk.LaunchKeeper, ctx, launchID) - totalSelfDelegation := sdk.ZeroDec() + totalSelfDelegation := sdkmath.LegacyZeroDec() validatorMap := make(map[string]types.GenesisValidator) for _, validator := range validators { consPubKey := base64.StdEncoding.EncodeToString(validator.ConsPubKey) validatorMap[consPubKey] = validator - totalSelfDelegation = totalSelfDelegation.Add(sdk.NewDecFromInt(validator.SelfDelegation.Amount)) + totalSelfDelegation = totalSelfDelegation.Add(sdkmath.LegacyNewDecFromInt(validator.SelfDelegation.Amount)) } t.Run("should get a map of genesis validator and the total delegation", func(t *testing.T) { - val, got := tk.LaunchKeeper.GetValidatorsAndTotalDelegation(ctx, uint64(launchID)) + val, got, err := tk.LaunchKeeper.GetValidatorsAndTotalDelegation(ctx, uint64(launchID)) + require.NoError(t, err) require.Equal(t, totalSelfDelegation, got) require.EqualValues(t, validatorMap, val) }) diff --git a/x/launch/keeper/grpc.go b/x/launch/keeper/grpc.go deleted file mode 100644 index 4c8795a3..00000000 --- a/x/launch/keeper/grpc.go +++ /dev/null @@ -1,7 +0,0 @@ -package keeper - -import ( - "github.com/tendermint/spn/x/launch/types" -) - -var _ types.QueryServer = Keeper{} diff --git a/x/launch/keeper/grpc_chain.go b/x/launch/keeper/grpc_chain.go deleted file mode 100644 index 52a97c3b..00000000 --- a/x/launch/keeper/grpc_chain.go +++ /dev/null @@ -1,54 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/types" -) - -func (k Keeper) ChainAll(c context.Context, req *types.QueryAllChainRequest) (*types.QueryAllChainResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var chains []types.Chain - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - chainStore := prefix.NewStore(store, types.KeyPrefix(types.ChainKeyPrefix)) - - pageRes, err := query.Paginate(chainStore, req.Pagination, func(key []byte, value []byte) error { - var chain types.Chain - if err := k.cdc.Unmarshal(value, &chain); err != nil { - return err - } - - chains = append(chains, chain) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllChainResponse{Chain: chains, Pagination: pageRes}, nil -} - -func (k Keeper) Chain(c context.Context, req *types.QueryGetChainRequest) (*types.QueryGetChainResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetChain(ctx, req.LaunchID) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetChainResponse{Chain: val}, nil -} diff --git a/x/launch/keeper/grpc_chain_test.go b/x/launch/keeper/grpc_chain_test.go deleted file mode 100644 index 331c9799..00000000 --- a/x/launch/keeper/grpc_chain_test.go +++ /dev/null @@ -1,103 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -func TestChainQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNChain(tk.LaunchKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetChainRequest - response *types.QueryGetChainResponse - err error - }{ - { - desc: "should allow querying first chain", - request: &types.QueryGetChainRequest{LaunchID: msgs[0].LaunchID}, - response: &types.QueryGetChainResponse{Chain: msgs[0]}, - }, - { - desc: "should allow querying second chain", - request: &types.QueryGetChainRequest{LaunchID: msgs[1].LaunchID}, - response: &types.QueryGetChainResponse{Chain: msgs[1]}, - }, - { - desc: "should prevent querying non existing chain", - request: &types.QueryGetChainRequest{LaunchID: uint64(1000)}, - err: status.Error(codes.NotFound, "not found"), - }, - { - desc: "should prevent querying a chain with invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.LaunchKeeper.Chain(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestChainQueryPaginated(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNChain(tk.LaunchKeeper, ctx, 5) - - request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllChainRequest { - return &types.QueryAllChainRequest{ - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("should allow querying chains by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.ChainAll(wctx, request(nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Chain), step) - require.Subset(t, msgs, resp.Chain) - } - }) - t.Run("should allow querying chains by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.ChainAll(wctx, request(next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Chain), step) - require.Subset(t, msgs, resp.Chain) - next = resp.Pagination.NextKey - } - }) - t.Run("should allow querying all chains", func(t *testing.T) { - resp, err := tk.LaunchKeeper.ChainAll(wctx, request(nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.Chain) - }) - t.Run("should prevent querying chains with invalid request", func(t *testing.T) { - _, err := tk.LaunchKeeper.ChainAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} diff --git a/x/launch/keeper/grpc_genesis_account.go b/x/launch/keeper/grpc_genesis_account.go deleted file mode 100644 index a87af661..00000000 --- a/x/launch/keeper/grpc_genesis_account.go +++ /dev/null @@ -1,113 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/types" - projecttypes "github.com/tendermint/spn/x/project/types" -) - -func (k Keeper) GenesisAccountAll(c context.Context, req *types.QueryAllGenesisAccountRequest) (*types.QueryAllGenesisAccountResponse, error) { - var ( - genesisAccounts []types.GenesisAccount - pageRes *query.PageResponse - err error - ) - - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - chain, found := k.GetChain(ctx, req.LaunchID) - if !found { - return nil, status.Error(codes.NotFound, "chain not found") - } - - // if the chain is a mainnet, the account balances must be fetched from the project - if chain.IsMainnet { - res, err := k.projectKeeper.MainnetAccountBalanceAll(c, &projecttypes.QueryAllMainnetAccountBalanceRequest{ - ProjectID: chain.ProjectID, - Pagination: req.Pagination, - }) - if err != nil { - return nil, err - } - - for _, acc := range res.MainnetAccountBalance { - genesisAccounts = append(genesisAccounts, types.GenesisAccount{ - LaunchID: req.LaunchID, - Address: acc.Address, - Coins: acc.Coins, - }) - } - - } else { - store := ctx.KVStore(k.storeKey) - genesisAccountStore := prefix.NewStore(store, types.GenesisAccountAllKey(req.LaunchID)) - - pageRes, err = query.Paginate(genesisAccountStore, req.Pagination, func(key []byte, value []byte) error { - var genesisAccount types.GenesisAccount - if err := k.cdc.Unmarshal(value, &genesisAccount); err != nil { - return err - } - - genesisAccounts = append(genesisAccounts, genesisAccount) - return nil - }) - - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - } - - return &types.QueryAllGenesisAccountResponse{GenesisAccount: genesisAccounts, Pagination: pageRes}, nil -} - -func (k Keeper) GenesisAccount(c context.Context, req *types.QueryGetGenesisAccountRequest) (*types.QueryGetGenesisAccountResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - var genesisAccount types.GenesisAccount - - chain, found := k.GetChain(ctx, req.LaunchID) - if !found { - return nil, status.Error(codes.NotFound, "chain not found") - } - - // if the chain is a mainnet, the account balance must be fetched from the project - if chain.IsMainnet { - res, err := k.projectKeeper.MainnetAccountBalance(c, &projecttypes.QueryGetMainnetAccountBalanceRequest{ - ProjectID: chain.ProjectID, - Address: req.Address, - }) - if err != nil { - return nil, err - } - - genesisAccount = types.GenesisAccount{ - LaunchID: req.LaunchID, - Address: req.Address, - Coins: res.MainnetAccountBalance.Coins, - } - - } else { - genesisAccount, found = k.GetGenesisAccount( - ctx, - req.LaunchID, - req.Address, - ) - if !found { - return nil, status.Error(codes.NotFound, "account not found") - } - } - - return &types.QueryGetGenesisAccountResponse{GenesisAccount: genesisAccount}, nil -} diff --git a/x/launch/keeper/grpc_genesis_account_test.go b/x/launch/keeper/grpc_genesis_account_test.go deleted file mode 100644 index 31f0eadc..00000000 --- a/x/launch/keeper/grpc_genesis_account_test.go +++ /dev/null @@ -1,214 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" - projecttypes "github.com/tendermint/spn/x/project/types" -) - -func createNGenesisAccountForChainID(keeper *keeper.Keeper, ctx sdk.Context, n int, chainID uint64) []types.GenesisAccount { - keeper.SetChain(ctx, sample.Chain(r, chainID, sample.Uint64(r))) - - items := make([]types.GenesisAccount, n) - for i := range items { - items[i] = sample.GenesisAccount(r, chainID, sample.Address(r)) - keeper.SetGenesisAccount(ctx, items[i]) - } - return items -} - -func TestGenesisAccountQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNGenesisAccount(tk.LaunchKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetGenesisAccountRequest - response *types.QueryGetGenesisAccountResponse - err error - }{ - { - desc: "should allow querying first genesis account", - request: &types.QueryGetGenesisAccountRequest{ - LaunchID: msgs[0].LaunchID, - Address: msgs[0].Address, - }, - response: &types.QueryGetGenesisAccountResponse{GenesisAccount: msgs[0]}, - }, - { - desc: "should allow querying second genesis account", - request: &types.QueryGetGenesisAccountRequest{ - LaunchID: msgs[1].LaunchID, - Address: msgs[1].Address, - }, - response: &types.QueryGetGenesisAccountResponse{GenesisAccount: msgs[1]}, - }, - { - desc: "should prevent querying genesis account with non existing chain", - request: &types.QueryGetGenesisAccountRequest{ - LaunchID: 100000, - Address: msgs[0].Address, - }, - err: status.Error(codes.NotFound, "chain not found"), - }, - { - desc: "hould prevent querying non existing genesis account", - request: &types.QueryGetGenesisAccountRequest{ - LaunchID: msgs[1].LaunchID, - Address: "foo", - }, - err: status.Error(codes.NotFound, "account not found"), - }, - { - desc: "should prevent querying a genesis account with invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.LaunchKeeper.GenesisAccount(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestGenesisAccountQueryPaginated(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - chainID = uint64(0) - msgs = createNGenesisAccountForChainID(tk.LaunchKeeper, ctx, 5, chainID) - ) - - request := func(launchID uint64, next []byte, offset, limit uint64, total bool) *types.QueryAllGenesisAccountRequest { - return &types.QueryAllGenesisAccountRequest{ - LaunchID: launchID, - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("should allow querying genesis account by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.GenesisAccountAll(wctx, request(chainID, nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.GenesisAccount), step) - require.Subset(t, msgs, resp.GenesisAccount) - } - }) - t.Run("should allow querying genesis account by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.GenesisAccountAll(wctx, request(chainID, next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.GenesisAccount), step) - require.Subset(t, msgs, resp.GenesisAccount) - next = resp.Pagination.NextKey - } - }) - t.Run("should allow querying all genesis accounts", func(t *testing.T) { - resp, err := tk.LaunchKeeper.GenesisAccountAll(wctx, request(chainID, nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.GenesisAccount) - }) - t.Run("should prevent querying genesis accounts with non existing chain", func(t *testing.T) { - _, err := tk.LaunchKeeper.GenesisAccountAll(wctx, &types.QueryAllGenesisAccountRequest{ - LaunchID: 10000, - }) - require.ErrorIs(t, err, status.Error(codes.NotFound, "chain not found")) - }) - t.Run("should prevent querying genesis accounts with invalid request", func(t *testing.T) { - _, err := tk.LaunchKeeper.GenesisAccountAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} - -// TODO: These tests must be refactored and use mocking to abstract project logic -// https://github.com/tendermint/spn/issues/807 -func TestGenesisAccountMainnet(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - - projectID = uint64(5) - project = sample.Project(r, projectID) - launchID = uint64(10) - chain = sample.Chain(r, launchID, sample.Uint64(r)) - totalSupply = tc.Coins(t, "1000foo") - totalShares = uint64(100) - addr1 = sample.Address(r) - addr2 = sample.Address(r) - ) - - // create project and mainnet accounts and mainnet chain - project.TotalSupply = totalSupply - tk.ProjectKeeper.SetProject(ctx, project) - tk.ProjectKeeper.SetTotalShares(ctx, totalShares) - tk.ProjectKeeper.SetMainnetAccount(ctx, projecttypes.MainnetAccount{ - ProjectID: projectID, - Address: addr1, - Shares: tc.Shares(t, "60foo"), - }) - tk.ProjectKeeper.SetMainnetAccount(ctx, projecttypes.MainnetAccount{ - ProjectID: projectID, - Address: addr2, - Shares: tc.Shares(t, "40foo"), - }) - chain.IsMainnet = true - chain.ProjectID = projectID - tk.LaunchKeeper.SetChain(ctx, chain) - - t.Run("should allow querying a single genesis account for a mainnet", func(t *testing.T) { - res, err := tk.LaunchKeeper.GenesisAccount(wctx, &types.QueryGetGenesisAccountRequest{ - LaunchID: launchID, - Address: addr1, - }) - require.NoError(t, err) - require.EqualValues(t, types.GenesisAccount{ - LaunchID: launchID, - Address: addr1, - Coins: tc.Coins(t, "600foo"), - }, res.GenesisAccount) - }) - t.Run("should allow querying all genesis accounts for a mainnet", func(t *testing.T) { - res, err := tk.LaunchKeeper.GenesisAccountAll(wctx, &types.QueryAllGenesisAccountRequest{ - LaunchID: launchID, - Pagination: &query.PageRequest{ - CountTotal: true, - }, - }) - require.NoError(t, err) - require.Len(t, res.GenesisAccount, 2) - require.Contains(t, res.GenesisAccount, types.GenesisAccount{ - LaunchID: launchID, - Address: addr1, - Coins: tc.Coins(t, "600foo"), - }) - require.Contains(t, res.GenesisAccount, types.GenesisAccount{ - LaunchID: launchID, - Address: addr2, - Coins: tc.Coins(t, "400foo"), - }) - }) -} diff --git a/x/launch/keeper/grpc_genesis_validator.go b/x/launch/keeper/grpc_genesis_validator.go deleted file mode 100644 index 7636ace9..00000000 --- a/x/launch/keeper/grpc_genesis_validator.go +++ /dev/null @@ -1,58 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/types" -) - -func (k Keeper) GenesisValidatorAll(c context.Context, req *types.QueryAllGenesisValidatorRequest) (*types.QueryAllGenesisValidatorResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var genesisValidators []types.GenesisValidator - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - genesisValidatorStore := prefix.NewStore(store, types.GenesisValidatorAllKey(req.LaunchID)) - - pageRes, err := query.Paginate(genesisValidatorStore, req.Pagination, func(key []byte, value []byte) error { - var genesisValidator types.GenesisValidator - if err := k.cdc.Unmarshal(value, &genesisValidator); err != nil { - return err - } - - genesisValidators = append(genesisValidators, genesisValidator) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllGenesisValidatorResponse{GenesisValidator: genesisValidators, Pagination: pageRes}, nil -} - -func (k Keeper) GenesisValidator(c context.Context, req *types.QueryGetGenesisValidatorRequest) (*types.QueryGetGenesisValidatorResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetGenesisValidator( - ctx, - req.LaunchID, - req.Address, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetGenesisValidatorResponse{GenesisValidator: val}, nil -} diff --git a/x/launch/keeper/grpc_genesis_validator_test.go b/x/launch/keeper/grpc_genesis_validator_test.go deleted file mode 100644 index 19b893ba..00000000 --- a/x/launch/keeper/grpc_genesis_validator_test.go +++ /dev/null @@ -1,126 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -func createNGenesisValidatorForChainID(keeper *keeper.Keeper, ctx sdk.Context, n int, chainID uint64) []types.GenesisValidator { - items := make([]types.GenesisValidator, n) - for i := range items { - items[i] = sample.GenesisValidator(r, chainID, strconv.Itoa(i)) - keeper.SetGenesisValidator(ctx, items[i]) - } - return items -} - -func TestGenesisValidatorQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNGenesisValidator(tk.LaunchKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetGenesisValidatorRequest - response *types.QueryGetGenesisValidatorResponse - err error - }{ - { - desc: "should allow querying first genesis validator", - request: &types.QueryGetGenesisValidatorRequest{ - LaunchID: msgs[0].LaunchID, - Address: msgs[0].Address, - }, - response: &types.QueryGetGenesisValidatorResponse{GenesisValidator: msgs[0]}, - }, - { - desc: "should allow querying second genesis validator", - request: &types.QueryGetGenesisValidatorRequest{ - LaunchID: msgs[1].LaunchID, - Address: msgs[1].Address, - }, - response: &types.QueryGetGenesisValidatorResponse{GenesisValidator: msgs[1]}, - }, - { - desc: "should prevent querying non existing genesis validator", - request: &types.QueryGetGenesisValidatorRequest{ - LaunchID: uint64(100000), - Address: strconv.Itoa(100000), - }, - err: status.Error(codes.NotFound, "not found"), - }, - { - desc: "should prevent querying a genesis validator with invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.LaunchKeeper.GenesisValidator(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestGenesisValidatorQueryPaginated(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - launchID = uint64(0) - msgs = createNGenesisValidatorForChainID(tk.LaunchKeeper, ctx, 5, launchID) - ) - request := func(launchID uint64, next []byte, offset, limit uint64, total bool) *types.QueryAllGenesisValidatorRequest { - return &types.QueryAllGenesisValidatorRequest{ - LaunchID: launchID, - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("should allow querying genesis validators by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.GenesisValidatorAll(wctx, request(launchID, nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.GenesisValidator), step) - require.Subset(t, msgs, resp.GenesisValidator) - } - }) - t.Run("should allow querying genesis validators by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.GenesisValidatorAll(wctx, request(launchID, next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.GenesisValidator), step) - require.Subset(t, msgs, resp.GenesisValidator) - next = resp.Pagination.NextKey - } - }) - t.Run("should allow querying all genesis validators", func(t *testing.T) { - resp, err := tk.LaunchKeeper.GenesisValidatorAll(wctx, request(launchID, nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.GenesisValidator) - }) - t.Run("should prevent querying genesis validators with invalid request", func(t *testing.T) { - _, err := tk.LaunchKeeper.GenesisValidatorAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} diff --git a/x/launch/keeper/grpc_param_change.go b/x/launch/keeper/grpc_param_change.go deleted file mode 100644 index 953f2d57..00000000 --- a/x/launch/keeper/grpc_param_change.go +++ /dev/null @@ -1,43 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - "github.com/cosmos/cosmos-sdk/types/query" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/types" -) - -func (k Keeper) ParamChangeAll(goCtx context.Context, req *types.QueryAllParamChangeRequest) ( - *types.QueryAllParamChangeResponse, error, -) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var paramChanges []types.ParamChange - ctx := sdk.UnwrapSDKContext(goCtx) - - store := ctx.KVStore(k.storeKey) - paramChangeStore := prefix.NewStore(store, types.ParamChangeAllKey(req.LaunchID)) - - pageRes, err := query.Paginate(paramChangeStore, req.Pagination, func(key []byte, value []byte) error { - var paramChange types.ParamChange - if err := k.cdc.Unmarshal(value, ¶mChange); err != nil { - return err - } - - paramChanges = append(paramChanges, paramChange) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllParamChangeResponse{ParamChanges: paramChanges, Pagination: pageRes}, nil -} diff --git a/x/launch/keeper/grpc_param_change_test.go b/x/launch/keeper/grpc_param_change_test.go deleted file mode 100644 index b55569d4..00000000 --- a/x/launch/keeper/grpc_param_change_test.go +++ /dev/null @@ -1 +0,0 @@ -package keeper diff --git a/x/launch/keeper/grpc_params.go b/x/launch/keeper/grpc_params.go deleted file mode 100644 index e47e2efc..00000000 --- a/x/launch/keeper/grpc_params.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/types" -) - -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil -} diff --git a/x/launch/keeper/grpc_params_test.go b/x/launch/keeper/grpc_params_test.go deleted file mode 100644 index b0aa93d4..00000000 --- a/x/launch/keeper/grpc_params_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" -) - -func TestParamsQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - params := sample.LaunchParams(r) - tk.LaunchKeeper.SetParams(ctx, params) - - t.Run("should allow querying params", func(t *testing.T) { - response, err := tk.LaunchKeeper.Params(wctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.Equal(t, &types.QueryParamsResponse{Params: params}, response) - }) - - t.Run("should prevent querying params with invalid request", func(t *testing.T) { - _, err := tk.LaunchKeeper.Params(wctx, nil) - require.Error(t, err) - }) -} diff --git a/x/launch/keeper/grpc_request.go b/x/launch/keeper/grpc_request.go deleted file mode 100644 index 7141bdd7..00000000 --- a/x/launch/keeper/grpc_request.go +++ /dev/null @@ -1,59 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/types" -) - -func (k Keeper) RequestAll(c context.Context, req *types.QueryAllRequestRequest) (*types.QueryAllRequestResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var requests []types.Request - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - keyPrefix := append(types.KeyPrefix(types.RequestKeyPrefix), types.RequestPoolKey(req.LaunchID)...) - requestStore := prefix.NewStore(store, keyPrefix) - - pageRes, err := query.Paginate(requestStore, req.Pagination, func(key []byte, value []byte) error { - var request types.Request - if err := k.cdc.Unmarshal(value, &request); err != nil { - return err - } - - requests = append(requests, request) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllRequestResponse{Request: requests, Pagination: pageRes}, nil -} - -func (k Keeper) Request(c context.Context, req *types.QueryGetRequestRequest) (*types.QueryGetRequestResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetRequest( - ctx, - req.LaunchID, - req.RequestID, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetRequestResponse{Request: val}, nil -} diff --git a/x/launch/keeper/grpc_request_test.go b/x/launch/keeper/grpc_request_test.go deleted file mode 100644 index 1c6325f1..00000000 --- a/x/launch/keeper/grpc_request_test.go +++ /dev/null @@ -1,112 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -func TestRequestQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNRequest(tk.LaunchKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetRequestRequest - response *types.QueryGetRequestResponse - err error - }{ - { - desc: "should allow querying first request", - request: &types.QueryGetRequestRequest{ - LaunchID: msgs[0].LaunchID, - RequestID: msgs[0].RequestID, - }, - response: &types.QueryGetRequestResponse{Request: msgs[0]}, - }, - { - desc: "should allow querying second request", - request: &types.QueryGetRequestRequest{ - LaunchID: msgs[1].LaunchID, - RequestID: msgs[1].RequestID, - }, - response: &types.QueryGetRequestResponse{Request: msgs[1]}, - }, - { - desc: "should prevent querying non existing request", - request: &types.QueryGetRequestRequest{ - LaunchID: uint64(100000), - RequestID: 100000, - }, - err: status.Error(codes.NotFound, "not found"), - }, - { - desc: "should prevent querying a request with invalid query request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.LaunchKeeper.Request(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestRequestQueryPaginated(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNRequest(tk.LaunchKeeper, ctx, 5) - - request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllRequestRequest { - return &types.QueryAllRequestRequest{ - LaunchID: uint64(0), - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("should allow querying requests by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.RequestAll(wctx, request(nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Request), step) - require.Subset(t, msgs, resp.Request) - } - }) - t.Run("should allow querying requests by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.RequestAll(wctx, request(next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Request), step) - require.Subset(t, msgs, resp.Request) - next = resp.Pagination.NextKey - } - }) - t.Run("should allow querying all requests", func(t *testing.T) { - resp, err := tk.LaunchKeeper.RequestAll(wctx, request(nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.Request) - }) - t.Run("should prevent querying requests with invalid query request", func(t *testing.T) { - _, err := tk.LaunchKeeper.RequestAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} diff --git a/x/launch/keeper/grpc_vesting_account.go b/x/launch/keeper/grpc_vesting_account.go deleted file mode 100644 index 94b16ef8..00000000 --- a/x/launch/keeper/grpc_vesting_account.go +++ /dev/null @@ -1,58 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/launch/types" -) - -func (k Keeper) VestingAccountAll(c context.Context, req *types.QueryAllVestingAccountRequest) (*types.QueryAllVestingAccountResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var vestingAccounts []types.VestingAccount - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - vestingAccountStore := prefix.NewStore(store, types.VestingAccountAllKey(req.LaunchID)) - - pageRes, err := query.Paginate(vestingAccountStore, req.Pagination, func(key []byte, value []byte) error { - var vestingAccount types.VestingAccount - if err := k.cdc.Unmarshal(value, &vestingAccount); err != nil { - return err - } - - vestingAccounts = append(vestingAccounts, vestingAccount) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllVestingAccountResponse{VestingAccount: vestingAccounts, Pagination: pageRes}, nil -} - -func (k Keeper) VestingAccount(c context.Context, req *types.QueryGetVestingAccountRequest) (*types.QueryGetVestingAccountResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetVestingAccount( - ctx, - req.LaunchID, - req.Address, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetVestingAccountResponse{VestingAccount: val}, nil -} diff --git a/x/launch/keeper/grpc_vesting_account_test.go b/x/launch/keeper/grpc_vesting_account_test.go deleted file mode 100644 index 9555004e..00000000 --- a/x/launch/keeper/grpc_vesting_account_test.go +++ /dev/null @@ -1,128 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -func createNVestingAccountForLaunchID(keeper *keeper.Keeper, ctx sdk.Context, n int, launchID uint64) []types.VestingAccount { - items := make([]types.VestingAccount, n) - for i := range items { - items[i] = sample.VestingAccount(r, launchID, strconv.Itoa(i)) - keeper.SetVestingAccount(ctx, items[i]) - } - return items -} - -func TestVestingAccountQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNVestingAccount(tk.LaunchKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetVestingAccountRequest - response *types.QueryGetVestingAccountResponse - err error - }{ - { - desc: "should allow querying first vesting account", - request: &types.QueryGetVestingAccountRequest{ - LaunchID: msgs[0].LaunchID, - Address: msgs[0].Address, - }, - response: &types.QueryGetVestingAccountResponse{VestingAccount: msgs[0]}, - }, - { - desc: "should allow querying second vesting account", - request: &types.QueryGetVestingAccountRequest{ - LaunchID: msgs[1].LaunchID, - Address: msgs[1].Address, - }, - response: &types.QueryGetVestingAccountResponse{VestingAccount: msgs[1]}, - }, - { - desc: "should prevent querying non existing vesting account", - request: &types.QueryGetVestingAccountRequest{ - LaunchID: uint64(100000), - Address: strconv.Itoa(100000), - }, - err: status.Error(codes.NotFound, "not found"), - }, - { - desc: "should prevent querying a vesting account with invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.LaunchKeeper.VestingAccount(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestVestingAccountQueryPaginated(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - launchID = uint64(0) - msgs = createNVestingAccountForLaunchID(tk.LaunchKeeper, ctx, 5, launchID) - ) - - request := func(launchID uint64, next []byte, offset, limit uint64, total bool) *types.QueryAllVestingAccountRequest { - return &types.QueryAllVestingAccountRequest{ - LaunchID: launchID, - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("should allow querying vesting accounts by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.VestingAccountAll(wctx, request(launchID, nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.VestingAccount), step) - require.Subset(t, msgs, resp.VestingAccount) - } - }) - t.Run("should allow querying vesting accounts by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.LaunchKeeper.VestingAccountAll(wctx, request(launchID, next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.VestingAccount), step) - require.Subset(t, msgs, resp.VestingAccount) - next = resp.Pagination.NextKey - } - }) - t.Run("should allow querying all vesting accounts", func(t *testing.T) { - resp, err := tk.LaunchKeeper.VestingAccountAll(wctx, request(launchID, nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.VestingAccount) - }) - t.Run("should prevent querying vesting accounts with invalid request", func(t *testing.T) { - _, err := tk.LaunchKeeper.VestingAccountAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} diff --git a/x/launch/keeper/hooks.go b/x/launch/keeper/hooks.go deleted file mode 100644 index 3ac1b85f..00000000 --- a/x/launch/keeper/hooks.go +++ /dev/null @@ -1,29 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" -) - -// Implements LaunchHooks interface -var _ types.LaunchHooks = Keeper{} - -// RequestCreated calls associated hook if registered -func (k Keeper) RequestCreated( - ctx sdk.Context, - creator string, - launchID, - requestID uint64, - content types.RequestContent, -) { - if k.hooks != nil { - k.hooks.RequestCreated( - ctx, - creator, - launchID, - requestID, - content, - ) - } -} diff --git a/x/launch/keeper/invariants.go b/x/launch/keeper/invariants.go index 2c2ee985..566ff6ff 100644 --- a/x/launch/keeper/invariants.go +++ b/x/launch/keeper/invariants.go @@ -3,15 +3,17 @@ package keeper import ( "fmt" + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/types" ) const ( invalidChainRoute = "invalid-chain" duplicatedAccountRoute = "duplicated-account" unknownRequestTypeRoute = "unknown-request-type" + invalidBech32 = "invalid-bech32" ) // RegisterInvariants registers all module invariants @@ -42,7 +44,10 @@ func AllInvariants(k Keeper) sdk.Invariant { // InvalidChainInvariant invariant that checks all chain in the store are valid func InvalidChainInvariant(k Keeper) sdk.Invariant { return func(ctx sdk.Context) (string, bool) { - chains := k.GetAllChain(ctx) + chains, err := k.Chains(ctx) + if err != nil { + return "", false + } for _, chain := range chains { err := chain.Validate() if err != nil { @@ -53,13 +58,14 @@ func InvalidChainInvariant(k Keeper) sdk.Invariant { } // if chain as an associated project, check that it exists if chain.HasProject { - _, found := k.projectKeeper.GetProject(ctx, chain.ProjectID) - if !found { + _, err := k.projectKeeper.GetProject(ctx, chain.ProjectID) + if err != nil { return sdk.FormatInvariant( types.ModuleName, invalidChainRoute, - fmt.Sprintf("chain %d has an invalid associated project %d", + fmt.Sprintf("chain %d has an invalid associated project %d: %s", chain.LaunchID, chain.ProjectID, + err.Error(), ), ), true } @@ -73,16 +79,24 @@ func InvalidChainInvariant(k Keeper) sdk.Invariant { // exists into the `VestingAccount` store func DuplicatedAccountInvariant(k Keeper) sdk.Invariant { return func(ctx sdk.Context) (string, bool) { - all := k.GetAllGenesisAccount(ctx) + all, err := k.AllGenesisAccount(ctx) + if err != nil { + return "", false + } for _, account := range all { - _, found := k.GetVestingAccount(ctx, account.LaunchID, account.Address) - if found { + address, err := k.addressCodec.StringToBytes(account.Address) + if err != nil { + return sdk.FormatInvariant(types.ModuleName, invalidBech32, err.Error()), true + } + _, err = k.VestingAccount.Get(ctx, collections.Join(account.LaunchID, sdk.AccAddress(address))) + if err != nil { return sdk.FormatInvariant( types.ModuleName, duplicatedAccountRoute, fmt.Sprintf( - "account %s for chain %d found in vesting and genesis accounts", + "account %s for chain %d found in vesting and genesis accounts: %s", account.Address, account.LaunchID, + err.Error(), ), ), true } @@ -95,7 +109,10 @@ func DuplicatedAccountInvariant(k Keeper) sdk.Invariant { // type is valid func UnknownRequestTypeInvariant(k Keeper) sdk.Invariant { return func(ctx sdk.Context) (string, bool) { - all := k.GetAllRequest(ctx) + all, err := k.Requests(ctx) + if err != nil { + return "", false + } for _, request := range all { switch request.Content.Content.(type) { case *types.RequestContent_GenesisAccount, diff --git a/x/launch/keeper/invariants_test.go b/x/launch/keeper/invariants_test.go index f4b4e6f6..4d224e80 100644 --- a/x/launch/keeper/invariants_test.go +++ b/x/launch/keeper/invariants_test.go @@ -3,28 +3,40 @@ package keeper_test import ( "testing" - testkeeper "github.com/tendermint/spn/testutil/keeper" - + "cosmossdk.io/collections" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" ) func TestDuplicatedAccountInvariant(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) t.Run("should not break with valid state", func(t *testing.T) { - tk.LaunchKeeper.SetVestingAccount(ctx, sample.VestingAccount(r, 0, sample.Address(r))) - tk.LaunchKeeper.SetGenesisAccount(ctx, sample.GenesisAccount(r, 0, sample.Address(r))) - msg, broken := keeper.DuplicatedAccountInvariant(*tk.LaunchKeeper)(ctx) + vestingAddress := sample.AccAddress(r) + vestingAccount := sample.VestingAccount(r, 0, vestingAddress.String()) + err := tk.LaunchKeeper.VestingAccount.Set(ctx, collections.Join(vestingAccount.LaunchID, vestingAddress), vestingAccount) + require.NoError(t, err) + + genesisAddress := sample.AccAddress(r) + genesisAccount := sample.GenesisAccount(r, 0, genesisAddress.String()) + err = tk.LaunchKeeper.GenesisAccount.Set(ctx, collections.Join(genesisAccount.LaunchID, vestingAddress), genesisAccount) + require.NoError(t, err) + + msg, broken := keeper.DuplicatedAccountInvariant(tk.LaunchKeeper)(ctx) require.False(t, broken, msg) }) t.Run("should break with duplicated account", func(t *testing.T) { - addr := sample.Address(r) - tk.LaunchKeeper.SetVestingAccount(ctx, sample.VestingAccount(r, 0, addr)) - tk.LaunchKeeper.SetGenesisAccount(ctx, sample.GenesisAccount(r, 0, addr)) - msg, broken := keeper.DuplicatedAccountInvariant(*tk.LaunchKeeper)(ctx) + launchID := uint64(0) + addr := sample.AccAddress(r) + err := tk.LaunchKeeper.VestingAccount.Set(ctx, collections.Join(launchID, addr), sample.VestingAccount(r, launchID, addr.String())) + require.NoError(t, err) + err = tk.LaunchKeeper.GenesisAccount.Set(ctx, collections.Join(launchID, addr), sample.GenesisAccount(r, launchID, addr.String())) + require.NoError(t, err) + + msg, broken := keeper.DuplicatedAccountInvariant(tk.LaunchKeeper)(ctx) require.True(t, broken, msg) }) } @@ -34,10 +46,13 @@ func TestInvalidChainInvariant(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) chain := sample.Chain(r, 0, 0) project := sample.Project(r, 0) - chain.ProjectID = tk.ProjectKeeper.AppendProject(ctx, project) + projectID, err := tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) + chain.ProjectID = projectID chain.HasProject = true - _ = tk.LaunchKeeper.AppendChain(ctx, chain) - msg, broken := keeper.InvalidChainInvariant(*tk.LaunchKeeper)(ctx) + _, err = tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + msg, broken := keeper.InvalidChainInvariant(tk.LaunchKeeper)(ctx) require.False(t, broken, msg) }) @@ -45,8 +60,9 @@ func TestInvalidChainInvariant(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) chain := sample.Chain(r, 0, 0) chain.GenesisChainID = "_invalid_" - _ = tk.LaunchKeeper.AppendChain(ctx, chain) - msg, broken := keeper.InvalidChainInvariant(*tk.LaunchKeeper)(ctx) + _, err := tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + msg, broken := keeper.InvalidChainInvariant(tk.LaunchKeeper)(ctx) require.True(t, broken, msg) }) @@ -55,8 +71,9 @@ func TestInvalidChainInvariant(t *testing.T) { chain := sample.Chain(r, 0, 0) chain.HasProject = true chain.ProjectID = 1000 - _ = tk.LaunchKeeper.AppendChain(ctx, chain) - msg, broken := keeper.InvalidChainInvariant(*tk.LaunchKeeper)(ctx) + _, err := tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + msg, broken := keeper.InvalidChainInvariant(tk.LaunchKeeper)(ctx) require.True(t, broken, msg) }) } @@ -64,16 +81,18 @@ func TestInvalidChainInvariant(t *testing.T) { func TestUnknownRequestTypeInvariant(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) t.Run("should not break with valid state", func(t *testing.T) { - tk.LaunchKeeper.AppendRequest(ctx, sample.Request(r, 0, sample.Address(r))) - msg, broken := keeper.UnknownRequestTypeInvariant(*tk.LaunchKeeper)(ctx) + _, err := tk.LaunchKeeper.AppendRequest(ctx, sample.Request(r, 0, sample.Address(r))) + require.NoError(t, err) + msg, broken := keeper.UnknownRequestTypeInvariant(tk.LaunchKeeper)(ctx) require.False(t, broken, msg) }) t.Run("should break with an invalid request", func(t *testing.T) { - tk.LaunchKeeper.AppendRequest(ctx, sample.RequestWithContent(r, 0, + _, err := tk.LaunchKeeper.AppendRequest(ctx, sample.RequestWithContent(r, 0, sample.GenesisAccountContent(r, 0, "invalid"), )) - msg, broken := keeper.UnknownRequestTypeInvariant(*tk.LaunchKeeper)(ctx) + require.NoError(t, err) + msg, broken := keeper.UnknownRequestTypeInvariant(tk.LaunchKeeper)(ctx) require.True(t, broken, msg) }) } diff --git a/x/launch/keeper/keeper.go b/x/launch/keeper/keeper.go index 3914e5fe..9c1a3bcb 100644 --- a/x/launch/keeper/keeper.go +++ b/x/launch/keeper/keeper.go @@ -1,68 +1,112 @@ package keeper import ( + "context" + "errors" "fmt" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + "cosmossdk.io/core/store" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/types" ) type ( Keeper struct { - cdc codec.BinaryCodec - storeKey storetypes.StoreKey - memKey storetypes.StoreKey - paramstore paramtypes.Subspace - distrKeeper types.DistributionKeeper - profileKeeper types.ProfileKeeper - projectKeeper types.ProjectKeeper - monitoringcKeeper types.MonitoringConsumerKeeper - hooks types.LaunchHooks + cdc codec.BinaryCodec + addressCodec address.Codec + storeService store.KVStoreService + logger log.Logger + + // the address capable of executing a MsgUpdateParams message. + // Typically, this should be the x/gov module account. + authority string + + Schema collections.Schema + Params collections.Item[types.Params] + ChainSeq collections.Sequence + Chain collections.Map[uint64, types.Chain] + GenesisAccount collections.Map[collections.Pair[uint64, sdk.AccAddress], types.GenesisAccount] + GenesisValidator collections.Map[collections.Pair[uint64, sdk.AccAddress], types.GenesisValidator] + VestingAccount collections.Map[collections.Pair[uint64, sdk.AccAddress], types.VestingAccount] + RequestSeq collections.Map[uint64, uint64] + Request collections.Map[collections.Pair[uint64, uint64], types.Request] + ParamChange collections.Map[collections.Pair[uint64, string], types.ParamChange] + // this line is used by starport scaffolding # collection/type + + distributionKeeper types.DistributionKeeper + profileKeeper types.ProfileKeeper + projectKeeper types.ProjectKeeper + monitoringcKeeper types.MonitoringConsumerKeeper + hooks types.LaunchHooks } ) func NewKeeper( cdc codec.BinaryCodec, - storeKey, - memKey storetypes.StoreKey, - ps paramtypes.Subspace, - distrKeeper types.DistributionKeeper, + addressCodec address.Codec, + storeService store.KVStoreService, + logger log.Logger, + authority string, + distributionKeeper types.DistributionKeeper, profileKeeper types.ProfileKeeper, -) *Keeper { - // set KeyTable if it has not already been set - if !ps.HasKeyTable() { - ps = ps.WithKeyTable(types.ParamKeyTable()) + projectKeeper types.ProjectKeeper, // TODO check injection + monitoringcKeeper types.MonitoringConsumerKeeper, // TODO check injection +) Keeper { + if _, err := addressCodec.StringToBytes(authority); err != nil { + panic(fmt.Sprintf("invalid authority address %s: %s", authority, err)) } - return &Keeper{ - cdc: cdc, - storeKey: storeKey, - memKey: memKey, - paramstore: ps, - distrKeeper: distrKeeper, - profileKeeper: profileKeeper, - } -} + sb := collections.NewSchemaBuilder(storeService) -// SetHooks sets the launch hooks -func (k *Keeper) SetHooks(fk types.LaunchHooks) *Keeper { - if k.hooks != nil { - panic("cannot set launch hooks twice") + k := Keeper{ + cdc: cdc, + addressCodec: addressCodec, + storeService: storeService, + authority: authority, + logger: logger, + distributionKeeper: distributionKeeper, + profileKeeper: profileKeeper, + projectKeeper: projectKeeper, + monitoringcKeeper: monitoringcKeeper, + Params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + ChainSeq: collections.NewSequence(sb, types.ChainCountKey, "chain_seq"), + Chain: collections.NewMap(sb, types.ChainKey, "chain", collections.Uint64Key, codec.CollValue[types.Chain](cdc)), + GenesisAccount: collections.NewMap(sb, types.GenesisAccountKey, "genesisAccount", collections.PairKeyCodec(collections.Uint64Key, sdk.LengthPrefixedAddressKey(sdk.AccAddressKey)), codec.CollValue[types.GenesisAccount](cdc)), + GenesisValidator: collections.NewMap(sb, types.GenesisValidatorKey, "genesisValidator", collections.PairKeyCodec(collections.Uint64Key, sdk.LengthPrefixedAddressKey(sdk.AccAddressKey)), codec.CollValue[types.GenesisValidator](cdc)), + VestingAccount: collections.NewMap(sb, types.VestingAccountKey, "vestingAccount", collections.PairKeyCodec(collections.Uint64Key, sdk.LengthPrefixedAddressKey(sdk.AccAddressKey)), codec.CollValue[types.VestingAccount](cdc)), + RequestSeq: collections.NewMap(sb, types.RequestCountKey, "request_seq", collections.Uint64Key, collections.Uint64Value), + Request: collections.NewMap(sb, types.RequestKey, "request", collections.PairKeyCodec(collections.Uint64Key, collections.Uint64Key), codec.CollValue[types.Request](cdc)), + ParamChange: collections.NewMap(sb, types.ParamChangeKey, "paramChange", collections.PairKeyCodec(collections.Uint64Key, collections.StringKey), codec.CollValue[types.ParamChange](cdc)), + // this line is used by starport scaffolding # collection/instantiate } - k.hooks = fk + schema, err := sb.Build() + if err != nil { + panic(err) + } + k.Schema = schema return k } -// Logger returns a logger for the module -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +// GetAuthority returns the module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger() log.Logger { + return k.logger.With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +// AddressCodec returns the address codec. +func (k Keeper) AddressCodec() address.Codec { + return k.addressCodec } // SetProjectKeeper sets the project keeper interface of the module @@ -95,3 +139,26 @@ func (k *Keeper) GetMonitoringcKeeper() types.MonitoringConsumerKeeper { func (k *Keeper) GetProfileKeeper() types.ProfileKeeper { return k.profileKeeper } + +// SetHooks sets the fundraising hooks. +func (k Keeper) SetHooks(hooks types.LaunchHooks) (Keeper, error) { + if k.hooks != nil { + return k, errors.New("cannot set launch hooks twice") + } + k.hooks = hooks + return k, nil +} + +// EnableMonitoringConnection sets a chain with MonitoringConnected set to true +func (k Keeper) EnableMonitoringConnection(ctx context.Context, launchID uint64) error { + chain, err := k.GetChain(ctx, launchID) + if err != nil { + return err + } + + if chain.MonitoringConnected { + return types.ErrChainMonitoringConnected + } + chain.MonitoringConnected = true + return k.Chain.Set(ctx, chain.LaunchID, chain) +} diff --git a/x/launch/keeper/msg_create_chain.go b/x/launch/keeper/msg_create_chain.go deleted file mode 100644 index 197604ef..00000000 --- a/x/launch/keeper/msg_create_chain.go +++ /dev/null @@ -1,67 +0,0 @@ -package keeper - -import ( - "context" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - ignterrors "github.com/ignite/modules/pkg/errors" - - "github.com/tendermint/spn/x/launch/types" -) - -func (k msgServer) CreateChain(goCtx context.Context, msg *types.MsgCreateChain) (*types.MsgCreateChainResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - // check if the metadata length is valid - maxMetadataLength := k.MaxMetadataLength(ctx) - if uint64(len(msg.Metadata)) > maxMetadataLength { - return nil, sdkerrors.Wrapf(types.ErrInvalidMetadataLength, - "metadata length %d is greater than maximum %d", - len(msg.Metadata), - maxMetadataLength, - ) - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - // TODO check metadata len - - id, err := k.CreateNewChain( - ctx, - coordID, - msg.GenesisChainID, - msg.SourceURL, - msg.SourceHash, - msg.InitialGenesis, - msg.HasProject, - msg.ProjectID, - false, - msg.AccountBalance, - msg.Metadata, - ) - if err != nil { - return nil, sdkerrors.Wrap(types.ErrCreateChainFail, err.Error()) - } - - // Deduct chain creation fee if set - creationFee := k.ChainCreationFee(ctx) - if !creationFee.Empty() { - coordAddr, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return nil, ignterrors.Criticalf("invalid coordinator bech32 address %s", err.Error()) - } - if err = k.distrKeeper.FundCommunityPool(ctx, creationFee, coordAddr); err != nil { - return nil, sdkerrors.Wrap(types.ErrFundCommunityPool, err.Error()) - } - } - - return &types.MsgCreateChainResponse{ - LaunchID: id, - }, nil -} diff --git a/x/launch/keeper/msg_edit_chain.go b/x/launch/keeper/msg_edit_chain.go deleted file mode 100644 index 7d1652a1..00000000 --- a/x/launch/keeper/msg_edit_chain.go +++ /dev/null @@ -1,88 +0,0 @@ -package keeper - -import ( - "context" - "fmt" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - projecttypes "github.com/tendermint/spn/x/project/types" -) - -func (k msgServer) EditChain(goCtx context.Context, msg *types.MsgEditChain) (*types.MsgEditChainResponse, error) { - var ( - err error - ctx = sdk.UnwrapSDKContext(goCtx) - ) - - // check if the metadata length is valid - maxMetadataLength := k.MaxMetadataLength(ctx) - if uint64(len(msg.Metadata)) > maxMetadataLength { - return nil, sdkerrors.Wrapf(types.ErrInvalidMetadataLength, - "metadata length %d is greater than maximum %d", - len(msg.Metadata), - maxMetadataLength, - ) - } - - chain, found := k.GetChain(ctx, msg.LaunchID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrChainNotFound, "%d", msg.LaunchID) - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - if chain.CoordinatorID != coordID { - return nil, sdkerrors.Wrap(profiletypes.ErrCoordInvalid, fmt.Sprintf( - "coordinator of the chain is %d", - chain.CoordinatorID, - )) - } - - if len(msg.Metadata) > 0 { - chain.Metadata = msg.Metadata - } - - if msg.SetProjectID { - // check if chain already has id associated - if chain.HasProject { - return nil, sdkerrors.Wrapf(types.ErrChainHasProject, - "project with id %d already associated with chain %d", - chain.ProjectID, - chain.LaunchID, - ) - } - - // check if chain coordinator is project coordinator - project, found := k.projectKeeper.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(projecttypes.ErrProjectNotFound, "project with id %d not found", msg.ProjectID) - } - - if project.CoordinatorID != chain.CoordinatorID { - return nil, sdkerrors.Wrapf(profiletypes.ErrCoordInvalid, - "coordinator of the project is %d, chain coordinator is %d", - project.CoordinatorID, - chain.CoordinatorID, - ) - } - - chain.ProjectID = msg.ProjectID - chain.HasProject = true - - err = k.projectKeeper.AddChainToProject(ctx, chain.ProjectID, chain.LaunchID) - if err != nil { - return nil, sdkerrors.Wrap(types.ErrAddChainToProject, err.Error()) - } - } - - k.SetChain(ctx, chain) - return &types.MsgEditChainResponse{}, err -} diff --git a/x/launch/keeper/msg_revert_launch.go b/x/launch/keeper/msg_revert_launch.go deleted file mode 100644 index 3b731e45..00000000 --- a/x/launch/keeper/msg_revert_launch.go +++ /dev/null @@ -1,60 +0,0 @@ -package keeper - -import ( - "context" - "time" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" -) - -func (k msgServer) RevertLaunch(goCtx context.Context, msg *types.MsgRevertLaunch) (*types.MsgRevertLaunchResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - chain, found := k.GetChain(ctx, msg.LaunchID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrChainNotFound, "%d", msg.LaunchID) - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - if chain.CoordinatorID != coordID { - return nil, sdkerrors.Wrapf( - profiletypes.ErrCoordInvalid, - "coordinator of the chain is %d", - chain.CoordinatorID, - ) - } - - if !chain.LaunchTriggered { - return nil, sdkerrors.Wrapf(types.ErrNotTriggeredLaunch, "%d", msg.LaunchID) - } - - if chain.MonitoringConnected { - return nil, sdkerrors.Wrapf(types.ErrChainMonitoringConnected, "%d", msg.LaunchID) - } - - // We must wait for a specific delay once the chain is launched before being able to revert it - if ctx.BlockTime().Before(chain.LaunchTime.Add(k.RevertDelay(ctx))) { - return nil, sdkerrors.Wrapf(types.ErrRevertDelayNotReached, "%d", msg.LaunchID) - } - - chain.LaunchTriggered = false - chain.LaunchTime = time.Unix(0, 0).UTC() - k.SetChain(ctx, chain) - - // clear associated client IDs from monitoring - k.monitoringcKeeper.ClearVerifiedClientIDs(ctx, msg.LaunchID) - err = ctx.EventManager().EmitTypedEvent(&types.EventLaunchReverted{ - LaunchID: msg.LaunchID, - }) - - return &types.MsgRevertLaunchResponse{}, err -} diff --git a/x/launch/keeper/msg_send_request.go b/x/launch/keeper/msg_send_request.go deleted file mode 100644 index 108cc963..00000000 --- a/x/launch/keeper/msg_send_request.go +++ /dev/null @@ -1,94 +0,0 @@ -package keeper - -import ( - "context" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - ignterrors "github.com/ignite/modules/pkg/errors" - - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" -) - -func (k msgServer) SendRequest( - goCtx context.Context, - msg *types.MsgSendRequest, -) (*types.MsgSendRequestResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - chain, found := k.GetChain(ctx, msg.LaunchID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrChainNotFound, "%d", msg.LaunchID) - } - - // check if request is valid for mainnet - err := msg.Content.IsValidForMainnet() - if err != nil && chain.IsMainnet { - return nil, sdkerrors.Wrap(types.ErrInvalidRequestForMainnet, err.Error()) - } - - // no request can be sent if the launch of the chain is triggered - if chain.LaunchTriggered { - return nil, sdkerrors.Wrapf(types.ErrTriggeredLaunch, "%d", msg.LaunchID) - } - - coord, found := k.profileKeeper.GetCoordinator(ctx, chain.CoordinatorID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrChainInactive, - "the chain %d coordinator not found", chain.LaunchID) - } - - // only chain with active coordinator can receive a request - if !coord.Active { - return nil, sdkerrors.Wrapf(profiletypes.ErrCoordInactive, - "the chain %d coordinator is inactive", chain.LaunchID) - } - - // create the request from the content - request := types.Request{ - LaunchID: msg.LaunchID, - Creator: msg.Creator, - CreatedAt: ctx.BlockTime().Unix(), - Content: msg.Content, - Status: types.Request_PENDING, - } - - var requestID uint64 - approved := false - if msg.Creator == coord.Address { - err := ApplyRequest(ctx, k.Keeper, chain, request, coord) - if err != nil { - return nil, sdkerrors.Wrap(types.ErrRequestApplicationFailure, err.Error()) - } - approved = true - request.Status = types.Request_APPROVED - } - - // deduct request fee if set - requestFee := k.RequestFee(ctx) - if !requestFee.Empty() { - sender, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - return nil, ignterrors.Criticalf("invalid sender bech32 address %s", err.Error()) - } - if err = k.distrKeeper.FundCommunityPool(ctx, requestFee, sender); err != nil { - return nil, sdkerrors.Wrap(types.ErrFundCommunityPool, err.Error()) - } - } - - requestID = k.AppendRequest(ctx, request) - err = ctx.EventManager().EmitTypedEvent(&types.EventRequestCreated{ - Creator: msg.Creator, - Request: request, - }) - - // call request created hook - k.RequestCreated(ctx, msg.Creator, msg.LaunchID, requestID, msg.Content) - - return &types.MsgSendRequestResponse{ - RequestID: requestID, - AutoApproved: approved, - }, err -} diff --git a/x/launch/keeper/msg.go b/x/launch/keeper/msg_server.go similarity index 86% rename from x/launch/keeper/msg.go rename to x/launch/keeper/msg_server.go index e6153dd5..b870ce22 100644 --- a/x/launch/keeper/msg.go +++ b/x/launch/keeper/msg_server.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/types" ) type msgServer struct { diff --git a/x/launch/keeper/msg_server_create_chain.go b/x/launch/keeper/msg_server_create_chain.go new file mode 100644 index 00000000..c0ca79df --- /dev/null +++ b/x/launch/keeper/msg_server_create_chain.go @@ -0,0 +1,74 @@ +package keeper + +import ( + "context" + + sdkerrors "cosmossdk.io/errors" + + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/launch/types" +) + +func (k msgServer) CreateChain(ctx context.Context, msg *types.MsgCreateChain) (*types.MsgCreateChainResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid coordinator address") + } + + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get launch params") + } + + // check if the metadata length is valid + if uint64(len(msg.Metadata)) > params.MaxMetadataLength { + return nil, sdkerrors.Wrapf(types.ErrInvalidMetadataLength, + "metadata length %d is greater than maximum %d", + len(msg.Metadata), + params.MaxMetadataLength, + ) + } + + // Get the coordinator ID associated to the sender address + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + launchID, err := k.CreateNewChain( + ctx, + coordinatorID, + msg.GenesisChainID, + msg.SourceURL, + msg.SourceHash, + msg.InitialGenesis, + msg.HasProject, + msg.ProjectID, + false, + msg.AccountBalance, + msg.Metadata, + ) + if err != nil { + return nil, sdkerrors.Wrap(types.ErrCreateChainFail, err.Error()) + } + + // Deduct chain creation fee if set + creationFee := params.ChainCreationFee + if !params.ChainCreationFee.Empty() { + coordAddr, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, ignterrors.Criticalf("invalid coordinator bech32 address %s", err.Error()) + } + if err = k.distributionKeeper.FundCommunityPool(ctx, creationFee, coordAddr); err != nil { + return nil, sdkerrors.Wrap(types.ErrFundCommunityPool, err.Error()) + } + } + + return &types.MsgCreateChainResponse{ + LaunchID: launchID, + }, nil +} diff --git a/x/launch/keeper/msg_create_chain_test.go b/x/launch/keeper/msg_server_create_chain_test.go similarity index 78% rename from x/launch/keeper/msg_create_chain_test.go rename to x/launch/keeper/msg_server_create_chain_test.go index aae3d778..427765f5 100644 --- a/x/launch/keeper/msg_create_chain_test.go +++ b/x/launch/keeper/msg_server_create_chain_test.go @@ -1,33 +1,36 @@ package keeper_test import ( + "context" "testing" sdk "github.com/cosmos/cosmos-sdk/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - projecttypes "github.com/tendermint/spn/x/project/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" + projecttypes "github.com/ignite/network/x/project/types" ) func initCreationFeeAndFundCoordAccounts( t *testing.T, - keeper *keeper.Keeper, + keeper keeper.Keeper, bk bankkeeper.Keeper, - sdkCtx sdk.Context, + ctx context.Context, fee sdk.Coins, numCreations int64, addrs ...string, ) { // set fee param to `coins` - params := keeper.GetParams(sdkCtx) + params, err := keeper.Params.Get(ctx) + require.NoError(t, err) params.ChainCreationFee = fee - keeper.SetParams(sdkCtx, params) + err = keeper.Params.Set(ctx, params) + require.NoError(t, err) coins := sdk.NewCoins() for _, coin := range fee { @@ -40,9 +43,9 @@ func initCreationFeeAndFundCoordAccounts( for _, addr := range addrs { accAddr, err := sdk.AccAddressFromBech32(addr) require.NoError(t, err) - err = bk.MintCoins(sdkCtx, projecttypes.ModuleName, coins) + err = bk.MintCoins(ctx, projecttypes.ModuleName, coins) require.NoError(t, err) - err = bk.SendCoinsFromModuleToAccount(sdkCtx, projecttypes.ModuleName, accAddr, coins) + err = bk.SendCoinsFromModuleToAccount(ctx, projecttypes.ModuleName, accAddr, coins) require.NoError(t, err) } } @@ -52,8 +55,7 @@ func TestMsgCreateChain(t *testing.T) { coordAddrs = make([]string, 5) coordMap = make(map[string]uint64) prjtMap = make(map[string]uint64) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) chainCreationFee = sample.Coins(r) ) @@ -76,7 +78,7 @@ func TestMsgCreateChain(t *testing.T) { // assign random sdk.Coins to `chainCreationFee` param and provide balance to coordinators // coordAddrs[4] is not funded - initCreationFeeAndFundCoordAccounts(t, tk.LaunchKeeper, tk.BankKeeper, sdkCtx, chainCreationFee, 1, coordAddrs[:4]...) + initCreationFeeAndFundCoordAccounts(t, tk.LaunchKeeper, tk.BankKeeper, ctx, chainCreationFee, 1, coordAddrs[:4]...) // create message with an invalid metadata length msgCreateChainInvalidMetadata := sample.MsgCreateChain( @@ -86,8 +88,9 @@ func TestMsgCreateChain(t *testing.T) { false, prjtMap[coordAddrs[0]], ) - maxMetadataLength := tk.LaunchKeeper.MaxMetadataLength(sdkCtx) - msgCreateChainInvalidMetadata.Metadata = sample.Metadata(r, maxMetadataLength+1) + launchParams, err := tk.LaunchKeeper.Params.Get(ctx) + require.NoError(t, err) + msgCreateChainInvalidMetadata.Metadata = sample.Metadata(r, launchParams.MaxMetadataLength+1) for _, tc := range []struct { name string @@ -118,7 +121,7 @@ func TestMsgCreateChain(t *testing.T) { { name: "should prevent creating a chain where coordinator doesn't exist for the chain", msg: sample.MsgCreateChain(r, sample.Address(r), "", false, 0), - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should prevent creating a chain with invalid project id", @@ -145,7 +148,7 @@ func TestMsgCreateChain(t *testing.T) { // get account initial balance accAddr, err := sdk.AccAddressFromBech32(tc.msg.Coordinator) require.NoError(t, err) - preBalance := tk.BankKeeper.SpendableCoins(sdkCtx, accAddr) + preBalance := tk.BankKeeper.SpendableCoins(ctx, accAddr) got, err := ts.LaunchSrv.CreateChain(ctx, &tc.msg) if tc.err != nil { @@ -156,8 +159,8 @@ func TestMsgCreateChain(t *testing.T) { require.EqualValues(t, tc.wantedChainID, got.LaunchID) // The chain must exist in the store - chain, found := tk.LaunchKeeper.GetChain(sdkCtx, got.LaunchID) - require.True(t, found) + chain, err := tk.LaunchKeeper.GetChain(ctx, got.LaunchID) + require.NoError(t, err) require.EqualValues(t, coordMap[tc.msg.Coordinator], chain.CoordinatorID) require.EqualValues(t, got.LaunchID, chain.LaunchID) require.EqualValues(t, tc.msg.GenesisChainID, chain.GenesisChainID) @@ -173,14 +176,14 @@ func TestMsgCreateChain(t *testing.T) { if tc.msg.HasProject { require.Equal(t, tc.msg.ProjectID, chain.ProjectID) - projectChains, found := tk.ProjectKeeper.GetProjectChains(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + projectChains, err := tk.ProjectKeeper.GetProjectChains(ctx, tc.msg.ProjectID) + require.NoError(t, err) require.Contains(t, projectChains.Chains, chain.LaunchID) } // check fee deduction - postBalance := tk.BankKeeper.SpendableCoins(sdkCtx, accAddr) - require.True(t, preBalance.Sub(chainCreationFee...).IsEqual(postBalance)) + postBalance := tk.BankKeeper.SpendableCoins(ctx, accAddr) + require.True(t, preBalance.Sub(chainCreationFee...).Equal(postBalance)) }) } } diff --git a/x/launch/keeper/msg_server_edit_chain.go b/x/launch/keeper/msg_server_edit_chain.go new file mode 100644 index 00000000..c43571b5 --- /dev/null +++ b/x/launch/keeper/msg_server_edit_chain.go @@ -0,0 +1,98 @@ +package keeper + +import ( + "context" + "fmt" + + sdkerrors "cosmossdk.io/errors" + + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) EditChain(ctx context.Context, msg *types.MsgEditChain) (*types.MsgEditChainResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid coordinator address") + } + + chain, err := k.GetChain(ctx, msg.LaunchID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.LaunchID) + } + + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get launch params") + } + + // check if the metadata length is valid + if uint64(len(msg.Metadata)) > params.MaxMetadataLength { + return nil, sdkerrors.Wrapf(types.ErrInvalidMetadataLength, + "metadata length %d is greater than maximum %d", + len(msg.Metadata), + params.MaxMetadataLength, + ) + } + + // Get the coordinator ID associated to the sender address + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + if chain.CoordinatorID != coordinatorID { + return nil, sdkerrors.Wrap(profiletypes.ErrCoordinatorInvalid, fmt.Sprintf( + "coordinator of the chain is %d", + chain.CoordinatorID, + )) + } + + if len(msg.Metadata) > 0 { + chain.Metadata = msg.Metadata + } + + if msg.SetProjectID { + // check if chain already has id associated + if chain.HasProject { + return nil, sdkerrors.Wrapf(types.ErrChainHasProject, + "project with id %d already associated with chain %d", + chain.ProjectID, + chain.LaunchID, + ) + } + + // check if chain coordinator is project coordinator + project, err := k.projectKeeper.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) + } + + if project.CoordinatorID != chain.CoordinatorID { + return nil, sdkerrors.Wrapf(profiletypes.ErrCoordinatorInvalid, + "coordinator of the project is %d, chain coordinator is %d", + project.CoordinatorID, + chain.CoordinatorID, + ) + } + + chain.ProjectID = msg.ProjectID + chain.HasProject = true + + err = k.projectKeeper.AddChainToProject(ctx, chain.ProjectID, chain.LaunchID) + if err != nil { + return nil, sdkerrors.Wrap(types.ErrAddChainToProject, err.Error()) + } + } + + if err := k.Chain.Set(ctx, chain.LaunchID, chain); err != nil { + return nil, ignterrors.Criticalf("chain not set %s", err.Error()) + } + + return &types.MsgEditChainResponse{}, err +} diff --git a/x/launch/keeper/msg_edit_chain_test.go b/x/launch/keeper/msg_server_edit_chain_test.go similarity index 80% rename from x/launch/keeper/msg_edit_chain_test.go rename to x/launch/keeper/msg_server_edit_chain_test.go index 2f87718c..bdb44560 100644 --- a/x/launch/keeper/msg_edit_chain_test.go +++ b/x/launch/keeper/msg_server_edit_chain_test.go @@ -3,24 +3,20 @@ package keeper_test import ( "testing" - testkeeper "github.com/tendermint/spn/testutil/keeper" - - projecttypes "github.com/tendermint/spn/x/project/types" - - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" + projecttypes "github.com/ignite/network/x/project/types" ) func TestMsgEditChain(t *testing.T) { var ( coordNoExist = sample.Address(r) launchIDNoExist = uint64(1000) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) ) // Create coordinators @@ -51,7 +47,7 @@ func TestMsgEditChain(t *testing.T) { // create a new project and add a chainProjects entry to it projectDuplicateChain := ts.CreateProject(ctx, r, coordAddress) - err := tk.ProjectKeeper.AddChainToProject(sdkCtx, projectDuplicateChain, launchID2) + err := tk.ProjectKeeper.AddChainToProject(ctx, projectDuplicateChain, launchID2) require.NoError(t, err) // create message with an invalid metadata length @@ -62,8 +58,9 @@ func TestMsgEditChain(t *testing.T) { validProjectID, false, ) - maxMetadataLength := tk.LaunchKeeper.MaxMetadataLength(sdkCtx) - msgEditChainInvalidMetadata.Metadata = sample.Metadata(r, maxMetadataLength+1) + launchParams, err := tk.LaunchKeeper.Params.Get(ctx) + require.NoError(t, err) + msgEditChainInvalidMetadata.Metadata = sample.Metadata(r, launchParams.MaxMetadataLength+1) for _, tc := range []struct { name string @@ -110,7 +107,7 @@ func TestMsgEditChain(t *testing.T) { 0, false, ), - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should prevent editing chain with invalid coordinator", @@ -121,7 +118,7 @@ func TestMsgEditChain(t *testing.T) { 0, false, ), - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "should prevent setting project id for chain with a project", @@ -154,7 +151,7 @@ func TestMsgEditChain(t *testing.T) { projectDifferentCoordinator, false, ), - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "should prevent setting project id where project chain entry is duplicated", @@ -178,8 +175,8 @@ func TestMsgEditChain(t *testing.T) { var previousChain types.Chain var found bool if tc.err == nil { - previousChain, found = tk.LaunchKeeper.GetChain(sdkCtx, tc.msg.LaunchID) - require.True(t, found) + previousChain, err = tk.LaunchKeeper.GetChain(ctx, tc.msg.LaunchID) + require.NoError(t, err) } // Send the message @@ -191,8 +188,8 @@ func TestMsgEditChain(t *testing.T) { require.NoError(t, err) // The chain must continue to exist in the store - chain, found := tk.LaunchKeeper.GetChain(sdkCtx, tc.msg.LaunchID) - require.True(t, found) + chain, err := tk.LaunchKeeper.GetChain(ctx, tc.msg.LaunchID) + require.NoError(t, err) // Unchanged values require.EqualValues(t, previousChain.CoordinatorID, chain.CoordinatorID) @@ -210,11 +207,11 @@ func TestMsgEditChain(t *testing.T) { require.True(t, chain.HasProject) require.EqualValues(t, tc.msg.ProjectID, chain.ProjectID) // ensure project exist - _, found := tk.ProjectKeeper.GetProject(sdkCtx, chain.ProjectID) - require.True(t, found) + _, err := tk.ProjectKeeper.GetProject(ctx, chain.ProjectID) + require.NoError(t, err) // ensure project chains exist - projectChains, found := tk.ProjectKeeper.GetProjectChains(sdkCtx, chain.ProjectID) - require.True(t, found) + projectChains, err := tk.ProjectKeeper.GetProjectChains(ctx, chain.ProjectID) + require.NoError(t, err) // check that the chain launch ID is in the project chains found = false diff --git a/x/launch/keeper/msg_server_revert_launch.go b/x/launch/keeper/msg_server_revert_launch.go new file mode 100644 index 00000000..e59c2909 --- /dev/null +++ b/x/launch/keeper/msg_server_revert_launch.go @@ -0,0 +1,74 @@ +package keeper + +import ( + "context" + "time" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) RevertLaunch(ctx context.Context, msg *types.MsgRevertLaunch) (*types.MsgRevertLaunchResponse, error) { + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid coordinator address") + } + + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get launch params") + } + + chain, err := k.GetChain(ctx, msg.LaunchID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.LaunchID) + } + + // Get the coordinator ID associated to the sender address + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + if chain.CoordinatorID != coordinatorID { + return nil, sdkerrors.Wrapf( + profiletypes.ErrCoordinatorInvalid, + "coordinator of the chain is %d", + chain.CoordinatorID, + ) + } + + if !chain.LaunchTriggered { + return nil, sdkerrors.Wrapf(types.ErrNotTriggeredLaunch, "%d", msg.LaunchID) + } + + if chain.MonitoringConnected { + return nil, sdkerrors.Wrapf(types.ErrChainMonitoringConnected, "%d", msg.LaunchID) + } + + // We must wait for a specific delay once the chain is launched before being able to revert it + sdkCtx := sdk.UnwrapSDKContext(ctx) + if sdkCtx.BlockTime().Before(chain.LaunchTime.Add(params.RevertDelay)) { + return nil, sdkerrors.Wrapf(types.ErrRevertDelayNotReached, "%d", msg.LaunchID) + } + + chain.LaunchTriggered = false + chain.LaunchTime = time.Unix(0, 0).UTC() + if err := k.Chain.Set(ctx, chain.LaunchID, chain); err != nil { + return nil, ignterrors.Criticalf("chain not set %s", err.Error()) + } + + // clear associated client IDs from monitoring + if err := k.monitoringcKeeper.ClearVerifiedClientIDs(ctx, msg.LaunchID); err != nil { + return nil, ignterrors.Criticalf("failed to clear monitoring client IDs %s", err.Error()) + } + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventLaunchReverted{ + LaunchID: msg.LaunchID, + }) + + return &types.MsgRevertLaunchResponse{}, err +} diff --git a/x/launch/keeper/msg_revert_launch_test.go b/x/launch/keeper/msg_server_revert_launch_test.go similarity index 70% rename from x/launch/keeper/msg_revert_launch_test.go rename to x/launch/keeper/msg_server_revert_launch_test.go index feb43c28..11bcebd9 100644 --- a/x/launch/keeper/msg_revert_launch_test.go +++ b/x/launch/keeper/msg_server_revert_launch_test.go @@ -4,17 +4,21 @@ import ( "testing" "time" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" - monitoringctypes "github.com/tendermint/spn/x/monitoringc/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" + monitoringctypes "github.com/ignite/network/x/monitoringc/types" + profiletypes "github.com/ignite/network/x/profile/types" ) func TestMsgRevertLaunch(t *testing.T) { - sdkCtx, tk, ts := testkeeper.NewTestSetup(t) + ctx, tk, ts := testkeeper.NewTestSetup(t) + launchParams, err := tk.LaunchKeeper.Params.Get(ctx) + require.NoError(t, err) type inputState struct { noChain bool @@ -50,7 +54,7 @@ func TestMsgRevertLaunch(t *testing.T) { Active: true, }, noVerifiedClientID: true, - blockTime: sampleTime.Add(tk.LaunchKeeper.RevertDelay(sdkCtx)), + blockTime: sampleTime.Add(launchParams.RevertDelay), blockHeight: 100, }, msg: types.MsgRevertLaunch{ @@ -73,7 +77,7 @@ func TestMsgRevertLaunch(t *testing.T) { Active: true, }, verifiedClientID: "test-client-id-1", - blockTime: sampleTime.Add(tk.LaunchKeeper.RevertDelay(sdkCtx)), + blockTime: sampleTime.Add(launchParams.RevertDelay), blockHeight: 100, }, msg: types.MsgRevertLaunch{ @@ -96,7 +100,7 @@ func TestMsgRevertLaunch(t *testing.T) { Active: true, }, noVerifiedClientID: true, - blockTime: sampleTime.Add(tk.LaunchKeeper.RevertDelay(sdkCtx) - time.Second), + blockTime: sampleTime.Add(launchParams.RevertDelay - time.Second), blockHeight: 100, }, msg: types.MsgRevertLaunch{ @@ -119,7 +123,7 @@ func TestMsgRevertLaunch(t *testing.T) { Active: true, }, noVerifiedClientID: true, - blockTime: sampleTime.Add(tk.LaunchKeeper.RevertDelay(sdkCtx)), + blockTime: sampleTime.Add(launchParams.RevertDelay), blockHeight: 100, }, msg: types.MsgRevertLaunch{ @@ -139,14 +143,14 @@ func TestMsgRevertLaunch(t *testing.T) { }, noCoordinator: true, noVerifiedClientID: true, - blockTime: sampleTime.Add(tk.LaunchKeeper.RevertDelay(sdkCtx)), + blockTime: sampleTime.Add(launchParams.RevertDelay), blockHeight: 100, }, msg: types.MsgRevertLaunch{ LaunchID: 3, Coordinator: sample.Address(r), }, - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should allow reverting launch if revert delay reached", @@ -163,14 +167,14 @@ func TestMsgRevertLaunch(t *testing.T) { Active: true, }, noVerifiedClientID: true, - blockTime: sampleTime.Add(tk.LaunchKeeper.RevertDelay(sdkCtx)), + blockTime: sampleTime.Add(launchParams.RevertDelay), blockHeight: 100, }, msg: types.MsgRevertLaunch{ LaunchID: 4, Coordinator: sampleAddr, }, - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "should prevent reverting launch with non existent chain id", @@ -182,7 +186,7 @@ func TestMsgRevertLaunch(t *testing.T) { Active: true, }, noVerifiedClientID: true, - blockTime: sampleTime.Add(tk.LaunchKeeper.RevertDelay(sdkCtx)), + blockTime: sampleTime.Add(launchParams.RevertDelay), blockHeight: 100, }, msg: types.MsgRevertLaunch{ @@ -207,7 +211,7 @@ func TestMsgRevertLaunch(t *testing.T) { Active: true, }, noVerifiedClientID: true, - blockTime: sampleTime.Add(tk.LaunchKeeper.RevertDelay(sdkCtx)), + blockTime: sampleTime.Add(launchParams.RevertDelay), blockHeight: 100, }, msg: types.MsgRevertLaunch{ @@ -220,34 +224,41 @@ func TestMsgRevertLaunch(t *testing.T) { t.Run(tt.name, func(t *testing.T) { // initialize input state if !tt.inputState.noChain { - tk.LaunchKeeper.SetChain(sdkCtx, tt.inputState.chain) + err = tk.LaunchKeeper.Chain.Set(ctx, tt.inputState.chain.LaunchID, tt.inputState.chain) + require.NoError(t, err) } if !tt.inputState.noCoordinator { - tk.ProfileKeeper.SetCoordinator(sdkCtx, tt.inputState.coordinator) - tk.ProfileKeeper.SetCoordinatorByAddress(sdkCtx, profiletypes.CoordinatorByAddress{ + err = tk.ProfileKeeper.Coordinator.Set(ctx, tt.inputState.coordinator.CoordinatorID, tt.inputState.coordinator) + require.NoError(t, err) + addr, err := sdk.AccAddressFromBech32(tt.inputState.coordinator.Address) + require.NoError(t, err) + err = tk.ProfileKeeper.CoordinatorByAddress.Set(ctx, addr, profiletypes.CoordinatorByAddress{ Address: tt.inputState.coordinator.Address, CoordinatorID: tt.inputState.coordinator.CoordinatorID, }) + require.NoError(t, err) } if !tt.inputState.blockTime.IsZero() { - sdkCtx = sdkCtx.WithBlockTime(tt.inputState.blockTime) + ctx = ctx.WithBlockTime(tt.inputState.blockTime) } if tt.inputState.blockHeight > 0 { - sdkCtx = sdkCtx.WithBlockHeight(tt.inputState.blockHeight) + ctx = ctx.WithBlockHeight(tt.inputState.blockHeight) } if !tt.inputState.noVerifiedClientID { - tk.MonitoringConsumerKeeper.SetVerifiedClientID(sdkCtx, monitoringctypes.VerifiedClientID{ + err = tk.MonitoringConsumerKeeper.VerifiedClientID.Set(ctx, tt.inputState.chain.LaunchID, monitoringctypes.VerifiedClientID{ LaunchID: tt.inputState.chain.LaunchID, ClientIDs: []string{tt.inputState.verifiedClientID}, }) - tk.MonitoringConsumerKeeper.SetLaunchIDFromVerifiedClientID(sdkCtx, monitoringctypes.LaunchIDFromVerifiedClientID{ + require.NoError(t, err) + err = tk.MonitoringConsumerKeeper.LaunchIDFromVerifiedClientID.Set(ctx, tt.inputState.verifiedClientID, monitoringctypes.LaunchIDFromVerifiedClientID{ LaunchID: tt.inputState.chain.LaunchID, ClientID: tt.inputState.verifiedClientID, }) + require.NoError(t, err) } // Send the message - _, err := ts.LaunchSrv.RevertLaunch(sdkCtx, &tt.msg) + _, err := ts.LaunchSrv.RevertLaunch(ctx, &tt.msg) if tt.err != nil { require.ErrorIs(t, err, tt.err) return @@ -255,15 +266,15 @@ func TestMsgRevertLaunch(t *testing.T) { require.NoError(t, err) // Check value of chain - chain, found := tk.LaunchKeeper.GetChain(sdkCtx, tt.msg.LaunchID) - require.True(t, found) + chain, err := tk.LaunchKeeper.GetChain(ctx, tt.msg.LaunchID) + require.NoError(t, err) require.False(t, chain.LaunchTriggered) // check that monitoringc client ids are removed - _, found = tk.MonitoringConsumerKeeper.GetVerifiedClientID(sdkCtx, tt.msg.LaunchID) - require.False(t, found) - _, found = tk.MonitoringConsumerKeeper.GetLaunchIDFromVerifiedClientID(sdkCtx, tt.inputState.verifiedClientID) - require.False(t, found) + _, err = tk.MonitoringConsumerKeeper.VerifiedClientID.Get(ctx, tt.msg.LaunchID) + require.Error(t, err) + _, err = tk.MonitoringConsumerKeeper.LaunchIDFromVerifiedClientID.Get(ctx, tt.inputState.verifiedClientID) + require.Error(t, err) }) } } diff --git a/x/launch/keeper/msg_server_send_request.go b/x/launch/keeper/msg_server_send_request.go new file mode 100644 index 00000000..6eb37f0d --- /dev/null +++ b/x/launch/keeper/msg_server_send_request.go @@ -0,0 +1,103 @@ +package keeper + +import ( + "context" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) SendRequest(ctx context.Context, msg *types.MsgSendRequest) (*types.MsgSendRequestResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + sender, err := k.addressCodec.StringToBytes(msg.Creator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get launch params") + } + + chain, err := k.GetChain(ctx, msg.LaunchID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.LaunchID) + } + + // check if request is valid for mainnet + err = msg.Content.IsValidForMainnet() + if err != nil && chain.IsMainnet { + return nil, sdkerrors.Wrap(types.ErrInvalidRequestForMainnet, err.Error()) + } + + // no request can be sent if the launch of the chain is triggered + if chain.LaunchTriggered { + return nil, sdkerrors.Wrapf(types.ErrTriggeredLaunch, "%d", msg.LaunchID) + } + + coordinator, err := k.profileKeeper.GetCoordinator(ctx, chain.CoordinatorID) + if err != nil { + return nil, sdkerrors.Wrapf(types.ErrChainInactive, + "the chain %d coordinator %d not found", chain.LaunchID, chain.CoordinatorID) + } + + // only chain with active coordinator can receive a request + if !coordinator.Active { + return nil, sdkerrors.Wrapf(profiletypes.ErrCoordinatorInactive, + "the chain %d coordinator is inactive", chain.LaunchID) + } + + // create the request from the content + sdkCtx := sdk.UnwrapSDKContext(ctx) + request := types.Request{ + LaunchID: msg.LaunchID, + Creator: msg.Creator, + CreatedAt: sdkCtx.BlockTime().Unix(), + Content: msg.Content, + Status: types.Request_PENDING, + } + + approved := false + if msg.Creator == coordinator.Address { + err := ApplyRequest(ctx, k.Keeper, chain, request, coordinator) + if err != nil { + return nil, sdkerrors.Wrap(types.ErrRequestApplicationFailure, err.Error()) + } + approved = true + request.Status = types.Request_APPROVED + } + + // deduct request fee if set + + if !params.RequestFee.Empty() { + if err = k.distributionKeeper.FundCommunityPool(ctx, params.RequestFee, sender); err != nil { + return nil, sdkerrors.Wrap(types.ErrFundCommunityPool, err.Error()) + } + } + + request.RequestID, err = k.AppendRequest(ctx, request) + if err != nil { + return nil, err + } + + if err = sdkCtx.EventManager().EmitTypedEvent(&types.EventRequestCreated{ + Creator: msg.Creator, + Request: request, + }); err != nil { + return nil, err + } + + // call request created hook + err = k.hooks.RequestCreated(ctx, msg.Creator, msg.LaunchID, request.RequestID, msg.Content) + return &types.MsgSendRequestResponse{ + RequestID: request.RequestID, + AutoApproved: approved, + }, err +} diff --git a/x/launch/keeper/msg_send_request_test.go b/x/launch/keeper/msg_server_send_request_test.go similarity index 84% rename from x/launch/keeper/msg_send_request_test.go rename to x/launch/keeper/msg_server_send_request_test.go index 9c6f913e..69137283 100644 --- a/x/launch/keeper/msg_send_request_test.go +++ b/x/launch/keeper/msg_server_send_request_test.go @@ -3,24 +3,24 @@ package keeper_test import ( "testing" + "cosmossdk.io/collections" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" ) func TestMsgRequestAddAccount(t *testing.T) { - sdkCtx, tk, ts := testkeeper.NewTestSetup(t, testkeeper.WithLaunchHooksMock()) - ctx := sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts := testkeeper.NewTestSetup(t, testkeeper.WithLaunchHooksMock()) coordAddr, addr := sample.Address(r), sample.Address(r) fee := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1000))) hasFeeAddr := sample.Address(r) - tk.Mint(sdkCtx, hasFeeAddr, fee) + tk.Mint(ctx, hasFeeAddr, fee) type inputState struct { noCoordinator bool @@ -149,7 +149,7 @@ func TestMsgRequestAddAccount(t *testing.T) { fee: sdk.Coins(nil), }, msg: sample.MsgSendRequestWithAddAccount(r, sample.Address(r), sample.Address(r), 4), - err: profiletypes.ErrCoordInactive, + err: profiletypes.ErrCoordinatorInactive, }, { name: "should allow send a new request", @@ -269,29 +269,39 @@ func TestMsgRequestAddAccount(t *testing.T) { t.Run(tt.name, func(t *testing.T) { // initialize input state if !tt.inputState.noCoordinator { - tk.ProfileKeeper.SetCoordinator(sdkCtx, tt.inputState.coordinator) - tk.ProfileKeeper.SetCoordinatorByAddress(sdkCtx, profiletypes.CoordinatorByAddress{ + err := tk.ProfileKeeper.Coordinator.Set(ctx, tt.inputState.coordinator.CoordinatorID, tt.inputState.coordinator) + require.NoError(t, err) + addr, err := sdk.AccAddressFromBech32(tt.inputState.coordinator.Address) + require.NoError(t, err) + err = tk.ProfileKeeper.CoordinatorByAddress.Set(ctx, addr, profiletypes.CoordinatorByAddress{ CoordinatorID: tt.inputState.coordinator.CoordinatorID, Address: tt.inputState.coordinator.Address, }) + require.NoError(t, err) } if !tt.inputState.noChain { - tk.LaunchKeeper.SetChain(sdkCtx, tt.inputState.chain) + err := tk.LaunchKeeper.Chain.Set(ctx, tt.inputState.chain.LaunchID, tt.inputState.chain) + require.NoError(t, err) } if !tt.inputState.noAccount { - tk.LaunchKeeper.SetGenesisAccount(sdkCtx, tt.inputState.account) + addr, err := sdk.AccAddressFromBech32(tt.inputState.account.Address) + require.NoError(t, err) + err = tk.LaunchKeeper.GenesisAccount.Set(ctx, collections.Join(tt.inputState.account.LaunchID, addr), tt.inputState.account) + require.NoError(t, err) } if !tt.inputState.fee.Empty() { - params := tk.LaunchKeeper.GetParams(sdkCtx) + params, err := tk.LaunchKeeper.Params.Get(ctx) + require.NoError(t, err) params.RequestFee = tt.inputState.fee - tk.LaunchKeeper.SetParams(sdkCtx, params) + err = tk.LaunchKeeper.Params.Set(ctx, params) + require.NoError(t, err) } // hook call assertion if tt.err == nil { tk.HooksMocks.LaunchHooksMock.On( "RequestCreated", - sdkCtx, + ctx, tt.msg.Creator, tt.msg.LaunchID, tt.wantID, @@ -308,8 +318,8 @@ func TestMsgRequestAddAccount(t *testing.T) { require.Equal(t, tt.wantID, got.RequestID) require.Equal(t, tt.wantApprove, got.AutoApproved) - request, found := tk.LaunchKeeper.GetRequest(sdkCtx, tt.msg.LaunchID, got.RequestID) - require.True(t, found, "request not found") + request, err := tk.LaunchKeeper.Request.Get(ctx, collections.Join(tt.msg.LaunchID, got.RequestID)) + require.NoError(t, err, "request not found") if !tt.wantApprove { require.Equal(t, types.Request_PENDING, request.Status) @@ -318,7 +328,8 @@ func TestMsgRequestAddAccount(t *testing.T) { } if !tt.inputState.fee.Empty() { - feePool := tk.DistrKeeper.GetFeePool(sdkCtx) + feePool, err := tk.DistrKeeper.FeePool.Get(ctx) + require.NoError(t, err) for _, decCoin := range feePool.CommunityPool { coin := sdk.NewCoin(decCoin.Denom, decCoin.Amount.TruncateInt()) require.Equal(t, tt.expectedCommunityPoolAmt, coin) diff --git a/x/launch/keeper/msg_server_settle_request.go b/x/launch/keeper/msg_server_settle_request.go new file mode 100644 index 00000000..0e88b80a --- /dev/null +++ b/x/launch/keeper/msg_server_settle_request.go @@ -0,0 +1,82 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/collections" + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) SettleRequest(ctx context.Context, msg *types.MsgSettleRequest) (*types.MsgSettleRequestResponse, error) { + if _, err := k.addressCodec.StringToBytes(msg.Signer); err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + chain, err := k.GetChain(ctx, msg.LaunchID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.LaunchID) + } + + if chain.LaunchTriggered { + return nil, sdkerrors.Wrapf(types.ErrTriggeredLaunch, "%d", msg.LaunchID) + } + + coordinator, err := k.profileKeeper.GetCoordinator(ctx, chain.CoordinatorID) + if err != nil { + return nil, sdkerrors.Wrapf(types.ErrChainInactive, + "the chain %d coordinator %d not found", chain.LaunchID, chain.CoordinatorID) + } + + if !coordinator.Active { + return nil, sdkerrors.Wrapf(profiletypes.ErrCoordinatorInactive, + "the chain %d coordinator inactive", chain.LaunchID) + } + + if msg.Approve && msg.Signer != coordinator.Address { + return nil, sdkerrors.Wrap(types.ErrNoAddressPermission, msg.Signer) + } + + // first check if the request exists + request, err := k.Request.Get(ctx, collections.Join(msg.LaunchID, msg.RequestID)) + if err != nil { + return nil, sdkerrors.Wrapf(types.ErrRequestNotFound, "failed to get request %d for chain %d", msg.RequestID, msg.LaunchID) + } + + if request.Status != types.Request_PENDING { + return nil, sdkerrors.Wrapf(types.ErrRequestSettled, + "request %d is not pending", + msg.RequestID, + ) + } + + if msg.Signer != request.Creator && msg.Signer != coordinator.Address { + return nil, sdkerrors.Wrap(types.ErrNoAddressPermission, msg.Signer) + } + + // apply request if approving and update status + if msg.Approve { + err := ApplyRequest(ctx, k.Keeper, chain, request, coordinator) + if err != nil { + return nil, err + } + request.Status = types.Request_APPROVED + } else { + request.Status = types.Request_REJECTED + } + + if err := k.Request.Set(ctx, collections.Join(request.LaunchID, request.RequestID), request); err != nil { + return nil, sdkerrors.Wrapf(types.ErrInvalidRequestContent, "failed to set request %d for launch %d", request.RequestID, request.LaunchID) + } + + err = sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&types.EventRequestSettled{ + LaunchID: msg.LaunchID, + RequestID: request.RequestID, + Approved: msg.Approve, + }) + + return &types.MsgSettleRequestResponse{}, err +} diff --git a/x/launch/keeper/msg_settle_request_test.go b/x/launch/keeper/msg_server_settle_request_test.go similarity index 75% rename from x/launch/keeper/msg_settle_request_test.go rename to x/launch/keeper/msg_server_settle_request_test.go index df4836bd..f35962ab 100644 --- a/x/launch/keeper/msg_settle_request_test.go +++ b/x/launch/keeper/msg_server_settle_request_test.go @@ -3,15 +3,15 @@ package keeper_test import ( "testing" + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - ignterrors "github.com/ignite/modules/pkg/errors" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + ignterrors "github.com/ignite/network/pkg/errors" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" ) func TestMsgSettleRequest(t *testing.T) { @@ -22,23 +22,29 @@ func TestMsgSettleRequest(t *testing.T) { coordinator2 = sample.Coordinator(r, sample.Address(r)) disableCoordinator = sample.Coordinator(r, sample.Address(r)) invalidChain = uint64(1000) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) ) disableCoordinator.Active = false - coordinator1.CoordinatorID = tk.ProfileKeeper.AppendCoordinator(sdkCtx, coordinator1) - coordinator2.CoordinatorID = tk.ProfileKeeper.AppendCoordinator(sdkCtx, coordinator2) - disableCoordinator.CoordinatorID = tk.ProfileKeeper.AppendCoordinator(sdkCtx, disableCoordinator) + var err error + coordinator1.CoordinatorID, err = tk.ProfileKeeper.AppendCoordinator(ctx, coordinator1) + require.NoError(t, err) + coordinator2.CoordinatorID, err = tk.ProfileKeeper.AppendCoordinator(ctx, coordinator2) + require.NoError(t, err) + disableCoordinator.CoordinatorID, err = tk.ProfileKeeper.AppendCoordinator(ctx, disableCoordinator) + require.NoError(t, err) - chains := createNChainForCoordinator(tk.LaunchKeeper, sdkCtx, coordinator1.CoordinatorID, 4) + chains := createNChainForCoordinator(tk.LaunchKeeper, ctx, coordinator1.CoordinatorID, 4) chains[0].LaunchTriggered = true - tk.LaunchKeeper.SetChain(sdkCtx, chains[0]) + err = tk.LaunchKeeper.Chain.Set(ctx, chains[0].LaunchID, chains[0]) + require.NoError(t, err) chains[1].CoordinatorID = 99999 - tk.LaunchKeeper.SetChain(sdkCtx, chains[1]) + err = tk.LaunchKeeper.Chain.Set(ctx, chains[1].LaunchID, chains[1]) + require.NoError(t, err) chains[3].CoordinatorID = disableCoordinator.CoordinatorID - tk.LaunchKeeper.SetChain(sdkCtx, chains[3]) + err = tk.LaunchKeeper.Chain.Set(ctx, chains[3].LaunchID, chains[3]) + require.NoError(t, err) requestSamples := make([]RequestSample, numReq) for i := 0; i < numReq; i++ { @@ -52,12 +58,13 @@ func TestMsgSettleRequest(t *testing.T) { // set one request to a non-pending status requestSamples[numReq-1].Status = types.Request_APPROVED - requests := createRequestsFromSamples(tk.LaunchKeeper, sdkCtx, chains[2].LaunchID, requestSamples) + requests := createRequestsFromSamples(tk.LaunchKeeper, ctx, chains[2].LaunchID, requestSamples) invalidContentRequest := types.Request{ LaunchID: chains[2].LaunchID, } - invalidContentRequestID := tk.LaunchKeeper.AppendRequest(sdkCtx, invalidContentRequest) + invalidContentRequestID, err := tk.LaunchKeeper.AppendRequest(ctx, invalidContentRequest) + require.NoError(t, err) tests := []struct { name string @@ -208,7 +215,7 @@ func TestMsgSettleRequest(t *testing.T) { RequestID: requests[5].RequestID, Approve: true, }, - err: profiletypes.ErrCoordInactive, + err: profiletypes.ErrCoordinatorInactive, }, } for _, tt := range tests { @@ -220,12 +227,17 @@ func TestMsgSettleRequest(t *testing.T) { } require.NoError(t, err) - request, found := tk.LaunchKeeper.GetRequest(sdkCtx, tt.msg.LaunchID, tt.msg.RequestID) - require.True(t, found, "request not found") + request, err := tk.LaunchKeeper.Request.Get(ctx, collections.Join(tt.msg.LaunchID, tt.msg.RequestID)) + require.NoError(t, err, "request not found") require.Equal(t, tt.wantStatus, request.Status) - _, found = tk.LaunchKeeper.GetGenesisAccount(sdkCtx, tt.msg.LaunchID, tt.checkAddr) - require.Equal(t, tt.msg.Approve, found, "request apply not performed") + checkAddr, err := sdk.AccAddressFromBech32(tt.checkAddr) + _, err = tk.LaunchKeeper.GenesisAccount.Get(ctx, collections.Join(tt.msg.LaunchID, checkAddr)) + if tt.msg.Approve { + require.NoError(t, err, "request apply performed") + } else { + require.Error(t, err, "request apply not performed") + } }) } } diff --git a/x/launch/keeper/msg_server_trigger_launch.go b/x/launch/keeper/msg_server_trigger_launch.go new file mode 100644 index 00000000..2e937f9f --- /dev/null +++ b/x/launch/keeper/msg_server_trigger_launch.go @@ -0,0 +1,73 @@ +package keeper + +import ( + "context" + "fmt" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) TriggerLaunch(ctx context.Context, msg *types.MsgTriggerLaunch) (*types.MsgTriggerLaunchResponse, error) { + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get launch params") + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid coordinator address") + } + + chain, err := k.GetChain(ctx, msg.LaunchID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.LaunchID) + } + + // Get the coordinator ID associated to the sender address + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + if chain.CoordinatorID != coordinatorID { + return nil, sdkerrors.Wrap(profiletypes.ErrCoordinatorInvalid, fmt.Sprintf( + "coordinator of the chain is %d", + chain.CoordinatorID, + )) + } + + if chain.LaunchTriggered { + return nil, sdkerrors.Wrapf(types.ErrTriggeredLaunch, "%d", msg.LaunchID) + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + if msg.LaunchTime.Before(sdkCtx.BlockTime().Add(params.LaunchTimeRange.MinLaunchTime)) { + return nil, sdkerrors.Wrapf(types.ErrLaunchTimeTooLow, "%s", msg.LaunchTime.String()) + } + if msg.LaunchTime.After(sdkCtx.BlockTime().Add(params.LaunchTimeRange.MaxLaunchTime)) { + return nil, sdkerrors.Wrapf(types.ErrLaunchTimeTooHigh, "%s", msg.LaunchTime.String()) + } + + // set launch timestamp + chain.LaunchTriggered = true + chain.LaunchTime = msg.LaunchTime + + // set revision height for monitoring IBC client + chain.ConsumerRevisionHeight = sdkCtx.BlockHeight() + + if err := k.Chain.Set(ctx, chain.LaunchID, chain); err != nil { + return nil, ignterrors.Criticalf("chain not set %s", err.Error()) + } + + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventLaunchTriggered{ + LaunchID: msg.LaunchID, + LaunchTimeStamp: chain.LaunchTime, + }) + + return &types.MsgTriggerLaunchResponse{}, err +} diff --git a/x/launch/keeper/msg_trigger_launch_test.go b/x/launch/keeper/msg_server_trigger_launch_test.go similarity index 82% rename from x/launch/keeper/msg_trigger_launch_test.go rename to x/launch/keeper/msg_server_trigger_launch_test.go index ef0119f1..c6ff0fd7 100644 --- a/x/launch/keeper/msg_trigger_launch_test.go +++ b/x/launch/keeper/msg_server_trigger_launch_test.go @@ -4,16 +4,18 @@ import ( "testing" "time" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" ) func TestMsgTriggerLaunch(t *testing.T) { - sdkCtx, tk, ts := testkeeper.NewTestSetup(t) + ctx, tk, ts := testkeeper.NewTestSetup(t) type inputState struct { noChain bool @@ -100,7 +102,7 @@ func TestMsgTriggerLaunch(t *testing.T) { LaunchTime: sampleTime.Add(types.DefaultMinLaunchTime), Coordinator: sample.Address(r), }, - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should prevent triggering a chain launch from an invalid coordinator", @@ -119,7 +121,7 @@ func TestMsgTriggerLaunch(t *testing.T) { LaunchTime: sampleTime.Add(types.DefaultMinLaunchTime), Coordinator: sampleAddr, }, - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "should prevent triggering a chain launch with chain launch already triggered", @@ -186,24 +188,29 @@ func TestMsgTriggerLaunch(t *testing.T) { t.Run(tt.name, func(t *testing.T) { // initialize input state if !tt.inputState.noChain { - tk.LaunchKeeper.SetChain(sdkCtx, tt.inputState.chain) + err := tk.LaunchKeeper.Chain.Set(ctx, tt.inputState.chain.LaunchID, tt.inputState.chain) + require.NoError(t, err) } if !tt.inputState.noCoordinator { - tk.ProfileKeeper.SetCoordinator(sdkCtx, tt.inputState.coordinator) - tk.ProfileKeeper.SetCoordinatorByAddress(sdkCtx, profiletypes.CoordinatorByAddress{ + err := tk.ProfileKeeper.Coordinator.Set(ctx, tt.inputState.coordinator.CoordinatorID, tt.inputState.coordinator) + require.NoError(t, err) + addr, err := sdk.AccAddressFromBech32(tt.inputState.coordinator.Address) + require.NoError(t, err) + err = tk.ProfileKeeper.CoordinatorByAddress.Set(ctx, addr, profiletypes.CoordinatorByAddress{ Address: tt.inputState.coordinator.Address, CoordinatorID: tt.inputState.coordinator.CoordinatorID, }) + require.NoError(t, err) } if !tt.inputState.blockTime.IsZero() { - sdkCtx = sdkCtx.WithBlockTime(tt.inputState.blockTime) + ctx = ctx.WithBlockTime(tt.inputState.blockTime) } if tt.inputState.blockHeight > 0 { - sdkCtx = sdkCtx.WithBlockHeight(tt.inputState.blockHeight) + ctx = ctx.WithBlockHeight(tt.inputState.blockHeight) } // Send the message - _, err := ts.LaunchSrv.TriggerLaunch(sdkCtx, &tt.msg) + _, err := ts.LaunchSrv.TriggerLaunch(ctx, &tt.msg) if tt.err != nil { require.ErrorIs(t, err, tt.err) return @@ -211,8 +218,8 @@ func TestMsgTriggerLaunch(t *testing.T) { require.NoError(t, err) // Check values - chain, found := tk.LaunchKeeper.GetChain(sdkCtx, tt.msg.LaunchID) - require.True(t, found) + chain, err := tk.LaunchKeeper.GetChain(ctx, tt.msg.LaunchID) + require.NoError(t, err) require.True(t, chain.LaunchTriggered) require.EqualValues(t, tt.msg.LaunchTime, chain.LaunchTime) require.EqualValues(t, tt.inputState.blockHeight, chain.ConsumerRevisionHeight) diff --git a/x/launch/keeper/msg_server_update_launch_information.go b/x/launch/keeper/msg_server_update_launch_information.go new file mode 100644 index 00000000..588fdb62 --- /dev/null +++ b/x/launch/keeper/msg_server_update_launch_information.go @@ -0,0 +1,65 @@ +package keeper + +import ( + "context" + "fmt" + + sdkerrors "cosmossdk.io/errors" + + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) UpdateLaunchInformation(ctx context.Context, msg *types.MsgUpdateLaunchInformation) (*types.MsgUpdateLaunchInformationResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid coordinator address") + } + + chain, err := k.GetChain(ctx, msg.LaunchID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.LaunchID) + } + + if chain.LaunchTriggered { + return nil, sdkerrors.Wrapf(types.ErrTriggeredLaunch, "%d", msg.LaunchID) + } + + // Get the coordinator ID associated to the sender address + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + if chain.CoordinatorID != coordinatorID { + return nil, sdkerrors.Wrap(profiletypes.ErrCoordinatorInvalid, fmt.Sprintf( + "coordinator of the chain is %d", + chain.CoordinatorID, + )) + } + + // Modify from provided values + if msg.GenesisChainID != "" { + chain.GenesisChainID = msg.GenesisChainID + } + if msg.SourceURL != "" { + chain.SourceURL = msg.SourceURL + } + if msg.SourceHash != "" { + chain.SourceHash = msg.SourceHash + } + if msg.InitialGenesis != nil { + chain.InitialGenesis = *msg.InitialGenesis + } + + if err := k.Chain.Set(ctx, chain.LaunchID, chain); err != nil { + return nil, ignterrors.Criticalf("chain not set %s", err.Error()) + } + + return &types.MsgUpdateLaunchInformationResponse{}, nil +} diff --git a/x/launch/keeper/msg_update_launch_information_test.go b/x/launch/keeper/msg_server_update_launch_information_test.go similarity index 83% rename from x/launch/keeper/msg_update_launch_information_test.go rename to x/launch/keeper/msg_server_update_launch_information_test.go index baed2e14..13937bc9 100644 --- a/x/launch/keeper/msg_update_launch_information_test.go +++ b/x/launch/keeper/msg_server_update_launch_information_test.go @@ -3,18 +3,16 @@ package keeper_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" ) func TestMsgUpdateLaunchInformation(t *testing.T) { - sdkCtx, tk, ts := testkeeper.NewTestSetup(t) - ctx := sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts := testkeeper.NewTestSetup(t) coordNoExist := sample.Address(r) launchIDNoExist := uint64(1000) @@ -28,12 +26,14 @@ func TestMsgUpdateLaunchInformation(t *testing.T) { // Create a chain launchID := uint64(1) chain := sample.Chain(r, launchID, coordID) - tk.LaunchKeeper.SetChain(sdkCtx, chain) + err := tk.LaunchKeeper.Chain.Set(ctx, chain.LaunchID, chain) + require.NoError(t, err) launchIDLaunchTriggered := uint64(2) chain = sample.Chain(r, launchIDLaunchTriggered, coordID) chain.LaunchTriggered = true - tk.LaunchKeeper.SetChain(sdkCtx, chain) + err = tk.LaunchKeeper.Chain.Set(ctx, chain.LaunchID, chain) + require.NoError(t, err) for _, tc := range []struct { name string @@ -117,7 +117,7 @@ func TestMsgUpdateLaunchInformation(t *testing.T) { false, false, ), - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should prevent updating from invalid coordinator", @@ -129,7 +129,7 @@ func TestMsgUpdateLaunchInformation(t *testing.T) { false, false, ), - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "should prevent updating if chain launch already triggered", @@ -147,14 +147,14 @@ func TestMsgUpdateLaunchInformation(t *testing.T) { t.Run(tc.name, func(t *testing.T) { // Fetch the previous state of the chain to perform checks var previousChain types.Chain - var found bool + var err error if tc.err == nil { - previousChain, found = tk.LaunchKeeper.GetChain(sdkCtx, tc.msg.LaunchID) - require.True(t, found) + previousChain, err = tk.LaunchKeeper.GetChain(ctx, tc.msg.LaunchID) + require.NoError(t, err) } // Send the message - _, err := ts.LaunchSrv.UpdateLaunchInformation(ctx, &tc.msg) + _, err = ts.LaunchSrv.UpdateLaunchInformation(ctx, &tc.msg) if tc.err != nil { require.ErrorIs(t, err, tc.err) return @@ -162,8 +162,8 @@ func TestMsgUpdateLaunchInformation(t *testing.T) { require.NoError(t, err) // The chain must continue to exist in the store - chain, found := tk.LaunchKeeper.GetChain(sdkCtx, tc.msg.LaunchID) - require.True(t, found) + chain, err := tk.LaunchKeeper.GetChain(ctx, tc.msg.LaunchID) + require.NoError(t, err) // Unchanged values require.EqualValues(t, previousChain.CoordinatorID, chain.CoordinatorID) diff --git a/x/launch/keeper/msg_settle_request.go b/x/launch/keeper/msg_settle_request.go deleted file mode 100644 index 37df7dbf..00000000 --- a/x/launch/keeper/msg_settle_request.go +++ /dev/null @@ -1,83 +0,0 @@ -package keeper - -import ( - "context" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" -) - -func (k msgServer) SettleRequest( - goCtx context.Context, - msg *types.MsgSettleRequest, -) (*types.MsgSettleRequestResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - chain, found := k.GetChain(ctx, msg.LaunchID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrChainNotFound, "%d", msg.LaunchID) - } - - if chain.LaunchTriggered { - return nil, sdkerrors.Wrapf(types.ErrTriggeredLaunch, "%d", msg.LaunchID) - } - - coord, found := k.profileKeeper.GetCoordinator(ctx, chain.CoordinatorID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrChainInactive, - "the chain %d coordinator not found", chain.LaunchID) - } - - if !coord.Active { - return nil, sdkerrors.Wrapf(profiletypes.ErrCoordInactive, - "the chain %d coordinator inactive", chain.LaunchID) - } - - if msg.Approve && msg.Signer != coord.Address { - return nil, sdkerrors.Wrap(types.ErrNoAddressPermission, msg.Signer) - } - - // first check if the request exists - request, found := k.GetRequest(ctx, msg.LaunchID, msg.RequestID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrRequestNotFound, - "request %d for chain %d not found", - msg.RequestID, - msg.LaunchID, - ) - } - - if request.Status != types.Request_PENDING { - return nil, sdkerrors.Wrapf(types.ErrRequestSettled, - "request %d is not pending", - msg.RequestID, - ) - } - - if msg.Signer != request.Creator && msg.Signer != coord.Address { - return nil, sdkerrors.Wrap(types.ErrNoAddressPermission, msg.Signer) - } - - // apply request if approving and update status - if msg.Approve { - err := ApplyRequest(ctx, k.Keeper, chain, request, coord) - if err != nil { - return nil, err - } - request.Status = types.Request_APPROVED - } else { - request.Status = types.Request_REJECTED - } - - k.SetRequest(ctx, request) - err := ctx.EventManager().EmitTypedEvent(&types.EventRequestSettled{ - LaunchID: msg.LaunchID, - RequestID: request.RequestID, - Approved: msg.Approve, - }) - - return &types.MsgSettleRequestResponse{}, err -} diff --git a/x/launch/keeper/msg_trigger_launch.go b/x/launch/keeper/msg_trigger_launch.go deleted file mode 100644 index 067305bc..00000000 --- a/x/launch/keeper/msg_trigger_launch.go +++ /dev/null @@ -1,61 +0,0 @@ -package keeper - -import ( - "context" - "fmt" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" -) - -func (k msgServer) TriggerLaunch(goCtx context.Context, msg *types.MsgTriggerLaunch) (*types.MsgTriggerLaunchResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - chain, found := k.GetChain(ctx, msg.LaunchID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrChainNotFound, "%d", msg.LaunchID) - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - if chain.CoordinatorID != coordID { - return nil, sdkerrors.Wrap(profiletypes.ErrCoordInvalid, fmt.Sprintf( - "coordinator of the chain is %d", - chain.CoordinatorID, - )) - } - - if chain.LaunchTriggered { - return nil, sdkerrors.Wrapf(types.ErrTriggeredLaunch, "%d", msg.LaunchID) - } - - if msg.LaunchTime.Before(ctx.BlockTime().Add(k.LaunchTimeRange(ctx).MinLaunchTime)) { - return nil, sdkerrors.Wrapf(types.ErrLaunchTimeTooLow, "%s", msg.LaunchTime.String()) - } - if msg.LaunchTime.After(ctx.BlockTime().Add(k.LaunchTimeRange(ctx).MaxLaunchTime)) { - return nil, sdkerrors.Wrapf(types.ErrLaunchTimeTooHigh, "%s", msg.LaunchTime.String()) - } - - // set launch timestamp - chain.LaunchTriggered = true - chain.LaunchTime = msg.LaunchTime - - // set revision height for monitoring IBC client - chain.ConsumerRevisionHeight = ctx.BlockHeight() - - k.SetChain(ctx, chain) - - err = ctx.EventManager().EmitTypedEvent(&types.EventLaunchTriggered{ - LaunchID: msg.LaunchID, - LaunchTimeStamp: chain.LaunchTime, - }) - - return &types.MsgTriggerLaunchResponse{}, err -} diff --git a/x/launch/keeper/msg_update_launch_information.go b/x/launch/keeper/msg_update_launch_information.go deleted file mode 100644 index e6e2ee7c..00000000 --- a/x/launch/keeper/msg_update_launch_information.go +++ /dev/null @@ -1,58 +0,0 @@ -package keeper - -import ( - "context" - "fmt" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" -) - -func (k msgServer) UpdateLaunchInformation( - goCtx context.Context, - msg *types.MsgUpdateLaunchInformation, -) (*types.MsgUpdateLaunchInformationResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - chain, found := k.GetChain(ctx, msg.LaunchID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrChainNotFound, "%d", msg.LaunchID) - } - - if chain.LaunchTriggered { - return nil, sdkerrors.Wrapf(types.ErrTriggeredLaunch, "%d", msg.LaunchID) - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - if chain.CoordinatorID != coordID { - return nil, sdkerrors.Wrap(profiletypes.ErrCoordInvalid, fmt.Sprintf( - "coordinator of the chain is %d", - chain.CoordinatorID, - )) - } - - // Modify from provided values - if msg.GenesisChainID != "" { - chain.GenesisChainID = msg.GenesisChainID - } - if msg.SourceURL != "" { - chain.SourceURL = msg.SourceURL - } - if msg.SourceHash != "" { - chain.SourceHash = msg.SourceHash - } - if msg.InitialGenesis != nil { - chain.InitialGenesis = *msg.InitialGenesis - } - - k.SetChain(ctx, chain) - return &types.MsgUpdateLaunchInformationResponse{}, nil -} diff --git a/x/launch/keeper/msg_update_params.go b/x/launch/keeper/msg_update_params.go new file mode 100644 index 00000000..7f9ac119 --- /dev/null +++ b/x/launch/keeper/msg_update_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + + "github.com/ignite/network/x/launch/types" +) + +func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if _, err := k.addressCodec.StringToBytes(req.Authority); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + if k.GetAuthority() != req.Authority { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) + } + + if err := req.Params.Validate(); err != nil { + return nil, err + } + + if err := k.Params.Set(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/launch/keeper/msg_update_params_test.go b/x/launch/keeper/msg_update_params_test.go new file mode 100644 index 00000000..51bb0bdb --- /dev/null +++ b/x/launch/keeper/msg_update_params_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func TestMsgUpdateParams(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + ms := keeper.NewMsgServerImpl(k) + + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + // default params + testCases := []struct { + name string + input *types.MsgUpdateParams + expErr bool + expErrMsg string + }{ + { + name: "invalid authority", + input: &types.MsgUpdateParams{ + Authority: "invalid", + Params: params, + }, + expErr: true, + expErrMsg: "invalid authority", + }, + { + name: "send enabled param", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: types.Params{}, + }, + expErr: false, + }, + { + name: "all good", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: params, + }, + expErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, err := ms.UpdateParams(ctx, tc.input) + + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expErrMsg) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/launch/keeper/param_change.go b/x/launch/keeper/param_change.go deleted file mode 100644 index 3b4df096..00000000 --- a/x/launch/keeper/param_change.go +++ /dev/null @@ -1,53 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" -) - -// SetParamChange set a specific ParamChange in the store from its index -func (k Keeper) SetParamChange(ctx sdk.Context, paramChange types.ParamChange) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ParamChangeKeyPrefix)) - b := k.cdc.MustMarshal(¶mChange) - store.Set(types.ParamChangePath( - paramChange.LaunchID, - paramChange.Module, - paramChange.Param, - ), b) -} - -// GetParamChange returns a ParamChange from its index -func (k Keeper) GetParamChange( - ctx sdk.Context, - launchID uint64, - module, - param string, -) (val types.ParamChange, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ParamChangeKeyPrefix)) - - b := store.Get(types.ParamChangePath(launchID, module, param)) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// GetAllParamChange returns all ParamChange -func (k Keeper) GetAllParamChange(ctx sdk.Context) (list []types.ParamChange) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ParamChangeKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.ParamChange - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/launch/keeper/param_change_test.go b/x/launch/keeper/param_change_test.go deleted file mode 100644 index 2ff525aa..00000000 --- a/x/launch/keeper/param_change_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -func createNParamChange(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.ParamChange { - items := make([]types.ParamChange, n) - for i := range items { - keeper.SetChain(ctx, sample.Chain(r, uint64(i), sample.Uint64(r))) - items[i] = sample.ParamChange(r, uint64(i)) - keeper.SetParamChange(ctx, items[i]) - } - return items -} - -func TestParamChangeGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNParamChange(tk.LaunchKeeper, ctx, 10) - - t.Run("should get a change param", func(t *testing.T) { - for i, item := range items { - rst, found := tk.LaunchKeeper.GetParamChange(ctx, - uint64(i), - item.Module, - item.Param, - ) - require.True(t, found) - require.Equal(t, item, rst) - } - }) -} - -func TestParamChangeGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNParamChange(tk.LaunchKeeper, ctx, 10) - - t.Run("should get all change param", func(t *testing.T) { - require.ElementsMatch(t, items, tk.LaunchKeeper.GetAllParamChange(ctx)) - }) -} diff --git a/x/launch/keeper/params.go b/x/launch/keeper/params.go deleted file mode 100644 index 0c7aefce..00000000 --- a/x/launch/keeper/params.go +++ /dev/null @@ -1,56 +0,0 @@ -package keeper - -import ( - "time" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/launch/types" -) - -// LaunchTimeRange returns the launch time range param -func (k Keeper) LaunchTimeRange(ctx sdk.Context) (res types.LaunchTimeRange) { - k.paramstore.Get(ctx, types.KeyLaunchTimeRange, &res) - return -} - -// RevertDelay returns the revert delay param -func (k Keeper) RevertDelay(ctx sdk.Context) (res time.Duration) { - k.paramstore.Get(ctx, types.KeyRevertDelay, &res) - return -} - -// ChainCreationFee returns the chain creation fee param -func (k Keeper) ChainCreationFee(ctx sdk.Context) (chainCreationFee sdk.Coins) { - k.paramstore.Get(ctx, types.KeyChainCreationFee, &chainCreationFee) - return -} - -// RequestFee returns the request fee param -func (k Keeper) RequestFee(ctx sdk.Context) (requestFee sdk.Coins) { - k.paramstore.Get(ctx, types.KeyRequestFee, &requestFee) - return -} - -// MaxMetadataLength returns the param that defines the max metadata length -func (k Keeper) MaxMetadataLength(ctx sdk.Context) (maxMetadataLength uint64) { - k.paramstore.Get(ctx, types.KeyMaxMetadataLength, &maxMetadataLength) - return -} - -// GetParams get all parameters as types.Params -func (k Keeper) GetParams(ctx sdk.Context) types.Params { - return types.NewParams( - k.LaunchTimeRange(ctx).MinLaunchTime, - k.LaunchTimeRange(ctx).MaxLaunchTime, - k.RevertDelay(ctx), - k.ChainCreationFee(ctx), - k.RequestFee(ctx), - k.MaxMetadataLength(ctx), - ) -} - -// SetParams set the params -func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { - k.paramstore.SetParamSet(ctx, ¶ms) -} diff --git a/x/launch/keeper/params_test.go b/x/launch/keeper/params_test.go deleted file mode 100644 index a8274349..00000000 --- a/x/launch/keeper/params_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" -) - -func Test_GetParams(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - params := sample.LaunchParams(r) - - t.Run("should get the params", func(t *testing.T) { - tk.LaunchKeeper.SetParams(ctx, params) - - require.EqualValues(t, params, tk.LaunchKeeper.GetParams(ctx)) - require.EqualValues(t, params.LaunchTimeRange.MaxLaunchTime, tk.LaunchKeeper.LaunchTimeRange(ctx).MaxLaunchTime) - require.EqualValues(t, params.LaunchTimeRange.MinLaunchTime, tk.LaunchKeeper.LaunchTimeRange(ctx).MinLaunchTime) - require.EqualValues(t, params.RevertDelay, tk.LaunchKeeper.RevertDelay(ctx)) - require.EqualValues(t, params.ChainCreationFee, tk.LaunchKeeper.ChainCreationFee(ctx)) - }) -} diff --git a/x/launch/keeper/query.go b/x/launch/keeper/query.go new file mode 100644 index 00000000..8602beea --- /dev/null +++ b/x/launch/keeper/query.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "github.com/ignite/network/x/launch/types" +) + +var _ types.QueryServer = queryServer{} + +// NewQueryServerImpl returns an implementation of the QueryServer interface +// for the provided Keeper. +func NewQueryServerImpl(k Keeper) types.QueryServer { + return queryServer{k} +} + +type queryServer struct { + k Keeper +} diff --git a/x/launch/keeper/query_chain.go b/x/launch/keeper/query_chain.go new file mode 100644 index 00000000..1d40d628 --- /dev/null +++ b/x/launch/keeper/query_chain.go @@ -0,0 +1,51 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/launch/types" +) + +func (q queryServer) ListChain(ctx context.Context, req *types.QueryAllChainRequest) (*types.QueryAllChainResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + chains, pageRes, err := query.CollectionPaginate( + ctx, + q.k.Chain, + req.Pagination, + func(_ uint64, value types.Chain) (types.Chain, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllChainResponse{Chain: chains, Pagination: pageRes}, nil +} + +func (q queryServer) GetChain(ctx context.Context, req *types.QueryGetChainRequest) (*types.QueryGetChainResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + chain, err := q.k.Chain.Get(ctx, req.LaunchID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, sdkerrors.ErrKeyNotFound + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetChainResponse{Chain: chain}, nil +} diff --git a/x/launch/keeper/query_chain_test.go b/x/launch/keeper/query_chain_test.go new file mode 100644 index 00000000..75822c3e --- /dev/null +++ b/x/launch/keeper/query_chain_test.go @@ -0,0 +1,130 @@ +package keeper_test + +import ( + "context" + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func createNChain(keeper keeper.Keeper, ctx context.Context, n int) []types.Chain { + items := make([]types.Chain, n) + for i := range items { + iu := uint64(i) + items[i].LaunchID = iu + _ = keeper.Chain.Set(ctx, iu, items[i]) + _ = keeper.ChainSeq.Set(ctx, iu) + } + return items +} + +func TestChainQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNChain(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetChainRequest + response *types.QueryGetChainResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetChainRequest{LaunchID: msgs[0].LaunchID}, + response: &types.QueryGetChainResponse{Chain: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetChainRequest{LaunchID: msgs[1].LaunchID}, + response: &types.QueryGetChainResponse{Chain: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetChainRequest{LaunchID: uint64(len(msgs))}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetChain(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestChainQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNChain(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllChainRequest { + return &types.QueryAllChainRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListChain(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Chain), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Chain), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListChain(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Chain), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Chain), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListChain(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.Chain), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListChain(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/launch/keeper/query_genesis_account.go b/x/launch/keeper/query_genesis_account.go new file mode 100644 index 00000000..120b0be0 --- /dev/null +++ b/x/launch/keeper/query_genesis_account.go @@ -0,0 +1,59 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/launch/types" +) + +func (q queryServer) ListGenesisAccount(ctx context.Context, req *types.QueryAllGenesisAccountRequest) (*types.QueryAllGenesisAccountResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + genesisAccounts, pageRes, err := query.CollectionFilteredPaginate( + ctx, + q.k.GenesisAccount, + req.Pagination, + func(_ collections.Pair[uint64, sdk.AccAddress], value types.GenesisAccount) (bool, error) { + return req.LaunchID == value.LaunchID, nil + }, + func(_ collections.Pair[uint64, sdk.AccAddress], value types.GenesisAccount) (types.GenesisAccount, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllGenesisAccountResponse{GenesisAccount: genesisAccounts, Pagination: pageRes}, nil +} + +func (q queryServer) GetGenesisAccount(ctx context.Context, req *types.QueryGetGenesisAccountRequest) (*types.QueryGetGenesisAccountResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + address, err := q.k.addressCodec.StringToBytes(req.Address) + if err != nil { + return nil, status.Error(codes.Internal, "internal error") + } + + val, err := q.k.GenesisAccount.Get(ctx, collections.Join(req.LaunchID, sdk.AccAddress(address))) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetGenesisAccountResponse{GenesisAccount: val}, nil +} diff --git a/x/launch/keeper/query_genesis_account_test.go b/x/launch/keeper/query_genesis_account_test.go new file mode 100644 index 00000000..b76aeded --- /dev/null +++ b/x/launch/keeper/query_genesis_account_test.go @@ -0,0 +1,142 @@ +package keeper_test + +import ( + "context" + "strconv" + "testing" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNGenesisAccount(keeper keeper.Keeper, ctx context.Context, n int) []types.GenesisAccount { + items := make([]types.GenesisAccount, n) + for i := range items { + address := sample.AccAddress(r) + items[i].LaunchID = uint64(i) + items[i].Address = address.String() + + _ = keeper.GenesisAccount.Set(ctx, collections.Join(items[i].LaunchID, address), items[i]) + } + return items +} + +func TestGenesisAccountQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNGenesisAccount(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetGenesisAccountRequest + response *types.QueryGetGenesisAccountResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetGenesisAccountRequest{ + LaunchID: msgs[0].LaunchID, + }, + response: &types.QueryGetGenesisAccountResponse{GenesisAccount: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetGenesisAccountRequest{ + LaunchID: msgs[1].LaunchID, + }, + response: &types.QueryGetGenesisAccountResponse{GenesisAccount: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetGenesisAccountRequest{ + LaunchID: 100000, + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetGenesisAccount(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestGenesisAccountQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNGenesisAccount(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllGenesisAccountRequest { + return &types.QueryAllGenesisAccountRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListGenesisAccount(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.GenesisAccount), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.GenesisAccount), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListGenesisAccount(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.GenesisAccount), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.GenesisAccount), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListGenesisAccount(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.GenesisAccount), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListGenesisAccount(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/launch/keeper/query_genesis_validator.go b/x/launch/keeper/query_genesis_validator.go new file mode 100644 index 00000000..a283fecd --- /dev/null +++ b/x/launch/keeper/query_genesis_validator.go @@ -0,0 +1,59 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/launch/types" +) + +func (q queryServer) ListGenesisValidator(ctx context.Context, req *types.QueryAllGenesisValidatorRequest) (*types.QueryAllGenesisValidatorResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + genesisValidators, pageRes, err := query.CollectionFilteredPaginate( + ctx, + q.k.GenesisValidator, + req.Pagination, + func(_ collections.Pair[uint64, sdk.AccAddress], value types.GenesisValidator) (bool, error) { + return req.LaunchID == value.LaunchID, nil + }, + func(_ collections.Pair[uint64, sdk.AccAddress], value types.GenesisValidator) (types.GenesisValidator, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllGenesisValidatorResponse{GenesisValidator: genesisValidators, Pagination: pageRes}, nil +} + +func (q queryServer) GetGenesisValidator(ctx context.Context, req *types.QueryGetGenesisValidatorRequest) (*types.QueryGetGenesisValidatorResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + address, err := q.k.addressCodec.StringToBytes(req.Address) + if err != nil { + return nil, status.Error(codes.Internal, "internal error") + } + + val, err := q.k.GenesisValidator.Get(ctx, collections.Join(req.LaunchID, sdk.AccAddress(address))) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetGenesisValidatorResponse{GenesisValidator: val}, nil +} diff --git a/x/launch/keeper/query_genesis_validator_test.go b/x/launch/keeper/query_genesis_validator_test.go new file mode 100644 index 00000000..a447735a --- /dev/null +++ b/x/launch/keeper/query_genesis_validator_test.go @@ -0,0 +1,142 @@ +package keeper_test + +import ( + "context" + "strconv" + "testing" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNGenesisValidator(keeper keeper.Keeper, ctx context.Context, n int) []types.GenesisValidator { + items := make([]types.GenesisValidator, n) + for i := range items { + address := sample.AccAddress(r) + items[i].LaunchID = uint64(i) + items[i].Address = address.String() + + _ = keeper.GenesisValidator.Set(ctx, collections.Join(items[i].LaunchID, address), items[i]) + } + return items +} + +func TestGenesisValidatorQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNGenesisValidator(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetGenesisValidatorRequest + response *types.QueryGetGenesisValidatorResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetGenesisValidatorRequest{ + LaunchID: msgs[0].LaunchID, + }, + response: &types.QueryGetGenesisValidatorResponse{GenesisValidator: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetGenesisValidatorRequest{ + LaunchID: msgs[1].LaunchID, + }, + response: &types.QueryGetGenesisValidatorResponse{GenesisValidator: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetGenesisValidatorRequest{ + LaunchID: 100000, + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetGenesisValidator(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestGenesisValidatorQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNGenesisValidator(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllGenesisValidatorRequest { + return &types.QueryAllGenesisValidatorRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListGenesisValidator(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.GenesisValidator), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.GenesisValidator), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListGenesisValidator(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.GenesisValidator), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.GenesisValidator), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListGenesisValidator(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.GenesisValidator), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListGenesisValidator(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/launch/keeper/query_param_change.go b/x/launch/keeper/query_param_change.go new file mode 100644 index 00000000..967d17b3 --- /dev/null +++ b/x/launch/keeper/query_param_change.go @@ -0,0 +1,35 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/launch/types" +) + +func (q queryServer) ListParamChange(ctx context.Context, req *types.QueryAllParamChangeRequest) (*types.QueryAllParamChangeResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + paramChanges, pageRes, err := query.CollectionFilteredPaginate( + ctx, + q.k.ParamChange, + req.Pagination, + func(_ collections.Pair[uint64, string], value types.ParamChange) (bool, error) { + return value.LaunchID == req.LaunchID, nil + }, + func(_ collections.Pair[uint64, string], value types.ParamChange) (types.ParamChange, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllParamChangeResponse{ParamChange: paramChanges, Pagination: pageRes}, nil +} diff --git a/x/launch/keeper/query_param_change_test.go b/x/launch/keeper/query_param_change_test.go new file mode 100644 index 00000000..96846c1d --- /dev/null +++ b/x/launch/keeper/query_param_change_test.go @@ -0,0 +1,91 @@ +package keeper_test + +import ( + "context" + "fmt" + "strconv" + "testing" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNParamChange(keeper keeper.Keeper, ctx context.Context, n int) []types.ParamChange { + items := make([]types.ParamChange, n) + launchID := uint64(0) + for i := range items { + items[i].LaunchID = launchID + items[i].Module = fmt.Sprintf("module_%d", i) + items[i].Param = fmt.Sprintf("param_%d", i) + + _ = keeper.ParamChange.Set(ctx, collections.Join(items[i].LaunchID, types.ParamChangeSubKey(items[i].Module, items[i].Param)), items[i]) + } + return items +} + +func TestParamChangeQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNParamChange(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllParamChangeRequest { + return &types.QueryAllParamChangeRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListParamChange(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.ParamChange), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.ParamChange), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListParamChange(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.ParamChange), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.ParamChange), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListParamChange(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.ParamChange), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListParamChange(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/launch/keeper/query_params.go b/x/launch/keeper/query_params.go new file mode 100644 index 00000000..fd6f4ec2 --- /dev/null +++ b/x/launch/keeper/query_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/launch/types" +) + +func (q queryServer) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + params, err := q.k.Params.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/x/launch/keeper/query_params_test.go b/x/launch/keeper/query_params_test.go new file mode 100644 index 00000000..015f9bed --- /dev/null +++ b/x/launch/keeper/query_params_test.go @@ -0,0 +1,23 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func TestParamsQuery(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + + qs := keeper.NewQueryServerImpl(k) + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + response, err := qs.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/launch/keeper/query_request.go b/x/launch/keeper/query_request.go new file mode 100644 index 00000000..eb5f6755 --- /dev/null +++ b/x/launch/keeper/query_request.go @@ -0,0 +1,54 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/launch/types" +) + +func (q queryServer) ListRequest(ctx context.Context, req *types.QueryAllRequestRequest) (*types.QueryAllRequestResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + requests, pageRes, err := query.CollectionFilteredPaginate( + ctx, + q.k.Request, + req.Pagination, + func(_ collections.Pair[uint64, uint64], value types.Request) (bool, error) { + return value.LaunchID == req.LaunchID, nil + }, + func(_ collections.Pair[uint64, uint64], value types.Request) (types.Request, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllRequestResponse{Request: requests, Pagination: pageRes}, nil +} + +func (q queryServer) GetRequest(ctx context.Context, req *types.QueryGetRequestRequest) (*types.QueryGetRequestResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + request, err := q.k.Request.Get(ctx, collections.Join(req.LaunchID, req.RequestID)) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, sdkerrors.ErrKeyNotFound + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetRequestResponse{Request: request}, nil +} diff --git a/x/launch/keeper/query_request_test.go b/x/launch/keeper/query_request_test.go new file mode 100644 index 00000000..9fdc2e47 --- /dev/null +++ b/x/launch/keeper/query_request_test.go @@ -0,0 +1,133 @@ +package keeper_test + +import ( + "context" + "testing" + + "cosmossdk.io/collections" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func createNRequest(keeper keeper.Keeper, ctx context.Context, n int) []types.Request { + items := make([]types.Request, n) + launchID := uint64(0) + for i := range items { + iu := uint64(i) + items[i].LaunchID = launchID + items[i].RequestID = iu + _ = keeper.Request.Set(ctx, collections.Join(launchID, iu), items[i]) + _ = keeper.RequestSeq.Set(ctx, launchID, iu) + } + return items +} + +func TestRequestQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNRequest(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetRequestRequest + response *types.QueryGetRequestResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetRequestRequest{LaunchID: msgs[0].LaunchID, RequestID: msgs[0].RequestID}, + response: &types.QueryGetRequestResponse{Request: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetRequestRequest{LaunchID: msgs[1].LaunchID, RequestID: msgs[1].RequestID}, + response: &types.QueryGetRequestResponse{Request: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetRequestRequest{LaunchID: uint64(len(msgs)), RequestID: uint64(len(msgs))}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetRequest(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestRequestQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNRequest(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllRequestRequest { + return &types.QueryAllRequestRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListRequest(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Request), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Request), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListRequest(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Request), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Request), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListRequest(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.Request), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListRequest(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/launch/keeper/query_vesting_account.go b/x/launch/keeper/query_vesting_account.go new file mode 100644 index 00000000..0ab47e9f --- /dev/null +++ b/x/launch/keeper/query_vesting_account.go @@ -0,0 +1,59 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/launch/types" +) + +func (q queryServer) ListVestingAccount(ctx context.Context, req *types.QueryAllVestingAccountRequest) (*types.QueryAllVestingAccountResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + vestingAccounts, pageRes, err := query.CollectionFilteredPaginate( + ctx, + q.k.VestingAccount, + req.Pagination, + func(_ collections.Pair[uint64, sdk.AccAddress], value types.VestingAccount) (bool, error) { + return req.LaunchID == value.LaunchID, nil + }, + func(_ collections.Pair[uint64, sdk.AccAddress], value types.VestingAccount) (types.VestingAccount, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllVestingAccountResponse{VestingAccount: vestingAccounts, Pagination: pageRes}, nil +} + +func (q queryServer) GetVestingAccount(ctx context.Context, req *types.QueryGetVestingAccountRequest) (*types.QueryGetVestingAccountResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + address, err := q.k.addressCodec.StringToBytes(req.Address) + if err != nil { + return nil, status.Error(codes.Internal, "internal error") + } + + val, err := q.k.VestingAccount.Get(ctx, collections.Join(req.LaunchID, sdk.AccAddress(address))) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetVestingAccountResponse{VestingAccount: val}, nil +} diff --git a/x/launch/keeper/query_vesting_account_test.go b/x/launch/keeper/query_vesting_account_test.go new file mode 100644 index 00000000..af1c5a0a --- /dev/null +++ b/x/launch/keeper/query_vesting_account_test.go @@ -0,0 +1,142 @@ +package keeper_test + +import ( + "context" + "strconv" + "testing" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNVestingAccount(keeper keeper.Keeper, ctx context.Context, n int) []types.VestingAccount { + items := make([]types.VestingAccount, n) + for i := range items { + address := sample.AccAddress(r) + items[i].LaunchID = uint64(i) + items[i].Address = address.String() + + _ = keeper.VestingAccount.Set(ctx, collections.Join(items[i].LaunchID, address), items[i]) + } + return items +} + +func TestVestingAccountQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNVestingAccount(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetVestingAccountRequest + response *types.QueryGetVestingAccountResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetVestingAccountRequest{ + LaunchID: msgs[0].LaunchID, + }, + response: &types.QueryGetVestingAccountResponse{VestingAccount: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetVestingAccountRequest{ + LaunchID: msgs[1].LaunchID, + }, + response: &types.QueryGetVestingAccountResponse{VestingAccount: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetVestingAccountRequest{ + LaunchID: 100000, + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetVestingAccount(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestVestingAccountQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.LaunchKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNVestingAccount(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllVestingAccountRequest { + return &types.QueryAllVestingAccountRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListVestingAccount(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.VestingAccount), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.VestingAccount), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListVestingAccount(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.VestingAccount), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.VestingAccount), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListVestingAccount(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.VestingAccount), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListVestingAccount(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/launch/keeper/request.go b/x/launch/keeper/request.go index fd4c1e67..285edfcf 100644 --- a/x/launch/keeper/request.go +++ b/x/launch/keeper/request.go @@ -1,129 +1,80 @@ package keeper import ( - "encoding/binary" - "fmt" + "context" + "errors" + "cosmossdk.io/collections" sdkerrors "cosmossdk.io/errors" - "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" - ignterrors "github.com/ignite/modules/pkg/errors" - - "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" ) -// GetRequestCounter get request counter for a specific chain ID -func (k Keeper) GetRequestCounter(ctx sdk.Context, launchID uint64) uint64 { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RequestCounterKeyPrefix)) - bz := store.Get(types.RequestCounterKey(launchID)) - - // Counter doesn't exist: no element - if bz == nil { - return 1 - } - - // Parse bytes - return binary.BigEndian.Uint64(bz) +// Requests returns all request. +func (k Keeper) Requests(ctx context.Context) ([]types.Request, error) { + requests := make([]types.Request, 0) + err := k.Request.Walk(ctx, nil, func(_ collections.Pair[uint64, uint64], value types.Request) (bool, error) { + requests = append(requests, value) + return false, nil + }) + return requests, err } -// SetRequestCounter set the total number of request for a chain -func (k Keeper) SetRequestCounter(ctx sdk.Context, launchID, counter uint64) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RequestCounterKeyPrefix)) - bz := make([]byte, 8) - binary.BigEndian.PutUint64(bz, counter) - store.Set(types.RequestCounterKey(launchID), bz) -} - -// SetRequest set a specific request in the store from its index -func (k Keeper) SetRequest(ctx sdk.Context, request types.Request) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RequestKeyPrefix)) - b := k.cdc.MustMarshal(&request) - store.Set(types.RequestKey( - request.LaunchID, - request.RequestID, - ), b) -} - -// AppendRequest appends a request for a chain in the store with a new id and update the counter -func (k Keeper) AppendRequest(ctx sdk.Context, request types.Request) uint64 { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RequestKeyPrefix)) - - counter := k.GetRequestCounter(ctx, request.LaunchID) - request.RequestID = counter - - b := k.cdc.MustMarshal(&request) - store.Set(types.RequestKey( - request.LaunchID, - request.RequestID, - ), b) - - // increment the counter - k.SetRequestCounter(ctx, request.LaunchID, counter+1) - - return counter -} - -// GetRequest returns a request from its index -func (k Keeper) GetRequest( - ctx sdk.Context, - launchID, - requestID uint64, -) (val types.Request, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RequestKeyPrefix)) - - b := store.Get(types.RequestKey( - launchID, - requestID, - )) - if b == nil { - return val, false +// GetRequestCounter get request counter for a specific chain ID +func (k Keeper) GetRequestCounter(ctx context.Context, launchID uint64) (uint64, error) { + seq, err := k.RequestSeq.Get(ctx, launchID) + if errors.Is(err, collections.ErrNotFound) { + return 0, nil } - - k.cdc.MustUnmarshal(b, &val) - return val, true + return seq, err } -// RemoveRequest removes a request from the store -func (k Keeper) RemoveRequest( - ctx sdk.Context, - launchID, - requestID uint64, -) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RequestKeyPrefix)) - store.Delete(types.RequestKey( - launchID, - requestID, - )) +// GetNextRequestIDWithUpdate increments bid id by one and set it. +func (k Keeper) GetNextRequestIDWithUpdate(ctx context.Context, launchID uint64) (uint64, error) { + seq, err := k.RequestSeq.Get(ctx, launchID) + if errors.Is(err, collections.ErrNotFound) { + seq = 0 + } else if err != nil { + return 0, err + } + seq++ + return seq, k.RequestSeq.Set(ctx, launchID, seq) } -// GetAllRequest returns all request -func (k Keeper) GetAllRequest(ctx sdk.Context) (list []types.Request) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RequestKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.Request - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) +// AppendRequest appends a Request in the store with a new launch id and update the count +func (k Keeper) AppendRequest(ctx context.Context, request types.Request) (uint64, error) { + requestID, err := k.GetNextRequestIDWithUpdate(ctx, request.LaunchID) + if err != nil { + return 0, ignterrors.Criticalf("failed to get next request sequence %s", err.Error()) } - - return + request.RequestID = requestID + if err := k.Request.Set(ctx, collections.Join(request.LaunchID, requestID), request); err != nil { + return 0, ignterrors.Criticalf("request not set %s", err.Error()) + } + return requestID, nil } // CheckAccount check account inconsistency and return // if an account exists for genesis or vesting accounts -func CheckAccount(ctx sdk.Context, k Keeper, launchID uint64, address string) (bool, error) { - _, foundGenesis := k.GetGenesisAccount(ctx, launchID, address) - _, foundVesting := k.GetVestingAccount(ctx, launchID, address) +func CheckAccount(ctx context.Context, k Keeper, launchID uint64, address string) (bool, error) { + accAddress, err := k.addressCodec.StringToBytes(address) + if err != nil { + return false, ignterrors.Criticalf("invalid bech32 format %s", address) + } + + foundGenesis, err := k.GenesisAccount.Has(ctx, collections.Join(launchID, sdk.AccAddress(accAddress))) + if err != nil { + return false, err + } + foundVesting, err := k.VestingAccount.Has(ctx, collections.Join(launchID, sdk.AccAddress(accAddress))) + if err != nil { + return false, err + } if foundGenesis && foundVesting { - return false, ignterrors.Critical( - fmt.Sprintf("account %s for chain %d found in vesting and genesis accounts", - address, launchID), - ) + return false, ignterrors.Criticalf("account %s for chain %d found in vesting and genesis accounts", address, launchID) } return foundGenesis || foundVesting, nil } @@ -131,12 +82,13 @@ func CheckAccount(ctx sdk.Context, k Keeper, launchID uint64, address string) (b // ApplyRequest approves the request and performs // the launch information changes func ApplyRequest( - ctx sdk.Context, + ctx context.Context, k Keeper, chain types.Chain, request types.Request, coord profiletypes.Coordinator, ) error { + sdkCtx := sdk.UnwrapSDKContext(ctx) err := CheckRequest(ctx, k, chain.LaunchID, request) if err != nil { return err @@ -148,8 +100,16 @@ func ApplyRequest( if !chain.AccountBalance.Empty() { ga.Coins = chain.AccountBalance } - k.SetGenesisAccount(ctx, *ga) - err = ctx.EventManager().EmitTypedEvent(&types.EventGenesisAccountAdded{ + + address, err := k.addressCodec.StringToBytes(ga.Address) + if err != nil { + return err + } + if err := k.GenesisAccount.Set(ctx, collections.Join(ga.LaunchID, sdk.AccAddress(address)), *ga); err != nil { + return err + } + + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventGenesisAccountAdded{ Address: ga.Address, Coins: ga.Coins, LaunchID: chain.LaunchID, @@ -173,8 +133,16 @@ func ApplyRequest( } } } - k.SetVestingAccount(ctx, *va) - err = ctx.EventManager().EmitTypedEvent(&types.EventVestingAccountAdded{ + + address, err := k.addressCodec.StringToBytes(va.Address) + if err != nil { + return err + } + if err := k.VestingAccount.Set(ctx, collections.Join(va.LaunchID, sdk.AccAddress(address)), *va); err != nil { + return err + } + + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventVestingAccountAdded{ Address: va.Address, VestingOptions: va.VestingOptions, LaunchID: chain.LaunchID, @@ -183,9 +151,19 @@ func ApplyRequest( case *types.RequestContent_AccountRemoval: ar := requestContent.AccountRemoval - k.RemoveGenesisAccount(ctx, chain.LaunchID, ar.Address) - k.RemoveVestingAccount(ctx, chain.LaunchID, ar.Address) - err = ctx.EventManager().EmitTypedEvent(&types.EventAccountRemoved{ + + address, err := k.addressCodec.StringToBytes(ar.Address) + if err != nil { + return err + } + if err := k.GenesisAccount.Remove(ctx, collections.Join(chain.LaunchID, sdk.AccAddress(address))); err != nil && !errors.Is(err, collections.ErrNotFound) { + return err + } + if err := k.VestingAccount.Remove(ctx, collections.Join(chain.LaunchID, sdk.AccAddress(address))); err != nil && !errors.Is(err, collections.ErrNotFound) { + return err + } + + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventAccountRemoved{ Address: ar.Address, LaunchID: chain.LaunchID, CoordinatorAddress: coord.Address, @@ -193,8 +171,16 @@ func ApplyRequest( case *types.RequestContent_GenesisValidator: ga := requestContent.GenesisValidator - k.SetGenesisValidator(ctx, *ga) - err = ctx.EventManager().EmitTypedEvent(&types.EventValidatorAdded{ + + address, err := k.addressCodec.StringToBytes(ga.Address) + if err != nil { + return err + } + if err := k.GenesisValidator.Set(ctx, collections.Join(chain.LaunchID, sdk.AccAddress(address)), *ga); err != nil { + return err + } + + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventValidatorAdded{ Address: ga.Address, GenTx: ga.GenTx, ConsPubKey: ga.ConsPubKey, @@ -208,8 +194,16 @@ func ApplyRequest( case *types.RequestContent_ValidatorRemoval: vr := requestContent.ValidatorRemoval - k.RemoveGenesisValidator(ctx, chain.LaunchID, vr.ValAddress) - err = ctx.EventManager().EmitTypedEvent(&types.EventValidatorRemoved{ + + address, err := k.addressCodec.StringToBytes(vr.ValAddress) + if err != nil { + return err + } + if err := k.GenesisValidator.Remove(ctx, collections.Join(chain.LaunchID, sdk.AccAddress(address))); err != nil && !errors.Is(err, collections.ErrNotFound) { + return err + } + + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventValidatorRemoved{ GenesisValidatorAccount: vr.ValAddress, LaunchID: chain.LaunchID, HasProject: chain.HasProject, @@ -219,8 +213,12 @@ func ApplyRequest( case *types.RequestContent_ParamChange: cp := requestContent.ParamChange - k.SetParamChange(ctx, *cp) - err = ctx.EventManager().EmitTypedEvent(&types.EventParamChanged{ + + if err := k.ParamChange.Set(ctx, collections.Join(chain.LaunchID, types.ParamChangeSubKey(cp.Module, cp.Param)), *cp); err != nil { + return err + } + + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventParamChanged{ LaunchID: cp.LaunchID, Module: cp.Module, Param: cp.Param, @@ -233,7 +231,7 @@ func ApplyRequest( // CheckRequest verifies that a request can be applied func CheckRequest( - ctx sdk.Context, + ctx context.Context, k Keeper, launchID uint64, request types.Request, @@ -281,7 +279,16 @@ func CheckRequest( } case *types.RequestContent_GenesisValidator: ga := requestContent.GenesisValidator - if _, found := k.GetGenesisValidator(ctx, launchID, ga.Address); found { + + address, err := k.addressCodec.StringToBytes(ga.Address) + if err != nil { + return ignterrors.Criticalf("invalid bech32 format %s", address) + } + found, err := k.GenesisValidator.Has(ctx, collections.Join(launchID, sdk.AccAddress(address))) + if err != nil { + return ignterrors.Criticalf("invalid bech32 format %s", address) + } + if found { return sdkerrors.Wrapf(types.ErrValidatorAlreadyExist, "genesis validator %s for chain %d already exist", ga.Address, launchID, @@ -289,7 +296,16 @@ func CheckRequest( } case *types.RequestContent_ValidatorRemoval: vr := requestContent.ValidatorRemoval - if _, found := k.GetGenesisValidator(ctx, launchID, vr.ValAddress); !found { + + address, err := k.addressCodec.StringToBytes(vr.ValAddress) + if err != nil { + return ignterrors.Criticalf("invalid bech32 format %s", address) + } + found, err := k.GenesisValidator.Has(ctx, collections.Join(launchID, sdk.AccAddress(address))) + if err != nil { + return ignterrors.Criticalf("invalid bech32 format %s", address) + } + if !found { return sdkerrors.Wrapf(types.ErrValidatorNotFound, "genesis validator %s for chain %d not found", vr.ValAddress, launchID, diff --git a/x/launch/keeper/request_test.go b/x/launch/keeper/request_test.go index 692cdb6b..47c7681e 100644 --- a/x/launch/keeper/request_test.go +++ b/x/launch/keeper/request_test.go @@ -1,17 +1,18 @@ package keeper_test import ( + "context" "testing" + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - ignterrors "github.com/ignite/modules/pkg/errors" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" + ignterrors "github.com/ignite/network/pkg/errors" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" ) type RequestSample struct { @@ -21,8 +22,8 @@ type RequestSample struct { } func createRequestsFromSamples( - k *keeper.Keeper, - ctx sdk.Context, + k keeper.Keeper, + ctx context.Context, launchID uint64, samples []RequestSample, ) []types.Request { @@ -30,83 +31,17 @@ func createRequestsFromSamples( for i, s := range samples { items[i] = sample.RequestWithContentAndCreator(r, launchID, s.Content, s.Creator) items[i].Status = s.Status - id := k.AppendRequest(ctx, items[i]) - items[i].RequestID = id + items[i].RequestID, _ = k.AppendRequest(ctx, items[i]) } return items } -func createNRequest(k *keeper.Keeper, ctx sdk.Context, n int) []types.Request { - items := make([]types.Request, n) - for i := range items { - items[i] = sample.Request(r, 0, sample.Address(r)) - id := k.AppendRequest(ctx, items[i]) - items[i].RequestID = id - } - return items -} - -func TestRequestGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNRequest(tk.LaunchKeeper, ctx, 10) - - t.Run("should get a request", func(t *testing.T) { - for _, item := range items { - rst, found := tk.LaunchKeeper.GetRequest(ctx, - item.LaunchID, - item.RequestID, - ) - require.True(t, found) - require.Equal(t, item, rst) - } - }) -} - -func TestRequestRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNRequest(tk.LaunchKeeper, ctx, 10) - - t.Run("should remove a request", func(t *testing.T) { - for _, item := range items { - tk.LaunchKeeper.RemoveRequest(ctx, - item.LaunchID, - item.RequestID, - ) - _, found := tk.LaunchKeeper.GetRequest(ctx, - item.LaunchID, - item.RequestID, - ) - require.False(t, found) - } - }) -} - -func TestRequestGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNRequest(tk.LaunchKeeper, ctx, 10) - - t.Run("should get all requests", func(t *testing.T) { - require.ElementsMatch(t, items, tk.LaunchKeeper.GetAllRequest(ctx)) - }) -} - -func TestRequestCounter(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNRequest(tk.LaunchKeeper, ctx, 10) - - t.Run("should get request counter", func(t *testing.T) { - counter := uint64(len(items)) + 1 - require.Equal(t, counter, tk.LaunchKeeper.GetRequestCounter(ctx, 0)) - require.Equal(t, uint64(1), tk.LaunchKeeper.GetRequestCounter(ctx, 1)) - }) -} - func TestCheckAccount(t *testing.T) { var ( - genesisAcc = sample.Address(r) - vestingAcc = sample.Address(r) - dupAcc = sample.Address(r) - notFound = sample.Address(r) + genesisAcc = sample.AccAddress(r) + vestingAcc = sample.AccAddress(r) + dupAcc = sample.AccAddress(r) + notFound = sample.AccAddress(r) ctx, tk, _ = testkeeper.NewTestSetup(t) launchID = uint64(10) ) @@ -114,26 +49,30 @@ func TestCheckAccount(t *testing.T) { ga := sample.GenesisAccount( r, launchID, - genesisAcc, + genesisAcc.String(), ) - tk.LaunchKeeper.SetGenesisAccount(ctx, ga) + err := tk.LaunchKeeper.GenesisAccount.Set(ctx, collections.Join(ga.LaunchID, genesisAcc), ga) + require.NoError(t, err) va := sample.VestingAccount( r, launchID, - vestingAcc, + vestingAcc.String(), ) - tk.LaunchKeeper.SetVestingAccount(ctx, va) + err = tk.LaunchKeeper.VestingAccount.Set(ctx, collections.Join(va.LaunchID, vestingAcc), va) + require.NoError(t, err) // set duplicated entries - ga.Address = dupAcc - va.Address = dupAcc - tk.LaunchKeeper.SetGenesisAccount(ctx, ga) - tk.LaunchKeeper.SetVestingAccount(ctx, va) + ga.Address = dupAcc.String() + va.Address = dupAcc.String() + err = tk.LaunchKeeper.GenesisAccount.Set(ctx, collections.Join(ga.LaunchID, genesisAcc), ga) + require.NoError(t, err) + err = tk.LaunchKeeper.VestingAccount.Set(ctx, collections.Join(va.LaunchID, vestingAcc), va) + require.NoError(t, err) tests := []struct { name string - addr string + addr sdk.AccAddress found bool err error }{ @@ -158,7 +97,7 @@ func TestCheckAccount(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - found, err := keeper.CheckAccount(ctx, *tk.LaunchKeeper, launchID, tt.addr) + found, err := keeper.CheckAccount(ctx, tk.LaunchKeeper, launchID, tt.addr.String()) if tt.err != nil { require.Error(t, err) require.ErrorIs(t, tt.err, err) @@ -184,9 +123,11 @@ func TestApplyRequest(t *testing.T) { ) coord.CoordinatorID = coordID - tk.ProfileKeeper.SetCoordinator(ctx, coord) + err := tk.ProfileKeeper.Coordinator.Set(ctx, coord.CoordinatorID, coord) + require.NoError(t, err) chain := sample.Chain(r, launchID, coordID) - tk.LaunchKeeper.SetChain(ctx, chain) + err = tk.LaunchKeeper.Chain.Set(ctx, chain.LaunchID, chain) + require.NoError(t, err) tests := []struct { name string @@ -262,7 +203,7 @@ func TestApplyRequest(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := keeper.ApplyRequest(ctx, *tk.LaunchKeeper, chain, tt.request, coord) + err := keeper.ApplyRequest(ctx, tk.LaunchKeeper, chain, tt.request, coord) if tt.wantErr { require.Error(t, err) return @@ -272,26 +213,36 @@ func TestApplyRequest(t *testing.T) { switch requestContent := tt.request.Content.Content.(type) { case *types.RequestContent_GenesisAccount: ga := requestContent.GenesisAccount - _, found := tk.LaunchKeeper.GetGenesisAccount(ctx, launchID, ga.Address) - require.True(t, found, "genesis account not found") + address, err := sdk.AccAddressFromBech32(ga.Address) + require.NoError(t, err) + _, err = tk.LaunchKeeper.GenesisAccount.Get(ctx, collections.Join(launchID, address)) + require.NoError(t, err, "genesis account not found") case *types.RequestContent_VestingAccount: va := requestContent.VestingAccount - _, found := tk.LaunchKeeper.GetVestingAccount(ctx, launchID, va.Address) - require.True(t, found, "vesting account not found") + address, err := sdk.AccAddressFromBech32(va.Address) + require.NoError(t, err) + _, err = tk.LaunchKeeper.VestingAccount.Get(ctx, collections.Join(launchID, address)) + require.NoError(t, err, "vesting account not found") case *types.RequestContent_AccountRemoval: ar := requestContent.AccountRemoval - _, foundGenesis := tk.LaunchKeeper.GetGenesisAccount(ctx, launchID, ar.Address) - require.False(t, foundGenesis, "genesis account not removed") - _, foundVesting := tk.LaunchKeeper.GetVestingAccount(ctx, launchID, ar.Address) - require.False(t, foundVesting, "vesting account not removed") + address, err := sdk.AccAddressFromBech32(ar.Address) + require.NoError(t, err) + _, err = tk.LaunchKeeper.GenesisAccount.Get(ctx, collections.Join(launchID, address)) + require.Error(t, err, "genesis account not removed") + _, err = tk.LaunchKeeper.VestingAccount.Get(ctx, collections.Join(launchID, address)) + require.Error(t, err, "vesting account not removed") case *types.RequestContent_GenesisValidator: ga := requestContent.GenesisValidator - _, found := tk.LaunchKeeper.GetGenesisValidator(ctx, launchID, ga.Address) - require.True(t, found, "genesis validator not found") + address, err := sdk.AccAddressFromBech32(ga.Address) + require.NoError(t, err) + _, err = tk.LaunchKeeper.GenesisValidator.Get(ctx, collections.Join(launchID, address)) + require.NoError(t, err, "genesis validator not found") case *types.RequestContent_ValidatorRemoval: vr := requestContent.ValidatorRemoval - _, found := tk.LaunchKeeper.GetGenesisValidator(ctx, launchID, vr.ValAddress) - require.False(t, found, "genesis validator not removed") + address, err := sdk.AccAddressFromBech32(vr.ValAddress) + require.NoError(t, err) + _, err = tk.LaunchKeeper.GenesisValidator.Get(ctx, collections.Join(launchID, address)) + require.Error(t, err, "genesis validator not removed") } }) } @@ -301,35 +252,39 @@ func TestCheckRequest(t *testing.T) { var ( coord = sample.Coordinator(r, sample.Address(r)) coordID = uint64(3) - genesisAcc = sample.Address(r) - vestingAcc = sample.Address(r) - validatorAcc = sample.Address(r) - duplicatedAcc = sample.Address(r) + genesisAcc = sample.AccAddress(r) + vestingAcc = sample.AccAddress(r) + validatorAcc = sample.AccAddress(r) + duplicatedAcc = sample.AccAddress(r) ctx, tk, _ = testkeeper.NewTestSetup(t) launchID = uint64(10) - contents = sample.AllRequestContents(r, launchID, genesisAcc, vestingAcc, validatorAcc) + contents = sample.AllRequestContents(r, launchID, genesisAcc.String(), vestingAcc.String(), validatorAcc.String()) invalidContent = types.NewGenesisAccount(launchID, "", sdk.NewCoins()) - duplicatedRequestGenesisContent = types.NewGenesisAccount(launchID, duplicatedAcc, sample.Coins(r)) - duplicatedRequestVestingContent = types.NewVestingAccount(launchID, duplicatedAcc, sample.VestingOptions(r)) - duplicatedRequestRemovalContent = types.NewAccountRemoval(duplicatedAcc) + duplicatedRequestGenesisContent = types.NewGenesisAccount(launchID, duplicatedAcc.String(), sample.Coins(r)) + duplicatedRequestVestingContent = types.NewVestingAccount(launchID, duplicatedAcc.String(), sample.VestingOptions(r)) + duplicatedRequestRemovalContent = types.NewAccountRemoval(duplicatedAcc.String()) ) coord.CoordinatorID = coordID - tk.ProfileKeeper.SetCoordinator(ctx, coord) + err := tk.ProfileKeeper.Coordinator.Set(ctx, coord.CoordinatorID, coord) + require.NoError(t, err) chain := sample.Chain(r, launchID, coordID) - tk.LaunchKeeper.SetChain(ctx, chain) + err = tk.LaunchKeeper.Chain.Set(ctx, chain.LaunchID, chain) + require.NoError(t, err) - tk.LaunchKeeper.SetGenesisAccount(ctx, types.GenesisAccount{ + err = tk.LaunchKeeper.GenesisAccount.Set(ctx, collections.Join(launchID, duplicatedAcc), types.GenesisAccount{ LaunchID: launchID, - Address: duplicatedAcc, + Address: duplicatedAcc.String(), Coins: nil, }) + require.NoError(t, err) - tk.LaunchKeeper.SetVestingAccount(ctx, types.VestingAccount{ + err = tk.LaunchKeeper.VestingAccount.Set(ctx, collections.Join(launchID, duplicatedAcc), types.VestingAccount{ LaunchID: launchID, - Address: duplicatedAcc, + Address: duplicatedAcc.String(), VestingOptions: types.VestingOptions{}, }) + require.NoError(t, err) tests := []struct { name string @@ -413,11 +368,11 @@ func TestCheckRequest(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := keeper.CheckRequest(ctx, *tk.LaunchKeeper, launchID, tt.request) + err := keeper.CheckRequest(ctx, tk.LaunchKeeper, launchID, tt.request) if tt.err != nil { require.ErrorIs(t, err, tt.err) } else { - err := keeper.ApplyRequest(ctx, *tk.LaunchKeeper, chain, tt.request, coord) + err := keeper.ApplyRequest(ctx, tk.LaunchKeeper, chain, tt.request, coord) require.NoError(t, err) } }) diff --git a/x/launch/keeper/validator_set.go b/x/launch/keeper/validator_set.go index 3d688e29..4208a5ce 100644 --- a/x/launch/keeper/validator_set.go +++ b/x/launch/keeper/validator_set.go @@ -1,27 +1,28 @@ package keeper import ( + "context" "encoding/base64" sdkerrors "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" tmtypes "github.com/cometbft/cometbft/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/types" ) // CheckValidatorSet checks the information about a validator // set (used to create an IBC client) is valid func (k Keeper) CheckValidatorSet( - ctx sdk.Context, + ctx context.Context, launchID uint64, chainID string, validatorSet tmtypes.ValidatorSet, ) error { // check chain ID - chain, found := k.GetChain(ctx, launchID) - if !found { - return sdkerrors.Wrapf(types.ErrChainNotFound, "%d", launchID) + chain, err := k.GetChain(ctx, launchID) + if err != nil { + return sdkerrors.Wrapf(err, "%d", launchID) } if !chain.LaunchTriggered { return sdkerrors.Wrapf(types.ErrNotTriggeredLaunch, "%d", launchID) @@ -33,12 +34,15 @@ func (k Keeper) CheckValidatorSet( return sdkerrors.Wrap(types.ErrInvalidGenesisChainID, chainID) } - validators, totalSelfDelegation := k.GetValidatorsAndTotalDelegation(ctx, launchID) + validators, totalSelfDelegation, err := k.GetValidatorsAndTotalDelegation(ctx, launchID) + if err != nil { + return err + } // all validators must be present in the launch module and // the total amount of self-delegation from the provided validators // must reach at least 2/3 of the total self delegation for the chain - valSetSelfDelegation := sdk.ZeroDec() + valSetSelfDelegation := sdkmath.LegacyZeroDec() for _, validator := range validatorSet.Validators { consPubKey := base64.StdEncoding.EncodeToString(validator.PubKey.Bytes()) launchValidator, found := validators[consPubKey] @@ -49,12 +53,12 @@ func (k Keeper) CheckValidatorSet( validator.PubKey.Address().String(), ) } - valSetSelfDelegation = valSetSelfDelegation.Add(sdk.NewDecFromInt(launchValidator.SelfDelegation.Amount)) + valSetSelfDelegation = valSetSelfDelegation.Add(sdkmath.LegacyNewDecFromInt(launchValidator.SelfDelegation.Amount)) } // check if 2/3 of total self-delegation is reached from the provided validator set // GetTotalSelfDelegation is the sum of all self delegation - minSelfDelegation := totalSelfDelegation.Mul(sdk.NewDecWithPrec(6666, 4)) + minSelfDelegation := totalSelfDelegation.Mul(sdkmath.LegacyNewDecWithPrec(6666, 4)) if valSetSelfDelegation.LT(minSelfDelegation) { return sdkerrors.Wrap(types.ErrMinSelfDelegationNotReached, validatorSet.String()) } diff --git a/x/launch/keeper/validator_set_test.go b/x/launch/keeper/validator_set_test.go index b4242d66..97da01b4 100644 --- a/x/launch/keeper/validator_set_test.go +++ b/x/launch/keeper/validator_set_test.go @@ -3,15 +3,16 @@ package keeper_test import ( "testing" + "cosmossdk.io/collections" sdkmath "cosmossdk.io/math" "github.com/cometbft/cometbft/crypto" tmtypes "github.com/cometbft/cometbft/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" ) func TestKeeper_CheckValidatorSet(t *testing.T) { @@ -22,36 +23,41 @@ func TestKeeper_CheckValidatorSet(t *testing.T) { validatorNotFoundSet = tmtypes.ValidatorSet{} invalidValidatorSet = tmtypes.ValidatorSet{} ) - notTriggeredLaunchID := tk.LaunchKeeper.AppendChain(ctx, types.Chain{ + notTriggeredLaunchID, err := tk.LaunchKeeper.AppendChain(ctx, types.Chain{ CoordinatorID: 0, LaunchTriggered: false, GenesisChainID: "spn-1", }) - invalidChainIDLaunchID := tk.LaunchKeeper.AppendChain(ctx, types.Chain{ + require.NoError(t, err) + invalidChainIDLaunchID, err := tk.LaunchKeeper.AppendChain(ctx, types.Chain{ CoordinatorID: 0, LaunchTriggered: true, GenesisChainID: "spn-10", }) - monitoringConnectedLaunchID := tk.LaunchKeeper.AppendChain(ctx, types.Chain{ + require.NoError(t, err) + monitoringConnectedLaunchID, err := tk.LaunchKeeper.AppendChain(ctx, types.Chain{ CoordinatorID: 0, LaunchTriggered: true, GenesisChainID: "spn-1", MonitoringConnected: true, }) - launchID := tk.LaunchKeeper.AppendChain(ctx, types.Chain{ + require.NoError(t, err) + launchID, err := tk.LaunchKeeper.AppendChain(ctx, types.Chain{ CoordinatorID: 0, LaunchTriggered: true, GenesisChainID: "spn-1", }) + require.NoError(t, err) for _, validator := range validators { addr := sdk.AccAddress(validator.Address().Bytes()) - tk.LaunchKeeper.SetGenesisValidator(ctx, types.GenesisValidator{ + err = tk.LaunchKeeper.GenesisValidator.Set(ctx, collections.Join(launchID, addr), types.GenesisValidator{ LaunchID: launchID, Address: addr.String(), ConsPubKey: validator.Bytes(), SelfDelegation: sdk.NewCoin("spn", sdkmath.NewInt(1000)), }) + require.NoError(t, err) validatorSet.Validators = append(validatorSet.Validators, tmtypes.NewValidator(validator, 0), ) diff --git a/x/launch/keeper/vesting_account.go b/x/launch/keeper/vesting_account.go index 96b3049e..72ba6826 100644 --- a/x/launch/keeper/vesting_account.go +++ b/x/launch/keeper/vesting_account.go @@ -1,61 +1,20 @@ package keeper import ( - "github.com/cosmos/cosmos-sdk/store/prefix" + "context" + + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/types" ) -// SetVestingAccount set a specific vestingAccount in the store from its index -func (k Keeper) SetVestingAccount(ctx sdk.Context, vestingAccount types.VestingAccount) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.VestingAccountKeyPrefix)) - b := k.cdc.MustMarshal(&vestingAccount) - store.Set(types.AccountKeyPath( - vestingAccount.LaunchID, - vestingAccount.Address, - ), b) -} - -// GetVestingAccount returns a vestingAccount from its index -func (k Keeper) GetVestingAccount( - ctx sdk.Context, - launchID uint64, - address string, -) (val types.VestingAccount, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.VestingAccountKeyPrefix)) - - b := store.Get(types.AccountKeyPath(launchID, address)) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveVestingAccount removes a vestingAccount from the store -func (k Keeper) RemoveVestingAccount( - ctx sdk.Context, - launchID uint64, - address string, -) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.VestingAccountKeyPrefix)) - store.Delete(types.AccountKeyPath(launchID, address)) -} - -// GetAllVestingAccount returns all vestingAccount -func (k Keeper) GetAllVestingAccount(ctx sdk.Context) (list []types.VestingAccount) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.VestingAccountKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.VestingAccount - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return +// AllVestingAccount returns all VestingAccount. +func (k Keeper) AllVestingAccount(ctx context.Context) ([]types.VestingAccount, error) { + vestingAccount := make([]types.VestingAccount, 0) + err := k.VestingAccount.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], value types.VestingAccount) (bool, error) { + vestingAccount = append(vestingAccount, value) + return false, nil + }) + return vestingAccount, err } diff --git a/x/launch/keeper/vesting_account_test.go b/x/launch/keeper/vesting_account_test.go deleted file mode 100644 index e4a1b291..00000000 --- a/x/launch/keeper/vesting_account_test.go +++ /dev/null @@ -1,68 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -func createNVestingAccount(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.VestingAccount { - items := make([]types.VestingAccount, n) - - for i := range items { - items[i] = sample.VestingAccount(r, uint64(i), strconv.Itoa(i)) - keeper.SetVestingAccount(ctx, items[i]) - } - return items -} - -func TestVestingAccountGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNVestingAccount(tk.LaunchKeeper, ctx, 10) - - t.Run("should get a vesting account", func(t *testing.T) { - for _, item := range items { - rst, found := tk.LaunchKeeper.GetVestingAccount(ctx, - item.LaunchID, - item.Address, - ) - require.True(t, found) - require.Equal(t, item, rst) - } - }) -} - -func TestVestingAccountRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNVestingAccount(tk.LaunchKeeper, ctx, 10) - - t.Run("should remove a vesting account", func(t *testing.T) { - for _, item := range items { - tk.LaunchKeeper.RemoveVestingAccount(ctx, - item.LaunchID, - item.Address, - ) - _, found := tk.LaunchKeeper.GetVestingAccount(ctx, - item.LaunchID, - item.Address, - ) - require.False(t, found) - } - }) -} - -func TestVestingAccountGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should get all vesting accounts", func(t *testing.T) { - items := createNVestingAccount(tk.LaunchKeeper, ctx, 10) - require.ElementsMatch(t, items, tk.LaunchKeeper.GetAllVestingAccount(ctx)) - }) -} diff --git a/x/launch/module.go b/x/launch/module.go deleted file mode 100644 index f5d6edf6..00000000 --- a/x/launch/module.go +++ /dev/null @@ -1,167 +0,0 @@ -package launch - -import ( - "context" - "encoding/json" - "fmt" - - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/launch/client/cli" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} -) - -// ---------------------------------------------------------------------------- -// AppModuleBasic -// ---------------------------------------------------------------------------- - -// AppModuleBasic implements the AppModuleBasic interface for the launch module. -type AppModuleBasic struct { - cdc codec.Codec -} - -func NewAppModuleBasic(cdc codec.Codec) AppModuleBasic { - return AppModuleBasic{cdc: cdc} -} - -// Name returns the launch module's name. -func (AppModuleBasic) Name() string { - return types.ModuleName -} - -func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -// RegisterInterfaces registers the launch module's interface types -func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { - types.RegisterInterfaces(reg) -} - -// DefaultGenesis returns the launch module's default genesis state. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesis()) -} - -// ValidateGenesis performs genesis state validation for the launch module. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - var genState types.GenesisState - if err := cdc.UnmarshalJSON(bz, &genState); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - return genState.Validate() -} - -// RegisterRESTRoutes registers the launch module's REST service handlers. -func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { -} - -// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the launch module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint -} - -// GetTxCmd returns the launch module's root tx command. -func (a AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() -} - -// GetQueryCmd returns the launch module's root query command. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd(types.StoreKey) -} - -// ---------------------------------------------------------------------------- -// AppModule -// ---------------------------------------------------------------------------- - -// AppModule implements the AppModule interface for the launch module. -type AppModule struct { - AppModuleBasic - - keeper keeper.Keeper - accountKeeper types.AccountKeeper - bankKeeper types.BankKeeper -} - -func NewAppModule( - cdc codec.Codec, - keeper keeper.Keeper, - accountKeeper types.AccountKeeper, - bankKeeper types.BankKeeper, -) AppModule { - return AppModule{ - AppModuleBasic: NewAppModuleBasic(cdc), - keeper: keeper, - accountKeeper: accountKeeper, - bankKeeper: bankKeeper, - } -} - -// Name returns the launch module's name. -func (am AppModule) Name() string { - return am.AppModuleBasic.Name() -} - -// QuerierRoute returns the launch module's query routing key. -func (AppModule) QuerierRoute() string { return types.QuerierRoute } - -// RegisterServices registers a GRPC query service to respond to the -// module-specific GRPC queries. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) -} - -// RegisterInvariants registers the launch module's invariants. -func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { - keeper.RegisterInvariants(ir, am.keeper) -} - -// InitGenesis performs the launch module's genesis initialization It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { - var genState types.GenesisState - // Initialize global index to index in genesis state - cdc.MustUnmarshalJSON(gs, &genState) - - InitGenesis(ctx, am.keeper, genState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the launch module's exported genesis state as raw JSON bytes. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - genState := ExportGenesis(ctx, am.keeper) - return cdc.MustMarshalJSON(genState) -} - -// ConsensusVersion implements ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 1 } - -// BeginBlock executes all ABCI BeginBlock logic respective to the launch module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock executes all ABCI EndBlock logic respective to the launch module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} diff --git a/x/launch/module/autocli.go b/x/launch/module/autocli.go new file mode 100644 index 00000000..d87f6273 --- /dev/null +++ b/x/launch/module/autocli.go @@ -0,0 +1,146 @@ +package launch + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + + modulev1 "github.com/ignite/network/api/network/launch/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Query_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Shows the parameters of the module", + }, + { + RpcMethod: "ListChain", + Use: "list-chain", + Short: "List all Chain", + }, + { + RpcMethod: "GetChain", + Use: "get-chain [id]", + Short: "Gets a Chain by id", + Alias: []string{"show-chain"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "id"}}, + }, + { + RpcMethod: "ListGenesisAccount", + Use: "list-genesis-account", + Short: "List all GenesisAccount", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + { + RpcMethod: "GetGenesisAccount", + Use: "get-genesis-account [id]", + Short: "Gets a GenesisAccount", + Alias: []string{"show-genesis-account"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "Address"}}, + }, + { + RpcMethod: "ListGenesisValidator", + Use: "list-genesis-validator", + Short: "List all GenesisValidator", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + { + RpcMethod: "GetGenesisValidator", + Use: "get-genesis-validator [id]", + Short: "Gets a GenesisValidator", + Alias: []string{"show-genesis-validator"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "Address"}}, + }, + { + RpcMethod: "ListVestingAccount", + Use: "list-vesting-account", + Short: "List all VestingAccount", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + { + RpcMethod: "GetVestingAccount", + Use: "get-vesting-account [id]", + Short: "Gets a VestingAccount", + Alias: []string{"show-vesting-account"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "Address"}}, + }, + { + RpcMethod: "ListRequest", + Use: "list-request", + Short: "List all Request", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + { + RpcMethod: "GetRequest", + Use: "get-request [id]", + Short: "Gets a Request by id", + Alias: []string{"show-request"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "requestID"}}, + }, + { + RpcMethod: "ListParamChange", + Use: "list-param-change", + Short: "List all ParamChange", + }, + // this line is used by ignite scaffolding # autocli/query + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, // only required if you want to use the custom command + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "UpdateParams", + Skip: true, // skipped because authority gated + }, + { + RpcMethod: "CreateChain", + Use: "create-chain [genesis-chain-id] [source-url] [source-hash] [initial-genesis] [has-project] [project-id] [account-balance] [metadata]", + Short: "Send a CreateChain tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "genesisChainID"}, {ProtoField: "sourceURL"}, {ProtoField: "sourceHash"}, {ProtoField: "initialGenesis"}, {ProtoField: "hasProject"}, {ProtoField: "projectID"}, {ProtoField: "accountBalance"}, {ProtoField: "metadata"}}, + }, + { + RpcMethod: "EditChain", + Use: "edit-chain [launch-id] [set-project-id] [project-id] [metadata]", + Short: "Send a EditChain tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "setProjectID"}, {ProtoField: "projectID"}, {ProtoField: "metadata"}}, + }, + { + RpcMethod: "UpdateLaunchInformation", + Use: "update-launch-information [launch-id] [genesis-chain-id] [source-url] [source-hash] [initial-genesis]", + Short: "Send a UpdateLaunchInformation tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "genesisChainID"}, {ProtoField: "sourceURL"}, {ProtoField: "sourceHash"}, {ProtoField: "initialGenesis"}}, + }, + { + RpcMethod: "SendRequest", + Use: "send-request [launch-id] [content]", + Short: "Send a SendRequest tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "content"}}, + }, + { + RpcMethod: "SettleRequest", + Use: "settle-request [launch-id] [request-id] [approve]", + Short: "Send a SettleRequest tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "requestID"}, {ProtoField: "approve"}}, + }, + { + RpcMethod: "TriggerLaunch", + Use: "trigger-launch [launch-id] [launch-time]", + Short: "Send a TriggerLaunch tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "launchTime"}}, + }, + { + RpcMethod: "RevertLaunch", + Use: "revert-launch [launch-id]", + Short: "Send a RevertLaunch tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + // this line is used by ignite scaffolding # autocli/tx + }, + }, + } +} diff --git a/x/launch/module/genesis.go b/x/launch/module/genesis.go new file mode 100644 index 00000000..6a271ec5 --- /dev/null +++ b/x/launch/module/genesis.go @@ -0,0 +1,141 @@ +package launch + +import ( + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) error { + // Set all the chain + for _, elem := range genState.ChainList { + if err := k.Chain.Set(ctx, elem.LaunchID, elem); err != nil { + return err + } + } + + // Set chain count + if err := k.ChainSeq.Set(ctx, genState.ChainCount); err != nil { + return err + } + // Set all the genesisAccount + for _, elem := range genState.GenesisAccountList { + address, err := k.AddressCodec().StringToBytes(elem.Address) + if err != nil { + return err + } + if err := k.GenesisAccount.Set(ctx, collections.Join(elem.LaunchID, sdk.AccAddress(address)), elem); err != nil { + return err + } + } + // Set all the genesisValidator + for _, elem := range genState.GenesisValidatorList { + address, err := k.AddressCodec().StringToBytes(elem.Address) + if err != nil { + return err + } + if err := k.GenesisValidator.Set(ctx, collections.Join(elem.LaunchID, sdk.AccAddress(address)), elem); err != nil { + return err + } + } + // Set all the vestingAccount + for _, elem := range genState.VestingAccountList { + address, err := k.AddressCodec().StringToBytes(elem.Address) + if err != nil { + return err + } + if err := k.VestingAccount.Set(ctx, collections.Join(elem.LaunchID, sdk.AccAddress(address)), elem); err != nil { + return err + } + } + // Set all the request + for _, elem := range genState.RequestList { + requestID, err := k.GetNextRequestIDWithUpdate(ctx, elem.LaunchID) + if err != nil { + return err + } + elem.RequestID = requestID + if err := k.Request.Set(ctx, collections.Join(elem.LaunchID, elem.RequestID), elem); err != nil { + return err + } + } + // Set all the paramChange + for _, elem := range genState.ParamChangeList { + if err := k.ParamChange.Set(ctx, collections.Join(elem.LaunchID, types.ParamChangeSubKey(elem.Module, elem.Param)), elem); err != nil { + return err + } + } + // this line is used by starport scaffolding # genesis/module/init + + return k.Params.Set(ctx, genState.Params) +} + +// ExportGenesis returns the module's exported genesis. +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) { + var err error + + genesis := types.DefaultGenesis() + genesis.Params, err = k.Params.Get(ctx) + if err != nil { + return nil, err + } + + err = k.Chain.Walk(ctx, nil, func(key uint64, elem types.Chain) (bool, error) { + genesis.ChainList = append(genesis.ChainList, elem) + return false, nil + }) + if err != nil { + return nil, err + } + + genesis.ChainCount, err = k.ChainSeq.Peek(ctx) + if err != nil { + return nil, err + } + + if err := k.GenesisAccount.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], val types.GenesisAccount) (stop bool, err error) { + genesis.GenesisAccountList = append(genesis.GenesisAccountList, val) + return false, nil + }); err != nil { + return nil, err + } + if err := k.GenesisValidator.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], val types.GenesisValidator) (stop bool, err error) { + genesis.GenesisValidatorList = append(genesis.GenesisValidatorList, val) + return false, nil + }); err != nil { + return nil, err + } + if err := k.VestingAccount.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], val types.VestingAccount) (stop bool, err error) { + genesis.VestingAccountList = append(genesis.VestingAccountList, val) + return false, nil + }); err != nil { + return nil, err + } + + // Get request counts + for _, elem := range genesis.ChainList { + // Get request count + counter, err := k.GetRequestCounter(ctx, elem.LaunchID) + if err != nil { + return nil, err + } + genesis.RequestCounters = append(genesis.RequestCounters, types.RequestCounter{ + LaunchID: elem.LaunchID, + Counter: counter, + }) + } + + if err := k.ParamChange.Walk(ctx, nil, func(_ collections.Pair[uint64, string], val types.ParamChange) (stop bool, err error) { + genesis.ParamChangeList = append(genesis.ParamChangeList, val) + return false, nil + }); err != nil { + return nil, err + } + + // this line is used by starport scaffolding # genesis/module/export + + return genesis, nil +} diff --git a/x/launch/module/genesis_test.go b/x/launch/module/genesis_test.go new file mode 100644 index 00000000..e0996a74 --- /dev/null +++ b/x/launch/module/genesis_test.go @@ -0,0 +1,99 @@ +package launch_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + launch "github.com/ignite/network/x/launch/module" + "github.com/ignite/network/x/launch/types" +) + +func TestGenesis(t *testing.T) { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + + ChainList: []types.Chain{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + ChainCount: 2, + GenesisAccountList: []types.GenesisAccount{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + GenesisValidatorList: []types.GenesisValidator{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + VestingAccountList: []types.VestingAccount{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + RequestList: []types.Request{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + RequestCounters: []types.RequestCounter{ + { + LaunchID: 0, + Counter: 1, + }, + { + LaunchID: 1, + Counter: 2, + }, + }, + ParamChangeList: []types.ParamChange{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + // this line is used by starport scaffolding # genesis/test/state + } + + k, ctx, _ := keepertest.LaunchKeeper(t) + err := launch.InitGenesis(ctx, k, genesisState) + require.NoError(t, err) + got, err := launch.ExportGenesis(ctx, k) + require.NoError(t, err) + require.NotNil(t, got) + + nullify.Fill(&genesisState) + nullify.Fill(got) + + require.ElementsMatch(t, genesisState.ChainList, got.ChainList) + require.Equal(t, genesisState.ChainCount, got.ChainCount) + require.ElementsMatch(t, genesisState.GenesisAccountList, got.GenesisAccountList) + require.ElementsMatch(t, genesisState.GenesisValidatorList, got.GenesisValidatorList) + require.ElementsMatch(t, genesisState.VestingAccountList, got.VestingAccountList) + require.ElementsMatch(t, genesisState.RequestList, got.RequestList) + require.ElementsMatch(t, genesisState.RequestCounters, got.RequestCounters) + require.ElementsMatch(t, genesisState.ParamChangeList, got.ParamChangeList) + // this line is used by starport scaffolding # genesis/test/assert +} diff --git a/x/launch/module/module.go b/x/launch/module/module.go new file mode 100644 index 00000000..df72fd5a --- /dev/null +++ b/x/launch/module/module.go @@ -0,0 +1,258 @@ +package launch + +import ( + "context" + "encoding/json" + "fmt" + "sort" + + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "golang.org/x/exp/maps" + + // this line is used by starport scaffolding # 1 + + modulev1 "github.com/ignite/network/api/network/launch/module/v1" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasInvariants = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface that defines the +// independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module, which is used +// to marshal and unmarshal structs to/from []byte in order to persist them in the module's KVStore. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers a module's interface types and their concrete implementations as proto.Message. +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns a default GenesisState for the module, marshalled to json.RawMessage. +// The default GenesisState need to be defined by the module developer and is primarily used for testing. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis used to validate the GenesisState, given in its json.RawMessage form. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper)) +} + +// RegisterInvariants registers the invariants of the module. If an invariant deviates from its predicted value, the InvariantRegistry triggers appropriate logic (most often the chain will be halted) +func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { + keeper.RegisterInvariants(ir, am.keeper) +} + +// InitGenesis performs the module's genesis initialization. It returns no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + if err := InitGenesis(ctx, am.keeper, genState); err != nil { + panic(err) + } +} + +// ExportGenesis returns the module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState, err := ExportGenesis(ctx, am.keeper) + if err != nil { + panic(err) + } + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion is a sequence number for state-breaking change of the module. +// It should be incremented on each consensus-breaking change introduced by the module. +// To avoid wrong/empty versions, the initial version should be set to 1. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block. +// The end block implementation is optional. +func (am AppModule) EndBlock(_ context.Context) error { + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// ---------------------------------------------------------------------------- +// App Wiring Setup +// ---------------------------------------------------------------------------- + +func init() { + appmodule.Register( + &modulev1.Module{}, + appmodule.Provide(ProvideModule), + appmodule.Invoke(InvokeSetHooks), + ) +} + +type ModuleInputs struct { + depinject.In + + AddressCodec address.Codec + StoreService store.KVStoreService + Cdc codec.Codec + Config *modulev1.Module + Logger log.Logger + + AccountKeeper types.AccountKeeper + BankKeeper types.BankKeeper + DistributionKeeper types.DistributionKeeper + ProfileKeeper types.ProfileKeeper + ProjectKeeper types.ProjectKeeper + MonitoringcKeeper types.MonitoringConsumerKeeper +} + +type ModuleOutputs struct { + depinject.Out + + LaunchKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + k := keeper.NewKeeper( + in.Cdc, + in.AddressCodec, + in.StoreService, + in.Logger, + authority.String(), + in.DistributionKeeper, + in.ProfileKeeper, + in.ProjectKeeper, + in.MonitoringcKeeper, + ) + m := NewAppModule( + in.Cdc, + k, + in.AccountKeeper, + in.BankKeeper, + ) + + return ModuleOutputs{LaunchKeeper: k, Module: m} +} + +func InvokeSetHooks(keeper *keeper.Keeper, hooks map[string]types.LaunchHooks) error { + if keeper == nil || hooks == nil { + return nil + } + + // Default ordering is lexical by module name. + // Explicit ordering can be added to the module config if required. + modNames := maps.Keys(hooks) + order := modNames + sort.Strings(order) + + var multiHooks types.MultiLaunchHooks + for _, modName := range order { + hook, ok := hooks[modName] + if !ok { + return fmt.Errorf("can't find staking hooks for module %s", modName) + } + multiHooks = append(multiHooks, hook) + } + + _, err := keeper.SetHooks(multiHooks) + return err +} diff --git a/x/launch/module/simulation.go b/x/launch/module/simulation.go new file mode 100644 index 00000000..e82a506c --- /dev/null +++ b/x/launch/module/simulation.go @@ -0,0 +1,297 @@ +package launch + +import ( + "math/rand" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + launchsimulation "github.com/ignite/network/x/launch/simulation" + "github.com/ignite/network/x/launch/types" +) + +// avoid unused import issue +var _ = sample.AccAddress + +const ( + defaultWeightMsgCreateChain int = 50 + defaultWeightMsgEditChain int = 20 + defaultWeightMsgRequestAddGenesisAccount int = 50 + defaultWeightMsgRequestAddVestingAccount int = 50 + defaultWeightMsgRequestRemoveAccount int = 15 + defaultWeightMsgRequestAddValidator int = 50 + defaultWeightMsgRequestRemoveValidator int = 15 + defaultWeightMsgRequestParamChange int = 15 + defaultWeightMsgSettleRequest int = 50 + defaultWeightMsgTriggerLaunch int = 15 + defaultWeightMsgRevertLaunch int = 0 + defaultWeightMsgUpdateLaunchInformation int = 20 + + opWeightMsgCreateChain = "op_weight_msg_create_chain" + opWeightMsgEditChain = "op_weight_msg_edit_chain" + opWeightMsgRequestAddGenesisAccount = "op_weight_msg_request_add_genesis_account" + opWeightMsgRequestAddVestingAccount = "op_weight_msg_request_add_vesting_account" + opWeightMsgRequestRemoveAccount = "op_weight_msg_request_remove_account" + opWeightMsgRequestAddValidator = "op_weight_msg_request_add_validator" + opWeightMsgRequestRemoveValidator = "op_weight_msg_request_remove_validator" + opWeightMsgRequestParamChange = "op_weight_msg_request_change_param" + opWeightMsgTriggerLaunch = "op_weight_msg_trigger_launch" + opWeightMsgRevertLaunch = "op_weight_msg_revert_launch" + opWeightMsgSettleRequest = "op_weight_msg_settle_request" + opWeightMsgUpdateLaunchInformation = "op_weight_msg_update_launch_information" + + // this line is used by starport scaffolding # simapp/module/const +) + +// GenerateGenesisState creates a randomized GenState of the module. +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + accs := make([]string, len(simState.Accounts)) + for i, acc := range simState.Accounts { + accs[i] = acc.Address.String() + } + launchGenesis := types.GenesisState{ + Params: types.DefaultParams(), + // this line is used by starport scaffolding # simapp/module/genesisState + } + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&launchGenesis) +} + +// RegisterStoreDecoder registers a decoder. +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { + operations := make([]simtypes.WeightedOperation, 0) + + var weightMsgCreateChain int + simState.AppParams.GetOrGenerate(opWeightMsgCreateChain, &weightMsgCreateChain, nil, + func(_ *rand.Rand) { + weightMsgCreateChain = defaultWeightMsgCreateChain + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgCreateChain, + launchsimulation.SimulateMsgCreateChain(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgEditChain int + simState.AppParams.GetOrGenerate(opWeightMsgEditChain, &weightMsgEditChain, nil, + func(_ *rand.Rand) { + weightMsgEditChain = defaultWeightMsgEditChain + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgEditChain, + launchsimulation.SimulateMsgEditChain(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgUpdateLaunchInformation int + simState.AppParams.GetOrGenerate(opWeightMsgUpdateLaunchInformation, &weightMsgUpdateLaunchInformation, nil, + func(_ *rand.Rand) { + weightMsgUpdateLaunchInformation = defaultWeightMsgUpdateLaunchInformation + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgUpdateLaunchInformation, + launchsimulation.SimulateMsgUpdateLaunchInformation(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgRequestAddGenesisAccount int + simState.AppParams.GetOrGenerate(opWeightMsgRequestAddGenesisAccount, &weightMsgRequestAddGenesisAccount, nil, + func(_ *rand.Rand) { + weightMsgRequestAddGenesisAccount = defaultWeightMsgRequestAddGenesisAccount + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgRequestAddGenesisAccount, + launchsimulation.SimulateMsgRequestAddGenesisAccount(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgRequestAddVestingAccount int + simState.AppParams.GetOrGenerate(opWeightMsgRequestAddVestingAccount, &weightMsgRequestAddVestingAccount, nil, + func(_ *rand.Rand) { + weightMsgRequestAddVestingAccount = defaultWeightMsgRequestAddVestingAccount + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgRequestAddVestingAccount, + launchsimulation.SimulateMsgRequestAddVestingAccount(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgRequestRemoveAccount int + simState.AppParams.GetOrGenerate(opWeightMsgRequestRemoveAccount, &weightMsgRequestRemoveAccount, nil, + func(_ *rand.Rand) { + weightMsgRequestRemoveAccount = defaultWeightMsgRequestRemoveAccount + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgRequestRemoveAccount, + launchsimulation.SimulateMsgRequestRemoveAccount(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgRequestAddValidator int + simState.AppParams.GetOrGenerate(opWeightMsgRequestAddValidator, &weightMsgRequestAddValidator, nil, + func(_ *rand.Rand) { + weightMsgRequestAddValidator = defaultWeightMsgRequestAddValidator + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgRequestAddValidator, + launchsimulation.SimulateMsgRequestAddValidator(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgRequestRemoveValidator int + simState.AppParams.GetOrGenerate(opWeightMsgRequestRemoveValidator, &weightMsgRequestRemoveValidator, nil, + func(_ *rand.Rand) { + weightMsgRequestRemoveValidator = defaultWeightMsgRequestRemoveValidator + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgRequestRemoveValidator, + launchsimulation.SimulateMsgRequestRemoveValidator(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgSettleRequest int + simState.AppParams.GetOrGenerate(opWeightMsgSettleRequest, &weightMsgSettleRequest, nil, + func(_ *rand.Rand) { + weightMsgSettleRequest = defaultWeightMsgSettleRequest + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgSettleRequest, + launchsimulation.SimulateMsgSettleRequest(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgTriggerLaunch int + simState.AppParams.GetOrGenerate(opWeightMsgTriggerLaunch, &weightMsgTriggerLaunch, nil, + func(_ *rand.Rand) { + weightMsgTriggerLaunch = defaultWeightMsgTriggerLaunch + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgTriggerLaunch, + launchsimulation.SimulateMsgTriggerLaunch(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgRevertLaunch int + simState.AppParams.GetOrGenerate(opWeightMsgRevertLaunch, &weightMsgRevertLaunch, nil, + func(_ *rand.Rand) { + weightMsgRevertLaunch = defaultWeightMsgRevertLaunch + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgRevertLaunch, + launchsimulation.SimulateMsgRevertLaunch(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + // this line is used by starport scaffolding # simapp/module/operation + + return operations +} + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + simulation.NewWeightedProposalMsg( + opWeightMsgCreateChain, + defaultWeightMsgCreateChain, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgCreateChain(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgEditChain, + defaultWeightMsgEditChain, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgEditChain(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgUpdateLaunchInformation, + defaultWeightMsgUpdateLaunchInformation, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgUpdateLaunchInformation(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + + simulation.NewWeightedProposalMsg( + opWeightMsgRequestAddGenesisAccount, + defaultWeightMsgRequestAddGenesisAccount, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgRequestAddGenesisAccount(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgRequestAddVestingAccount, + defaultWeightMsgRequestAddVestingAccount, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgRequestAddVestingAccount(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgRequestRemoveAccount, + defaultWeightMsgRequestRemoveAccount, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgRequestRemoveAccount(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgRequestAddValidator, + defaultWeightMsgRequestAddValidator, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgRequestAddValidator(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgRequestRemoveValidator, + defaultWeightMsgRequestRemoveValidator, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgRequestRemoveValidator(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgRequestParamChange, + defaultWeightMsgRequestParamChange, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgRequestParamChange(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgSettleRequest, + defaultWeightMsgSettleRequest, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgSettleRequest(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgTriggerLaunch, + defaultWeightMsgTriggerLaunch, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgTriggerLaunch(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgRevertLaunch, + defaultWeightMsgRevertLaunch, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + launchsimulation.SimulateMsgRevertLaunch(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + // this line is used by starport scaffolding # simapp/module/OpMsg + } +} diff --git a/x/launch/module_simulation.go b/x/launch/module_simulation.go deleted file mode 100644 index e5def0dd..00000000 --- a/x/launch/module_simulation.go +++ /dev/null @@ -1,214 +0,0 @@ -package launch - -import ( - "math/rand" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - - "github.com/tendermint/spn/testutil/sample" - launchsim "github.com/tendermint/spn/x/launch/simulation" - "github.com/tendermint/spn/x/launch/types" -) - -const ( - defaultWeightMsgCreateChain int = 50 - defaultWeightMsgEditChain int = 20 - defaultWeightMsgRequestAddGenesisAccount int = 50 - defaultWeightMsgRequestAddVestingAccount int = 50 - defaultWeightMsgRequestRemoveAccount int = 15 - defaultWeightMsgRequestAddValidator int = 50 - defaultWeightMsgRequestRemoveValidator int = 15 - defaultWeightMsgRequestParamChange int = 15 - defaultWeightMsgSettleRequest int = 50 - defaultWeightMsgTriggerLaunch int = 15 - defaultWeightMsgRevertLaunch int = 0 - defaultWeightMsgUpdateLaunchInformation int = 20 - - opWeightMsgCreateChain = "op_weight_msg_create_chain" - opWeightMsgEditChain = "op_weight_msg_edit_chain" - opWeightMsgRequestAddGenesisAccount = "op_weight_msg_request_add_genesis_account" - opWeightMsgRequestAddVestingAccount = "op_weight_msg_request_add_vesting_account" - opWeightMsgRequestRemoveAccount = "op_weight_msg_request_remove_account" - opWeightMsgRequestAddValidator = "op_weight_msg_request_add_validator" - opWeightMsgRequestRemoveValidator = "op_weight_msg_request_remove_validator" - opWeightMsgRequestParamChange = "op_weight_msg_request_change_param" - opWeightMsgTriggerLaunch = "op_weight_msg_trigger_launch" - opWeightMsgRevertLaunch = "op_weight_msg_revert_launch" - opWeightMsgSettleRequest = "op_weight_msg_settle_request" - opWeightMsgUpdateLaunchInformation = "op_weight_msg_update_launch_information" - - // this line is used by starport scaffolding # simapp/module/const -) - -// GenerateGenesisState creates a randomized GenState of the module -func (AppModule) GenerateGenesisState(simState *module.SimulationState) { - accs := make([]string, len(simState.Accounts)) - for i, acc := range simState.Accounts { - accs[i] = acc.Address.String() - } - launchGenesis := sample.LaunchGenesisState(simState.Rand, accs...) - simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&launchGenesis) -} - -// ProposalContents doesn't return any content functions for governance proposals -func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { - return nil -} - -// RandomizedParams creates randomized param changes for the simulator -func (am AppModule) RandomizedParams(r *rand.Rand) []simtypes.LegacyParamChange { - launchParams := sample.LaunchParams(r) - return []simtypes.LegacyParamChange{ - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyLaunchTimeRange), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(launchParams.LaunchTimeRange)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyChainCreationFee), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(launchParams.ChainCreationFee)) - }), - } -} - -// RegisterStoreDecoder registers a decoder -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} - -// WeightedOperations returns the all the gov module operations with their respective weights. -func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { - // this line is used by starport scaffolding # simapp/module/operation - var ( - weightMsgCreateChain int - weightMsgEditChain int - weightMsgRequestAddGenesisAccount int - weightMsgRequestAddVestingAccount int - weightMsgRequestRemoveAccount int - weightMsgRequestAddValidator int - weightMsgRequestRemoveValidator int - weightMsgRequestParamChange int - weightMsgTriggerLaunch int - weightMsgRevertLaunch int - weightMsgSettleRequest int - weightMsgUpdateLaunchInformation int - ) - - appParams := simState.AppParams - cdc := simState.Cdc - appParams.GetOrGenerate(cdc, opWeightMsgCreateChain, &weightMsgCreateChain, nil, - func(_ *rand.Rand) { - weightMsgCreateChain = defaultWeightMsgCreateChain - }, - ) - appParams.GetOrGenerate(simState.Cdc, opWeightMsgUpdateLaunchInformation, &weightMsgUpdateLaunchInformation, nil, - func(_ *rand.Rand) { - weightMsgUpdateLaunchInformation = defaultWeightMsgUpdateLaunchInformation - }, - ) - - appParams.GetOrGenerate(cdc, opWeightMsgEditChain, &weightMsgEditChain, nil, - func(_ *rand.Rand) { - weightMsgEditChain = defaultWeightMsgEditChain - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRequestAddGenesisAccount, &weightMsgRequestAddGenesisAccount, nil, - func(_ *rand.Rand) { - weightMsgRequestAddGenesisAccount = defaultWeightMsgRequestAddGenesisAccount - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRequestAddGenesisAccount, &weightMsgRequestAddGenesisAccount, nil, - func(_ *rand.Rand) { - weightMsgRequestAddGenesisAccount = defaultWeightMsgRequestAddGenesisAccount - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRequestAddVestingAccount, &weightMsgRequestAddVestingAccount, nil, - func(_ *rand.Rand) { - weightMsgRequestAddVestingAccount = defaultWeightMsgRequestAddVestingAccount - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRequestRemoveAccount, &weightMsgRequestRemoveAccount, nil, - func(_ *rand.Rand) { - weightMsgRequestRemoveAccount = defaultWeightMsgRequestRemoveAccount - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRequestAddValidator, &weightMsgRequestAddValidator, nil, - func(_ *rand.Rand) { - weightMsgRequestAddValidator = defaultWeightMsgRequestAddValidator - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRequestRemoveValidator, &weightMsgRequestRemoveValidator, nil, - func(_ *rand.Rand) { - weightMsgRequestRemoveValidator = defaultWeightMsgRequestRemoveValidator - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRequestParamChange, &weightMsgRequestParamChange, nil, - func(_ *rand.Rand) { - weightMsgRequestParamChange = defaultWeightMsgRequestParamChange - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgTriggerLaunch, &weightMsgTriggerLaunch, nil, - func(_ *rand.Rand) { - weightMsgTriggerLaunch = defaultWeightMsgTriggerLaunch - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRevertLaunch, &weightMsgRevertLaunch, nil, - func(_ *rand.Rand) { - weightMsgRevertLaunch = defaultWeightMsgRevertLaunch - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgSettleRequest, &weightMsgSettleRequest, nil, - func(_ *rand.Rand) { - weightMsgSettleRequest = defaultWeightMsgSettleRequest - }, - ) - - return []simtypes.WeightedOperation{ - simulation.NewWeightedOperation( - weightMsgCreateChain, - launchsim.SimulateMsgCreateChain(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgEditChain, - launchsim.SimulateMsgEditChain(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgRequestAddGenesisAccount, - launchsim.SimulateMsgRequestAddGenesisAccount(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgRequestAddVestingAccount, - launchsim.SimulateMsgRequestAddVestingAccount(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgRequestRemoveAccount, - launchsim.SimulateMsgRequestRemoveAccount(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgRequestAddValidator, - launchsim.SimulateMsgRequestAddValidator(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgRequestRemoveValidator, - launchsim.SimulateMsgRequestRemoveValidator(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgRequestParamChange, - launchsim.SimulateMsgRequestParamChange(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgTriggerLaunch, - launchsim.SimulateMsgTriggerLaunch(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgSettleRequest, - launchsim.SimulateMsgSettleRequest(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgRevertLaunch, - launchsim.SimulateMsgRevertLaunch(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgUpdateLaunchInformation, - launchsim.SimulateMsgUpdateLaunchInformation(am.accountKeeper, am.bankKeeper, am.keeper), - ), - } -} diff --git a/x/launch/simulation/create_chain.go b/x/launch/simulation/create_chain.go new file mode 100644 index 00000000..d05f8030 --- /dev/null +++ b/x/launch/simulation/create_chain.go @@ -0,0 +1,72 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func SimulateMsgCreateChain( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgCreateChain{} + + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + + // Check if the coordinator address is already in the store + var found bool + var simAccount simtypes.Account + for _, acc := range accs { + _, err := k.GetProfileKeeper().CoordinatorIDFromAddress(ctx, acc.Address) + if err == nil { + simAccount = acc + found = true + break + } + } + if !found { + // No message if no coordinator + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip create a new chain"), nil, nil + } + + // skip if account cannot cover creation fee + creationFee := params.ChainCreationFee + msg = sample.MsgCreateChain(r, + simAccount.Address.String(), + "", + false, + 0, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: creationFee, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/launch/simulation/edit_chain.go b/x/launch/simulation/edit_chain.go new file mode 100644 index 00000000..5cfdbc91 --- /dev/null +++ b/x/launch/simulation/edit_chain.go @@ -0,0 +1,82 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func SimulateMsgEditChain( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgEditChain{} + + // Select a chain with a valid coordinator account + chain, found := FindRandomChain(r, ctx, k, r.Intn(100) < 50, false) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "chain not found"), nil, nil + } + + simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, chain.LaunchID) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "coordinator account not found"), nil, nil + } + + modify := r.Intn(100) < 50 + setProjectID := r.Intn(100) < 50 + // do not set projectID if already set + if chain.HasProject { + setProjectID = false + } + // ensure there is always a value to edit + if !modify && !setProjectID { + modify = true + } + + projectID := uint64(0) + ok := false + if setProjectID { + projectID, ok = FindCoordinatorProject(r, ctx, k.GetProjectKeeper(), chain.CoordinatorID, chain.LaunchID) + if !ok { + modify = true + setProjectID = false + } + } + + msg = sample.MsgEditChain(r, + simAccount.Address.String(), + chain.LaunchID, + setProjectID, + projectID, + modify, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/launch/simulation/store.go b/x/launch/simulation/helpers.go similarity index 79% rename from x/launch/simulation/store.go rename to x/launch/simulation/helpers.go index 09b65230..84e982ea 100644 --- a/x/launch/simulation/store.go +++ b/x/launch/simulation/helpers.go @@ -4,17 +4,18 @@ import ( "fmt" "math/rand" + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" ) // IsLaunchTriggeredChain check if chain is launch triggered func IsLaunchTriggeredChain(ctx sdk.Context, k keeper.Keeper, chainID uint64) bool { - chain, found := k.GetChain(ctx, chainID) - if !found { + chain, err := k.GetChain(ctx, chainID) + if err != nil { return false } return chain.LaunchTriggered @@ -67,8 +68,10 @@ func FindCoordinatorProject( coordID uint64, chainID uint64, ) (uint64, bool) { - projects := ck.GetAllProject(ctx) - + projects, err := ck.Projects(ctx) + if err != nil { + return 0, false + } prjtNb := len(projects) if prjtNb == 0 { return 0, false @@ -83,8 +86,8 @@ func FindCoordinatorProject( for _, project := range projects { if project.CoordinatorID == coordID { // get chain ids - projectChains, hasChains := ck.GetProjectChains(ctx, project.ProjectID) - if !hasChains { + projectChains, err := ck.GetProjectChains(ctx, project.ProjectID) + if err != nil { return project.ProjectID, true } @@ -108,13 +111,13 @@ func FindChainCoordinatorAccount( accs []simtypes.Account, chainID uint64, ) (simtypes.Account, error) { - chain, found := k.GetChain(ctx, chainID) - if !found { + chain, err := k.GetChain(ctx, chainID) + if err != nil { // No message if no coordinator address return simtypes.Account{}, fmt.Errorf("chain %d not found", chainID) } - coord, found := k.GetProfileKeeper().GetCoordinator(ctx, chain.CoordinatorID) - if !found { + coord, err := k.GetProfileKeeper().GetCoordinator(ctx, chain.CoordinatorID) + if err != nil { return simtypes.Account{}, fmt.Errorf("coordinator %d not found", chain.CoordinatorID) } @@ -133,7 +136,10 @@ func FindRandomChain( launchTriggered, noMainnet bool, ) (chain types.Chain, found bool) { - chains := k.GetAllChain(ctx) + chains, err := k.Chains(ctx) + if err != nil { + return chain, false + } r.Shuffle(len(chains), func(i, j int) { chains[i], chains[j] = chains[j], chains[i] }) @@ -145,8 +151,8 @@ func FindRandomChain( continue } // check if the coordinator is still in the store and active - coord, coordFound := k.GetProfileKeeper().GetCoordinator(ctx, c.CoordinatorID) - if !coordFound || !coord.Active { + coord, err := k.GetProfileKeeper().GetCoordinator(ctx, c.CoordinatorID) + if err != nil || !coord.Active { continue } chain = c @@ -163,7 +169,10 @@ func FindRandomRequest( k keeper.Keeper, ) (request types.Request, found bool) { // Select a random request without launch triggered - requests := k.GetAllRequest(ctx) + requests, err := k.Requests(ctx) + if err != nil { + return request, false + } r.Shuffle(len(requests), func(i, j int) { requests[i], requests[j] = requests[j], requests[i] }) @@ -172,24 +181,28 @@ func FindRandomRequest( continue } - chain, chainFound := k.GetChain(ctx, req.LaunchID) - if !chainFound || chain.LaunchTriggered { + chain, err := k.GetChain(ctx, req.LaunchID) + if err != nil || chain.LaunchTriggered { continue } // check if the coordinator is still in the store and active - coord, coordFound := k.GetProfileKeeper().GetCoordinator(ctx, chain.CoordinatorID) - if !coordFound || !coord.Active { + coord, err := k.GetProfileKeeper().GetCoordinator(ctx, chain.CoordinatorID) + if err != nil || !coord.Active { continue } switch content := req.Content.Content.(type) { case *types.RequestContent_ValidatorRemoval: + valAddress, err := k.AddressCodec().StringToBytes(content.ValidatorRemoval.ValAddress) + if err != nil { + continue + } + // if is validator removal, check if the validator exist - if _, found := k.GetGenesisValidator( + if _, err := k.GenesisValidator.Get( ctx, - chain.LaunchID, - content.ValidatorRemoval.ValAddress, - ); !found { + collections.Join(chain.LaunchID, sdk.AccAddress(valAddress)), + ); err != nil { continue } case *types.RequestContent_AccountRemoval: @@ -213,7 +226,10 @@ func FindRandomValidator( k keeper.Keeper, accs []simtypes.Account, ) (simAccount simtypes.Account, valAcc types.GenesisValidator, found bool) { - valAccs := k.GetAllGenesisValidator(ctx) + valAccs, err := k.AllGenesisValidator(ctx) + if err != nil { + return simAccount, valAcc, false + } r.Shuffle(len(valAccs), func(i, j int) { valAccs[i], valAccs[j] = valAccs[j], valAccs[i] }) diff --git a/x/launch/simulation/revert_launch.go b/x/launch/simulation/revert_launch.go new file mode 100644 index 00000000..cfbe2148 --- /dev/null +++ b/x/launch/simulation/revert_launch.go @@ -0,0 +1,65 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func SimulateMsgRevertLaunch( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgRevertLaunch{} + + // Select a chain with launch triggered + chain, found := FindRandomChain(r, ctx, k, true, false) + if !found { + // No message if no triggered chain + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "triggered chain not found"), nil, nil + } + + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + + // Wait for a specific delay once the chain is launched + if ctx.BlockTime().Before(chain.LaunchTime.Add(params.RevertDelay)) { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "invalid chain launch timestamp"), nil, nil + } + + // Find coordinator account + simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, chain.LaunchID) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), err.Error()), nil, nil + } + msg = sample.MsgRevertLaunch(simAccount.Address.String(), chain.LaunchID) + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/launch/simulation/send_request.go b/x/launch/simulation/send_request.go new file mode 100644 index 00000000..9067306f --- /dev/null +++ b/x/launch/simulation/send_request.go @@ -0,0 +1,398 @@ +package simulation + +import ( + "math/rand" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +// SimulateMsgRequestAddGenesisAccount simulates a MsgRequestAddGenesisAccount message +func SimulateMsgRequestAddGenesisAccount( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgSendRequest{} + + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + fee := params.RequestFee + + // Select a chain without launch triggered + chain, found := FindRandomChain(r, ctx, k, false, true) + if !found { + // No message if no non-triggered chain + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "non-triggered chain not found"), nil, nil + } + + // Select a random account no in genesis + r.Shuffle(len(accs), func(i, j int) { + accs[i], accs[j] = accs[j], accs[i] + }) + var simAccount simtypes.Account + var availableAccount bool + for _, acc := range accs { + _, err := k.GenesisAccount.Get(ctx, collections.Join(chain.LaunchID, acc.Address)) + if err != nil { + continue + } + _, err = k.VestingAccount.Get(ctx, collections.Join(chain.LaunchID, acc.Address)) + if err != nil { + continue + } + simAccount = acc + availableAccount = true + break + } + if !availableAccount { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no available account"), nil, nil + } + + msg = sample.MsgSendRequestWithAddAccount(r, + simAccount.Address.String(), + simAccount.Address.String(), + chain.LaunchID, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: fee, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +// SimulateMsgRequestAddVestingAccount simulates a MsgRequestAddVestingAccount message +func SimulateMsgRequestAddVestingAccount( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgSendRequest{} + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + fee := params.RequestFee + + // Select a chain without launch triggered + chain, found := FindRandomChain(r, ctx, k, false, true) + if !found { + // No message if no non-triggered chain + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "non-triggered chain not found"), nil, nil + } + + // Select a random account no in genesis + r.Shuffle(len(accs), func(i, j int) { + accs[i], accs[j] = accs[j], accs[i] + }) + var simAccount simtypes.Account + var availableAccount bool + for _, acc := range accs { + _, err := k.GenesisAccount.Get(ctx, collections.Join(chain.LaunchID, acc.Address)) + if err != nil { + continue + } + _, err = k.VestingAccount.Get(ctx, collections.Join(chain.LaunchID, acc.Address)) + if err != nil { + continue + } + simAccount = acc + availableAccount = true + break + } + if !availableAccount { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no available account"), nil, nil + } + + msg = sample.MsgSendRequestWithAddVestingAccount(r, + simAccount.Address.String(), + simAccount.Address.String(), + chain.LaunchID, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: fee, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +// SimulateMsgRequestRemoveAccount simulates a MsgRequestRemoveAccount message +func SimulateMsgRequestRemoveAccount( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgSendRequest{} + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + fee := params.RequestFee + + type accChain struct { + address string + launchID uint64 + } + + // build list of genesis and vesting accounts + accChains := make([]accChain, 0) + genAccs, err := k.AllGenesisAccount(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "all genesis account error"), nil, err + } + for _, acc := range genAccs { + accChains = append(accChains, accChain{ + address: acc.Address, + launchID: acc.LaunchID, + }) + } + vestAccs, err := k.AllVestingAccount(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "all vesting account error"), nil, err + } + for _, acc := range vestAccs { + accChains = append(accChains, accChain{ + address: acc.Address, + launchID: acc.LaunchID, + }) + } + + // add entropy + r.Shuffle(len(accChains), func(i, j int) { + accChains[i], accChains[j] = accChains[j], accChains[i] + }) + + var ( + simAccount simtypes.Account + accAddr string + accChainID uint64 + ) + found := false + for _, accChain := range accChains { + if IsLaunchTriggeredChain(ctx, k, accChain.launchID) { + continue + } + // get coordinator account + var err error + simAccount, err = FindChainCoordinatorAccount(ctx, k, accs, accChain.launchID) + if err != nil { + continue + } + accAddr = accChain.address + accChainID = accChain.launchID + found = true + break + } + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "genesis account not found"), nil, nil + } + + msg = types.NewMsgSendRequest( + simAccount.Address.String(), + accChainID, + types.NewAccountRemoval(accAddr), + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: fee, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +// SimulateMsgRequestAddValidator simulates a MsgRequestAddValidator message +func SimulateMsgRequestAddValidator( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgSendRequest{} + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + fee := params.RequestFee + + // Select a chain without launch triggered + chain, found := FindRandomChain(r, ctx, k, false, false) + if !found { + // No message if no non-triggered chain + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "non-triggered chain not found"), nil, nil + } + // Select a random account + simAccount, _ := simtypes.RandomAcc(r, accs) + // Select between new address or coordinator address randomly + msg = sample.MsgSendRequestWithAddValidator(r, + simAccount.Address.String(), + simAccount.Address.String(), + chain.LaunchID, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: fee, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +// SimulateMsgRequestRemoveValidator simulates a MsgRequestRemoveValidator message +func SimulateMsgRequestRemoveValidator( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgSendRequest{} + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + fee := params.RequestFee + + // Select a validator + simAccount, valAcc, found := FindRandomValidator(r, ctx, k, accs) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "validator not found"), nil, nil + } + + msg = sample.MsgSendRequestWithRemoveValidator( + simAccount.Address.String(), + valAcc.Address, + valAcc.LaunchID, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: fee, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +// SimulateMsgRequestParamChange simulates a MsgSendRequest message with ParamChange content +func SimulateMsgRequestParamChange( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgSendRequest{} + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + fee := params.RequestFee + + // Select a chain without launch triggered + chain, found := FindRandomChain(r, ctx, k, false, false) + if !found { + // No message if no non-triggered chain + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "non-triggered chain not found"), nil, nil + } + simAccount, _ := simtypes.RandomAcc(r, accs) + + msg = sample.MsgSendRequestWithParamChange( + r, + simAccount.Address.String(), + chain.LaunchID, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: fee, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/launch/simulation/settle_request.go b/x/launch/simulation/settle_request.go new file mode 100644 index 00000000..78ffc7f4 --- /dev/null +++ b/x/launch/simulation/settle_request.go @@ -0,0 +1,67 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func SimulateMsgSettleRequest( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgSettleRequest{} + + // Select a random request without launch triggered + request, found := FindRandomRequest(r, ctx, k) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "request for non-triggered chain not found"), nil, nil + } + + // Find coordinator account + simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, request.LaunchID) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), err.Error()), nil, nil + } + + approve := r.Intn(100) < 50 + msg = sample.MsgSettleRequest( + simAccount.Address.String(), + request.LaunchID, + request.RequestID, + approve, + ) + + // if we cannot check the request, reject + if err := keeper.CheckRequest(ctx, k, request.LaunchID, request); err != nil { + msg.Approve = false + } + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/launch/simulation/simulation.go b/x/launch/simulation/simulation.go deleted file mode 100644 index 2497616a..00000000 --- a/x/launch/simulation/simulation.go +++ /dev/null @@ -1,611 +0,0 @@ -package simulation - -import ( - "math/rand" - - "github.com/cosmos/cosmos-sdk/baseapp" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - sdksimulation "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/tendermint/spn/testutil/encoding" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/testutil/simulation" - "github.com/tendermint/spn/x/launch/keeper" - "github.com/tendermint/spn/x/launch/types" -) - -// SimulateMsgCreateChain simulates a MsgCreateChain message -func SimulateMsgCreateChain(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Check if the coordinator address is already in the store - var found bool - var simAccount simtypes.Account - for _, acc := range accs { - _, err := k.GetProfileKeeper().CoordinatorIDFromAddress(ctx, acc.Address.String()) - if err == nil { - simAccount = acc - found = true - break - } - } - if !found { - // No message if no coordinator - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateChain, "skip create a new chain"), nil, nil - } - - // skip if account cannot cover creation fee - creationFee := k.ChainCreationFee(ctx) - - msg := sample.MsgCreateChain(r, - simAccount.Address.String(), - "", - false, - 0, - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: creationFee, - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgEditChain simulates a MsgEditChain message -func SimulateMsgEditChain(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Select a chain with a valid coordinator account - chain, found := FindRandomChain(r, ctx, k, r.Intn(100) < 50, false) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditChain, "chain not found"), nil, nil - } - - simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, chain.LaunchID) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditChain, "coordinator account not found"), nil, nil - } - - modify := r.Intn(100) < 50 - setProjectID := r.Intn(100) < 50 - // do not set projectID if already set - if chain.HasProject { - setProjectID = false - } - // ensure there is always a value to edit - if !modify && !setProjectID { - modify = true - } - - projectID := uint64(0) - ok := false - if setProjectID { - projectID, ok = FindCoordinatorProject(r, ctx, k.GetProjectKeeper(), chain.CoordinatorID, chain.LaunchID) - if !ok { - modify = true - setProjectID = false - } - } - - msg := sample.MsgEditChain(r, - simAccount.Address.String(), - chain.LaunchID, - setProjectID, - projectID, - modify, - ) - - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgRequestAddGenesisAccount simulates a MsgRequestAddGenesisAccount message -func SimulateMsgRequestAddGenesisAccount(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - fee := k.RequestFee(ctx) - - // Select a chain without launch triggered - chain, found := FindRandomChain(r, ctx, k, false, true) - if !found { - // No message if no non-triggered chain - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSendRequest, "non-triggered chain not found"), nil, nil - } - - // Select a random account no in genesis - r.Shuffle(len(accs), func(i, j int) { - accs[i], accs[j] = accs[j], accs[i] - }) - var simAccount simtypes.Account - var availableAccount bool - for _, acc := range accs { - _, found := k.GetGenesisAccount(ctx, chain.LaunchID, acc.Address.String()) - if found { - continue - } - _, found = k.GetVestingAccount(ctx, chain.LaunchID, acc.Address.String()) - if found { - continue - } - simAccount = acc - availableAccount = true - break - } - if !availableAccount { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSendRequest, "no available account"), nil, nil - } - - msg := sample.MsgSendRequestWithAddAccount(r, - simAccount.Address.String(), - simAccount.Address.String(), - chain.LaunchID, - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: fee, - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgRequestAddVestingAccount simulates a MsgRequestAddVestingAccount message -func SimulateMsgRequestAddVestingAccount(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - fee := k.RequestFee(ctx) - - // Select a chain without launch triggered - chain, found := FindRandomChain(r, ctx, k, false, true) - if !found { - // No message if no non-triggered chain - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTriggerLaunch, "non-triggered chain not found"), nil, nil - } - - // Select a random account no in genesis - r.Shuffle(len(accs), func(i, j int) { - accs[i], accs[j] = accs[j], accs[i] - }) - var simAccount simtypes.Account - var availableAccount bool - for _, acc := range accs { - _, found := k.GetGenesisAccount(ctx, chain.LaunchID, acc.Address.String()) - if found { - continue - } - _, found = k.GetVestingAccount(ctx, chain.LaunchID, acc.Address.String()) - if found { - continue - } - simAccount = acc - availableAccount = true - break - } - if !availableAccount { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSendRequest, "no available account"), nil, nil - } - - msg := sample.MsgSendRequestWithAddVestingAccount(r, - simAccount.Address.String(), - simAccount.Address.String(), - chain.LaunchID, - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: fee, - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgRequestRemoveAccount simulates a MsgRequestRemoveAccount message -func SimulateMsgRequestRemoveAccount(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - fee := k.RequestFee(ctx) - - type accChain struct { - address string - launchID uint64 - } - - // build list of genesis and vesting accounts - accChains := make([]accChain, 0) - genAccs := k.GetAllGenesisAccount(ctx) - for _, acc := range genAccs { - accChains = append(accChains, accChain{ - address: acc.Address, - launchID: acc.LaunchID, - }) - } - vestAccs := k.GetAllVestingAccount(ctx) - for _, acc := range vestAccs { - accChains = append(accChains, accChain{ - address: acc.Address, - launchID: acc.LaunchID, - }) - } - - // add entropy - r.Shuffle(len(accChains), func(i, j int) { - accChains[i], accChains[j] = accChains[j], accChains[i] - }) - - var ( - simAccount simtypes.Account - accAddr string - accChainID uint64 - ) - found := false - for _, accChain := range accChains { - if IsLaunchTriggeredChain(ctx, k, accChain.launchID) { - continue - } - // get coordinator account - var err error - simAccount, err = FindChainCoordinatorAccount(ctx, k, accs, accChain.launchID) - if err != nil { - continue - } - accAddr = accChain.address - accChainID = accChain.launchID - found = true - break - } - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSendRequest, "genesis account not found"), nil, nil - } - - msg := types.NewMsgSendRequest( - simAccount.Address.String(), - accChainID, - types.NewAccountRemoval(accAddr), - ) - - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: fee, - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgRequestAddValidator simulates a MsgRequestAddValidator message -func SimulateMsgRequestAddValidator(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - fee := k.RequestFee(ctx) - - // Select a chain without launch triggered - chain, found := FindRandomChain(r, ctx, k, false, false) - if !found { - // No message if no non-triggered chain - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSendRequest, "non-triggered chain not found"), nil, nil - } - // Select a random account - simAccount, _ := simtypes.RandomAcc(r, accs) - // Select between new address or coordinator address randomly - msg := sample.MsgSendRequestWithAddValidator(r, - simAccount.Address.String(), - simAccount.Address.String(), - chain.LaunchID, - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: fee, - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgRequestRemoveValidator simulates a MsgRequestRemoveValidator message -func SimulateMsgRequestRemoveValidator(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - fee := k.RequestFee(ctx) - - // Select a validator - simAccount, valAcc, found := FindRandomValidator(r, ctx, k, accs) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSendRequest, "validator not found"), nil, nil - } - - msg := sample.MsgSendRequestWithRemoveValidator( - simAccount.Address.String(), - valAcc.Address, - valAcc.LaunchID, - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: fee, - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgRequestParamChange simulates a MsgSendRequest message with ParamChange content -func SimulateMsgRequestParamChange(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - fee := k.RequestFee(ctx) - - // Select a chain without launch triggered - chain, found := FindRandomChain(r, ctx, k, false, false) - if !found { - // No message if no non-triggered chain - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSendRequest, "non-triggered chain not found"), nil, nil - } - simAccount, _ := simtypes.RandomAcc(r, accs) - - msg := sample.MsgSendRequestWithParamChange( - r, - simAccount.Address.String(), - chain.LaunchID, - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: fee, - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgTriggerLaunch simulates a MsgTriggerLaunch message -func SimulateMsgTriggerLaunch(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Select a chain without launch triggered - chain, found := FindRandomChain(r, ctx, k, false, false) - if !found { - // No message if no non-triggered chain - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTriggerLaunch, "non-triggered chain not found"), nil, nil - } - - // Find coordinator account - simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, chain.LaunchID) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTriggerLaunch, err.Error()), nil, nil - } - msg := sample.MsgTriggerLaunch(r, simAccount.Address.String(), chain.LaunchID, ctx.BlockTime()) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgSettleRequest simulates a MsgSettleRequest message -func SimulateMsgSettleRequest(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Select a random request without launch triggered - request, found := FindRandomRequest(r, ctx, k) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSettleRequest, "request for non-triggered chain not found"), nil, nil - } - - // Find coordinator account - simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, request.LaunchID) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSettleRequest, err.Error()), nil, nil - } - - approve := r.Intn(100) < 50 - msg := sample.MsgSettleRequest( - simAccount.Address.String(), - request.LaunchID, - request.RequestID, - approve, - ) - - // if we cannot check the request, reject - if err := keeper.CheckRequest(ctx, k, request.LaunchID, request); err != nil { - msg.Approve = false - } - - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgRevertLaunch simulates a MsgRevertLaunch message -func SimulateMsgRevertLaunch(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Select a chain with launch triggered - chain, found := FindRandomChain(r, ctx, k, true, false) - if !found { - // No message if no triggered chain - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRevertLaunch, "triggered chain not found"), nil, nil - } - - // Wait for a specific delay once the chain is launched - if ctx.BlockTime().Before(chain.LaunchTime.Add(k.RevertDelay(ctx))) { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRevertLaunch, "invalid chain launch timestamp"), nil, nil - } - - // Find coordinator account - simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, chain.LaunchID) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRevertLaunch, err.Error()), nil, nil - } - msg := sample.MsgRevertLaunch(simAccount.Address.String(), chain.LaunchID) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgUpdateLaunchInformation simulates a MsgUpdateLaunchInformation message -func SimulateMsgUpdateLaunchInformation(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Select a chain with a valid coordinator account - chain, found := FindRandomChain(r, ctx, k, false, false) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditChain, "chain not found"), nil, nil - } - - simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, chain.LaunchID) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditChain, "coordinator account not found"), nil, nil - } - - modify := r.Intn(100) < 50 - msg := sample.MsgUpdateLaunchInformation(r, - simAccount.Address.String(), - chain.LaunchID, - modify, - !modify, - modify, - !modify && r.Intn(100) < 50, - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: &msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} diff --git a/x/launch/simulation/store_test.go b/x/launch/simulation/store_test.go deleted file mode 100644 index 7582b7f2..00000000 --- a/x/launch/simulation/store_test.go +++ /dev/null @@ -1,399 +0,0 @@ -package simulation_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/simulation" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/keeper" - launchsimulation "github.com/tendermint/spn/x/launch/simulation" - "github.com/tendermint/spn/x/launch/types" - profilekeeper "github.com/tendermint/spn/x/profile/keeper" - profiletypes "github.com/tendermint/spn/x/profile/types" - projectkeeper "github.com/tendermint/spn/x/project/keeper" - projecttypes "github.com/tendermint/spn/x/project/types" -) - -func setupMsgServer(t testing.TB) ( - sdk.Context, - testkeeper.TestKeepers, - types.MsgServer, - profiletypes.MsgServer, - projecttypes.MsgServer, -) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - return ctx, - tk, - keeper.NewMsgServerImpl(*tk.LaunchKeeper), - profilekeeper.NewMsgServerImpl(*tk.ProfileKeeper), - projectkeeper.NewMsgServerImpl(*tk.ProjectKeeper) -} - -func TestFindAccount(t *testing.T) { - var ( - r = sample.Rand() - accs = simulation.RandomAccounts(r, 5) - ) - tests := []struct { - name string - address string - want simulation.Account - wantErr bool - }{ - { - name: "should prevent finding account from invalid address", - address: "invalid_address", - wantErr: true, - }, - { - name: "should find first account", - address: accs[0].Address.String(), - want: accs[0], - }, - { - name: "should find last account", - address: accs[len(accs)-1].Address.String(), - want: accs[len(accs)-1], - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := launchsimulation.FindAccount(accs, tt.address) - if tt.wantErr { - require.Error(t, err) - return - } - require.NoError(t, err) - require.Equal(t, tt.want, got) - }) - } -} - -func TestFindChainCoordinatorAccount(t *testing.T) { - var ( - sdkCtx, tk, _, profileSrv, _ = setupMsgServer(t) - - ctx = sdk.WrapSDKContext(sdkCtx) - r = sample.Rand() - accs = simulation.RandomAccounts(r, 2) - ) - - // Create coordinator - msgCreateCoord := sample.MsgCreateCoordinator(accs[0].Address.String()) - res, err := profileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - - // Create coordinator and disable - msgCreateCoord = sample.MsgCreateCoordinator(accs[1].Address.String()) - resDisable, err := profileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - msgDisableCoord := sample.MsgDisableCoordinator(accs[1].Address.String()) - _, err = profileSrv.DisableCoordinator(ctx, &msgDisableCoord) - require.NoError(t, err) - - // Create chains - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: res.CoordinatorID, - }) - chainWithoutCoordID := tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: 1000, - }) - - chainWithDisableCoord := tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: resDisable.CoordinatorID, - }) - - tests := []struct { - name string - chainID uint64 - want simulation.Account - wantErr bool - }{ - { - name: "should find valid chain coordinator", - chainID: chainID, - want: accs[0], - }, - { - name: "should prevent finding chain without coordinator", - chainID: chainWithoutCoordID, - wantErr: true, - }, - { - name: "should prevent finding chain with disabled coordinator", - chainID: chainWithDisableCoord, - wantErr: true, - }, - { - name: "should prevent finding non existing chain", - chainID: 1000, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := launchsimulation.FindChainCoordinatorAccount(sdkCtx, *tk.LaunchKeeper, accs, tt.chainID) - if tt.wantErr { - require.Error(t, err) - return - } - require.NoError(t, err) - require.Equal(t, tt.want, got) - }) - } -} - -func TestIsLaunchTriggeredChain(t *testing.T) { - var ( - r = sample.Rand() - sdkCtx, tk, _, profileSrv, _ = setupMsgServer(t) - ctx = sdk.WrapSDKContext(sdkCtx) - msgCreateCoord = sample.MsgCreateCoordinator(sample.Address(r)) - ) - - // Create coordinator - res, err := profileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - - tests := []struct { - name string - IsTriggered bool - }{ - { - name: "should return true for launch triggered chain", - IsTriggered: true, - }, - { - name: "should return false for chain with launch not triggered", - IsTriggered: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: res.CoordinatorID, - LaunchTriggered: tt.IsTriggered, - }) - got := launchsimulation.IsLaunchTriggeredChain(sdkCtx, *tk.LaunchKeeper, chainID) - require.Equal(t, tt.IsTriggered, got) - }) - } -} - -func TestFindRandomChain(t *testing.T) { - var ( - sdkCtx, tk, _, profileSrv, _ = setupMsgServer(t) - - r = sample.Rand() - ctx = sdk.WrapSDKContext(sdkCtx) - msgCreateCoord = sample.MsgCreateCoordinator(sample.Address(r)) - ) - - t.Run("should prevent finding chain if no chain", func(t *testing.T) { - _, found := launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, true, false) - require.False(t, found) - _, found = launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, false, false) - require.False(t, found) - }) - - // Create coordinator - res, err := profileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - - t.Run("should prevent finding chain without coordinator", func(t *testing.T) { - tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: 1000, - LaunchTriggered: true, - }) - _, found := launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, true, false) - require.False(t, found) - }) - - t.Run("should allow filtering finding chain with no mainnet", func(t *testing.T) { - tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: res.CoordinatorID, - IsMainnet: true, - }) - _, found := launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, false, true) - require.False(t, found) - - tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: res.CoordinatorID, - }) - c, found := launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, false, true) - require.True(t, found) - require.False(t, c.IsMainnet) - }) - - t.Run("should allow filtering finding chain with launch not triggered", func(t *testing.T) { - tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: res.CoordinatorID, - LaunchTriggered: false, - }) - _, found := launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, true, false) - require.False(t, found) - got, found := launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, false, false) - require.True(t, found) - require.Equal(t, res.CoordinatorID, got.CoordinatorID) - }) - - t.Run("should allow finding an existing chain", func(t *testing.T) { - tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: res.CoordinatorID, - LaunchTriggered: true, - }) - got, found := launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, true, false) - require.True(t, found) - require.Equal(t, res.CoordinatorID, got.CoordinatorID) - got, found = launchsimulation.FindRandomChain(r, sdkCtx, *tk.LaunchKeeper, false, false) - require.True(t, found) - require.Equal(t, res.CoordinatorID, got.CoordinatorID) - }) -} - -func TestFindRandomValidator(t *testing.T) { - var ( - sdkCtx, tk, _, profileSrv, _ = setupMsgServer(t) - - ctx = sdk.WrapSDKContext(sdkCtx) - r = sample.Rand() - accs = simulation.RandomAccounts(r, 2) - ) - - t.Run("should prevent finding validator when no validator", func(t *testing.T) { - gotSimAcc, gotVal, gotFound := launchsimulation.FindRandomValidator(r, sdkCtx, *tk.LaunchKeeper, accs) - - require.False(t, gotFound) - require.Equal(t, simtypes.Account{}, gotSimAcc) - require.Equal(t, types.GenesisValidator{}, gotVal) - }) - - t.Run("should prevent finding validator for chain with launch triggered", func(t *testing.T) { - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - LaunchTriggered: true, - }) - tk.LaunchKeeper.SetGenesisValidator(sdkCtx, sample.GenesisValidator(r, chainID, sample.Address(r))) - - gotSimAcc, gotVal, gotFound := launchsimulation.FindRandomValidator(r, sdkCtx, *tk.LaunchKeeper, accs) - require.False(t, gotFound) - require.Equal(t, simtypes.Account{}, gotSimAcc) - require.Equal(t, types.GenesisValidator{}, gotVal) - }) - - t.Run("should prevent finding validator for chain without coordinator", func(t *testing.T) { - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, sample.Chain(r, 0, 1000)) - tk.LaunchKeeper.SetGenesisValidator(sdkCtx, sample.GenesisValidator(r, chainID, sample.Address(r))) - - gotSimAcc, gotVal, gotFound := launchsimulation.FindRandomValidator(r, sdkCtx, *tk.LaunchKeeper, accs) - require.False(t, gotFound) - require.Equal(t, simtypes.Account{}, gotSimAcc) - require.Equal(t, types.GenesisValidator{}, gotVal) - }) - - t.Run("should prevent finding validator for chain without coordinator account", func(t *testing.T) { - msgCreateCoord := sample.MsgCreateCoordinator(sample.Address(r)) - res, err := profileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, sample.Chain(r, 0, res.CoordinatorID)) - tk.LaunchKeeper.SetGenesisValidator(sdkCtx, sample.GenesisValidator(r, chainID, sample.Address(r))) - - gotSimAcc, gotVal, gotFound := launchsimulation.FindRandomValidator(r, sdkCtx, *tk.LaunchKeeper, accs) - require.False(t, gotFound) - require.Equal(t, simtypes.Account{}, gotSimAcc) - require.Equal(t, types.GenesisValidator{}, gotVal) - }) - - t.Run("should allow finding a validator from a chain", func(t *testing.T) { - msgCreateCoord := sample.MsgCreateCoordinator(accs[0].Address.String()) - res, err := profileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, sample.Chain(r, 0, res.CoordinatorID)) - validator := sample.GenesisValidator(r, chainID, sample.Address(r)) - tk.LaunchKeeper.SetGenesisValidator(sdkCtx, validator) - - gotSimAcc, gotVal, gotFound := launchsimulation.FindRandomValidator(r, sdkCtx, *tk.LaunchKeeper, accs) - require.True(t, gotFound) - require.Equal(t, accs[0], gotSimAcc) - require.Equal(t, validator, gotVal) - }) -} - -func TestFindRandomRequest(t *testing.T) { - var ( - sdkCtx, tk, _, profileSrv, _ = setupMsgServer(t) - - r = sample.Rand() - ctx = sdk.WrapSDKContext(sdkCtx) - ) - - t.Run("should prevent finding request when no request", func(t *testing.T) { - gotRequest, gotFound := launchsimulation.FindRandomRequest(r, sdkCtx, *tk.LaunchKeeper) - require.Equal(t, types.Request{}, gotRequest) - require.False(t, gotFound) - }) - - t.Run("should prevent finding request with request with no chain", func(t *testing.T) { - tk.LaunchKeeper.AppendRequest(sdkCtx, types.Request{ - LaunchID: 10000, - Creator: sample.Address(r), - }) - gotRequest, gotFound := launchsimulation.FindRandomRequest(r, sdkCtx, *tk.LaunchKeeper) - require.Equal(t, types.Request{}, gotRequest) - require.False(t, gotFound) - }) - - t.Run("should prevent finding request from launch triggered chain", func(t *testing.T) { - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - LaunchTriggered: true, - }) - tk.LaunchKeeper.AppendRequest(sdkCtx, sample.Request(r, chainID, sample.Address(r))) - gotRequest, gotFound := launchsimulation.FindRandomRequest(r, sdkCtx, *tk.LaunchKeeper) - require.Equal(t, types.Request{}, gotRequest) - require.False(t, gotFound) - }) - - t.Run("should prevent finding request from chain without coordinator", func(t *testing.T) { - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, types.Chain{ - CoordinatorID: 10000, - LaunchTriggered: true, - }) - tk.LaunchKeeper.AppendRequest(sdkCtx, sample.Request(r, chainID, sample.Address(r))) - gotRequest, gotFound := launchsimulation.FindRandomRequest(r, sdkCtx, *tk.LaunchKeeper) - require.Equal(t, types.Request{}, gotRequest) - require.False(t, gotFound) - }) - - t.Run("should prevent finding request with status non-pending", func(t *testing.T) { - msgCreateCoord := sample.MsgCreateCoordinator(sample.Address(r)) - res, err := profileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, sample.Chain(r, 0, res.CoordinatorID)) - request := sample.Request(r, chainID, sample.Address(r)) - request.Status = types.Request_APPROVED - tk.LaunchKeeper.AppendRequest(sdkCtx, request) - - gotRequest, gotFound := launchsimulation.FindRandomRequest(r, sdkCtx, *tk.LaunchKeeper) - require.Equal(t, types.Request{}, gotRequest) - require.False(t, gotFound) - }) - - t.Run("should allow finding a valid request", func(t *testing.T) { - msgCreateCoord := sample.MsgCreateCoordinator(sample.Address(r)) - res, err := profileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - - chainID := tk.LaunchKeeper.AppendChain(sdkCtx, sample.Chain(r, 1, res.CoordinatorID)) - request := sample.Request(r, chainID, sample.Address(r)) - tk.LaunchKeeper.AppendRequest(sdkCtx, request) - - gotRequest, gotFound := launchsimulation.FindRandomRequest(r, sdkCtx, *tk.LaunchKeeper) - require.Equal(t, request, gotRequest) - require.True(t, gotFound) - }) -} diff --git a/x/launch/simulation/trigger_launch.go b/x/launch/simulation/trigger_launch.go new file mode 100644 index 00000000..5658e682 --- /dev/null +++ b/x/launch/simulation/trigger_launch.go @@ -0,0 +1,57 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func SimulateMsgTriggerLaunch( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgTriggerLaunch{} + + // Select a chain without launch triggered + chain, found := FindRandomChain(r, ctx, k, false, false) + if !found { + // No message if no non-triggered chain + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "non-triggered chain not found"), nil, nil + } + + // Find coordinator account + simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, chain.LaunchID) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), err.Error()), nil, nil + } + + msg = sample.MsgTriggerLaunch(r, simAccount.Address.String(), chain.LaunchID, ctx.BlockTime()) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/launch/simulation/update_launch_information.go b/x/launch/simulation/update_launch_information.go new file mode 100644 index 00000000..7230e15f --- /dev/null +++ b/x/launch/simulation/update_launch_information.go @@ -0,0 +1,63 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/keeper" + "github.com/ignite/network/x/launch/types" +) + +func SimulateMsgUpdateLaunchInformation( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := types.MsgUpdateLaunchInformation{} + + // Select a chain with a valid coordinator account + chain, found := FindRandomChain(r, ctx, k, false, false) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "chain not found"), nil, nil + } + + simAccount, err := FindChainCoordinatorAccount(ctx, k, accs, chain.LaunchID) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "coordinator account not found"), nil, nil + } + + modify := r.Intn(100) < 50 + msg = sample.MsgUpdateLaunchInformation(r, + simAccount.Address.String(), + chain.LaunchID, + modify, + !modify, + modify, + !modify && r.Intn(100) < 50, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: &msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/launch/types/chain.go b/x/launch/types/chain.go index cbdcac17..39b3db0a 100644 --- a/x/launch/types/chain.go +++ b/x/launch/types/chain.go @@ -3,7 +3,7 @@ package types import ( "errors" - "github.com/tendermint/spn/pkg/chainid" + "github.com/ignite/network/pkg/chainid" ) // Validate checks the chain has valid data diff --git a/x/launch/types/chain.pb.go b/x/launch/types/chain.pb.go index 46a62906..9aacf347 100644 --- a/x/launch/types/chain.pb.go +++ b/x/launch/types/chain.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/chain.proto +// source: network/launch/v1/chain.proto package types @@ -7,6 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" @@ -55,7 +56,7 @@ func (m *Chain) Reset() { *m = Chain{} } func (m *Chain) String() string { return proto.CompactTextString(m) } func (*Chain) ProtoMessage() {} func (*Chain) Descriptor() ([]byte, []int) { - return fileDescriptor_8b919b922fe97a70, []int{0} + return fileDescriptor_5649fed3e1144d90, []int{0} } func (m *Chain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -209,7 +210,7 @@ func (m *InitialGenesis) Reset() { *m = InitialGenesis{} } func (m *InitialGenesis) String() string { return proto.CompactTextString(m) } func (*InitialGenesis) ProtoMessage() {} func (*InitialGenesis) Descriptor() ([]byte, []int) { - return fileDescriptor_8b919b922fe97a70, []int{1} + return fileDescriptor_5649fed3e1144d90, []int{1} } func (m *InitialGenesis) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -304,7 +305,7 @@ func (m *DefaultInitialGenesis) Reset() { *m = DefaultInitialGenesis{} } func (m *DefaultInitialGenesis) String() string { return proto.CompactTextString(m) } func (*DefaultInitialGenesis) ProtoMessage() {} func (*DefaultInitialGenesis) Descriptor() ([]byte, []int) { - return fileDescriptor_8b919b922fe97a70, []int{2} + return fileDescriptor_5649fed3e1144d90, []int{2} } func (m *DefaultInitialGenesis) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -343,7 +344,7 @@ func (m *GenesisURL) Reset() { *m = GenesisURL{} } func (m *GenesisURL) String() string { return proto.CompactTextString(m) } func (*GenesisURL) ProtoMessage() {} func (*GenesisURL) Descriptor() ([]byte, []int) { - return fileDescriptor_8b919b922fe97a70, []int{3} + return fileDescriptor_5649fed3e1144d90, []int{3} } func (m *GenesisURL) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -396,7 +397,7 @@ func (m *GenesisConfig) Reset() { *m = GenesisConfig{} } func (m *GenesisConfig) String() string { return proto.CompactTextString(m) } func (*GenesisConfig) ProtoMessage() {} func (*GenesisConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_8b919b922fe97a70, []int{4} + return fileDescriptor_5649fed3e1144d90, []int{4} } func (m *GenesisConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -433,61 +434,64 @@ func (m *GenesisConfig) GetFile() string { } func init() { - proto.RegisterType((*Chain)(nil), "spn.launch.Chain") - proto.RegisterType((*InitialGenesis)(nil), "spn.launch.InitialGenesis") - proto.RegisterType((*DefaultInitialGenesis)(nil), "spn.launch.DefaultInitialGenesis") - proto.RegisterType((*GenesisURL)(nil), "spn.launch.GenesisURL") - proto.RegisterType((*GenesisConfig)(nil), "spn.launch.GenesisConfig") -} - -func init() { proto.RegisterFile("spn/launch/chain.proto", fileDescriptor_8b919b922fe97a70) } - -var fileDescriptor_8b919b922fe97a70 = []byte{ - // 694 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0x8e, 0x9b, 0x34, 0x24, 0x93, 0x26, 0xad, 0x16, 0x5a, 0x96, 0x08, 0x39, 0x21, 0x20, 0xf0, - 0x05, 0x9b, 0x06, 0x09, 0x71, 0x6d, 0x1a, 0xa9, 0x89, 0x04, 0x12, 0xb2, 0xca, 0x01, 0x38, 0x6d, - 0xec, 0x8d, 0xb3, 0x10, 0xef, 0x46, 0xde, 0x75, 0x05, 0xaf, 0xc0, 0xa9, 0x4f, 0xc0, 0x03, 0xf0, - 0x24, 0x3d, 0xf6, 0xc8, 0xa9, 0x45, 0xed, 0x1b, 0x70, 0xe4, 0x84, 0x76, 0x9d, 0x34, 0x3f, 0x04, - 0x89, 0x93, 0x67, 0xbf, 0xf9, 0xe6, 0x67, 0x77, 0xbe, 0x31, 0xec, 0xc9, 0x09, 0xf7, 0xc6, 0x24, - 0xe5, 0xc1, 0xc8, 0x0b, 0x46, 0x84, 0x71, 0x77, 0x92, 0x08, 0x25, 0x10, 0xc8, 0x09, 0x77, 0x33, - 0xbc, 0x7e, 0x27, 0x12, 0x91, 0x30, 0xb0, 0xa7, 0xad, 0x8c, 0x51, 0x6f, 0x44, 0x42, 0x44, 0x63, - 0xea, 0x99, 0xd3, 0x20, 0x1d, 0x7a, 0x8a, 0xc5, 0x54, 0x2a, 0x12, 0x4f, 0xa6, 0x04, 0x3b, 0x10, - 0x32, 0x16, 0xd2, 0x1b, 0x10, 0x49, 0xbd, 0x93, 0xfd, 0x01, 0x55, 0x64, 0xdf, 0x0b, 0xc4, 0xac, - 0x44, 0xeb, 0x6b, 0x11, 0x36, 0x0f, 0x75, 0x49, 0x54, 0x87, 0x52, 0x56, 0xaa, 0xdf, 0xc5, 0x56, - 0xd3, 0x72, 0x0a, 0xfe, 0xcd, 0x19, 0x3d, 0x82, 0x6a, 0x20, 0x44, 0x12, 0x32, 0x4e, 0x94, 0x48, - 0xfa, 0x5d, 0xbc, 0x61, 0x08, 0xcb, 0x20, 0x7a, 0x0c, 0xb5, 0x88, 0x72, 0x2a, 0x99, 0x34, 0x19, - 0xfb, 0x5d, 0x9c, 0x6f, 0x5a, 0x4e, 0xd9, 0x5f, 0x41, 0xd1, 0x7d, 0x28, 0x07, 0x09, 0x25, 0x8a, - 0x86, 0x07, 0x0a, 0x17, 0x9a, 0x96, 0x93, 0xf7, 0xe7, 0x80, 0xf6, 0x4a, 0x91, 0x26, 0x01, 0x7d, - 0xeb, 0xbf, 0xc2, 0x9b, 0x26, 0xc1, 0x1c, 0x40, 0x36, 0x40, 0x76, 0xe8, 0x11, 0x39, 0xc2, 0x45, - 0xe3, 0x5e, 0x40, 0x50, 0x0f, 0x6a, 0x8c, 0x33, 0xc5, 0xc8, 0xf8, 0x28, 0x2b, 0x8a, 0x6f, 0x35, - 0x2d, 0xa7, 0xd2, 0xae, 0xbb, 0xf3, 0xb7, 0x74, 0xfb, 0x4b, 0x8c, 0x4e, 0xe1, 0xec, 0xa2, 0x91, - 0xf3, 0x57, 0xe2, 0x74, 0xa5, 0x11, 0x91, 0x6f, 0x12, 0xf1, 0x91, 0x06, 0x0a, 0x97, 0x9a, 0x96, - 0x53, 0xf2, 0x17, 0x10, 0xdd, 0xe7, 0x24, 0x33, 0xfb, 0x5d, 0x5c, 0x36, 0xef, 0x31, 0x07, 0xb4, - 0x97, 0xc9, 0xd7, 0x84, 0x71, 0x4e, 0x15, 0x06, 0x13, 0x3c, 0x07, 0x90, 0x03, 0xdb, 0x59, 0x2b, - 0xc7, 0x09, 0x8b, 0x22, 0x9a, 0xd0, 0x10, 0x57, 0x0c, 0x67, 0x15, 0x46, 0x5d, 0x80, 0x29, 0xc4, - 0x62, 0x8a, 0xb7, 0xa6, 0x77, 0xc9, 0xa6, 0xee, 0xce, 0xa6, 0xee, 0x1e, 0xcf, 0xa6, 0xde, 0x29, - 0xe9, 0xbb, 0x9c, 0x5e, 0x36, 0x2c, 0x7f, 0x21, 0x0e, 0xbd, 0x80, 0xbd, 0x40, 0x70, 0x99, 0xc6, - 0x34, 0xf1, 0xe9, 0x09, 0x93, 0x4c, 0xf0, 0x1e, 0x65, 0xd1, 0x48, 0xe1, 0xaa, 0x79, 0xfe, 0x7f, - 0x78, 0xd1, 0x33, 0xb8, 0x1d, 0x0b, 0xce, 0x94, 0x48, 0x18, 0x8f, 0x0e, 0x05, 0xe7, 0x34, 0x50, - 0x34, 0xc4, 0x35, 0xd3, 0xeb, 0x3a, 0x17, 0xfa, 0x66, 0x41, 0x8d, 0x04, 0x81, 0x48, 0xb9, 0xea, - 0x90, 0x31, 0xe1, 0x01, 0xc5, 0xdb, 0xcd, 0xbc, 0x53, 0x69, 0xdf, 0x73, 0x33, 0x25, 0xba, 0x5a, - 0x89, 0xee, 0x54, 0x89, 0xee, 0xa1, 0x60, 0xbc, 0xf3, 0x41, 0xf7, 0xfc, 0xfb, 0xa2, 0xf1, 0x24, - 0x62, 0x6a, 0x94, 0x0e, 0xdc, 0x40, 0xc4, 0xde, 0x54, 0xb6, 0xd9, 0xe7, 0xa9, 0x0c, 0x3f, 0x79, - 0xea, 0xcb, 0x84, 0x4a, 0x13, 0xf0, 0xfd, 0xb2, 0xe1, 0xfc, 0x27, 0x55, 0xfa, 0x2b, 0xdd, 0x68, - 0x99, 0xc7, 0x54, 0x91, 0x90, 0x28, 0x82, 0x77, 0x9a, 0x96, 0xb3, 0xe5, 0xdf, 0x9c, 0x5b, 0xbf, - 0x2c, 0xa8, 0x2d, 0x6b, 0x03, 0xbd, 0x83, 0xdd, 0x90, 0x0e, 0x49, 0x3a, 0x56, 0xcb, 0x0e, 0xb3, - 0x22, 0x95, 0xf6, 0x83, 0x45, 0x59, 0x75, 0xd7, 0x11, 0x7b, 0x39, 0x7f, 0x7d, 0x06, 0xf4, 0x12, - 0x60, 0xba, 0x18, 0x5a, 0xe9, 0x1b, 0x26, 0xdf, 0xde, 0x62, 0xbe, 0xa3, 0x1b, 0x6f, 0x2f, 0xe7, - 0x2f, 0x70, 0xd1, 0x01, 0x54, 0x67, 0x2b, 0x25, 0xf8, 0x90, 0x45, 0x66, 0xcf, 0xf4, 0x13, 0xff, - 0x1d, 0x9c, 0x11, 0x7a, 0x39, 0x7f, 0x39, 0xa2, 0x53, 0x82, 0x62, 0xb6, 0x35, 0xad, 0xbb, 0xb0, - 0xbb, 0xb6, 0xf1, 0x56, 0x1b, 0x60, 0xde, 0x01, 0xda, 0x81, 0x7c, 0x9a, 0x8c, 0xcd, 0xb5, 0xcb, - 0xbe, 0x36, 0x11, 0x82, 0xc2, 0x48, 0x2f, 0xe1, 0x86, 0x81, 0x8c, 0xdd, 0x7a, 0x08, 0xd5, 0xa5, - 0xc2, 0x9a, 0x34, 0x64, 0x63, 0x3a, 0x8d, 0x33, 0x76, 0xa7, 0x73, 0x76, 0x65, 0x5b, 0xe7, 0x57, - 0xb6, 0xf5, 0xf3, 0xca, 0xb6, 0x4e, 0xaf, 0xed, 0xdc, 0xf9, 0xb5, 0x9d, 0xfb, 0x71, 0x6d, 0xe7, - 0xde, 0x2f, 0x8e, 0x55, 0x51, 0x1e, 0xd2, 0x24, 0x66, 0x5c, 0x79, 0xfa, 0xf7, 0xf8, 0x79, 0xf6, - 0x83, 0x34, 0xc3, 0x1d, 0x14, 0x8d, 0xf6, 0x9f, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x54, 0x31, - 0x4a, 0xf8, 0x3b, 0x05, 0x00, 0x00, + proto.RegisterType((*Chain)(nil), "network.launch.v1.Chain") + proto.RegisterType((*InitialGenesis)(nil), "network.launch.v1.InitialGenesis") + proto.RegisterType((*DefaultInitialGenesis)(nil), "network.launch.v1.DefaultInitialGenesis") + proto.RegisterType((*GenesisURL)(nil), "network.launch.v1.GenesisURL") + proto.RegisterType((*GenesisConfig)(nil), "network.launch.v1.GenesisConfig") +} + +func init() { proto.RegisterFile("network/launch/v1/chain.proto", fileDescriptor_5649fed3e1144d90) } + +var fileDescriptor_5649fed3e1144d90 = []byte{ + // 741 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x6e, 0xd3, 0x4a, + 0x14, 0x8e, 0x93, 0x34, 0x37, 0x99, 0x34, 0x69, 0x3b, 0xf7, 0xf6, 0x32, 0x44, 0xd4, 0x31, 0x01, + 0x81, 0x55, 0x09, 0x9b, 0x04, 0x89, 0x2d, 0x22, 0x8d, 0xd4, 0x44, 0x02, 0x81, 0xac, 0xb2, 0x61, + 0x03, 0x13, 0x67, 0xe2, 0x0c, 0xb5, 0x67, 0x82, 0x67, 0x1c, 0xe8, 0x13, 0xb0, 0xed, 0x9a, 0x17, + 0x00, 0xb1, 0xea, 0x82, 0x87, 0xe8, 0xb2, 0x4b, 0x56, 0x2d, 0x6a, 0x17, 0x7d, 0x07, 0x56, 0xc8, + 0xe3, 0xa4, 0xf9, 0x21, 0x95, 0xd8, 0x24, 0x67, 0xbe, 0xf3, 0x9d, 0x33, 0x67, 0x66, 0xbe, 0xcf, + 0x60, 0x8b, 0x11, 0xf9, 0x81, 0x87, 0xfb, 0xb6, 0x8f, 0x23, 0xe6, 0x0e, 0xec, 0x51, 0xdd, 0x76, + 0x07, 0x98, 0x32, 0x6b, 0x18, 0x72, 0xc9, 0xe1, 0xc6, 0x38, 0x6d, 0x25, 0x69, 0x6b, 0x54, 0xaf, + 0x6c, 0xe0, 0x80, 0x32, 0x6e, 0xab, 0xdf, 0x84, 0x55, 0xd1, 0x5d, 0x2e, 0x02, 0x2e, 0xec, 0x2e, + 0x16, 0xc4, 0x1e, 0xd5, 0xbb, 0x44, 0xe2, 0xba, 0xed, 0xf2, 0x49, 0x97, 0xca, 0x7f, 0x1e, 0xf7, + 0xb8, 0x0a, 0xed, 0x38, 0x1a, 0xa3, 0x55, 0x8f, 0x73, 0xcf, 0x27, 0xb6, 0x5a, 0x75, 0xa3, 0xbe, + 0x2d, 0x69, 0x40, 0x84, 0xc4, 0xc1, 0x30, 0x21, 0xd4, 0xbe, 0xe4, 0xc0, 0xca, 0x4e, 0x3c, 0x0c, + 0xac, 0x80, 0x7c, 0x32, 0x40, 0xa7, 0x85, 0x34, 0x43, 0x33, 0xb3, 0xce, 0xd5, 0x1a, 0xde, 0x05, + 0x25, 0x97, 0xf3, 0xb0, 0x47, 0x19, 0x96, 0x3c, 0xec, 0xb4, 0x50, 0x5a, 0x11, 0xe6, 0x41, 0x78, + 0x0f, 0x94, 0x3d, 0xc2, 0x88, 0xa0, 0x42, 0x75, 0xec, 0xb4, 0x50, 0xc6, 0xd0, 0xcc, 0x82, 0xb3, + 0x80, 0xc2, 0x5b, 0xa0, 0xe0, 0x86, 0x04, 0x4b, 0xd2, 0x7b, 0x2a, 0x51, 0xd6, 0xd0, 0xcc, 0x8c, + 0x33, 0x05, 0xe2, 0xac, 0xe0, 0x51, 0xe8, 0x92, 0x57, 0xce, 0x33, 0xb4, 0xa2, 0x1a, 0x4c, 0x01, + 0xa8, 0x03, 0x90, 0x2c, 0xda, 0x58, 0x0c, 0x50, 0x4e, 0xa5, 0x67, 0x10, 0xf8, 0x02, 0x94, 0x29, + 0xa3, 0x92, 0x62, 0x7f, 0x37, 0xd9, 0x14, 0xfd, 0x63, 0x68, 0x66, 0xb1, 0x71, 0xdb, 0xfa, 0xe3, + 0x96, 0xad, 0xce, 0x1c, 0xb1, 0x99, 0x3d, 0x3e, 0xad, 0xa6, 0x9c, 0x85, 0xf2, 0x78, 0xc3, 0x01, + 0x16, 0x2f, 0x43, 0xfe, 0x8e, 0xb8, 0x12, 0xe5, 0x0d, 0xcd, 0xcc, 0x3b, 0x33, 0x48, 0x3c, 0xee, + 0x30, 0x09, 0x3b, 0x2d, 0x54, 0x50, 0xd7, 0x32, 0x05, 0xe2, 0x2c, 0x15, 0xcf, 0x31, 0x65, 0x8c, + 0x48, 0x04, 0x54, 0xf1, 0x14, 0x80, 0x26, 0x58, 0x4b, 0xa6, 0xd9, 0x0b, 0xa9, 0xe7, 0x91, 0x90, + 0xf4, 0x50, 0x51, 0x71, 0x16, 0x61, 0xd8, 0x02, 0x60, 0x0c, 0xd1, 0x80, 0xa0, 0x55, 0x75, 0xa4, + 0x8a, 0x95, 0x3c, 0xae, 0x35, 0x79, 0x5c, 0x6b, 0x6f, 0xf2, 0xb8, 0xcd, 0x7c, 0x7c, 0x96, 0xc3, + 0xb3, 0xaa, 0xe6, 0xcc, 0xd4, 0xc1, 0xc7, 0xe0, 0x7f, 0x97, 0x33, 0x11, 0x05, 0x24, 0x74, 0xc8, + 0x88, 0x0a, 0xca, 0x59, 0x9b, 0x50, 0x6f, 0x20, 0x51, 0x49, 0xbd, 0xc2, 0x35, 0x59, 0xf8, 0x10, + 0xfc, 0x1b, 0x70, 0x46, 0x25, 0x0f, 0x29, 0xf3, 0x76, 0x38, 0x63, 0xc4, 0x95, 0xa4, 0x87, 0xca, + 0x6a, 0xd6, 0x65, 0x29, 0xf8, 0x5d, 0x03, 0x65, 0xec, 0xba, 0x3c, 0x62, 0xb2, 0x89, 0x7d, 0xcc, + 0x5c, 0x82, 0xd6, 0x8c, 0x8c, 0x59, 0x6c, 0xdc, 0xb4, 0x12, 0x1d, 0x5b, 0xb1, 0x8e, 0xad, 0xb1, + 0x8e, 0xad, 0x1d, 0x4e, 0x59, 0xf3, 0x7d, 0x3c, 0xf3, 0xaf, 0xd3, 0xea, 0x7d, 0x8f, 0xca, 0x41, + 0xd4, 0xb5, 0x5c, 0x1e, 0xd8, 0x63, 0xd1, 0x27, 0x7f, 0x0f, 0x44, 0x6f, 0xdf, 0x96, 0x07, 0x43, + 0x22, 0x54, 0xc1, 0xb7, 0xb3, 0xaa, 0xf9, 0x97, 0x54, 0xf1, 0xf9, 0xf2, 0x68, 0x7b, 0xd5, 0x27, + 0x1e, 0x76, 0x0f, 0xde, 0xc4, 0xa6, 0x11, 0x5f, 0x2f, 0x8f, 0xb6, 0x35, 0x67, 0x61, 0xc6, 0xd8, + 0x03, 0x01, 0x91, 0xb8, 0x87, 0x25, 0x46, 0xeb, 0x86, 0x66, 0xae, 0x3a, 0x57, 0xeb, 0xda, 0xa7, + 0x34, 0x28, 0xcf, 0x2b, 0x06, 0xbe, 0x05, 0x9b, 0x3d, 0xd2, 0xc7, 0x91, 0x2f, 0xe7, 0x13, 0xca, + 0x3f, 0xc5, 0x86, 0xb9, 0x44, 0x73, 0xad, 0x65, 0xfc, 0x76, 0xca, 0x59, 0xde, 0x08, 0x3e, 0x01, + 0x60, 0x6c, 0x9e, 0xd8, 0x0d, 0x69, 0xd5, 0x76, 0x6b, 0x49, 0xdb, 0xdd, 0x2b, 0x52, 0x3b, 0xe5, + 0xcc, 0x94, 0xc0, 0x36, 0x28, 0x4d, 0xdc, 0xc7, 0x59, 0x9f, 0x7a, 0xca, 0x92, 0xc5, 0x86, 0x71, + 0x7d, 0x8f, 0x84, 0xd7, 0x4e, 0x39, 0xf3, 0x85, 0xcd, 0x3c, 0xc8, 0x25, 0x3e, 0xab, 0xdd, 0x00, + 0x9b, 0x4b, 0x8f, 0x51, 0x6b, 0x00, 0x30, 0x1d, 0x04, 0xae, 0x83, 0x4c, 0x14, 0xfa, 0xea, 0x2e, + 0x0a, 0x4e, 0x1c, 0x42, 0x08, 0xb2, 0x83, 0xd8, 0xb6, 0x69, 0x05, 0xa9, 0xb8, 0x76, 0x07, 0x94, + 0xe6, 0x36, 0x8e, 0x49, 0x7d, 0xea, 0x93, 0x71, 0x9d, 0x8a, 0x9b, 0xcd, 0xe3, 0x73, 0x5d, 0x3b, + 0x39, 0xd7, 0xb5, 0x9f, 0xe7, 0xba, 0x76, 0x78, 0xa1, 0xa7, 0x4e, 0x2e, 0xf4, 0xd4, 0x8f, 0x0b, + 0x3d, 0xf5, 0x7a, 0x56, 0x01, 0xd4, 0x63, 0x54, 0x12, 0x7b, 0xf2, 0xb5, 0xfd, 0x38, 0xf9, 0xde, + 0x2a, 0x1d, 0x74, 0x73, 0xca, 0x26, 0x8f, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xfa, 0xa8, + 0xee, 0x8e, 0x05, 0x00, 0x00, } func (m *Chain) Marshal() (dAtA []byte, err error) { diff --git a/x/launch/types/chain_test.go b/x/launch/types/chain_test.go index 80136fd4..dc810c8f 100644 --- a/x/launch/types/chain_test.go +++ b/x/launch/types/chain_test.go @@ -3,12 +3,12 @@ package types_test import ( "testing" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" ) func TestChain_Validate(t *testing.T) { @@ -20,7 +20,7 @@ func TestChain_Validate(t *testing.T) { invalidCoins := sample.Chain(r, 0, 0) // add invalid coin amount - invalidCoins.AccountBalance = sdk.Coins{sdk.Coin{Denom: "invalid", Amount: sdk.NewInt(-1)}} + invalidCoins.AccountBalance = sdk.Coins{sdk.Coin{Denom: "invalid", Amount: sdkmath.NewInt(-1)}} for _, tc := range []struct { desc string diff --git a/x/launch/types/codec.go b/x/launch/types/codec.go index c01bfd4b..fa89225b 100644 --- a/x/launch/types/codec.go +++ b/x/launch/types/codec.go @@ -1,39 +1,38 @@ package types import ( - "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" + // this line is used by starport scaffolding # 1 ) -func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgCreateChain{}, "launch/CreateChain", nil) - cdc.RegisterConcrete(&MsgEditChain{}, "launch/EditChain", nil) - cdc.RegisterConcrete(&MsgSendRequest{}, "launch/SendRequest", nil) - cdc.RegisterConcrete(&MsgSettleRequest{}, "launch/SettleRequest", nil) - cdc.RegisterConcrete(&MsgTriggerLaunch{}, "launch/TriggerLaunch", nil) - cdc.RegisterConcrete(&MsgRevertLaunch{}, "launch/RevertLaunch", nil) - cdc.RegisterConcrete(&MsgUpdateLaunchInformation{}, "launch/UpdateLaunchInformation", nil) - // this line is used by starport scaffolding # 2 -} - func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgCreateChain{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgEditChain{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgUpdateLaunchInformation{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSendRequest{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSettleRequest{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgTriggerLaunch{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgRevertLaunch{}, ) // this line is used by starport scaffolding # 3 + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } - -var ( - Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) -) diff --git a/x/launch/types/errors.go b/x/launch/types/errors.go index 8806406a..39882306 100644 --- a/x/launch/types/errors.go +++ b/x/launch/types/errors.go @@ -8,44 +8,41 @@ import ( // x/launch module sentinel errors var ( - ErrChainNotFound = sdkerrors.Register(ModuleName, 2, "chain not found") - ErrInvalidGenesisChainID = sdkerrors.Register(ModuleName, 3, "the genesis chain id is invalid") - ErrInvalidInitialGenesis = sdkerrors.Register(ModuleName, 4, "the initial genesis is invalid") - ErrTriggeredLaunch = sdkerrors.Register(ModuleName, 5, "launch is triggered for the chain") - ErrNoAddressPermission = sdkerrors.Register(ModuleName, 6, "you must be the coordinator or address owner to perform this action") - ErrInvalidCoins = sdkerrors.Register(ModuleName, 7, "the coin list is invalid") - ErrInvalidVestingOption = sdkerrors.Register(ModuleName, 8, "invalid vesting option") - ErrLaunchTimeTooLow = sdkerrors.Register(ModuleName, 9, "the remaining time is below authorized launch time") - ErrNotTriggeredLaunch = sdkerrors.Register(ModuleName, 10, "the chain launch has not been triggered") - ErrRevertDelayNotReached = sdkerrors.Register(ModuleName, 11, "the revert delay has not been reached") - ErrRequestNotFound = sdkerrors.Register(ModuleName, 12, "request not found") - ErrInvalidConsPubKey = sdkerrors.Register(ModuleName, 13, "the consensus public key is invalid") - ErrInvalidGenTx = sdkerrors.Register(ModuleName, 14, "the gentx is invalid") - ErrInvalidSelfDelegation = sdkerrors.Register(ModuleName, 15, "the self delegation is invalid") - ErrInvalidPeer = sdkerrors.Register(ModuleName, 16, "the peer is invalid") - ErrAccountAlreadyExist = sdkerrors.Register(ModuleName, 17, "account already exists") - ErrAccountNotFound = sdkerrors.Register(ModuleName, 18, "account not found") - ErrValidatorAlreadyExist = sdkerrors.Register(ModuleName, 19, "validator already exists") - ErrValidatorNotFound = sdkerrors.Register(ModuleName, 20, "validator not found") - ErrChainInactive = sdkerrors.Register(ModuleName, 21, "the chain is inactive") - ErrCreateChainFail = sdkerrors.Register(ModuleName, 22, "fail to create a new chain") - ErrLaunchTimeTooHigh = sdkerrors.Register(ModuleName, 23, "the remaining time is above authorized launch time") - ErrMinSelfDelegationNotReached = sdkerrors.Register(ModuleName, 24, "the minimum self delgation is not reachead") - ErrInvalidMetadataLength = sdkerrors.Register(ModuleName, 25, "metadata field too long") - ErrChainHasProject = sdkerrors.Register(ModuleName, 26, "chain already is associated with a project") - ErrAddChainToProject = sdkerrors.Register(ModuleName, 27, "unable to add chain to project") - ErrChainMonitoringConnected = sdkerrors.Register(ModuleName, 28, "chain is already connected to monitoring") - ErrRequestSettled = sdkerrors.Register(ModuleName, 29, "request is already settled") - ErrInvalidRequestContent = sdkerrors.Register(ModuleName, 30, "request content is invalid") - ErrInvalidRequestForMainnet = sdkerrors.Register(ModuleName, 31, "request is invalid for mainnet") - ErrRequestApplicationFailure = sdkerrors.Register(ModuleName, 32, "request failed to be applied") - ErrInvalidLaunchID = sdkerrors.Register(ModuleName, 33, "invalid launch ID") - ErrInvalidGenesisAddress = sdkerrors.Register(ModuleName, 34, "invalid genesis account address") - ErrInvalidVestingAddress = sdkerrors.Register(ModuleName, 35, "invalid vesting account address") - ErrInvalidValidatorAddress = sdkerrors.Register(ModuleName, 36, "invalid validator account address") - ErrInvalidRequesterAddress = sdkerrors.Register(ModuleName, 37, "invalid requester account address") - ErrCannotUpdateChain = sdkerrors.Register(ModuleName, 38, "cannot update chain") - ErrFundCommunityPool = sdkerrors.Register(ModuleName, 39, "unable to fund community pool") - ErrInvalidModuleName = sdkerrors.Register(ModuleName, 40, "invalid module name") - ErrInvalidParamName = sdkerrors.Register(ModuleName, 41, "invalid param name") + ErrInvalidSigner = sdkerrors.Register(ModuleName, 1102, "expected gov account as only signer for proposal message") + ErrInvalidGenesisChainID = sdkerrors.Register(ModuleName, 1103, "the genesis chain id is invalid") + ErrInvalidInitialGenesis = sdkerrors.Register(ModuleName, 1104, "the initial genesis is invalid") + ErrTriggeredLaunch = sdkerrors.Register(ModuleName, 1105, "launch is triggered for the chain") + ErrNoAddressPermission = sdkerrors.Register(ModuleName, 1106, "you must be the coordinator or address owner to perform this action") + ErrInvalidCoins = sdkerrors.Register(ModuleName, 1107, "the coin list is invalid") + ErrInvalidVestingOption = sdkerrors.Register(ModuleName, 1108, "invalid vesting option") + ErrLaunchTimeTooLow = sdkerrors.Register(ModuleName, 1109, "the remaining time is below authorized launch time") + ErrNotTriggeredLaunch = sdkerrors.Register(ModuleName, 1110, "the chain launch has not been triggered") + ErrRevertDelayNotReached = sdkerrors.Register(ModuleName, 1111, "the revert delay has not been reached") + ErrRequestNotFound = sdkerrors.Register(ModuleName, 1112, "request not found") + ErrInvalidConsPubKey = sdkerrors.Register(ModuleName, 1113, "the consensus public key is invalid") + ErrInvalidGenTx = sdkerrors.Register(ModuleName, 1114, "the gentx is invalid") + ErrInvalidSelfDelegation = sdkerrors.Register(ModuleName, 1115, "the self delegation is invalid") + ErrInvalidPeer = sdkerrors.Register(ModuleName, 1116, "the peer is invalid") + ErrAccountAlreadyExist = sdkerrors.Register(ModuleName, 1117, "account already exists") + ErrAccountNotFound = sdkerrors.Register(ModuleName, 1118, "account not found") + ErrValidatorAlreadyExist = sdkerrors.Register(ModuleName, 1119, "validator already exists") + ErrValidatorNotFound = sdkerrors.Register(ModuleName, 1120, "validator not found") + ErrChainInactive = sdkerrors.Register(ModuleName, 1121, "the chain is inactive") + ErrCreateChainFail = sdkerrors.Register(ModuleName, 1122, "fail to create a new chain") + ErrLaunchTimeTooHigh = sdkerrors.Register(ModuleName, 1123, "the remaining time is above authorized launch time") + ErrMinSelfDelegationNotReached = sdkerrors.Register(ModuleName, 1124, "the minimum self delgation is not reachead") + ErrInvalidMetadataLength = sdkerrors.Register(ModuleName, 1125, "metadata field too long") + ErrChainHasProject = sdkerrors.Register(ModuleName, 1126, "chain already is associated with a project") + ErrAddChainToProject = sdkerrors.Register(ModuleName, 1127, "unable to add chain to project") + ErrChainMonitoringConnected = sdkerrors.Register(ModuleName, 1128, "chain is already connected to monitoring") + ErrRequestSettled = sdkerrors.Register(ModuleName, 1129, "request is already settled") + ErrInvalidRequestContent = sdkerrors.Register(ModuleName, 1130, "request content is invalid") + ErrInvalidRequestForMainnet = sdkerrors.Register(ModuleName, 1131, "request is invalid for mainnet") + ErrRequestApplicationFailure = sdkerrors.Register(ModuleName, 1132, "request failed to be applied") + ErrInvalidLaunchID = sdkerrors.Register(ModuleName, 1133, "invalid launch ID") + ErrCannotUpdateChain = sdkerrors.Register(ModuleName, 1134, "cannot update chain") + ErrFundCommunityPool = sdkerrors.Register(ModuleName, 1135, "unable to fund community pool") + ErrInvalidModuleName = sdkerrors.Register(ModuleName, 1136, "invalid module name") + ErrInvalidParamName = sdkerrors.Register(ModuleName, 1137, "invalid param name") + ErrChainNotFound = sdkerrors.Register(ModuleName, 1138, "chain not found for launch id") ) diff --git a/x/launch/types/events.pb.go b/x/launch/types/events.pb.go index 0497dca1..4254d648 100644 --- a/x/launch/types/events.pb.go +++ b/x/launch/types/events.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/events.proto +// source: network/launch/v1/events.proto package types @@ -8,6 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" @@ -40,7 +41,7 @@ func (m *EventChainCreated) Reset() { *m = EventChainCreated{} } func (m *EventChainCreated) String() string { return proto.CompactTextString(m) } func (*EventChainCreated) ProtoMessage() {} func (*EventChainCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{0} + return fileDescriptor_77edfc7ac1bf5356, []int{0} } func (m *EventChainCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -99,7 +100,7 @@ func (m *EventRequestCreated) Reset() { *m = EventRequestCreated{} } func (m *EventRequestCreated) String() string { return proto.CompactTextString(m) } func (*EventRequestCreated) ProtoMessage() {} func (*EventRequestCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{1} + return fileDescriptor_77edfc7ac1bf5356, []int{1} } func (m *EventRequestCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -152,7 +153,7 @@ func (m *EventRequestSettled) Reset() { *m = EventRequestSettled{} } func (m *EventRequestSettled) String() string { return proto.CompactTextString(m) } func (*EventRequestSettled) ProtoMessage() {} func (*EventRequestSettled) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{2} + return fileDescriptor_77edfc7ac1bf5356, []int{2} } func (m *EventRequestSettled) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -213,7 +214,7 @@ func (m *EventGenesisAccountAdded) Reset() { *m = EventGenesisAccountAdd func (m *EventGenesisAccountAdded) String() string { return proto.CompactTextString(m) } func (*EventGenesisAccountAdded) ProtoMessage() {} func (*EventGenesisAccountAdded) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{3} + return fileDescriptor_77edfc7ac1bf5356, []int{3} } func (m *EventGenesisAccountAdded) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -281,7 +282,7 @@ func (m *EventVestingAccountAdded) Reset() { *m = EventVestingAccountAdd func (m *EventVestingAccountAdded) String() string { return proto.CompactTextString(m) } func (*EventVestingAccountAdded) ProtoMessage() {} func (*EventVestingAccountAdded) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{4} + return fileDescriptor_77edfc7ac1bf5356, []int{4} } func (m *EventVestingAccountAdded) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -343,7 +344,7 @@ type EventValidatorAdded struct { Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` GenTx []byte `protobuf:"bytes,3,opt,name=genTx,proto3" json:"genTx,omitempty"` ConsPubKey []byte `protobuf:"bytes,4,opt,name=consPubKey,proto3" json:"consPubKey,omitempty"` - SelfDelegation types.Coin `protobuf:"bytes,5,opt,name=selfDelegation,proto3" json:"selfDelegation"` + SelfDelegation types.Coin `protobuf:"bytes,5,opt,name=selfDelegation,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin" json:"selfDelegation"` Peer Peer `protobuf:"bytes,6,opt,name=peer,proto3" json:"peer"` HasProject bool `protobuf:"varint,7,opt,name=hasProject,proto3" json:"hasProject,omitempty"` ProjectID uint64 `protobuf:"varint,8,opt,name=projectID,proto3" json:"projectID,omitempty"` @@ -354,7 +355,7 @@ func (m *EventValidatorAdded) Reset() { *m = EventValidatorAdded{} } func (m *EventValidatorAdded) String() string { return proto.CompactTextString(m) } func (*EventValidatorAdded) ProtoMessage() {} func (*EventValidatorAdded) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{5} + return fileDescriptor_77edfc7ac1bf5356, []int{5} } func (m *EventValidatorAdded) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -456,7 +457,7 @@ func (m *EventAccountRemoved) Reset() { *m = EventAccountRemoved{} } func (m *EventAccountRemoved) String() string { return proto.CompactTextString(m) } func (*EventAccountRemoved) ProtoMessage() {} func (*EventAccountRemoved) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{6} + return fileDescriptor_77edfc7ac1bf5356, []int{6} } func (m *EventAccountRemoved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -518,7 +519,7 @@ func (m *EventValidatorRemoved) Reset() { *m = EventValidatorRemoved{} } func (m *EventValidatorRemoved) String() string { return proto.CompactTextString(m) } func (*EventValidatorRemoved) ProtoMessage() {} func (*EventValidatorRemoved) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{7} + return fileDescriptor_77edfc7ac1bf5356, []int{7} } func (m *EventValidatorRemoved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -593,7 +594,7 @@ func (m *EventParamChanged) Reset() { *m = EventParamChanged{} } func (m *EventParamChanged) String() string { return proto.CompactTextString(m) } func (*EventParamChanged) ProtoMessage() {} func (*EventParamChanged) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{8} + return fileDescriptor_77edfc7ac1bf5356, []int{8} } func (m *EventParamChanged) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -659,7 +660,7 @@ func (m *EventLaunchTriggered) Reset() { *m = EventLaunchTriggered{} } func (m *EventLaunchTriggered) String() string { return proto.CompactTextString(m) } func (*EventLaunchTriggered) ProtoMessage() {} func (*EventLaunchTriggered) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{9} + return fileDescriptor_77edfc7ac1bf5356, []int{9} } func (m *EventLaunchTriggered) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -710,7 +711,7 @@ func (m *EventLaunchReverted) Reset() { *m = EventLaunchReverted{} } func (m *EventLaunchReverted) String() string { return proto.CompactTextString(m) } func (*EventLaunchReverted) ProtoMessage() {} func (*EventLaunchReverted) Descriptor() ([]byte, []int) { - return fileDescriptor_0bbfde18c498fc1f, []int{10} + return fileDescriptor_77edfc7ac1bf5356, []int{10} } func (m *EventLaunchReverted) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -747,77 +748,81 @@ func (m *EventLaunchReverted) GetLaunchID() uint64 { } func init() { - proto.RegisterType((*EventChainCreated)(nil), "spn.launch.EventChainCreated") - proto.RegisterType((*EventRequestCreated)(nil), "spn.launch.EventRequestCreated") - proto.RegisterType((*EventRequestSettled)(nil), "spn.launch.EventRequestSettled") - proto.RegisterType((*EventGenesisAccountAdded)(nil), "spn.launch.EventGenesisAccountAdded") - proto.RegisterType((*EventVestingAccountAdded)(nil), "spn.launch.EventVestingAccountAdded") - proto.RegisterType((*EventValidatorAdded)(nil), "spn.launch.EventValidatorAdded") - proto.RegisterType((*EventAccountRemoved)(nil), "spn.launch.EventAccountRemoved") - proto.RegisterType((*EventValidatorRemoved)(nil), "spn.launch.EventValidatorRemoved") - proto.RegisterType((*EventParamChanged)(nil), "spn.launch.EventParamChanged") - proto.RegisterType((*EventLaunchTriggered)(nil), "spn.launch.EventLaunchTriggered") - proto.RegisterType((*EventLaunchReverted)(nil), "spn.launch.EventLaunchReverted") -} - -func init() { proto.RegisterFile("spn/launch/events.proto", fileDescriptor_0bbfde18c498fc1f) } - -var fileDescriptor_0bbfde18c498fc1f = []byte{ - // 863 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x3d, 0x8f, 0x1b, 0x45, - 0x18, 0xbe, 0x3d, 0xfb, 0xbe, 0x26, 0x21, 0xc0, 0xc6, 0x24, 0x1b, 0x0b, 0xad, 0xad, 0x15, 0x12, - 0x16, 0x52, 0x76, 0x75, 0x97, 0x86, 0xf6, 0x6c, 0xa3, 0xc4, 0x02, 0x81, 0xb5, 0x67, 0x5d, 0x01, - 0x45, 0x34, 0xde, 0x7d, 0xb3, 0x5e, 0xb2, 0x3b, 0xb3, 0xcc, 0xcc, 0x5a, 0x49, 0x4b, 0x4d, 0x91, - 0x92, 0x8e, 0x9e, 0x86, 0x86, 0x7f, 0x40, 0x93, 0x32, 0xa2, 0xa2, 0x4a, 0xd0, 0xdd, 0x6f, 0xa0, - 0xa1, 0x40, 0x68, 0x3e, 0xd6, 0xb7, 0x3e, 0xdd, 0x9d, 0xcd, 0x89, 0x54, 0xde, 0xf7, 0x6b, 0xe6, - 0x99, 0xe7, 0x7d, 0x5e, 0xcf, 0xa0, 0xbb, 0xbc, 0x20, 0x41, 0x86, 0x4b, 0x12, 0xcd, 0x02, 0x98, - 0x03, 0x11, 0xdc, 0x2f, 0x18, 0x15, 0xd4, 0x46, 0xbc, 0x20, 0xbe, 0x0e, 0xb4, 0x5b, 0x09, 0x4d, - 0xa8, 0x72, 0x07, 0xf2, 0x4b, 0x67, 0xb4, 0xdd, 0x88, 0xf2, 0x9c, 0xf2, 0x60, 0x8a, 0x39, 0x04, - 0xf3, 0xfd, 0x29, 0x08, 0xbc, 0x1f, 0x44, 0x34, 0x25, 0x26, 0x7e, 0x4f, 0xc7, 0x1f, 0xeb, 0x42, - 0x6d, 0x98, 0x50, 0x27, 0xa1, 0x34, 0xc9, 0x20, 0x50, 0xd6, 0xb4, 0x7c, 0x12, 0x88, 0x34, 0x07, - 0x2e, 0x70, 0x5e, 0x98, 0x84, 0x3b, 0x35, 0x58, 0xd1, 0x0c, 0x2f, 0xd6, 0x74, 0x6a, 0x7e, 0x06, - 0xdf, 0x95, 0xc0, 0x85, 0x89, 0x74, 0x6b, 0x91, 0x04, 0x08, 0xf0, 0x94, 0x3f, 0xc6, 0x51, 0x44, - 0x4b, 0x72, 0x51, 0xc6, 0x1c, 0xb8, 0x48, 0x49, 0x72, 0x2e, 0xc3, 0xbb, 0x60, 0x8d, 0x39, 0xce, - 0xd2, 0x18, 0x0b, 0xca, 0x74, 0x8e, 0xf7, 0x93, 0x85, 0xde, 0xff, 0x4c, 0x12, 0x35, 0x90, 0xb0, - 0x06, 0x0c, 0xb0, 0x80, 0xd8, 0x6e, 0xa3, 0x5d, 0x5d, 0x37, 0x1a, 0x3a, 0x56, 0xd7, 0xea, 0x35, - 0xc3, 0x85, 0x6d, 0x3f, 0x42, 0x76, 0x44, 0x29, 0x8b, 0x53, 0x22, 0x97, 0x39, 0x8c, 0x63, 0x06, - 0x9c, 0x3b, 0x9b, 0x5d, 0xab, 0xb7, 0xd7, 0x77, 0x7e, 0xff, 0xf5, 0x7e, 0xcb, 0x50, 0x63, 0x22, - 0x47, 0x82, 0xa5, 0x24, 0x09, 0x2f, 0xa8, 0xb1, 0x3f, 0x42, 0xef, 0xd4, 0xbc, 0xa3, 0xa1, 0xd3, - 0x50, 0x5b, 0x2d, 0x3b, 0xbd, 0x18, 0xdd, 0x56, 0x00, 0x43, 0xcd, 0x4f, 0x05, 0xd1, 0x41, 0x3b, - 0x91, 0xfc, 0xa4, 0x4c, 0x21, 0xdc, 0x0b, 0x2b, 0xd3, 0x7e, 0x80, 0x76, 0x0c, 0x97, 0x0a, 0xd5, - 0x8d, 0x83, 0xdb, 0xfe, 0x59, 0xf3, 0x7d, 0xb3, 0x4c, 0xbf, 0xf9, 0xf2, 0x75, 0x67, 0x23, 0xac, - 0x32, 0xbd, 0xa7, 0xcb, 0xbb, 0x1c, 0x81, 0x10, 0xd9, 0x0a, 0x22, 0x3e, 0x44, 0x7b, 0xa6, 0x7a, - 0x34, 0x54, 0x3b, 0x35, 0xc3, 0x33, 0x87, 0xac, 0xc4, 0x45, 0xc1, 0xe8, 0x1c, 0x62, 0x75, 0xae, - 0xdd, 0x70, 0x61, 0x7b, 0xbf, 0x6d, 0x22, 0x47, 0xed, 0xf6, 0x50, 0x77, 0xe5, 0x50, 0xb7, 0xed, - 0x30, 0x8e, 0x57, 0x6c, 0x79, 0x80, 0x76, 0xf0, 0x9a, 0x84, 0x57, 0x89, 0xf6, 0x0f, 0x16, 0xda, - 0x92, 0x32, 0xe6, 0x4e, 0xa3, 0xdb, 0xe8, 0xdd, 0x38, 0xb8, 0xe7, 0x9b, 0x7c, 0x29, 0x74, 0xdf, - 0x08, 0xdd, 0x1f, 0xd0, 0x94, 0xf4, 0xbf, 0x91, 0x9c, 0xfc, 0xfd, 0xba, 0xf3, 0x71, 0x92, 0x8a, - 0x59, 0x39, 0xf5, 0x23, 0x9a, 0x1b, 0xa1, 0x9b, 0x9f, 0xfb, 0x3c, 0x7e, 0x1a, 0x88, 0xe7, 0x05, - 0x70, 0x55, 0xf0, 0xf3, 0x9b, 0x4e, 0x6f, 0xcd, 0x54, 0x1e, 0x6a, 0x10, 0x97, 0xc8, 0xa7, 0xf9, - 0xdf, 0xe5, 0xe3, 0xfd, 0x63, 0x19, 0x16, 0x8f, 0xb5, 0xfa, 0xdf, 0x2a, 0x8b, 0x8f, 0xd0, 0x2d, - 0x33, 0x64, 0x5f, 0x15, 0x22, 0xa5, 0x8a, 0x4d, 0xa9, 0xad, 0x76, 0x5d, 0x5b, 0xc7, 0x4b, 0x19, - 0x46, 0x62, 0xe7, 0xea, 0xfe, 0x47, 0x02, 0x7e, 0x6c, 0x18, 0xd1, 0x1e, 0x57, 0x43, 0xfd, 0x76, - 0xce, 0xde, 0x42, 0x5b, 0x09, 0x90, 0xc9, 0x33, 0x75, 0xe4, 0x9b, 0xa1, 0x36, 0x6c, 0x17, 0xa1, - 0x88, 0x12, 0x3e, 0x2e, 0xa7, 0x9f, 0xc3, 0x73, 0x85, 0xff, 0x66, 0x58, 0xf3, 0xd8, 0x0f, 0xd1, - 0x2d, 0x0e, 0xd9, 0x93, 0x21, 0x64, 0x90, 0x60, 0x79, 0x74, 0x67, 0x4b, 0x31, 0x76, 0x85, 0xfe, - 0x0c, 0x61, 0xcb, 0x65, 0xf6, 0x27, 0xa8, 0x59, 0x00, 0x30, 0x67, 0x5b, 0x95, 0xbf, 0x57, 0x27, - 0x7c, 0x0c, 0xc0, 0x4c, 0x95, 0xca, 0x91, 0xa0, 0x66, 0x98, 0x8f, 0x19, 0xfd, 0x16, 0x22, 0xe1, - 0xec, 0xa8, 0xb9, 0xab, 0x79, 0xe4, 0xcc, 0x16, 0xfa, 0x73, 0x34, 0x74, 0x76, 0xf5, 0xcc, 0x2e, - 0x1c, 0x97, 0xb4, 0x66, 0xef, 0x1a, 0xad, 0xf9, 0xc5, 0x32, 0xad, 0x31, 0xa2, 0x0c, 0x21, 0x97, - 0x93, 0x5f, 0xa7, 0xdf, 0x5a, 0x97, 0xfe, 0x7a, 0x3b, 0x37, 0xd7, 0xfa, 0x33, 0x6e, 0x5c, 0x03, - 0xf1, 0x5f, 0x16, 0xfa, 0x60, 0x59, 0x4c, 0x15, 0xe6, 0x4f, 0xd1, 0x5d, 0x73, 0x7b, 0x9c, 0xe9, - 0x4c, 0x9f, 0xca, 0xfc, 0xf3, 0x5e, 0x16, 0xbe, 0x12, 0xf9, 0x72, 0xa7, 0x1a, 0x57, 0x77, 0xaa, - 0xb9, 0x5e, 0xa7, 0xb6, 0xae, 0x71, 0x6e, 0x6e, 0xee, 0xbf, 0x31, 0x66, 0x38, 0x1f, 0xcc, 0x30, - 0x49, 0x56, 0x4c, 0xd0, 0x1d, 0xb4, 0x9d, 0xd3, 0xb8, 0xcc, 0x40, 0x0f, 0x50, 0x68, 0x2c, 0x39, - 0x25, 0x85, 0x5c, 0x43, 0xb3, 0x1f, 0x6a, 0x43, 0x7a, 0xe7, 0x38, 0x2b, 0xc1, 0x0c, 0x88, 0x36, - 0xbc, 0xef, 0x2d, 0xd4, 0x52, 0xbb, 0x7e, 0xa1, 0x56, 0x9d, 0xb0, 0x34, 0x49, 0x80, 0xad, 0xd8, - 0xf8, 0x4b, 0xf4, 0xae, 0xfe, 0x9e, 0xa4, 0x39, 0x1c, 0xc9, 0xd7, 0x85, 0xb9, 0xdf, 0xda, 0xbe, - 0x7e, 0x7f, 0xf8, 0xd5, 0xfb, 0xc3, 0x9f, 0x54, 0xef, 0x8f, 0xfe, 0xae, 0x1c, 0x8e, 0x17, 0x6f, - 0x3a, 0x56, 0x78, 0xbe, 0xd8, 0xdb, 0x37, 0x12, 0xd5, 0x18, 0x42, 0x98, 0x03, 0x5b, 0x71, 0xf7, - 0xf7, 0xfb, 0x2f, 0x4f, 0x5c, 0xeb, 0xd5, 0x89, 0x6b, 0xfd, 0x79, 0xe2, 0x5a, 0x2f, 0x4e, 0xdd, - 0x8d, 0x57, 0xa7, 0xee, 0xc6, 0x1f, 0xa7, 0xee, 0xc6, 0xd7, 0xf5, 0x7b, 0x40, 0x00, 0x89, 0x81, - 0xe5, 0x29, 0x11, 0x81, 0x7c, 0x81, 0x3c, 0xab, 0xde, 0x20, 0xea, 0x36, 0x98, 0x6e, 0x2b, 0x94, - 0x0f, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xab, 0xb7, 0xc2, 0xab, 0x09, 0x00, 0x00, + proto.RegisterType((*EventChainCreated)(nil), "network.launch.v1.EventChainCreated") + proto.RegisterType((*EventRequestCreated)(nil), "network.launch.v1.EventRequestCreated") + proto.RegisterType((*EventRequestSettled)(nil), "network.launch.v1.EventRequestSettled") + proto.RegisterType((*EventGenesisAccountAdded)(nil), "network.launch.v1.EventGenesisAccountAdded") + proto.RegisterType((*EventVestingAccountAdded)(nil), "network.launch.v1.EventVestingAccountAdded") + proto.RegisterType((*EventValidatorAdded)(nil), "network.launch.v1.EventValidatorAdded") + proto.RegisterType((*EventAccountRemoved)(nil), "network.launch.v1.EventAccountRemoved") + proto.RegisterType((*EventValidatorRemoved)(nil), "network.launch.v1.EventValidatorRemoved") + proto.RegisterType((*EventParamChanged)(nil), "network.launch.v1.EventParamChanged") + proto.RegisterType((*EventLaunchTriggered)(nil), "network.launch.v1.EventLaunchTriggered") + proto.RegisterType((*EventLaunchReverted)(nil), "network.launch.v1.EventLaunchReverted") +} + +func init() { proto.RegisterFile("network/launch/v1/events.proto", fileDescriptor_77edfc7ac1bf5356) } + +var fileDescriptor_77edfc7ac1bf5356 = []byte{ + // 914 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x6f, 0xdc, 0x44, + 0x14, 0x8f, 0xb3, 0x9b, 0xaf, 0x69, 0x28, 0x8a, 0x09, 0xd4, 0x8d, 0xc0, 0x1b, 0x56, 0x48, 0x0d, + 0x95, 0x6a, 0x6b, 0xc3, 0x05, 0x71, 0xcb, 0x66, 0x2b, 0x58, 0x81, 0xe8, 0xca, 0x59, 0xe5, 0xc0, + 0x25, 0x9a, 0xb5, 0x5f, 0xbd, 0x26, 0xb6, 0xc7, 0x9d, 0x19, 0x9b, 0xe6, 0x8a, 0x54, 0x89, 0x63, + 0xcf, 0x5c, 0x90, 0x38, 0xa1, 0x5e, 0xe8, 0x81, 0x3f, 0xa2, 0xc7, 0x8a, 0x13, 0x5c, 0x1a, 0x48, + 0x0e, 0xfd, 0x0b, 0xb8, 0x70, 0x42, 0xf3, 0xe1, 0xed, 0x6e, 0x36, 0xfb, 0x41, 0xd4, 0x5e, 0x12, + 0xbf, 0xaf, 0x7d, 0xbf, 0xf7, 0xde, 0xef, 0xcd, 0x0c, 0xb2, 0x53, 0xe0, 0xdf, 0x11, 0x7a, 0xec, + 0xc6, 0x38, 0x4f, 0xfd, 0xbe, 0x5b, 0x34, 0x5c, 0x28, 0x20, 0xe5, 0xcc, 0xc9, 0x28, 0xe1, 0xc4, + 0xdc, 0xd0, 0x76, 0x47, 0xd9, 0x9d, 0xa2, 0xb1, 0xb5, 0x81, 0x93, 0x28, 0x25, 0xae, 0xfc, 0xab, + 0xbc, 0xb6, 0x6c, 0x9f, 0xb0, 0x84, 0x30, 0xb7, 0x87, 0x19, 0xb8, 0x45, 0xa3, 0x07, 0x1c, 0x37, + 0x5c, 0x9f, 0x44, 0xa9, 0xb6, 0xdf, 0x54, 0xf6, 0x23, 0x29, 0xb9, 0x4a, 0xd0, 0xa6, 0xcd, 0x90, + 0x84, 0x44, 0xe9, 0xc5, 0x97, 0xd6, 0xd6, 0x42, 0x42, 0xc2, 0x18, 0x5c, 0x29, 0xf5, 0xf2, 0xfb, + 0x2e, 0x8f, 0x12, 0x60, 0x1c, 0x27, 0x99, 0x76, 0xf8, 0x60, 0x1c, 0xb7, 0xdf, 0xc7, 0x83, 0x84, + 0xb7, 0xc6, 0xcd, 0x21, 0xa4, 0xc0, 0x22, 0x76, 0x84, 0x7d, 0x9f, 0xe4, 0x29, 0xd7, 0x8e, 0x1f, + 0x4f, 0x76, 0x2c, 0x70, 0x1c, 0x05, 0x98, 0x13, 0x5a, 0x62, 0x1a, 0x77, 0xa5, 0xf0, 0x20, 0x07, + 0xc6, 0x27, 0x27, 0x2d, 0x80, 0xf1, 0x28, 0x0d, 0x47, 0x93, 0xd6, 0x7f, 0x32, 0xd0, 0xc6, 0x5d, + 0xd1, 0xe5, 0x7d, 0x01, 0x79, 0x9f, 0x02, 0xe6, 0x10, 0x98, 0x5b, 0x68, 0x55, 0x05, 0xb6, 0x5b, + 0x96, 0xb1, 0x6d, 0xec, 0x54, 0xbd, 0x81, 0x6c, 0x7e, 0x81, 0x4c, 0x9f, 0x10, 0x1a, 0x44, 0xa9, + 0x00, 0xb4, 0x17, 0x04, 0x14, 0x18, 0xb3, 0x16, 0xb7, 0x8d, 0x9d, 0xb5, 0xa6, 0xf5, 0xfb, 0x6f, + 0x77, 0x36, 0x75, 0x4f, 0xb5, 0xe5, 0x80, 0xd3, 0x28, 0x0d, 0xbd, 0x4b, 0x62, 0xcc, 0x8f, 0xd0, + 0x5b, 0x43, 0xda, 0x76, 0xcb, 0xaa, 0xc8, 0x54, 0xa3, 0xca, 0xfa, 0x23, 0x03, 0xbd, 0x23, 0x11, + 0x7a, 0xaa, 0xc2, 0x12, 0xe3, 0x2e, 0x5a, 0xf1, 0xc5, 0x27, 0xa1, 0x12, 0xe2, 0xb4, 0xe4, 0xa5, + 0xa3, 0xf9, 0x19, 0x5a, 0xd1, 0x7d, 0x92, 0x80, 0xaf, 0xed, 0x6e, 0x39, 0x63, 0xa4, 0x72, 0x74, + 0x9e, 0x66, 0xf5, 0xd9, 0x8b, 0xda, 0x82, 0x57, 0x06, 0xd4, 0x8f, 0x47, 0x61, 0x1c, 0x00, 0xe7, + 0xf1, 0x8c, 0x56, 0xbd, 0x8f, 0xd6, 0x74, 0x74, 0xbb, 0x25, 0x13, 0x56, 0xbd, 0x57, 0x0a, 0x11, + 0x89, 0xb3, 0x8c, 0x92, 0x02, 0x02, 0x59, 0xf9, 0xaa, 0x37, 0x90, 0xeb, 0x7f, 0x2e, 0x22, 0x4b, + 0x66, 0xfb, 0x5c, 0x31, 0x60, 0x4f, 0x0d, 0x6d, 0x2f, 0x08, 0x66, 0xa4, 0xdc, 0x45, 0x2b, 0x78, + 0xce, 0x91, 0x94, 0x8e, 0xe6, 0xcf, 0x06, 0x5a, 0x12, 0x1b, 0xc2, 0xac, 0xca, 0x76, 0x65, 0xe7, + 0xda, 0xee, 0x4d, 0x47, 0xfb, 0x8b, 0x1d, 0x72, 0xf4, 0x0e, 0x39, 0xfb, 0x24, 0x4a, 0x9b, 0x0f, + 0x44, 0x4f, 0xfe, 0x7d, 0x51, 0xbb, 0x15, 0x46, 0xbc, 0x9f, 0xf7, 0x1c, 0x9f, 0x24, 0x7a, 0x87, + 0xf4, 0xbf, 0x3b, 0x2c, 0x38, 0x76, 0xf9, 0x49, 0x06, 0x4c, 0x06, 0x3c, 0x39, 0xad, 0xed, 0xcc, + 0xe9, 0xca, 0x7e, 0x7c, 0xf9, 0xf4, 0xf6, 0x7a, 0x0c, 0x21, 0xf6, 0x4f, 0x8e, 0x24, 0x9c, 0x5f, + 0x5e, 0x3e, 0xbd, 0x6d, 0x78, 0x0a, 0xda, 0x04, 0xda, 0x55, 0xff, 0x3f, 0xed, 0xea, 0x8f, 0xca, + 0xde, 0x1e, 0xaa, 0x8d, 0x78, 0xa3, 0xbd, 0xbd, 0x87, 0xae, 0xeb, 0xc5, 0xbb, 0x97, 0xf1, 0x88, + 0xc8, 0x1e, 0x0b, 0xe2, 0x7d, 0x78, 0x09, 0xf1, 0x0e, 0x47, 0x1c, 0x35, 0xff, 0x2e, 0x84, 0xbf, + 0xc6, 0x3e, 0xfc, 0x5d, 0xd1, 0x8c, 0x3e, 0x2c, 0x4f, 0x97, 0x37, 0xd3, 0x82, 0x4d, 0xb4, 0x14, + 0x42, 0xda, 0x7d, 0x28, 0x2b, 0x5f, 0xf7, 0x94, 0x60, 0xda, 0x08, 0xf9, 0x24, 0x65, 0x9d, 0xbc, + 0xf7, 0x25, 0x9c, 0x48, 0xfc, 0xeb, 0xde, 0x90, 0xc6, 0xfc, 0xc1, 0x40, 0xd7, 0x19, 0xc4, 0xf7, + 0x5b, 0x20, 0x28, 0x21, 0x6a, 0xb7, 0x96, 0x64, 0xe7, 0xa6, 0xb0, 0xf3, 0xae, 0xe8, 0xd8, 0x93, + 0xd3, 0xb9, 0xd9, 0x39, 0x81, 0x71, 0x17, 0xf2, 0x9a, 0x0d, 0x54, 0xcd, 0x00, 0xa8, 0xb5, 0x2c, + 0xf3, 0xdf, 0xb8, 0x64, 0x72, 0x1d, 0x00, 0xaa, 0xe7, 0x25, 0x5d, 0x45, 0x75, 0x7d, 0xcc, 0x3a, + 0x94, 0x7c, 0x0b, 0x3e, 0xb7, 0x56, 0xe4, 0x76, 0x0f, 0x69, 0xc4, 0xc9, 0x90, 0xa9, 0xcf, 0x76, + 0xcb, 0x5a, 0x55, 0x27, 0xc3, 0x40, 0x31, 0x61, 0xc6, 0x6b, 0x57, 0x98, 0xf1, 0xaf, 0xe5, 0xe1, + 0xa9, 0x49, 0xee, 0x41, 0x22, 0xce, 0x97, 0xe1, 0x39, 0x1a, 0xf3, 0xce, 0x71, 0x98, 0x17, 0x8b, + 0x73, 0x5d, 0x0a, 0x95, 0x2b, 0x20, 0xfe, 0xc7, 0x40, 0xef, 0x8e, 0xb2, 0xb2, 0xc4, 0xfc, 0x29, + 0xba, 0xa1, 0xef, 0xc3, 0x57, 0x84, 0x55, 0x55, 0xa9, 0x1a, 0xbc, 0x49, 0xe6, 0xa9, 0xc8, 0x47, + 0x27, 0x55, 0x99, 0x3e, 0xa9, 0xea, 0x7c, 0x93, 0x5a, 0xba, 0x42, 0xdd, 0x4c, 0xdf, 0xc3, 0x1d, + 0x4c, 0x71, 0xb2, 0xdf, 0xc7, 0x69, 0x38, 0x63, 0x15, 0xdf, 0x43, 0xcb, 0x09, 0x09, 0xf2, 0x18, + 0xd4, 0x26, 0x7a, 0x5a, 0x12, 0xeb, 0x96, 0x89, 0xdf, 0x50, 0xdd, 0xf7, 0x94, 0x20, 0xb4, 0x05, + 0x8e, 0x73, 0xd0, 0x9b, 0xa6, 0x84, 0xfa, 0xf7, 0x06, 0xda, 0x94, 0x59, 0xbf, 0x92, 0xbf, 0xda, + 0xa5, 0x51, 0x18, 0x02, 0x9d, 0x91, 0xf8, 0x6b, 0xf4, 0xb6, 0xfa, 0xee, 0x46, 0x09, 0x1c, 0x88, + 0x87, 0xd0, 0xe0, 0x32, 0x55, 0x4f, 0x25, 0xa7, 0x7c, 0x2a, 0x39, 0xdd, 0xf2, 0xa9, 0xd4, 0x5c, + 0x15, 0xcb, 0xf1, 0xf8, 0xb4, 0x66, 0x78, 0x17, 0x83, 0xeb, 0x0d, 0x4d, 0x51, 0x85, 0xc1, 0x83, + 0x02, 0xe8, 0x8c, 0x37, 0x48, 0xb3, 0xf9, 0xec, 0xcc, 0x36, 0x9e, 0x9f, 0xd9, 0xc6, 0x5f, 0x67, + 0xb6, 0xf1, 0xf8, 0xdc, 0x5e, 0x78, 0x7e, 0x6e, 0x2f, 0xfc, 0x71, 0x6e, 0x2f, 0x7c, 0x33, 0x7c, + 0xdb, 0x44, 0x61, 0x1a, 0x71, 0x70, 0xcb, 0xa7, 0xd0, 0xc3, 0xf2, 0x31, 0x24, 0x0f, 0x80, 0xde, + 0xb2, 0x44, 0xf9, 0xc9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x04, 0xc1, 0xf4, 0x06, 0x77, 0x0a, + 0x00, 0x00, } func (m *EventChainCreated) Marshal() (dAtA []byte, err error) { diff --git a/x/launch/types/expected_keepers.go b/x/launch/types/expected_keepers.go index fadb0126..01d54e84 100644 --- a/x/launch/types/expected_keepers.go +++ b/x/launch/types/expected_keepers.go @@ -4,49 +4,50 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - projecttypes "github.com/tendermint/spn/x/project/types" + profiletypes "github.com/ignite/network/x/profile/types" + projecttypes "github.com/ignite/network/x/project/types" ) type ProjectKeeper interface { - GetProject(ctx sdk.Context, id uint64) (projecttypes.Project, bool) - AddChainToProject(ctx sdk.Context, projectID, launchID uint64) error - GetAllProject(ctx sdk.Context) (list []projecttypes.Project) - GetProjectChains(ctx sdk.Context, projectID uint64) (val projecttypes.ProjectChains, found bool) - MainnetAccountBalanceAll( - c context.Context, - req *projecttypes.QueryAllMainnetAccountBalanceRequest, - ) (*projecttypes.QueryAllMainnetAccountBalanceResponse, error) - MainnetAccountBalance( - c context.Context, - req *projecttypes.QueryGetMainnetAccountBalanceRequest, - ) (*projecttypes.QueryGetMainnetAccountBalanceResponse, error) + AddChainToProject(ctx context.Context, projectID, launchID uint64) error + GetProject(ctx context.Context, projectID uint64) (projecttypes.Project, error) + Projects(ctx context.Context) ([]projecttypes.Project, error) + GetProjectChains(ctx context.Context, projectID uint64) (projecttypes.ProjectChains, error) + ListMainnetAccountBalance(ctx context.Context, projectID uint64) ([]projecttypes.MainnetAccountBalance, error) + MainnetAccountBalance(ctx context.Context, projectID uint64, address sdk.AccAddress) (projecttypes.MainnetAccountBalance, error) } type MonitoringConsumerKeeper interface { - ClearVerifiedClientIDs(ctx sdk.Context, launchID uint64) + ClearVerifiedClientIDs(ctx context.Context, launchID uint64) error } type ProfileKeeper interface { - CoordinatorIDFromAddress(ctx sdk.Context, address string) (id uint64, err error) - GetCoordinator(ctx sdk.Context, id uint64) (val profiletypes.Coordinator, found bool) + CoordinatorIDFromAddress(ctx context.Context, address sdk.AccAddress) (uint64, error) + GetCoordinator(ctx context.Context, coordinatorID uint64) (profiletypes.Coordinator, error) } +type DistributionKeeper interface { + FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) error +} + +// AccountKeeper defines the expected interface for the Account module. type AccountKeeper interface { - GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI // only used for simulation } +// BankKeeper defines the expected interface for the Bank module. type BankKeeper interface { - SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins - ValidateBalance(ctx sdk.Context, addr sdk.AccAddress) error - HasBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coin) bool - GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins - GetAccountsBalances(ctx sdk.Context) []banktypes.Balance + SpendableCoins(context.Context, sdk.AccAddress) sdk.Coins + ValidateBalance(ctx context.Context, addr sdk.AccAddress) error + HasBalance(ctx context.Context, addr sdk.AccAddress, amt sdk.Coin) bool + GetAllBalances(ctx context.Context, addr sdk.AccAddress) sdk.Coins + GetAccountsBalances(ctx context.Context) []banktypes.Balance } -type DistributionKeeper interface { - FundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk.AccAddress) error +// ParamSubspace defines the expected Subspace interface for parameters. +type ParamSubspace interface { + Get(context.Context, []byte, interface{}) + Set(context.Context, []byte, interface{}) } diff --git a/x/launch/types/genesis.go b/x/launch/types/genesis.go index 28e056bb..14d6fa16 100644 --- a/x/launch/types/genesis.go +++ b/x/launch/types/genesis.go @@ -2,25 +2,24 @@ package types import "fmt" -// DefaultGenesis returns the default Capability genesis state +// DefaultGenesis returns the default genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ + ChainList: []Chain{}, + GenesisAccountList: []GenesisAccount{}, + GenesisValidatorList: []GenesisValidator{}, + VestingAccountList: []VestingAccount{}, + RequestList: []Request{}, + RequestCounters: []RequestCounter{}, + ParamChangeList: []ParamChange{}, // this line is used by starport scaffolding # genesis/types/default - Chains: []Chain{}, - ChainCounter: 1, - GenesisAccounts: []GenesisAccount{}, - VestingAccounts: []VestingAccount{}, - GenesisValidators: []GenesisValidator{}, - Requests: []Request{}, - RequestCounters: []RequestCounter{}, - Params: DefaultParams(), + Params: DefaultParams(), } } // Validate performs basic genesis state validation returning an error upon any // failure. func (gs GenesisState) Validate() error { - // this line is used by starport scaffolding # genesis/types/validate launchIDMap, err := validateChains(gs) if err != nil { return err @@ -34,14 +33,26 @@ func (gs GenesisState) Validate() error { return err } + // Check for duplicated index in paramChange + paramChangeIndexMap := make(map[string]struct{}) + + for _, elem := range gs.ParamChangeList { + index := fmt.Sprint(elem.LaunchID) + if _, ok := paramChangeIndexMap[index]; ok { + return fmt.Errorf("duplicated index for paramChange") + } + paramChangeIndexMap[index] = struct{}{} + } + // this line is used by starport scaffolding # genesis/types/validate + return gs.Params.Validate() } func validateChains(gs GenesisState) (map[uint64]struct{}, error) { // Check for duplicated index in chain - counter := gs.GetChainCounter() + counter := gs.GetChainCount() launchIDMap := make(map[uint64]struct{}) - for _, elem := range gs.Chains { + for _, elem := range gs.ChainList { if err := elem.Validate(); err != nil { return nil, fmt.Errorf("invalid chain %d: %s", elem.LaunchID, err.Error()) } @@ -80,8 +91,8 @@ func validateRequests(gs GenesisState, launchIDMap map[uint64]struct{}) error { // Check for duplicated index in request requestIndexMap := make(map[string]struct{}) - for _, elem := range gs.Requests { - index := string(RequestKey(elem.LaunchID, elem.RequestID)) + for _, elem := range gs.RequestList { + index := fmt.Sprint(elem.LaunchID, elem.RequestID) if _, ok := requestIndexMap[index]; ok { return fmt.Errorf("duplicated index for request") } @@ -116,8 +127,8 @@ func validateRequests(gs GenesisState, launchIDMap map[uint64]struct{}) error { func validateAccounts(gs GenesisState, launchIDMap map[uint64]struct{}) error { // Check for duplicated index in genesisAccount genesisAccountIndexMap := make(map[string]struct{}) - for _, elem := range gs.GenesisAccounts { - index := string(AccountKeyPath(elem.LaunchID, elem.Address)) + for _, elem := range gs.GenesisAccountList { + index := fmt.Sprint(elem.LaunchID, elem.Address) if _, ok := genesisAccountIndexMap[index]; ok { return fmt.Errorf("duplicated index for genesisAccount") } @@ -134,8 +145,8 @@ func validateAccounts(gs GenesisState, launchIDMap map[uint64]struct{}) error { // Check for duplicated index in vestingAccount vestingAccountIndexMap := make(map[string]struct{}) - for _, elem := range gs.VestingAccounts { - index := string(AccountKeyPath(elem.LaunchID, elem.Address)) + for _, elem := range gs.VestingAccountList { + index := fmt.Sprint(elem.LaunchID, elem.Address) if _, ok := vestingAccountIndexMap[index]; ok { return fmt.Errorf("duplicated index for vestingAccount") } @@ -150,8 +161,8 @@ func validateAccounts(gs GenesisState, launchIDMap map[uint64]struct{}) error { } // An address cannot be defined as a genesis account and a vesting account for the same chain - accountIndex := AccountKeyPath(elem.LaunchID, elem.Address) - if _, ok := genesisAccountIndexMap[string(accountIndex)]; ok { + accountIndex := fmt.Sprint(elem.LaunchID, elem.Address) + if _, ok := genesisAccountIndexMap[accountIndex]; ok { return fmt.Errorf("account %s can't be a genesis account and a vesting account at the same time for the chain: %d", elem.Address, elem.LaunchID, @@ -161,8 +172,8 @@ func validateAccounts(gs GenesisState, launchIDMap map[uint64]struct{}) error { // Check for duplicated index in genesisValidator genesisValidatorIndexMap := make(map[string]struct{}) - for _, elem := range gs.GenesisValidators { - index := string(AccountKeyPath(elem.LaunchID, elem.Address)) + for _, elem := range gs.GenesisValidatorList { + index := fmt.Sprint(elem.LaunchID, elem.Address) if _, ok := genesisValidatorIndexMap[index]; ok { return fmt.Errorf("duplicated index for genesisValidator") } diff --git a/x/launch/types/genesis.pb.go b/x/launch/types/genesis.pb.go index 2d459ae1..ba008bed 100644 --- a/x/launch/types/genesis.pb.go +++ b/x/launch/types/genesis.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/genesis.proto +// source: network/launch/v1/genesis.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,22 +26,23 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the launch module's genesis state. type GenesisState struct { - Chains []Chain `protobuf:"bytes,1,rep,name=chains,proto3" json:"chains"` - ChainCounter uint64 `protobuf:"varint,2,opt,name=chainCounter,proto3" json:"chainCounter,omitempty"` - GenesisAccounts []GenesisAccount `protobuf:"bytes,3,rep,name=genesisAccounts,proto3" json:"genesisAccounts"` - VestingAccounts []VestingAccount `protobuf:"bytes,4,rep,name=vestingAccounts,proto3" json:"vestingAccounts"` - GenesisValidators []GenesisValidator `protobuf:"bytes,5,rep,name=genesisValidators,proto3" json:"genesisValidators"` - ParamChanges []ParamChange `protobuf:"bytes,6,rep,name=paramChanges,proto3" json:"paramChanges"` - Requests []Request `protobuf:"bytes,7,rep,name=requests,proto3" json:"requests"` - RequestCounters []RequestCounter `protobuf:"bytes,8,rep,name=requestCounters,proto3" json:"requestCounters"` - Params Params `protobuf:"bytes,9,opt,name=params,proto3" json:"params"` + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + ChainList []Chain `protobuf:"bytes,2,rep,name=chainList,proto3" json:"chainList"` + ChainCount uint64 `protobuf:"varint,3,opt,name=chainCount,proto3" json:"chainCount,omitempty"` + GenesisAccountList []GenesisAccount `protobuf:"bytes,4,rep,name=genesisAccountList,proto3" json:"genesisAccountList"` + VestingAccountList []VestingAccount `protobuf:"bytes,5,rep,name=vestingAccountList,proto3" json:"vestingAccountList"` + GenesisValidatorList []GenesisValidator `protobuf:"bytes,6,rep,name=genesisValidatorList,proto3" json:"genesisValidatorList"` + RequestList []Request `protobuf:"bytes,7,rep,name=requestList,proto3" json:"requestList"` + RequestCounters []RequestCounter `protobuf:"bytes,8,rep,name=requestCounters,proto3" json:"requestCounters"` + ParamChangeList []ParamChange `protobuf:"bytes,9,rep,name=paramChangeList,proto3" json:"paramChangeList"` } func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_89744ce2268ead99, []int{0} + return fileDescriptor_07ed9a42dc13acfb, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -69,51 +71,51 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetChains() []Chain { +func (m *GenesisState) GetParams() Params { if m != nil { - return m.Chains + return m.Params } - return nil + return Params{} } -func (m *GenesisState) GetChainCounter() uint64 { +func (m *GenesisState) GetChainList() []Chain { if m != nil { - return m.ChainCounter + return m.ChainList } - return 0 + return nil } -func (m *GenesisState) GetGenesisAccounts() []GenesisAccount { +func (m *GenesisState) GetChainCount() uint64 { if m != nil { - return m.GenesisAccounts + return m.ChainCount } - return nil + return 0 } -func (m *GenesisState) GetVestingAccounts() []VestingAccount { +func (m *GenesisState) GetGenesisAccountList() []GenesisAccount { if m != nil { - return m.VestingAccounts + return m.GenesisAccountList } return nil } -func (m *GenesisState) GetGenesisValidators() []GenesisValidator { +func (m *GenesisState) GetVestingAccountList() []VestingAccount { if m != nil { - return m.GenesisValidators + return m.VestingAccountList } return nil } -func (m *GenesisState) GetParamChanges() []ParamChange { +func (m *GenesisState) GetGenesisValidatorList() []GenesisValidator { if m != nil { - return m.ParamChanges + return m.GenesisValidatorList } return nil } -func (m *GenesisState) GetRequests() []Request { +func (m *GenesisState) GetRequestList() []Request { if m != nil { - return m.Requests + return m.RequestList } return nil } @@ -125,11 +127,11 @@ func (m *GenesisState) GetRequestCounters() []RequestCounter { return nil } -func (m *GenesisState) GetParams() Params { +func (m *GenesisState) GetParamChangeList() []ParamChange { if m != nil { - return m.Params + return m.ParamChangeList } - return Params{} + return nil } type RequestCounter struct { @@ -141,7 +143,7 @@ func (m *RequestCounter) Reset() { *m = RequestCounter{} } func (m *RequestCounter) String() string { return proto.CompactTextString(m) } func (*RequestCounter) ProtoMessage() {} func (*RequestCounter) Descriptor() ([]byte, []int) { - return fileDescriptor_89744ce2268ead99, []int{1} + return fileDescriptor_07ed9a42dc13acfb, []int{1} } func (m *RequestCounter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -185,42 +187,45 @@ func (m *RequestCounter) GetCounter() uint64 { } func init() { - proto.RegisterType((*GenesisState)(nil), "spn.launch.GenesisState") - proto.RegisterType((*RequestCounter)(nil), "spn.launch.RequestCounter") -} - -func init() { proto.RegisterFile("spn/launch/genesis.proto", fileDescriptor_89744ce2268ead99) } - -var fileDescriptor_89744ce2268ead99 = []byte{ - // 440 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xcf, 0x6e, 0xd4, 0x30, - 0x10, 0xc6, 0x13, 0x1a, 0xd2, 0xc5, 0x5d, 0x81, 0x6a, 0x10, 0xb5, 0x22, 0x14, 0xa2, 0x9c, 0x72, - 0x4a, 0x50, 0x11, 0x0f, 0xd0, 0x5d, 0x44, 0x05, 0xa7, 0x2a, 0x48, 0x3d, 0x70, 0x41, 0x6e, 0x6a, - 0x25, 0x91, 0xba, 0x4e, 0x88, 0x9d, 0x15, 0xbc, 0x05, 0x2f, 0x85, 0xb4, 0xc7, 0x3d, 0x72, 0x42, - 0x68, 0xf7, 0x45, 0xaa, 0xd8, 0x93, 0x6c, 0xfe, 0xec, 0xcd, 0x9e, 0xf9, 0xbe, 0x9f, 0xc7, 0xa3, - 0x0f, 0x11, 0x51, 0xf2, 0xe8, 0x81, 0xd6, 0x3c, 0xc9, 0xa2, 0x94, 0x71, 0x26, 0x72, 0x11, 0x96, - 0x55, 0x21, 0x0b, 0x8c, 0x44, 0xc9, 0x43, 0xdd, 0x71, 0x5e, 0xa5, 0x45, 0x5a, 0xa8, 0x72, 0xd4, - 0x9c, 0xb4, 0xc2, 0xe9, 0x7b, 0x2b, 0xf6, 0xa3, 0x66, 0x42, 0x42, 0xc7, 0xeb, 0x75, 0xd6, 0x4c, - 0xc8, 0x9c, 0xa7, 0xdf, 0x69, 0x92, 0x14, 0x35, 0x3f, 0xa6, 0x80, 0x77, 0x47, 0x0a, 0xff, 0x88, - 0x62, 0x4d, 0x1f, 0xf2, 0x7b, 0x2a, 0x8b, 0x0a, 0x34, 0xaf, 0x7b, 0x9a, 0x24, 0xa3, 0x39, 0x87, - 0xfa, 0x45, 0xaf, 0x5e, 0xd2, 0x8a, 0xae, 0xe0, 0x53, 0xfe, 0x1f, 0x0b, 0xcd, 0xaf, 0x35, 0xec, - 0xab, 0xa4, 0x92, 0xe1, 0x08, 0xd9, 0xca, 0x28, 0x88, 0xe9, 0x9d, 0x04, 0x67, 0x97, 0xe7, 0xe1, - 0xe1, 0xdb, 0xe1, 0xb2, 0xe9, 0x2c, 0xac, 0xcd, 0xbf, 0xb7, 0x46, 0x0c, 0x32, 0xec, 0xa3, 0xb9, - 0x3a, 0x2d, 0x9b, 0x51, 0x59, 0x45, 0x9e, 0x78, 0x66, 0x60, 0xc5, 0x83, 0x1a, 0xfe, 0x82, 0x5e, - 0xc0, 0xc4, 0x57, 0xfa, 0x4b, 0x82, 0x9c, 0x28, 0xba, 0xd3, 0xa7, 0x5f, 0x0f, 0x24, 0xf0, 0xcc, - 0xd8, 0xd8, 0xb0, 0x60, 0x83, 0x1d, 0xcb, 0x9a, 0xb2, 0x6e, 0x07, 0x92, 0x96, 0x35, 0x32, 0xe2, - 0x1b, 0x74, 0x0e, 0xf8, 0xdb, 0x76, 0x91, 0x82, 0x3c, 0x55, 0xb4, 0x37, 0x47, 0x26, 0xeb, 0x44, - 0xc0, 0x9b, 0x9a, 0xf1, 0x15, 0x9a, 0xab, 0xfd, 0x2e, 0x33, 0xca, 0x53, 0x26, 0x88, 0xad, 0x60, - 0x17, 0x7d, 0xd8, 0xcd, 0xa1, 0x0f, 0x9c, 0x81, 0x05, 0x7f, 0x40, 0x33, 0x08, 0x8f, 0x20, 0xa7, - 0xca, 0xfe, 0xb2, 0x6f, 0x8f, 0x75, 0x0f, 0xac, 0x9d, 0xb4, 0xd9, 0x0b, 0x9c, 0x61, 0xeb, 0x82, - 0xcc, 0xa6, 0x7b, 0x89, 0x07, 0x92, 0x76, 0x2f, 0x23, 0x23, 0x7e, 0x87, 0x6c, 0x9d, 0x12, 0xf2, - 0xcc, 0x33, 0x83, 0xb3, 0x4b, 0x3c, 0x99, 0x5f, 0xb4, 0x29, 0xd0, 0x3a, 0xff, 0x13, 0x7a, 0x3e, - 0x44, 0x63, 0x07, 0xcd, 0xb4, 0xe1, 0xf3, 0x47, 0x62, 0xaa, 0x4c, 0x74, 0x77, 0x4c, 0xd0, 0x69, - 0x32, 0x88, 0x4b, 0x7b, 0x5d, 0x2c, 0x36, 0x3b, 0xd7, 0xdc, 0xee, 0x5c, 0xf3, 0xff, 0xce, 0x35, - 0x7f, 0xef, 0x5d, 0x63, 0xbb, 0x77, 0x8d, 0xbf, 0x7b, 0xd7, 0xf8, 0x16, 0xa4, 0xb9, 0xcc, 0xea, - 0xbb, 0x30, 0x29, 0x56, 0x91, 0x64, 0xfc, 0x9e, 0x55, 0xab, 0x9c, 0xcb, 0xa8, 0x09, 0xf6, 0xcf, - 0x36, 0xda, 0xf2, 0x57, 0xc9, 0xc4, 0x9d, 0xad, 0xa2, 0xfd, 0xfe, 0x31, 0x00, 0x00, 0xff, 0xff, - 0x5b, 0x1f, 0xda, 0xdf, 0xcb, 0x03, 0x00, 0x00, + proto.RegisterType((*GenesisState)(nil), "network.launch.v1.GenesisState") + proto.RegisterType((*RequestCounter)(nil), "network.launch.v1.RequestCounter") +} + +func init() { proto.RegisterFile("network/launch/v1/genesis.proto", fileDescriptor_07ed9a42dc13acfb) } + +var fileDescriptor_07ed9a42dc13acfb = []byte{ + // 492 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x40, 0xe3, 0x36, 0x4d, 0x9b, 0x0d, 0xa2, 0xea, 0xaa, 0x07, 0x63, 0x89, 0x6d, 0x28, 0x48, + 0x04, 0x0e, 0xb6, 0x5a, 0xae, 0xbd, 0xe0, 0x20, 0x2a, 0x24, 0x84, 0xc0, 0x48, 0x45, 0x42, 0x42, + 0xd5, 0xd6, 0xac, 0x9c, 0x15, 0xcd, 0x6e, 0xb0, 0x37, 0x01, 0xfe, 0x82, 0x6f, 0xe0, 0xc4, 0x91, + 0xcf, 0xe8, 0xb1, 0x47, 0x4e, 0x08, 0x25, 0x07, 0x7e, 0x03, 0x79, 0x76, 0xdc, 0xc6, 0x8d, 0xf7, + 0x12, 0x79, 0xec, 0x37, 0x6f, 0x66, 0x27, 0xb3, 0x64, 0x4f, 0x09, 0xf3, 0x45, 0xe7, 0x9f, 0xa2, + 0x73, 0x3e, 0x55, 0xe9, 0x28, 0x9a, 0x1d, 0x44, 0x99, 0x50, 0xa2, 0x90, 0x45, 0x38, 0xc9, 0xb5, + 0xd1, 0x74, 0x07, 0x81, 0xd0, 0x02, 0xe1, 0xec, 0x20, 0xd8, 0xe1, 0x63, 0xa9, 0x74, 0x04, 0xbf, + 0x96, 0x0a, 0x76, 0x33, 0x9d, 0x69, 0x78, 0x8c, 0xca, 0x27, 0x7c, 0x7b, 0x77, 0x55, 0x9e, 0x8e, + 0xb8, 0x54, 0xf8, 0xf9, 0xa1, 0xb3, 0xf6, 0x29, 0x4f, 0x53, 0x3d, 0x55, 0x06, 0xc1, 0x47, 0x6e, + 0x70, 0xc6, 0xcf, 0xe5, 0x47, 0x6e, 0x74, 0x8e, 0xe8, 0x83, 0x55, 0x74, 0xc2, 0x73, 0x3e, 0x3e, + 0x4d, 0x47, 0x5c, 0x65, 0x02, 0x29, 0xe6, 0xa0, 0xf0, 0xd0, 0x41, 0xc3, 0x54, 0x72, 0xf1, 0x79, + 0x2a, 0x0a, 0xe3, 0x6e, 0x7d, 0x26, 0x0a, 0x23, 0x55, 0x56, 0x6f, 0x7d, 0xff, 0xc7, 0x06, 0xb9, + 0x75, 0x6c, 0x7b, 0x7d, 0x6b, 0xb8, 0x11, 0xf4, 0x88, 0x74, 0x6c, 0x29, 0xdf, 0xeb, 0x7b, 0x83, + 0xde, 0xe1, 0x9d, 0x70, 0x65, 0xc0, 0xe1, 0x6b, 0x00, 0xe2, 0xee, 0xc5, 0x9f, 0xbd, 0xd6, 0xcf, + 0x7f, 0xbf, 0x1e, 0x7b, 0x09, 0xe6, 0xd0, 0x23, 0xd2, 0x85, 0x09, 0xbe, 0x94, 0x85, 0xf1, 0xd7, + 0xfa, 0xeb, 0x83, 0xde, 0xa1, 0xdf, 0x20, 0x18, 0x96, 0x4c, 0xdc, 0x2e, 0xf3, 0x93, 0xeb, 0x04, + 0xca, 0x08, 0x81, 0x60, 0x58, 0x36, 0xe8, 0xaf, 0xf7, 0xbd, 0x41, 0x3b, 0x59, 0x7a, 0x43, 0xdf, + 0x11, 0x8a, 0x73, 0x7d, 0x6a, 0x0f, 0x01, 0x65, 0xda, 0x50, 0xe6, 0x5e, 0x43, 0x99, 0xe3, 0x1a, + 0x8c, 0xf5, 0x1a, 0x14, 0xa5, 0x18, 0xc7, 0xb3, 0x2c, 0xde, 0x70, 0x8a, 0x4f, 0x6a, 0x70, 0x25, + 0x5e, 0x55, 0xd0, 0x0f, 0x64, 0x17, 0xcb, 0x9d, 0x54, 0x8b, 0x00, 0xea, 0x0e, 0xa8, 0xef, 0xbb, + 0x7b, 0xbe, 0xc2, 0x51, 0xde, 0xa8, 0xa1, 0x31, 0xe9, 0xe1, 0xff, 0x0e, 0xd6, 0x4d, 0xb0, 0x06, + 0x0d, 0xd6, 0xc4, 0x52, 0x28, 0x5b, 0x4e, 0xa2, 0x6f, 0xc8, 0x36, 0x86, 0x30, 0x64, 0x91, 0x17, + 0xfe, 0x96, 0xf3, 0xe0, 0x49, 0x8d, 0x44, 0xdd, 0xcd, 0x7c, 0xfa, 0x8a, 0x6c, 0xc3, 0x3e, 0x0c, + 0x61, 0xa7, 0xa1, 0xb5, 0x2e, 0x28, 0x99, 0x6b, 0x99, 0x2c, 0x59, 0xf9, 0x6e, 0x24, 0xef, 0x3f, + 0x27, 0xb7, 0xeb, 0x85, 0x69, 0x40, 0xb6, 0xac, 0xe1, 0xc5, 0x33, 0xd8, 0xd3, 0x76, 0x72, 0x15, + 0x53, 0x9f, 0x6c, 0xa6, 0x16, 0xf3, 0xd7, 0xe0, 0x53, 0x15, 0xc6, 0xf1, 0xc5, 0x9c, 0x79, 0x97, + 0x73, 0xe6, 0xfd, 0x9d, 0x33, 0xef, 0xfb, 0x82, 0xb5, 0x2e, 0x17, 0xac, 0xf5, 0x7b, 0xc1, 0x5a, + 0xef, 0x07, 0x99, 0x34, 0xa3, 0xe9, 0x59, 0x98, 0xea, 0x71, 0x24, 0x33, 0x25, 0x8d, 0x88, 0xaa, + 0x1b, 0xf4, 0xb5, 0xba, 0x43, 0xe6, 0xdb, 0x44, 0x14, 0x67, 0x1d, 0xb8, 0x37, 0x4f, 0xfe, 0x07, + 0x00, 0x00, 0xff, 0xff, 0xde, 0x72, 0xd0, 0x99, 0x99, 0x04, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -243,20 +248,10 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - if len(m.RequestCounters) > 0 { - for iNdEx := len(m.RequestCounters) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ParamChangeList) > 0 { + for iNdEx := len(m.ParamChangeList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.RequestCounters[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ParamChangeList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -264,13 +259,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x42 + dAtA[i] = 0x4a } } - if len(m.Requests) > 0 { - for iNdEx := len(m.Requests) - 1; iNdEx >= 0; iNdEx-- { + if len(m.RequestCounters) > 0 { + for iNdEx := len(m.RequestCounters) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Requests[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.RequestCounters[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -278,13 +273,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x3a + dAtA[i] = 0x42 } } - if len(m.ParamChanges) > 0 { - for iNdEx := len(m.ParamChanges) - 1; iNdEx >= 0; iNdEx-- { + if len(m.RequestList) > 0 { + for iNdEx := len(m.RequestList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.ParamChanges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.RequestList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -292,13 +287,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 + dAtA[i] = 0x3a } } - if len(m.GenesisValidators) > 0 { - for iNdEx := len(m.GenesisValidators) - 1; iNdEx >= 0; iNdEx-- { + if len(m.GenesisValidatorList) > 0 { + for iNdEx := len(m.GenesisValidatorList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.GenesisValidators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.GenesisValidatorList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -306,13 +301,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x32 } } - if len(m.VestingAccounts) > 0 { - for iNdEx := len(m.VestingAccounts) - 1; iNdEx >= 0; iNdEx-- { + if len(m.VestingAccountList) > 0 { + for iNdEx := len(m.VestingAccountList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.VestingAccounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.VestingAccountList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -320,13 +315,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x2a } } - if len(m.GenesisAccounts) > 0 { - for iNdEx := len(m.GenesisAccounts) - 1; iNdEx >= 0; iNdEx-- { + if len(m.GenesisAccountList) > 0 { + for iNdEx := len(m.GenesisAccountList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.GenesisAccounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.GenesisAccountList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -334,18 +329,18 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x22 } } - if m.ChainCounter != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.ChainCounter)) + if m.ChainCount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.ChainCount)) i-- - dAtA[i] = 0x10 + dAtA[i] = 0x18 } - if len(m.Chains) > 0 { - for iNdEx := len(m.Chains) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ChainList) > 0 { + for iNdEx := len(m.ChainList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Chains[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ChainList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -353,9 +348,19 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 } } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -409,53 +414,53 @@ func (m *GenesisState) Size() (n int) { } var l int _ = l - if len(m.Chains) > 0 { - for _, e := range m.Chains { + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.ChainList) > 0 { + for _, e := range m.ChainList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if m.ChainCounter != 0 { - n += 1 + sovGenesis(uint64(m.ChainCounter)) + if m.ChainCount != 0 { + n += 1 + sovGenesis(uint64(m.ChainCount)) } - if len(m.GenesisAccounts) > 0 { - for _, e := range m.GenesisAccounts { + if len(m.GenesisAccountList) > 0 { + for _, e := range m.GenesisAccountList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.VestingAccounts) > 0 { - for _, e := range m.VestingAccounts { + if len(m.VestingAccountList) > 0 { + for _, e := range m.VestingAccountList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.GenesisValidators) > 0 { - for _, e := range m.GenesisValidators { + if len(m.GenesisValidatorList) > 0 { + for _, e := range m.GenesisValidatorList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.ParamChanges) > 0 { - for _, e := range m.ParamChanges { + if len(m.RequestList) > 0 { + for _, e := range m.RequestList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.Requests) > 0 { - for _, e := range m.Requests { + if len(m.RequestCounters) > 0 { + for _, e := range m.RequestCounters { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.RequestCounters) > 0 { - for _, e := range m.RequestCounters { + if len(m.ParamChangeList) > 0 { + for _, e := range m.ParamChangeList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) return n } @@ -511,7 +516,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Chains", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -538,33 +543,13 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Chains = append(m.Chains, Chain{}) - if err := m.Chains[len(m.Chains)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ChainCounter", wireType) - } - m.ChainCounter = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ChainCounter |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenesisAccounts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ChainList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -591,14 +576,33 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.GenesisAccounts = append(m.GenesisAccounts, GenesisAccount{}) - if err := m.GenesisAccounts[len(m.GenesisAccounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ChainList = append(m.ChainList, Chain{}) + if err := m.ChainList[len(m.ChainList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainCount", wireType) + } + m.ChainCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ChainCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VestingAccounts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field GenesisAccountList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -625,14 +629,14 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.VestingAccounts = append(m.VestingAccounts, VestingAccount{}) - if err := m.VestingAccounts[len(m.VestingAccounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.GenesisAccountList = append(m.GenesisAccountList, GenesisAccount{}) + if err := m.GenesisAccountList[len(m.GenesisAccountList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenesisValidators", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VestingAccountList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -659,14 +663,14 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.GenesisValidators = append(m.GenesisValidators, GenesisValidator{}) - if err := m.GenesisValidators[len(m.GenesisValidators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.VestingAccountList = append(m.VestingAccountList, VestingAccount{}) + if err := m.VestingAccountList[len(m.VestingAccountList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ParamChanges", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field GenesisValidatorList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -693,14 +697,14 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ParamChanges = append(m.ParamChanges, ParamChange{}) - if err := m.ParamChanges[len(m.ParamChanges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.GenesisValidatorList = append(m.GenesisValidatorList, GenesisValidator{}) + if err := m.GenesisValidatorList[len(m.GenesisValidatorList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Requests", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RequestList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -727,8 +731,8 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Requests = append(m.Requests, Request{}) - if err := m.Requests[len(m.Requests)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.RequestList = append(m.RequestList, Request{}) + if err := m.RequestList[len(m.RequestList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -768,7 +772,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ParamChangeList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -795,7 +799,8 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ParamChangeList = append(m.ParamChangeList, ParamChange{}) + if err := m.ParamChangeList[len(m.ParamChangeList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/launch/types/genesis_account.pb.go b/x/launch/types/genesis_account.pb.go index 353a3beb..7c0d2393 100644 --- a/x/launch/types/genesis_account.pb.go +++ b/x/launch/types/genesis_account.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/genesis_account.proto +// source: network/launch/v1/genesis_account.proto package types @@ -8,6 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -36,7 +37,7 @@ func (m *GenesisAccount) Reset() { *m = GenesisAccount{} } func (m *GenesisAccount) String() string { return proto.CompactTextString(m) } func (*GenesisAccount) ProtoMessage() {} func (*GenesisAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_a63281ffeb418941, []int{0} + return fileDescriptor_98a6836deadae3e4, []int{0} } func (m *GenesisAccount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -87,33 +88,37 @@ func (m *GenesisAccount) GetCoins() github_com_cosmos_cosmos_sdk_types.Coins { } func init() { - proto.RegisterType((*GenesisAccount)(nil), "spn.launch.GenesisAccount") + proto.RegisterType((*GenesisAccount)(nil), "network.launch.v1.GenesisAccount") } -func init() { proto.RegisterFile("spn/launch/genesis_account.proto", fileDescriptor_a63281ffeb418941) } +func init() { + proto.RegisterFile("network/launch/v1/genesis_account.proto", fileDescriptor_98a6836deadae3e4) +} -var fileDescriptor_a63281ffeb418941 = []byte{ - // 313 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x3f, 0x4e, 0xc3, 0x30, - 0x14, 0xc6, 0x63, 0xca, 0x5f, 0x23, 0x31, 0x44, 0x1d, 0xd2, 0x0e, 0x6e, 0xc4, 0x42, 0x96, 0xda, - 0x6a, 0x39, 0x41, 0x03, 0x12, 0x62, 0x2d, 0x1b, 0x0c, 0x55, 0xe2, 0x58, 0xa9, 0x05, 0xb5, 0xa3, - 0x3c, 0x17, 0xc1, 0x1d, 0x18, 0x38, 0x07, 0x33, 0x87, 0xe8, 0x58, 0x31, 0x31, 0x15, 0xd4, 0x1c, - 0x80, 0x9d, 0x09, 0x25, 0x76, 0x11, 0x23, 0x93, 0xfd, 0xfc, 0x7d, 0xef, 0x7d, 0x3f, 0xf9, 0xe1, - 0x10, 0x0a, 0xc5, 0xee, 0x92, 0xb9, 0xe2, 0x53, 0x96, 0x0b, 0x25, 0x40, 0xc2, 0x24, 0xe1, 0x5c, - 0xcf, 0x95, 0xa1, 0x45, 0xa9, 0x8d, 0xf6, 0x31, 0x14, 0x8a, 0x5a, 0x47, 0xb7, 0x9d, 0xeb, 0x5c, - 0x37, 0xcf, 0xac, 0xbe, 0x59, 0x47, 0x97, 0x70, 0x0d, 0x33, 0x0d, 0x2c, 0x4d, 0x40, 0xb0, 0xfb, - 0x41, 0x2a, 0x4c, 0x32, 0x60, 0x5c, 0x4b, 0xe5, 0xf4, 0x8e, 0xd5, 0x27, 0xb6, 0xd1, 0x16, 0x56, - 0x3a, 0xfe, 0x42, 0xf8, 0xe8, 0xc2, 0xc6, 0x8e, 0x6c, 0xaa, 0xdf, 0xc5, 0xfb, 0x36, 0xed, 0xf2, - 0x3c, 0x40, 0x21, 0x8a, 0xb6, 0xc7, 0xbf, 0xb5, 0x3f, 0xc4, 0x7b, 0x49, 0x96, 0x95, 0x02, 0x20, - 0xd8, 0x0a, 0x51, 0x74, 0x10, 0x07, 0x6f, 0xaf, 0xfd, 0xb6, 0x9b, 0x38, 0xb2, 0xca, 0x95, 0x29, - 0xa5, 0xca, 0xc7, 0x1b, 0xa3, 0xff, 0x84, 0xf0, 0x4e, 0x0d, 0x03, 0x41, 0x2b, 0x6c, 0x45, 0x87, - 0xc3, 0x0e, 0x75, 0xfe, 0x1a, 0x97, 0x3a, 0x5c, 0x7a, 0xa6, 0xa5, 0x8a, 0x6f, 0x16, 0xab, 0x9e, - 0xf7, 0xbd, 0xea, 0x9d, 0xe4, 0xd2, 0x4c, 0xe7, 0x29, 0xe5, 0x7a, 0xe6, 0x70, 0xdd, 0xd1, 0x87, - 0xec, 0x96, 0x99, 0xc7, 0x42, 0x40, 0xd3, 0xf0, 0xf2, 0xd1, 0x8b, 0xfe, 0x69, 0x85, 0xb1, 0x85, - 0x88, 0xe3, 0xc5, 0x9a, 0xa0, 0xe5, 0x9a, 0xa0, 0xcf, 0x35, 0x41, 0xcf, 0x15, 0xf1, 0x96, 0x15, - 0xf1, 0xde, 0x2b, 0xe2, 0x5d, 0xff, 0x1d, 0x65, 0x84, 0xca, 0x44, 0x39, 0x93, 0xca, 0xb0, 0x7a, - 0x41, 0x0f, 0x9b, 0x15, 0x35, 0x03, 0xd3, 0xdd, 0xe6, 0xf3, 0x4e, 0x7f, 0x02, 0x00, 0x00, 0xff, - 0xff, 0x97, 0x6f, 0x62, 0xfc, 0xbd, 0x01, 0x00, 0x00, +var fileDescriptor_98a6836deadae3e4 = []byte{ + // 349 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0x49, 0x2c, 0xcd, 0x4b, 0xce, 0xd0, 0x2f, 0x33, 0xd4, 0x4f, 0x4f, + 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0x8e, 0x4f, 0x4c, 0x4e, 0xce, 0x2f, 0xcd, 0x2b, 0xd1, 0x2b, 0x28, + 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x84, 0x2a, 0xd4, 0x83, 0x28, 0xd4, 0x2b, 0x33, 0x94, 0x12, 0x4c, + 0xcc, 0xcd, 0xcc, 0xcb, 0xd7, 0x07, 0x93, 0x10, 0x55, 0x52, 0x72, 0xc9, 0xf9, 0xc5, 0xb9, 0xf9, + 0xc5, 0xfa, 0x49, 0x89, 0xc5, 0xa9, 0xfa, 0x65, 0x86, 0x49, 0xa9, 0x25, 0x89, 0x86, 0xfa, 0xc9, + 0xf9, 0x99, 0x79, 0x50, 0x79, 0x49, 0x88, 0x7c, 0x3c, 0x98, 0xa7, 0x0f, 0xe1, 0x40, 0xa5, 0x44, + 0xd2, 0xf3, 0xd3, 0xf3, 0x21, 0xe2, 0x20, 0x16, 0x44, 0x54, 0xa9, 0x95, 0x89, 0x8b, 0xcf, 0x1d, + 0xe2, 0x20, 0x47, 0x88, 0x7b, 0x84, 0xa4, 0xb8, 0x38, 0x20, 0x6e, 0xf0, 0x74, 0x91, 0x60, 0x54, + 0x60, 0xd4, 0x60, 0x09, 0x82, 0xf3, 0x85, 0x8c, 0xb8, 0xd8, 0x13, 0x53, 0x52, 0x8a, 0x52, 0x8b, + 0x8b, 0x25, 0x98, 0x14, 0x18, 0x35, 0x38, 0x9d, 0x24, 0x2e, 0x6d, 0xd1, 0x15, 0x81, 0xda, 0xe3, + 0x08, 0x91, 0x09, 0x2e, 0x29, 0xca, 0xcc, 0x4b, 0x0f, 0x82, 0x29, 0x14, 0x5a, 0xc4, 0xc8, 0xc5, + 0x0a, 0x72, 0x62, 0xb1, 0x04, 0xb3, 0x02, 0xb3, 0x06, 0xb7, 0x91, 0xa4, 0x1e, 0x54, 0x3d, 0xc8, + 0x13, 0x7a, 0x50, 0x4f, 0xe8, 0x39, 0xe7, 0x67, 0xe6, 0x39, 0x15, 0x9e, 0xb8, 0x27, 0xcf, 0xf0, + 0xeb, 0x9e, 0xbc, 0x7a, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0x2e, 0xd4, 0x13, + 0x50, 0x4a, 0xb7, 0x38, 0x25, 0x5b, 0xbf, 0xa4, 0xb2, 0x20, 0xb5, 0x18, 0xac, 0x61, 0xd5, 0x7d, + 0x79, 0x0d, 0x22, 0x95, 0x16, 0xcf, 0x7a, 0xbe, 0x41, 0x8b, 0x27, 0x27, 0x35, 0x3d, 0x31, 0xb9, + 0x32, 0x1e, 0xec, 0x9c, 0x15, 0xcf, 0x37, 0x68, 0x31, 0x06, 0x41, 0x9c, 0xe6, 0xe4, 0x74, 0xe2, + 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, + 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0xc8, 0x16, 0x64, 0xa6, 0xe7, 0x65, 0x96, + 0xa4, 0xea, 0xc3, 0xe2, 0xb4, 0x02, 0x16, 0xab, 0x60, 0x6b, 0x92, 0xd8, 0xc0, 0x41, 0x6a, 0x0c, + 0x08, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x55, 0x97, 0xa5, 0xf4, 0x01, 0x00, 0x00, } func (m *GenesisAccount) Marshal() (dAtA []byte, err error) { diff --git a/x/launch/types/genesis_test.go b/x/launch/types/genesis_test.go index 10030e70..648afa85 100644 --- a/x/launch/types/genesis_test.go +++ b/x/launch/types/genesis_test.go @@ -5,454 +5,209 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/x/launch/types" ) func TestGenesisState_Validate(t *testing.T) { - var ( - launchID1 = uint64(0) - launchID2 = uint64(1) - noExistLaunchID = uint64(2) - addr1 = sample.Address(r) - addr2 = sample.Address(r) - vestingAddress = sample.Address(r) - genesisValidator = sample.GenesisValidator(r, launchID1, addr1) - genesisChainID = sample.GenesisChainID(r) - - // Those are samples we can use for each fields when they are not the one to test - sampleChains = []types.Chain{ - { - LaunchID: launchID1, - GenesisChainID: genesisChainID, - }, - { - LaunchID: launchID2, - GenesisChainID: genesisChainID, - }, - } - sampleGenesisAccounts = []types.GenesisAccount{ - { - LaunchID: launchID1, - Address: addr1, - }, - { - LaunchID: launchID1, - Address: addr2, - }, - { - LaunchID: launchID2, - Address: addr1, - }, - { - LaunchID: launchID2, - Address: addr2, - }, - } - sampleVestingAccounts = []types.VestingAccount{ - { - LaunchID: launchID1, - Address: vestingAddress, - }, - { - LaunchID: launchID2, - Address: vestingAddress, - }, - } - sampleGenesisValidators = []types.GenesisValidator{genesisValidator} - sampleRequests = []types.Request{ - { - LaunchID: launchID1, - RequestID: 0, - }, - { - LaunchID: launchID1, - RequestID: 1, - }, - } - sampleRequestCounters = []types.RequestCounter{ - { - LaunchID: launchID1, - Counter: 10, - }, - } - ) - - for _, tc := range []struct { - desc string - genState *types.GenesisState - shouldBeValid bool + tests := []struct { + desc string + genState *types.GenesisState + valid bool }{ { - desc: "should validate default genesis", - genState: types.DefaultGenesis(), - shouldBeValid: true, + desc: "default is valid", + genState: types.DefaultGenesis(), + valid: true, }, { - desc: "should validate valid genesis state", + desc: "valid genesis state", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - GenesisAccounts: sampleGenesisAccounts, - VestingAccounts: sampleVestingAccounts, - GenesisValidators: sampleGenesisValidators, - Requests: sampleRequests, - RequestCounters: sampleRequestCounters, - Params: types.DefaultParams(), - // this line is used by starport scaffolding # types/genesis/validField - }, - shouldBeValid: true, - }, - // this line is used by starport scaffolding # types/genesis/testcase - { - desc: "should prevent validate genesis with an invalid chain", - genState: &types.GenesisState{ - Chains: []types.Chain{ + ChainList: []types.Chain{ + { + LaunchID: 0, + }, { - LaunchID: launchID1, - GenesisChainID: "invalid_chain_id", + LaunchID: 1, }, }, - ChainCounter: 10, - }, - shouldBeValid: false, - }, - { - desc: "should prevent validate genesis with duplicated chains", - genState: &types.GenesisState{ - Chains: []types.Chain{ + ChainCount: 2, + GenesisAccountList: []types.GenesisAccount{ { - LaunchID: launchID1, - GenesisChainID: genesisChainID, + LaunchID: 0, }, { - LaunchID: launchID1, - GenesisChainID: genesisChainID, + LaunchID: 1, }, }, - ChainCounter: 10, - Params: types.DefaultParams(), - }, - shouldBeValid: false, - }, - { - desc: "should prevent validate genesis with a chain with a chain id number above the chain counter", - genState: &types.GenesisState{ - Chains: []types.Chain{ + GenesisValidatorList: []types.GenesisValidator{ + { + LaunchID: 0, + }, { - LaunchID: 12, - GenesisChainID: genesisChainID, + LaunchID: 1, }, }, - ChainCounter: 10, - Params: types.DefaultParams(), - }, - shouldBeValid: false, - }, - { - desc: "should prevent validate genesis with duplicated accounts", - genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - GenesisAccounts: []types.GenesisAccount{ + VestingAccountList: []types.VestingAccount{ { - LaunchID: launchID1, - Address: addr1, + LaunchID: 0, }, { - LaunchID: launchID1, - Address: addr1, + LaunchID: 1, }, }, - Params: types.DefaultParams(), - }, - shouldBeValid: false, - }, - { - desc: "should prevent validate genesis with an account not associated with chain", - genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - GenesisAccounts: []types.GenesisAccount{ + RequestList: []types.Request{ + { + LaunchID: 0, + }, { - LaunchID: noExistLaunchID, - Address: addr1, + LaunchID: 1, }, }, - Params: types.DefaultParams(), - }, - shouldBeValid: false, - }, - { - desc: "should prevent validate genesis with duplicated vesting accounts", - genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - VestingAccounts: []types.VestingAccount{ + RequestCounters: []types.RequestCounter{ { - LaunchID: launchID1, - Address: vestingAddress, + LaunchID: 0, + Counter: 1, }, { - LaunchID: launchID1, - Address: vestingAddress, + LaunchID: 1, + Counter: 2, }, }, - Params: types.DefaultParams(), - }, - shouldBeValid: false, - }, - { - desc: "should prevent validate genesis with a vesting account not associated with chain", - genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - VestingAccounts: []types.VestingAccount{ + ParamChangeList: []types.ParamChange{ { - LaunchID: noExistLaunchID, - Address: vestingAddress, + LaunchID: 0, + }, + { + LaunchID: 1, }, }, + // this line is used by starport scaffolding # types/genesis/validField }, - shouldBeValid: false, + valid: true, }, { - desc: "should prevent validate genesis with one address present in a genesis account and vesting account", + desc: "duplicated chain", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - GenesisAccounts: []types.GenesisAccount{ + ChainList: []types.Chain{ { - LaunchID: launchID1, - Address: addr1, + LaunchID: 0, }, - }, - VestingAccounts: []types.VestingAccount{ { - LaunchID: launchID1, - Address: addr1, + LaunchID: 0, }, }, - Params: types.DefaultParams(), - }, - shouldBeValid: false, - }, - { - desc: "should prevent validate genesis with a genesis validator not associated to a chain", - genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - GenesisValidators: []types.GenesisValidator{ - sample.GenesisValidator(r, noExistLaunchID, addr1), - }, - Params: types.DefaultParams(), - }, - shouldBeValid: false, - }, - { - desc: "should prevent validate genesis with duplicated genesis validator", - genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - GenesisValidators: []types.GenesisValidator{ - sample.GenesisValidator(r, launchID1, addr1), - sample.GenesisValidator(r, launchID1, addr1), - }, - Params: types.DefaultParams(), }, - shouldBeValid: false, + valid: false, }, { - desc: "should prevent validate genesis with a validator address not associated to a chain", + desc: "invalid chain count", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - GenesisValidators: []types.GenesisValidator{ - sample.GenesisValidator(r, noExistLaunchID, addr1), + ChainList: []types.Chain{ + { + LaunchID: 1, + }, }, - Params: types.DefaultParams(), + ChainCount: 0, }, - shouldBeValid: false, + valid: false, }, { - desc: "should prevent validate genesis with duplicated requests", + desc: "duplicated genesisAccount", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - RequestCounters: sampleRequestCounters, - Requests: []types.Request{ + GenesisAccountList: []types.GenesisAccount{ { - LaunchID: launchID1, - RequestID: 0, + LaunchID: 0, }, { - LaunchID: launchID1, - RequestID: 0, + LaunchID: 0, }, }, - Params: types.DefaultParams(), }, - shouldBeValid: false, + valid: false, }, { - desc: "should prevent validate genesis with request not associated with chain", + desc: "duplicated genesisValidator", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - RequestCounters: sampleRequestCounters, - Requests: []types.Request{ + GenesisValidatorList: []types.GenesisValidator{ { - LaunchID: noExistLaunchID, - RequestID: 0, + LaunchID: 0, + }, + { + LaunchID: 0, }, }, - Params: types.DefaultParams(), }, - shouldBeValid: false, + valid: false, }, { - desc: "should prevent validate genesis with request while no request count for the chain", + desc: "duplicated vestingAccount", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - RequestCounters: []types.RequestCounter{ + VestingAccountList: []types.VestingAccount{ { - LaunchID: launchID2, - Counter: 1, + LaunchID: 0, }, - }, - Requests: []types.Request{ { - LaunchID: launchID1, - RequestID: 0, + LaunchID: 0, }, }, - Params: types.DefaultParams(), }, - shouldBeValid: false, + valid: false, }, { - desc: "should prevent validate genesis with duplicated request counter", + desc: "duplicated request", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - RequestCounters: []types.RequestCounter{ + RequestList: []types.Request{ { - LaunchID: launchID1, - Counter: 0, + LaunchID: 0, }, { - LaunchID: launchID1, - Counter: 1, + LaunchID: 0, }, }, - Params: types.DefaultParams(), }, - shouldBeValid: false, + valid: false, }, { - desc: "should prevent validate genesis with a request counter not associated with chain", + desc: "invalid request count", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, + RequestList: []types.Request{ + { + LaunchID: 1, + }, + }, RequestCounters: []types.RequestCounter{ { - LaunchID: noExistLaunchID, - Counter: 0, + LaunchID: 0, + Counter: 1, + }, + { + LaunchID: 1, + Counter: 2, }, }, - Params: types.DefaultParams(), }, - shouldBeValid: false, + valid: false, }, { - desc: "should prevent validate genesis with a request counter below a request id", + desc: "duplicated paramChange", genState: &types.GenesisState{ - Chains: sampleChains, - ChainCounter: 10, - RequestCounters: []types.RequestCounter{ + ParamChangeList: []types.ParamChange{ { - LaunchID: launchID1, - Counter: 5, + LaunchID: 0, }, - }, - Requests: []types.Request{ { - LaunchID: launchID1, - RequestID: 10, + LaunchID: 0, }, }, - Params: types.DefaultParams(), }, - shouldBeValid: false, + valid: false, }, - } { - t.Run(tc.desc, func(t *testing.T) { - err := tc.genState.Validate() - if !tc.shouldBeValid { - require.Error(t, err) - return - } - require.NoError(t, err) - - launchIDMap := make(map[uint64]struct{}) - for _, elem := range tc.genState.Chains { - launchIDMap[elem.LaunchID] = struct{}{} - } - - for _, acc := range tc.genState.Requests { - // check if the chain exist for requests - _, ok := launchIDMap[acc.LaunchID] - require.True(t, ok) - } - - for _, acc := range tc.genState.GenesisValidators { - // check if the chain exist for validators - _, ok := launchIDMap[acc.LaunchID] - require.True(t, ok) - } - - for _, acc := range tc.genState.GenesisAccounts { - // check if the chain exist for genesis accounts - _, ok := launchIDMap[acc.LaunchID] - require.True(t, ok) - } - - for _, acc := range tc.genState.VestingAccounts { - // check if the chain exist for vesting accounts - _, ok := launchIDMap[acc.LaunchID] - require.True(t, ok) - } - }) + // this line is used by starport scaffolding # types/genesis/testcase } -} - -func TestGenesisState_ValidateParams(t *testing.T) { - for _, tc := range []struct { - desc string - genState types.GenesisState - shouldBeValid bool - }{ - { - desc: "should prevent validate genesis with invalid params", - genState: types.GenesisState{ - Params: types.NewParams(types.DefaultMinLaunchTime, types.MaxParametrableLaunchTime+1, - types.DefaultRevertDelay, types.DefaultFee, types.DefaultFee, types.DefaultMaxMetadataLength), - }, - shouldBeValid: false, - }, - { - desc: "should validate genesis with valid params", - genState: types.GenesisState{ - Params: types.NewParams(types.DefaultMinLaunchTime, types.DefaultMaxLaunchTime, - types.DefaultRevertDelay, types.DefaultFee, types.DefaultFee, types.DefaultMaxMetadataLength), - }, - shouldBeValid: true, - }, - } { + for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { err := tc.genState.Validate() - if tc.shouldBeValid { + if tc.valid { require.NoError(t, err) } else { require.Error(t, err) diff --git a/x/launch/types/genesis_validator.pb.go b/x/launch/types/genesis_validator.pb.go index 8f276151..1741d6b6 100644 --- a/x/launch/types/genesis_validator.pb.go +++ b/x/launch/types/genesis_validator.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/genesis_validator.proto +// source: network/launch/v1/genesis_validator.proto package types @@ -7,6 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -30,7 +31,7 @@ type GenesisValidator struct { Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` GenTx []byte `protobuf:"bytes,3,opt,name=genTx,proto3" json:"genTx,omitempty"` ConsPubKey []byte `protobuf:"bytes,4,opt,name=consPubKey,proto3" json:"consPubKey,omitempty"` - SelfDelegation types.Coin `protobuf:"bytes,5,opt,name=selfDelegation,proto3" json:"selfDelegation"` + SelfDelegation types.Coin `protobuf:"bytes,5,opt,name=selfDelegation,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin" json:"selfDelegation"` Peer Peer `protobuf:"bytes,6,opt,name=peer,proto3" json:"peer"` } @@ -38,7 +39,7 @@ func (m *GenesisValidator) Reset() { *m = GenesisValidator{} } func (m *GenesisValidator) String() string { return proto.CompactTextString(m) } func (*GenesisValidator) ProtoMessage() {} func (*GenesisValidator) Descriptor() ([]byte, []int) { - return fileDescriptor_f72ea5e081d21a4f, []int{0} + return fileDescriptor_f32f4b38fe2f0139, []int{0} } func (m *GenesisValidator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -112,7 +113,6 @@ func (m *GenesisValidator) GetPeer() Peer { type Peer struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Types that are valid to be assigned to Connection: - // // *Peer_TcpAddress // *Peer_HttpTunnel // *Peer_None @@ -123,7 +123,7 @@ func (m *Peer) Reset() { *m = Peer{} } func (m *Peer) String() string { return proto.CompactTextString(m) } func (*Peer) ProtoMessage() {} func (*Peer) Descriptor() ([]byte, []int) { - return fileDescriptor_f72ea5e081d21a4f, []int{1} + return fileDescriptor_f32f4b38fe2f0139, []int{1} } func (m *Peer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -225,7 +225,7 @@ func (m *Peer_HTTPTunnel) Reset() { *m = Peer_HTTPTunnel{} } func (m *Peer_HTTPTunnel) String() string { return proto.CompactTextString(m) } func (*Peer_HTTPTunnel) ProtoMessage() {} func (*Peer_HTTPTunnel) Descriptor() ([]byte, []int) { - return fileDescriptor_f72ea5e081d21a4f, []int{1, 0} + return fileDescriptor_f32f4b38fe2f0139, []int{1, 0} } func (m *Peer_HTTPTunnel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -275,7 +275,7 @@ func (m *Peer_EmptyConnection) Reset() { *m = Peer_EmptyConnection{} } func (m *Peer_EmptyConnection) String() string { return proto.CompactTextString(m) } func (*Peer_EmptyConnection) ProtoMessage() {} func (*Peer_EmptyConnection) Descriptor() ([]byte, []int) { - return fileDescriptor_f72ea5e081d21a4f, []int{1, 1} + return fileDescriptor_f32f4b38fe2f0139, []int{1, 1} } func (m *Peer_EmptyConnection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -305,48 +305,52 @@ func (m *Peer_EmptyConnection) XXX_DiscardUnknown() { var xxx_messageInfo_Peer_EmptyConnection proto.InternalMessageInfo func init() { - proto.RegisterType((*GenesisValidator)(nil), "spn.launch.GenesisValidator") - proto.RegisterType((*Peer)(nil), "spn.launch.Peer") - proto.RegisterType((*Peer_HTTPTunnel)(nil), "spn.launch.Peer.HTTPTunnel") - proto.RegisterType((*Peer_EmptyConnection)(nil), "spn.launch.Peer.EmptyConnection") + proto.RegisterType((*GenesisValidator)(nil), "network.launch.v1.GenesisValidator") + proto.RegisterType((*Peer)(nil), "network.launch.v1.Peer") + proto.RegisterType((*Peer_HTTPTunnel)(nil), "network.launch.v1.Peer.HTTPTunnel") + proto.RegisterType((*Peer_EmptyConnection)(nil), "network.launch.v1.Peer.EmptyConnection") } func init() { - proto.RegisterFile("spn/launch/genesis_validator.proto", fileDescriptor_f72ea5e081d21a4f) + proto.RegisterFile("network/launch/v1/genesis_validator.proto", fileDescriptor_f32f4b38fe2f0139) } -var fileDescriptor_f72ea5e081d21a4f = []byte{ - // 470 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x52, 0x4d, 0x6f, 0xd3, 0x40, - 0x10, 0xb5, 0x8d, 0x5b, 0xe8, 0xa4, 0x2a, 0x65, 0x95, 0x83, 0x6b, 0x24, 0x63, 0xe5, 0x64, 0x21, - 0x61, 0xab, 0x41, 0xe2, 0x80, 0xc4, 0xa1, 0x69, 0x51, 0x83, 0xb8, 0x44, 0x26, 0xe2, 0xc0, 0xa5, - 0xf2, 0xc7, 0xe0, 0xac, 0x64, 0xef, 0x5a, 0xde, 0x4d, 0xd5, 0xfc, 0x07, 0x90, 0xf8, 0x31, 0xfc, - 0x88, 0x1e, 0x2b, 0x4e, 0x9c, 0x10, 0x4a, 0xfe, 0x08, 0xf2, 0xae, 0xf3, 0xa1, 0x70, 0xf3, 0xcc, - 0x7b, 0x6f, 0x9e, 0xdf, 0xce, 0xc0, 0x40, 0xd4, 0x2c, 0x2a, 0x93, 0x39, 0xcb, 0x66, 0x51, 0x81, - 0x0c, 0x05, 0x15, 0x37, 0xb7, 0x49, 0x49, 0xf3, 0x44, 0xf2, 0x26, 0xac, 0x1b, 0x2e, 0x39, 0x01, - 0x51, 0xb3, 0x50, 0x73, 0xdc, 0x7e, 0xc1, 0x0b, 0xae, 0xda, 0x51, 0xfb, 0xa5, 0x19, 0xae, 0x97, - 0x71, 0x51, 0x71, 0x11, 0xa5, 0x89, 0xc0, 0xe8, 0xf6, 0x3c, 0x45, 0x99, 0x9c, 0x47, 0x19, 0xa7, - 0xac, 0xc3, 0xcf, 0x34, 0x7e, 0xa3, 0x85, 0xba, 0xd0, 0xd0, 0xe0, 0xbb, 0x05, 0xa7, 0xd7, 0xda, - 0xf8, 0xf3, 0xda, 0x97, 0xb8, 0xf0, 0x44, 0xfb, 0x7d, 0xb8, 0x72, 0x4c, 0xdf, 0x0c, 0xec, 0x78, - 0x53, 0x93, 0x21, 0x3c, 0x4e, 0xf2, 0xbc, 0x41, 0x21, 0x1c, 0xcb, 0x37, 0x83, 0xa3, 0x91, 0xf3, - 0xeb, 0xe7, 0xab, 0x7e, 0x37, 0xf3, 0x42, 0x23, 0x9f, 0x64, 0x43, 0x59, 0x11, 0xaf, 0x89, 0xa4, - 0x0f, 0x07, 0x05, 0xb2, 0xe9, 0x9d, 0xf3, 0xc8, 0x37, 0x83, 0xe3, 0x58, 0x17, 0xc4, 0x03, 0xc8, - 0x38, 0x13, 0x93, 0x79, 0xfa, 0x11, 0x17, 0x8e, 0xad, 0xa0, 0x9d, 0x0e, 0xb9, 0x86, 0x13, 0x81, - 0xe5, 0xd7, 0x2b, 0x2c, 0xb1, 0x48, 0x24, 0xe5, 0xcc, 0x39, 0xf0, 0xcd, 0xa0, 0x37, 0x3c, 0x0b, - 0x3b, 0xb7, 0x36, 0x6e, 0xd8, 0xc5, 0x0d, 0x2f, 0x39, 0x65, 0x23, 0xfb, 0xfe, 0xcf, 0x0b, 0x23, - 0xde, 0x93, 0x91, 0x97, 0x60, 0xd7, 0x88, 0x8d, 0x73, 0xa8, 0xe4, 0xa7, 0xe1, 0xf6, 0x3d, 0xc3, - 0x09, 0x62, 0xd3, 0xa9, 0x14, 0x67, 0xf0, 0xcd, 0x02, 0xbb, 0x6d, 0x92, 0x13, 0xb0, 0x68, 0xae, - 0xd2, 0x1f, 0xc5, 0x16, 0xcd, 0x89, 0x0f, 0x20, 0xb3, 0xfa, 0x62, 0x37, 0xfa, 0xd8, 0x88, 0x77, - 0x7a, 0xe4, 0x1d, 0xc0, 0x4c, 0xca, 0x7a, 0x3a, 0x67, 0x0c, 0x4b, 0x15, 0xb5, 0x37, 0x7c, 0xbe, - 0x6f, 0x16, 0x8e, 0xa7, 0xd3, 0x89, 0xa6, 0xb4, 0xf2, 0xad, 0x80, 0xbc, 0x01, 0x9b, 0x71, 0x86, - 0xea, 0x21, 0x7a, 0x43, 0xff, 0x3f, 0xe1, 0xfb, 0xaa, 0x96, 0x8b, 0x4b, 0xce, 0x18, 0x66, 0x6d, - 0xaa, 0xb1, 0x11, 0x2b, 0xbe, 0xfb, 0x16, 0x60, 0x3b, 0x93, 0x10, 0xb0, 0x59, 0x52, 0x61, 0xf7, - 0xe3, 0xea, 0x9b, 0x38, 0x7b, 0x2b, 0xdb, 0x2c, 0xc6, 0x7d, 0x06, 0x4f, 0xf7, 0xc6, 0x8e, 0x8e, - 0xd5, 0x56, 0xd6, 0xd5, 0xe8, 0x7e, 0xe9, 0x99, 0x0f, 0x4b, 0xcf, 0xfc, 0xbb, 0xf4, 0xcc, 0x1f, - 0x2b, 0xcf, 0x78, 0x58, 0x79, 0xc6, 0xef, 0x95, 0x67, 0x7c, 0x09, 0x0a, 0x2a, 0x67, 0xf3, 0x34, - 0xcc, 0x78, 0x15, 0x49, 0x64, 0x39, 0x36, 0x15, 0x65, 0x32, 0x6a, 0xef, 0xf9, 0x6e, 0x7d, 0xd1, - 0x72, 0x51, 0xa3, 0x48, 0x0f, 0xd5, 0xa5, 0xbd, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x64, 0xe2, - 0x98, 0x89, 0xec, 0x02, 0x00, 0x00, +var fileDescriptor_f32f4b38fe2f0139 = []byte{ + // 535 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0x31, 0x6f, 0xd3, 0x40, + 0x14, 0xb6, 0x83, 0x5b, 0xe8, 0x4b, 0x54, 0xc8, 0x29, 0x12, 0x6e, 0x06, 0x37, 0xca, 0xd2, 0x50, + 0xa9, 0xb6, 0x12, 0x36, 0x24, 0x86, 0xa6, 0xa9, 0x08, 0x62, 0x89, 0x4c, 0xc4, 0xc0, 0x12, 0x39, + 0xf6, 0xc3, 0x39, 0x35, 0xb9, 0xb3, 0x7c, 0x97, 0xd0, 0xfc, 0x03, 0x46, 0xe6, 0xfe, 0x02, 0xc4, + 0xd4, 0x81, 0x1f, 0xd1, 0xb1, 0x62, 0x40, 0x4c, 0x80, 0x92, 0xa1, 0x7f, 0x03, 0xf9, 0xce, 0x69, + 0xa3, 0x54, 0x5d, 0xec, 0x7b, 0xef, 0x7d, 0xef, 0x7d, 0x77, 0xdf, 0x77, 0x07, 0x2f, 0x18, 0xca, + 0xcf, 0x3c, 0x3d, 0xf3, 0xc6, 0xc1, 0x94, 0x85, 0x23, 0x6f, 0xd6, 0xf4, 0x62, 0x64, 0x28, 0xa8, + 0x18, 0xcc, 0x82, 0x31, 0x8d, 0x02, 0xc9, 0x53, 0x37, 0x49, 0xb9, 0xe4, 0xa4, 0x9c, 0x43, 0x5d, + 0x0d, 0x75, 0x67, 0xcd, 0x6a, 0x39, 0x98, 0x50, 0xc6, 0x3d, 0xf5, 0xd5, 0xa8, 0xaa, 0x13, 0x72, + 0x31, 0xe1, 0xc2, 0x1b, 0x06, 0x02, 0xbd, 0x59, 0x73, 0x88, 0x32, 0x68, 0x7a, 0x21, 0xa7, 0x2c, + 0xaf, 0xef, 0xe9, 0xfa, 0x40, 0x45, 0x9e, 0x0e, 0xf2, 0x52, 0x25, 0xe6, 0x31, 0xd7, 0xf9, 0x6c, + 0xa5, 0xb3, 0xf5, 0x5f, 0x05, 0x78, 0xf6, 0x46, 0x6f, 0xe9, 0xc3, 0x6a, 0x47, 0xa4, 0x0a, 0x4f, + 0xf4, 0x2e, 0xde, 0x76, 0x6c, 0xb3, 0x66, 0x36, 0x2c, 0xff, 0x36, 0x26, 0x2d, 0x78, 0x1c, 0x44, + 0x51, 0x8a, 0x42, 0xd8, 0x85, 0x9a, 0xd9, 0xd8, 0x69, 0xdb, 0x3f, 0x7f, 0x1c, 0x55, 0x72, 0xa6, + 0x63, 0x5d, 0x79, 0x2f, 0x53, 0xca, 0x62, 0x7f, 0x05, 0x24, 0x15, 0xd8, 0x8a, 0x91, 0xf5, 0xcf, + 0xed, 0x47, 0x35, 0xb3, 0x51, 0xf2, 0x75, 0x40, 0x1c, 0x80, 0x90, 0x33, 0xd1, 0x9b, 0x0e, 0xdf, + 0xe1, 0xdc, 0xb6, 0x54, 0x69, 0x2d, 0x43, 0xbe, 0x98, 0xb0, 0x2b, 0x70, 0xfc, 0xa9, 0x83, 0x63, + 0x8c, 0x03, 0x49, 0x39, 0xb3, 0xb7, 0x6a, 0x66, 0xa3, 0xd8, 0xda, 0x73, 0x73, 0xba, 0x4c, 0x05, + 0x37, 0x57, 0xc1, 0x3d, 0xe1, 0x94, 0xb5, 0x4f, 0xaf, 0xfe, 0xec, 0x1b, 0xdf, 0xff, 0xee, 0x1f, + 0xc4, 0x54, 0x8e, 0xa6, 0x43, 0x37, 0xe4, 0x93, 0x5c, 0x85, 0xfc, 0x77, 0x24, 0xa2, 0x33, 0x4f, + 0xce, 0x13, 0x14, 0xaa, 0xe1, 0xe2, 0xe6, 0xf2, 0xb0, 0x94, 0x8d, 0x0f, 0xe7, 0x83, 0x4c, 0x46, + 0xf1, 0xed, 0xe6, 0xf2, 0xd0, 0xf4, 0x37, 0x78, 0x49, 0x13, 0xac, 0x04, 0x31, 0xb5, 0xb7, 0x15, + 0xff, 0x73, 0xf7, 0x9e, 0x57, 0x6e, 0x0f, 0x31, 0x6d, 0x5b, 0x19, 0xbb, 0xaf, 0xa0, 0xf5, 0x8b, + 0x02, 0x58, 0x59, 0x92, 0xec, 0x42, 0x81, 0x46, 0x4a, 0xc6, 0x1d, 0xbf, 0x40, 0x23, 0x52, 0x03, + 0x90, 0x61, 0x72, 0xbc, 0xae, 0x61, 0xd7, 0xf0, 0xd7, 0x72, 0xa4, 0x03, 0x30, 0x92, 0x32, 0xe9, + 0x4f, 0x19, 0xc3, 0xb1, 0xd2, 0xac, 0xd8, 0xaa, 0x3f, 0xc0, 0xe9, 0x76, 0xfb, 0xfd, 0x9e, 0x46, + 0x66, 0x53, 0xee, 0xfa, 0xc8, 0x6b, 0xb0, 0x18, 0x67, 0xa8, 0x84, 0x2d, 0xb6, 0x0e, 0x1e, 0xea, + 0x3f, 0x9d, 0x24, 0x72, 0x7e, 0xc2, 0x19, 0xc3, 0x30, 0x3b, 0x6a, 0xd7, 0xf0, 0x55, 0x5b, 0xf5, + 0x15, 0xc0, 0xdd, 0x68, 0x42, 0xc0, 0x62, 0xc1, 0x04, 0xf3, 0x63, 0xa8, 0x35, 0xb1, 0x37, 0x6e, + 0xc2, 0xad, 0xdf, 0xd5, 0x32, 0x3c, 0xdd, 0x18, 0xdb, 0x2e, 0x29, 0xb3, 0x57, 0x51, 0xfb, 0x6a, + 0xe1, 0x98, 0xd7, 0x0b, 0xc7, 0xfc, 0xb7, 0x70, 0xcc, 0xaf, 0x4b, 0xc7, 0xb8, 0x5e, 0x3a, 0xc6, + 0xef, 0xa5, 0x63, 0x7c, 0x6c, 0xac, 0x19, 0x47, 0x63, 0x46, 0x25, 0x7a, 0xab, 0x37, 0x74, 0xbe, + 0x7a, 0x45, 0xca, 0xbe, 0xe1, 0xb6, 0xba, 0xc0, 0x2f, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x4d, + 0xbd, 0x3c, 0x6c, 0x64, 0x03, 0x00, 0x00, } func (m *GenesisValidator) Marshal() (dAtA []byte, err error) { diff --git a/x/launch/types/hooks.go b/x/launch/types/hooks.go index 2d61637f..1ee41b28 100644 --- a/x/launch/types/hooks.go +++ b/x/launch/types/hooks.go @@ -1,18 +1,20 @@ package types -import ( - sdk "github.com/cosmos/cosmos-sdk/types" -) +import "context" + +// Event Hooks +// These can be utilized to communicate between a fundraising keeper and other keepers. +// The other keepers must implement this interface, which then the fundraising keeper can call. // LaunchHooks event hooks for launch module type LaunchHooks interface { RequestCreated( - ctx sdk.Context, + ctx context.Context, creator string, launchID, requestID uint64, content RequestContent, - ) + ) error } // MultiLaunchHooks combines multiple launch hooks @@ -23,19 +25,22 @@ func NewMultiLaunchHooks(hooks ...LaunchHooks) MultiLaunchHooks { } func (h MultiLaunchHooks) RequestCreated( - ctx sdk.Context, + ctx context.Context, creator string, launchID, requestID uint64, content RequestContent, -) { +) error { for i := range h { - h[i].RequestCreated( + if err := h[i].RequestCreated( ctx, creator, launchID, requestID, content, - ) + ); err != nil { + return err + } } + return nil } diff --git a/x/launch/types/initial_genesis.pb.go b/x/launch/types/initial_genesis.pb.go new file mode 100644 index 00000000..92dad980 --- /dev/null +++ b/x/launch/types/initial_genesis.pb.go @@ -0,0 +1,39 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: network/launch/v1/initial_genesis.proto + +package types + +import ( + fmt "fmt" + math "math" + + proto "github.com/cosmos/gogoproto/proto" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func init() { + proto.RegisterFile("network/launch/v1/initial_genesis.proto", fileDescriptor_81edc13985fc88b1) +} + +var fileDescriptor_81edc13985fc88b1 = []byte{ + // 138 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0x49, 0x2c, 0xcd, 0x4b, 0xce, 0xd0, 0x2f, 0x33, 0xd4, 0xcf, 0xcc, + 0xcb, 0x2c, 0xc9, 0x4c, 0xcc, 0x89, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, + 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x84, 0x2a, 0xd4, 0x83, 0x28, 0xd4, 0x2b, 0x33, 0x74, 0x72, 0x3a, + 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, + 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0x8d, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, + 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xcc, 0xf4, 0xbc, 0xcc, 0x92, 0x54, 0x7d, 0x98, 0x3d, 0x15, + 0x30, 0x9b, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xa6, 0x1b, 0x03, 0x02, 0x00, 0x00, + 0xff, 0xff, 0xe0, 0x11, 0xf2, 0x2b, 0x88, 0x00, 0x00, 0x00, +} diff --git a/x/launch/types/initial_genesis_test.go b/x/launch/types/initial_genesis_test.go index 6181224f..08e2241a 100644 --- a/x/launch/types/initial_genesis_test.go +++ b/x/launch/types/initial_genesis_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" ) func TestNewDefaultInitialGenesis(t *testing.T) { diff --git a/x/launch/types/keys.go b/x/launch/types/keys.go index 81879ebd..755830fc 100644 --- a/x/launch/types/keys.go +++ b/x/launch/types/keys.go @@ -1,6 +1,10 @@ package types -import spntypes "github.com/tendermint/spn/pkg/types" +import ( + "path/filepath" + + "cosmossdk.io/collections" +) const ( // ModuleName defines the module name @@ -9,108 +13,37 @@ const ( // StoreKey defines the primary module store key StoreKey = ModuleName - // RouterKey is the message route for slashing - RouterKey = ModuleName - - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - // MemStoreKey defines the in-memory store key MemStoreKey = "mem_launch" - - // ChainKeyPrefix is the prefix to retrieve all Chain - ChainKeyPrefix = "Chain/value/" - - // ChainCounterKey is the prefix to store chain counter - ChainCounterKey = "Chain/count/" - - // GenesisAccountKeyPrefix is the prefix to retrieve all GenesisAccount - GenesisAccountKeyPrefix = "GenesisAccount/value/" - - // ParamChangeKeyPrefix is the prefix to retrieve all ParamChange - ParamChangeKeyPrefix = "ParamChange/value/" - - // VestingAccountKeyPrefix is the prefix to retrieve all VestingAccount - VestingAccountKeyPrefix = "VestingAccount/value/" - - // GenesisValidatorKeyPrefix is the prefix to retrieve all GenesisValidator - GenesisValidatorKeyPrefix = "GenesisValidator/value/" - - // RequestKeyPrefix is the prefix to retrieve all Request - RequestKeyPrefix = "Request/value/" - - // RequestCounterKeyPrefix is the prefix to store request counter - RequestCounterKeyPrefix = "Request/count/" ) -func KeyPrefix(p string) []byte { - return []byte(p) +func ParamChangeSubKey(module, param string) string { + return filepath.Join(module, param) } -// ChainKey returns the store key to retrieve a Chain from the index fields -func ChainKey(launchID uint64) []byte { - return append(spntypes.UintBytes(launchID), byte('/')) -} +var ( + // ParamsKey is the prefix to retrieve all Params + ParamsKey = collections.NewPrefix("p_launch") -// AccountKeyPath returns the store key path without prefix for an account defined by a launch ID and an address -func AccountKeyPath(launchID uint64, address string) []byte { - launchIDBytes := append(spntypes.UintBytes(launchID), byte('/')) - addressBytes := append([]byte(address), byte('/')) - return append(launchIDBytes, addressBytes...) -} + // ChainKey is the prefix to retrieve all Chain + ChainKey = collections.NewPrefix("chain/value/") + // ChainCountKey is the prefix to retrieve all ChainCount + ChainCountKey = collections.NewPrefix("chain/count/") -// ParamChangePath returns the store key path without prefix for a param change defined by a module and param path -func ParamChangePath(launchID uint64, module, param string) []byte { - launchIDBytes := append(spntypes.UintBytes(launchID), byte('/')) - moduleBytes := append([]byte(module), byte('/')) - paramBytes := append([]byte(param), byte('/')) - launchIDBytes = append(launchIDBytes, moduleBytes...) + // RequestKey is the prefix to retrieve all Request + RequestKey = collections.NewPrefix("request/value/") + // RequestCountKey is the prefix to retrieve all RequestCount + RequestCountKey = collections.NewPrefix("request/count/") - return append(launchIDBytes, paramBytes...) -} - -// ParamChangeAllKey returns the store key to retrieve all ParamChange by launchID -func ParamChangeAllKey(launchID uint64) []byte { - prefixBytes := []byte(ParamChangeKeyPrefix) - launchIDBytes := append(spntypes.UintBytes(launchID), byte('/')) - return append(prefixBytes, launchIDBytes...) -} + // GenesisAccountKey is the prefix to retrieve all GenesisAccount + GenesisAccountKey = collections.NewPrefix("GenesisAccount/value/") -// GenesisAccountAllKey returns the store key to retrieve all GenesisAccount by launchID -func GenesisAccountAllKey(launchID uint64) []byte { - prefixBytes := []byte(GenesisAccountKeyPrefix) - launchIDBytes := append(spntypes.UintBytes(launchID), byte('/')) - return append(prefixBytes, launchIDBytes...) -} + // VestingAccountKey is the prefix to retrieve all VestingAccount + VestingAccountKey = collections.NewPrefix("VestingAccount/value/") -// VestingAccountAllKey returns the store key to retrieve all VestingAccount by launchID -func VestingAccountAllKey(launchID uint64) []byte { - prefixBytes := []byte(VestingAccountKeyPrefix) - launchIDBytes := append(spntypes.UintBytes(launchID), byte('/')) - return append(prefixBytes, launchIDBytes...) -} - -// GenesisValidatorAllKey returns the store key to retrieve all GenesisValidator by launchID -func GenesisValidatorAllKey(launchID uint64) []byte { - prefixBytes := []byte(GenesisValidatorKeyPrefix) - launchIDBytes := append(spntypes.UintBytes(launchID), byte('/')) - return append(prefixBytes, launchIDBytes...) -} + // ParamChangeKey is the prefix to retrieve all ParamChange + ParamChangeKey = collections.NewPrefix("ParamChange/value/") -// RequestKey returns the store key to retrieve a Request from the index fields -func RequestKey(launchID, requestID uint64) []byte { - prefix := RequestPoolKey(launchID) - requestIDBytes := append(spntypes.UintBytes(requestID), byte('/')) - return append(prefix, requestIDBytes...) -} - -// RequestPoolKey returns the store key to retrieve a Request Pool -// This is the entry with all the requests of a specific chain -func RequestPoolKey(launchID uint64) []byte { - return append(spntypes.UintBytes(launchID), byte('/')) -} - -// RequestCounterKey returns the store key to retrieve the count of request from a launch ID -func RequestCounterKey(launchID uint64) []byte { - return append(spntypes.UintBytes(launchID), byte('/')) -} + // GenesisValidatorKey is the prefix to retrieve all GenesisValidator + GenesisValidatorKey = collections.NewPrefix("GenesisValidator/value/") +) diff --git a/x/launch/types/msg_create_chain.go b/x/launch/types/msg_create_chain.go deleted file mode 100644 index b8b3e9aa..00000000 --- a/x/launch/types/msg_create_chain.go +++ /dev/null @@ -1,80 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/pkg/chainid" - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgCreateChain = "create_chain" - -var _ sdk.Msg = &MsgCreateChain{} - -func NewMsgCreateChain( - coordinator, - genesisChainID, - sourceURL, - sourceHash string, - initialGenesis InitialGenesis, - hasProject bool, - projectID uint64, - accountBalance sdk.Coins, - metadata []byte, -) *MsgCreateChain { - return &MsgCreateChain{ - Coordinator: coordinator, - GenesisChainID: genesisChainID, - SourceURL: sourceURL, - SourceHash: sourceHash, - InitialGenesis: initialGenesis, - HasProject: hasProject, - ProjectID: projectID, - AccountBalance: accountBalance, - Metadata: metadata, - } -} - -func (msg *MsgCreateChain) Route() string { - return RouterKey -} - -func (msg *MsgCreateChain) Type() string { - return TypeMsgCreateChain -} - -func (msg *MsgCreateChain) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgCreateChain) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgCreateChain) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - if _, _, err := chainid.ParseGenesisChainID(msg.GenesisChainID); err != nil { - return sdkerrors.Wrapf(ErrInvalidGenesisChainID, err.Error()) - } - - if err = msg.InitialGenesis.Validate(); err != nil { - return sdkerrors.Wrap(ErrInvalidInitialGenesis, err.Error()) - } - - // Coins must be valid - if !msg.AccountBalance.IsValid() { - return sdkerrors.Wrap(ErrInvalidCoins, "default account balance sdk.Coins is not valid") - } - - return nil -} diff --git a/x/launch/types/msg_create_chain_test.go b/x/launch/types/msg_create_chain_test.go deleted file mode 100644 index ee9a82c9..00000000 --- a/x/launch/types/msg_create_chain_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package types_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" -) - -func TestMsgCreateChain_ValidateBasic(t *testing.T) { - // TODO check error types in test - - invalidGenesisHash := sample.MsgCreateChain(r, sample.Address(r), "foo.com", false, 0) - invalidInitialGenesis := types.NewGenesisURL("foo.com", "NoHash") - invalidGenesisHash.InitialGenesis = invalidInitialGenesis - - invalidConfigFile := sample.MsgCreateChain(r, sample.Address(r), "foo.com", false, 0) - invalidInitialGenesis = types.NewGenesisConfig("") - invalidConfigFile.InitialGenesis = invalidInitialGenesis - - invalidGenesisChainID := sample.MsgCreateChain(r, sample.Address(r), "", false, 0) - invalidGenesisChainID.GenesisChainID = "invalid" - - msgInvalidCoins := sample.MsgCreateChain(r, sample.Address(r), "foo.com", false, 0) - msgInvalidCoins.AccountBalance = sdk.Coins{sdk.Coin{Denom: "invalid", Amount: sdk.NewInt(-1)}} - - for _, tc := range []struct { - desc string - msg types.MsgCreateChain - valid bool - }{ - { - desc: "should validate valid message", - msg: sample.MsgCreateChain(r, sample.Address(r), "", false, 0), - valid: true, - }, - { - desc: "should validate valid message with genesis URL", - msg: sample.MsgCreateChain(r, sample.Address(r), "foo.com", false, 0), - valid: true, - }, - { - desc: "should prevent validate message with invalid address", - msg: sample.MsgCreateChain(r, "invalid", "", false, 0), - valid: false, - }, - { - desc: "should prevent validate message with invalid genesis hash for custom genesis", - msg: invalidGenesisHash, - valid: false, - }, - { - desc: "should prevent validate message with invalid file for GenesisConfig custom genesis", - msg: invalidConfigFile, - valid: false, - }, - { - desc: "should prevent validate message with invalid genesis chain ID", - msg: invalidGenesisChainID, - valid: false, - }, - { - desc: "should prevent chain with invalid coins structure", - msg: msgInvalidCoins, - valid: false, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - err := tc.msg.ValidateBasic() - if tc.valid { - require.NoError(t, err) - } else { - require.Error(t, err) - } - }) - } -} diff --git a/x/launch/types/msg_edit_chain.go b/x/launch/types/msg_edit_chain.go deleted file mode 100644 index d9b2f595..00000000 --- a/x/launch/types/msg_edit_chain.go +++ /dev/null @@ -1,62 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgEditChain = "edit_chain" - -var _ sdk.Msg = &MsgEditChain{} - -func NewMsgEditChain( - coordinator string, - launchID uint64, - setProject bool, - projectID uint64, - metadata []byte, -) *MsgEditChain { - return &MsgEditChain{ - Coordinator: coordinator, - LaunchID: launchID, - SetProjectID: setProject, - ProjectID: projectID, - Metadata: metadata, - } -} - -func (msg *MsgEditChain) Route() string { - return RouterKey -} - -func (msg *MsgEditChain) Type() string { - return TypeMsgEditChain -} - -func (msg *MsgEditChain) GetSigners() []sdk.AccAddress { - coordinator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{coordinator} -} - -func (msg *MsgEditChain) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgEditChain) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - if len(msg.Metadata) == 0 && !msg.SetProjectID { - return sdkerrors.Wrap(ErrCannotUpdateChain, "no value to edit") - } - - return nil -} diff --git a/x/launch/types/msg_edit_chain_test.go b/x/launch/types/msg_edit_chain_test.go deleted file mode 100644 index aaffb696..00000000 --- a/x/launch/types/msg_edit_chain_test.go +++ /dev/null @@ -1,86 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" -) - -func TestMsgEditChain_ValidateBasic(t *testing.T) { - // TODO check error types in test - launchID := uint64(0) - - for _, tc := range []struct { - desc string - msg types.MsgEditChain - valid bool - }{ - { - desc: "should validate valid message", - msg: sample.MsgEditChain(r, - sample.Address(r), - launchID, - true, - 0, - false, - ), - valid: true, - }, - { - desc: "should validate valid message with new metadata", - msg: sample.MsgEditChain(r, - sample.Address(r), - launchID, - false, - 0, - true, - ), - valid: true, - }, - { - desc: "should validate valid message with new chain ID", - msg: sample.MsgEditChain(r, - sample.Address(r), - launchID, - true, - 0, - false, - ), - valid: true, - }, - { - desc: "should prevent validate message with invalid coordinator address", - msg: sample.MsgEditChain(r, - "invalid", - launchID, - true, - 0, - false, - ), - valid: false, - }, - { - desc: "should prevent validate message with no value to edit", - msg: sample.MsgEditChain(r, - sample.Address(r), - launchID, - false, - 0, - false, - ), - valid: false, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - err := tc.msg.ValidateBasic() - if tc.valid { - require.NoError(t, err) - } else { - require.Error(t, err) - } - }) - } -} diff --git a/x/launch/types/msg_revert_launch.go b/x/launch/types/msg_revert_launch.go deleted file mode 100644 index f9060136..00000000 --- a/x/launch/types/msg_revert_launch.go +++ /dev/null @@ -1,49 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgRevertLaunch = "revert_launch" - -var _ sdk.Msg = &MsgRevertLaunch{} - -func NewMsgRevertLaunch(coordinator string, launchID uint64) *MsgRevertLaunch { - return &MsgRevertLaunch{ - Coordinator: coordinator, - LaunchID: launchID, - } -} - -func (msg *MsgRevertLaunch) Route() string { - return RouterKey -} - -func (msg *MsgRevertLaunch) Type() string { - return TypeMsgRevertLaunch -} - -func (msg *MsgRevertLaunch) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgRevertLaunch) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgRevertLaunch) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - return nil -} diff --git a/x/launch/types/msg_revert_launch_test.go b/x/launch/types/msg_revert_launch_test.go deleted file mode 100644 index ac81bcfb..00000000 --- a/x/launch/types/msg_revert_launch_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" -) - -func TestMsgRevertLaunch_ValidateBasic(t *testing.T) { - addr := sample.Address(r) - launchID := uint64(0) - - for _, tc := range []struct { - desc string - msg types.MsgRevertLaunch - valid bool - }{ - { - desc: "should validate valid message", - msg: *types.NewMsgRevertLaunch(addr, launchID), - valid: true, - }, - { - desc: "should prevent validate message with invalid coordinator address", - msg: *types.NewMsgRevertLaunch("invalid", launchID), - valid: false, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - err := tc.msg.ValidateBasic() - if tc.valid { - require.NoError(t, err) - } else { - require.Error(t, err) - } - }) - } -} diff --git a/x/launch/types/msg_send_request.go b/x/launch/types/msg_send_request.go deleted file mode 100644 index 1d2d3d20..00000000 --- a/x/launch/types/msg_send_request.go +++ /dev/null @@ -1,55 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgSendRequest = "request_send_request" - -var _ sdk.Msg = &MsgSendRequest{} - -func NewMsgSendRequest( - creator string, - launchID uint64, - content RequestContent, -) *MsgSendRequest { - return &MsgSendRequest{ - Creator: creator, - LaunchID: launchID, - Content: content, - } -} - -func (msg *MsgSendRequest) Route() string { - return RouterKey -} - -func (msg *MsgSendRequest) Type() string { - return TypeMsgSendRequest -} - -func (msg *MsgSendRequest) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgSendRequest) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgSendRequest) ValidateBasic() error { - if _, err := sdk.AccAddressFromBech32(msg.Creator); err != nil { - return sdkerrors.Wrapf(ErrInvalidRequesterAddress, err.Error()) - } - - if err := msg.Content.Validate(msg.LaunchID); err != nil { - return sdkerrors.Wrapf(ErrInvalidRequestContent, err.Error()) - } - - return nil -} diff --git a/x/launch/types/msg_send_request_test.go b/x/launch/types/msg_send_request_test.go deleted file mode 100644 index 2c0da552..00000000 --- a/x/launch/types/msg_send_request_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" -) - -func TestMsgSendRequest_ValidateBasic(t *testing.T) { - launchID := sample.Uint64(r) - - tests := []struct { - name string - msg types.MsgSendRequest - err error - }{ - { - name: "should validate valid message", - msg: types.MsgSendRequest{ - Creator: sample.Address(r), - LaunchID: launchID, - Content: sample.RequestContent(r, launchID), - }, - }, - { - name: "should prevent validate message with invalid address", - msg: types.MsgSendRequest{ - Creator: "invalid_address", - LaunchID: launchID, - Content: sample.RequestContent(r, launchID), - }, - err: types.ErrInvalidRequesterAddress, - }, - { - name: "should prevent validate message with invalid request content", - msg: types.MsgSendRequest{ - Creator: sample.Address(r), - LaunchID: sample.Uint64(r), - Content: types.NewAccountRemoval("invalid_address"), - }, - err: types.ErrInvalidRequestContent, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/launch/types/msg_settle_request.go b/x/launch/types/msg_settle_request.go deleted file mode 100644 index 56c52c68..00000000 --- a/x/launch/types/msg_settle_request.go +++ /dev/null @@ -1,51 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgSettleRequest = "settle_request" - -var _ sdk.Msg = &MsgSettleRequest{} - -func NewMsgSettleRequest(settler string, launchID uint64, requestID uint64, approve bool) *MsgSettleRequest { - return &MsgSettleRequest{ - Signer: settler, - LaunchID: launchID, - RequestID: requestID, - Approve: approve, - } -} - -func (msg *MsgSettleRequest) Route() string { - return RouterKey -} - -func (msg *MsgSettleRequest) Type() string { - return TypeMsgSettleRequest -} - -func (msg *MsgSettleRequest) GetSigners() []sdk.AccAddress { - settler, err := sdk.AccAddressFromBech32(msg.Signer) - if err != nil { - panic(err) - } - return []sdk.AccAddress{settler} -} - -func (msg *MsgSettleRequest) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgSettleRequest) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Signer) - if err != nil { - return sdkerrors.Wrapf(profile.ErrInvalidCoordAddress, err.Error()) - } - - return nil -} diff --git a/x/launch/types/msg_settle_request_test.go b/x/launch/types/msg_settle_request_test.go deleted file mode 100644 index 26e6e143..00000000 --- a/x/launch/types/msg_settle_request_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" - profile "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgSettleRequest_ValidateBasic(t *testing.T) { - launchID := uint64(0) - tests := []struct { - name string - msg types.MsgSettleRequest - err error - }{ - { - name: "should prevent validate message with invalid coordinator address", - msg: types.MsgSettleRequest{ - Signer: "invalid_address", - LaunchID: launchID, - RequestID: 10, - Approve: true, - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should validate valid message", - msg: types.MsgSettleRequest{ - Signer: sample.Address(r), - LaunchID: launchID, - RequestID: 10, - Approve: true, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/launch/types/msg_trigger_launch.go b/x/launch/types/msg_trigger_launch.go deleted file mode 100644 index 859eb44f..00000000 --- a/x/launch/types/msg_trigger_launch.go +++ /dev/null @@ -1,52 +0,0 @@ -package types - -import ( - "time" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgTriggerLaunch = "trigger_launch" - -var _ sdk.Msg = &MsgTriggerLaunch{} - -func NewMsgTriggerLaunch(coordinator string, launchID uint64, launchTime time.Time) *MsgTriggerLaunch { - return &MsgTriggerLaunch{ - Coordinator: coordinator, - LaunchID: launchID, - LaunchTime: launchTime, - } -} - -func (msg *MsgTriggerLaunch) Route() string { - return RouterKey -} - -func (msg *MsgTriggerLaunch) Type() string { - return TypeMsgTriggerLaunch -} - -func (msg *MsgTriggerLaunch) GetSigners() []sdk.AccAddress { - coordinator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{coordinator} -} - -func (msg *MsgTriggerLaunch) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgTriggerLaunch) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - return nil -} diff --git a/x/launch/types/msg_trigger_launch_test.go b/x/launch/types/msg_trigger_launch_test.go deleted file mode 100644 index 240336f4..00000000 --- a/x/launch/types/msg_trigger_launch_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" -) - -func TestMsgTriggerLaunch_ValidateBasic(t *testing.T) { - addr := sample.Address(r) - launchID := uint64(0) - - for _, tc := range []struct { - desc string - msg types.MsgTriggerLaunch - valid bool - }{ - { - desc: "should validate valid message", - msg: *types.NewMsgTriggerLaunch(addr, launchID, sample.Time(r)), - valid: true, - }, - { - desc: "should prevent validate message with invalid coordinator address", - msg: *types.NewMsgTriggerLaunch("invalid", launchID, sample.Time(r)), - valid: false, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - err := tc.msg.ValidateBasic() - if tc.valid { - require.NoError(t, err) - } else { - require.Error(t, err) - } - }) - } -} diff --git a/x/launch/types/msg_update_launch_information.go b/x/launch/types/msg_update_launch_information.go deleted file mode 100644 index bdc55ad5..00000000 --- a/x/launch/types/msg_update_launch_information.go +++ /dev/null @@ -1,78 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" - - "github.com/tendermint/spn/pkg/chainid" -) - -const TypeMsgUpdateLaunchInformation = "update_launch_information" - -var _ sdk.Msg = &MsgUpdateLaunchInformation{} - -func NewMsgUpdateLaunchInformation( - coordinator string, - launchID uint64, - genesisChainID, - sourceURL, - sourceHash string, - initialGenesis *InitialGenesis, -) *MsgUpdateLaunchInformation { - return &MsgUpdateLaunchInformation{ - Coordinator: coordinator, - LaunchID: launchID, - GenesisChainID: genesisChainID, - SourceURL: sourceURL, - SourceHash: sourceHash, - InitialGenesis: initialGenesis, - } -} - -func (msg *MsgUpdateLaunchInformation) Route() string { - return RouterKey -} - -func (msg *MsgUpdateLaunchInformation) Type() string { - return TypeMsgUpdateLaunchInformation -} - -func (msg *MsgUpdateLaunchInformation) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgUpdateLaunchInformation) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgUpdateLaunchInformation) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - if msg.GenesisChainID != "" { - if _, _, err := chainid.ParseGenesisChainID(msg.GenesisChainID); err != nil { - return sdkerrors.Wrapf(ErrInvalidGenesisChainID, err.Error()) - } - } - - if msg.GenesisChainID == "" && msg.SourceURL == "" && msg.InitialGenesis == nil { - return sdkerrors.Wrap(ErrCannotUpdateChain, "no value to edit") - } - - if msg.InitialGenesis != nil { - if err := msg.InitialGenesis.Validate(); err != nil { - return sdkerrors.Wrap(ErrInvalidInitialGenesis, err.Error()) - } - } - - return nil -} diff --git a/x/launch/types/msg_update_launch_information_test.go b/x/launch/types/msg_update_launch_information_test.go deleted file mode 100644 index d4043024..00000000 --- a/x/launch/types/msg_update_launch_information_test.go +++ /dev/null @@ -1,146 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" -) - -func TestMsgUpdateLaunchInformation_ValidateBasic(t *testing.T) { - // TODO check error types in test - launchID := uint64(0) - - msgInvalidGenesisHash := sample.MsgUpdateLaunchInformation(r, - sample.Address(r), - launchID, - false, - true, - false, - false, - ) - genesisURL := types.NewGenesisURL("foo.com", "NoHash") - msgInvalidGenesisHash.InitialGenesis = &genesisURL - - msgInvalidGenesisChainID := sample.MsgUpdateLaunchInformation(r, - sample.Address(r), - launchID, - false, - true, - false, - false, - ) - msgInvalidGenesisChainID.GenesisChainID = "invalid" - - for _, tc := range []struct { - desc string - msg types.MsgUpdateLaunchInformation - valid bool - }{ - { - desc: "should validate valid message", - msg: sample.MsgUpdateLaunchInformation(r, - sample.Address(r), - launchID, - true, - true, - true, - false, - ), - valid: true, - }, - { - desc: "should validate valid message with new genesis chain ID", - msg: sample.MsgUpdateLaunchInformation(r, - sample.Address(r), - launchID, - true, - false, - false, - false, - ), - valid: true, - }, - { - desc: "should validate valid message with new source", - msg: sample.MsgUpdateLaunchInformation(r, - sample.Address(r), - launchID, - false, - true, - false, - false, - ), - valid: true, - }, - { - desc: "should validate valid message with new genesis", - msg: sample.MsgUpdateLaunchInformation(r, - sample.Address(r), - launchID, - false, - false, - true, - false, - ), - valid: true, - }, - { - desc: "should validate valid message with new genesis with a custom genesis url", - msg: sample.MsgUpdateLaunchInformation(r, - sample.Address(r), - launchID, - false, - false, - true, - true, - ), - valid: true, - }, - { - desc: "should prevent validate message with invalid coordinator address", - msg: sample.MsgUpdateLaunchInformation(r, - "invalid", - launchID, - false, - true, - true, - false, - ), - valid: false, - }, - { - desc: "should prevent validate message with no value to edit", - msg: sample.MsgUpdateLaunchInformation(r, - sample.Address(r), - launchID, - false, - false, - false, - false, - ), - valid: false, - }, - { - desc: "should prevent validate message with invalid initial genesis hash", - msg: msgInvalidGenesisHash, - valid: false, - }, - { - desc: "should prevent validate message with invalid initial genesis chain ID", - msg: msgInvalidGenesisChainID, - valid: false, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - err := tc.msg.ValidateBasic() - if tc.valid { - require.NoError(t, err) - } else { - require.Error(t, err) - } - }) - } -} diff --git a/x/launch/types/msgs.go b/x/launch/types/msgs.go new file mode 100644 index 00000000..ff5c53dc --- /dev/null +++ b/x/launch/types/msgs.go @@ -0,0 +1,180 @@ +package types + +import ( + "time" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/pkg/chainid" +) + +func NewMsgCreateChain( + coordinator, + genesisChainID, + sourceUrl, + sourceHash string, + initialGenesis InitialGenesis, + hasProject bool, + projectID uint64, + accountBalance sdk.Coins, + metadata []byte, +) *MsgCreateChain { + return &MsgCreateChain{ + Coordinator: coordinator, + GenesisChainID: genesisChainID, + SourceURL: sourceUrl, + SourceHash: sourceHash, + InitialGenesis: initialGenesis, + HasProject: hasProject, + ProjectID: projectID, + AccountBalance: accountBalance, + Metadata: metadata, + } +} + +func (msg MsgCreateChain) Type() string { + return sdk.MsgTypeURL(&MsgCreateChain{}) +} + +func (msg *MsgCreateChain) ValidateBasic() error { + if _, _, err := chainid.ParseGenesisChainID(msg.GenesisChainID); err != nil { + return sdkerrors.Wrapf(ErrInvalidGenesisChainID, err.Error()) + } + + if err := msg.InitialGenesis.Validate(); err != nil { + return sdkerrors.Wrap(ErrInvalidInitialGenesis, err.Error()) + } + + // Coins must be valid + if !msg.AccountBalance.IsValid() { + return sdkerrors.Wrap(ErrInvalidCoins, "default account balance sdk.Coins is not valid") + } + + return nil +} + +func NewMsgEditChain( + coordinator string, + launchID uint64, + setProjectID bool, + projectID uint64, + metadata []byte, +) *MsgEditChain { + return &MsgEditChain{ + Coordinator: coordinator, + LaunchID: launchID, + SetProjectID: setProjectID, + ProjectID: projectID, + Metadata: metadata, + } +} + +func (msg MsgEditChain) Type() string { + return sdk.MsgTypeURL(&MsgEditChain{}) +} + +func (msg *MsgEditChain) ValidateBasic() error { + if len(msg.Metadata) == 0 && !msg.SetProjectID { + return sdkerrors.Wrap(ErrCannotUpdateChain, "no value to edit") + } + + return nil +} + +func NewMsgUpdateLaunchInformation( + coordinator string, + launchID uint64, + genesisChainID, + sourceURL, + sourceHash string, + initialGenesis *InitialGenesis, +) *MsgUpdateLaunchInformation { + return &MsgUpdateLaunchInformation{ + Coordinator: coordinator, + LaunchID: launchID, + GenesisChainID: genesisChainID, + SourceURL: sourceURL, + SourceHash: sourceHash, + InitialGenesis: initialGenesis, + } +} + +func (msg MsgUpdateLaunchInformation) Type() string { + return sdk.MsgTypeURL(&MsgUpdateLaunchInformation{}) +} + +func (msg *MsgUpdateLaunchInformation) ValidateBasic() error { + if msg.GenesisChainID != "" { + if _, _, err := chainid.ParseGenesisChainID(msg.GenesisChainID); err != nil { + return sdkerrors.Wrapf(ErrInvalidGenesisChainID, err.Error()) + } + } + + if msg.GenesisChainID == "" && msg.SourceURL == "" && msg.InitialGenesis == nil { + return sdkerrors.Wrap(ErrCannotUpdateChain, "no value to edit") + } + + if msg.InitialGenesis != nil { + if err := msg.InitialGenesis.Validate(); err != nil { + return sdkerrors.Wrap(ErrInvalidInitialGenesis, err.Error()) + } + } + + return nil +} + +func NewMsgSendRequest(creator string, launchID uint64, content RequestContent) *MsgSendRequest { + return &MsgSendRequest{ + Creator: creator, + LaunchID: launchID, + Content: content, + } +} + +func (msg MsgSendRequest) Type() string { + return sdk.MsgTypeURL(&MsgSendRequest{}) +} + +func (msg *MsgSendRequest) ValidateBasic() error { + if err := msg.Content.Validate(msg.LaunchID); err != nil { + return sdkerrors.Wrapf(ErrInvalidRequestContent, err.Error()) + } + return nil +} + +func NewMsgSettleRequest(signer string, launchID uint64, requestID uint64, approve bool) *MsgSettleRequest { + return &MsgSettleRequest{ + Signer: signer, + LaunchID: launchID, + RequestID: requestID, + Approve: approve, + } +} + +func (msg MsgSettleRequest) Type() string { + return sdk.MsgTypeURL(&MsgSettleRequest{}) +} + +func NewMsgTriggerLaunch(coordinator string, launchID uint64, launchTime time.Time) *MsgTriggerLaunch { + return &MsgTriggerLaunch{ + Coordinator: coordinator, + LaunchID: launchID, + LaunchTime: launchTime, + } +} + +func (msg MsgTriggerLaunch) Type() string { + return sdk.MsgTypeURL(&MsgTriggerLaunch{}) +} + +func NewMsgRevertLaunch(coordinator string, launchID uint64) *MsgRevertLaunch { + return &MsgRevertLaunch{ + Coordinator: coordinator, + LaunchID: launchID, + } +} + +func (msg MsgRevertLaunch) Type() string { + return sdk.MsgTypeURL(&MsgRevertLaunch{}) +} diff --git a/x/launch/types/msgs_test.go b/x/launch/types/msgs_test.go new file mode 100644 index 00000000..0086381d --- /dev/null +++ b/x/launch/types/msgs_test.go @@ -0,0 +1,325 @@ +package types_test + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" +) + +func TestMsgCreateChain_ValidateBasic(t *testing.T) { + invalidGenesisHash := sample.MsgCreateChain(r, sample.Address(r), "foo.com", false, 0) + invalidInitialGenesis := types.NewGenesisURL("foo.com", "NoHash") + invalidGenesisHash.InitialGenesis = invalidInitialGenesis + + invalidConfigFile := sample.MsgCreateChain(r, sample.Address(r), "foo.com", false, 0) + invalidInitialGenesis = types.NewGenesisConfig("") + invalidConfigFile.InitialGenesis = invalidInitialGenesis + + invalidGenesisChainID := sample.MsgCreateChain(r, sample.Address(r), "", false, 0) + invalidGenesisChainID.GenesisChainID = "invalid" + + msgInvalidCoins := sample.MsgCreateChain(r, sample.Address(r), "foo.com", false, 0) + msgInvalidCoins.AccountBalance = sdk.Coins{sdk.Coin{Denom: "invalid", Amount: sdkmath.NewInt(-1)}} + + for _, tc := range []struct { + desc string + msg types.MsgCreateChain + valid bool + }{ + { + desc: "should validate valid message", + msg: sample.MsgCreateChain(r, sample.Address(r), "", false, 0), + valid: true, + }, + { + desc: "should validate valid message with genesis URL", + msg: sample.MsgCreateChain(r, sample.Address(r), "foo.com", false, 0), + valid: true, + }, + { + desc: "should prevent validate message with invalid address", + msg: sample.MsgCreateChain(r, "invalid", "", false, 0), + valid: false, + }, + { + desc: "should prevent validate message with invalid genesis hash for custom genesis", + msg: invalidGenesisHash, + valid: false, + }, + { + desc: "should prevent validate message with invalid file for GenesisConfig custom genesis", + msg: invalidConfigFile, + valid: false, + }, + { + desc: "should prevent validate message with invalid genesis chain ID", + msg: invalidGenesisChainID, + valid: false, + }, + { + desc: "should prevent chain with invalid coins structure", + msg: msgInvalidCoins, + valid: false, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + err := tc.msg.ValidateBasic() + if tc.valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} + +func TestMsgEditChain_ValidateBasic(t *testing.T) { + launchID := uint64(0) + for _, tc := range []struct { + desc string + msg types.MsgEditChain + valid bool + }{ + { + desc: "should validate valid message", + msg: sample.MsgEditChain(r, + sample.Address(r), + launchID, + true, + 0, + false, + ), + valid: true, + }, + { + desc: "should validate valid message with new metadata", + msg: sample.MsgEditChain(r, + sample.Address(r), + launchID, + false, + 0, + true, + ), + valid: true, + }, + { + desc: "should validate valid message with new chain ID", + msg: sample.MsgEditChain(r, + sample.Address(r), + launchID, + true, + 0, + false, + ), + valid: true, + }, + { + desc: "should prevent validate message with invalid coordinator address", + msg: sample.MsgEditChain(r, + "invalid", + launchID, + true, + 0, + false, + ), + valid: false, + }, + { + desc: "should prevent validate message with no value to edit", + msg: sample.MsgEditChain(r, + sample.Address(r), + launchID, + false, + 0, + false, + ), + valid: false, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + err := tc.msg.ValidateBasic() + if tc.valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} + +func TestMsgSendRequest_ValidateBasic(t *testing.T) { + launchID := sample.Uint64(r) + + tests := []struct { + name string + msg types.MsgSendRequest + err error + }{ + { + name: "should validate valid message", + msg: types.MsgSendRequest{ + Creator: sample.Address(r), + LaunchID: launchID, + Content: sample.RequestContent(r, launchID), + }, + }, + { + name: "should prevent validate message with invalid request content", + msg: types.MsgSendRequest{ + Creator: sample.Address(r), + LaunchID: sample.Uint64(r), + Content: types.NewAccountRemoval("invalid_address"), + }, + err: types.ErrInvalidRequestContent, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} + +func TestMsgUpdateLaunchInformation_ValidateBasic(t *testing.T) { + launchID := uint64(0) + msgInvalidGenesisHash := sample.MsgUpdateLaunchInformation(r, + sample.Address(r), + launchID, + false, + true, + false, + false, + ) + genesisURL := types.NewGenesisURL("foo.com", "NoHash") + msgInvalidGenesisHash.InitialGenesis = &genesisURL + + msgInvalidGenesisChainID := sample.MsgUpdateLaunchInformation(r, + sample.Address(r), + launchID, + false, + true, + false, + false, + ) + msgInvalidGenesisChainID.GenesisChainID = "invalid" + + for _, tc := range []struct { + desc string + msg types.MsgUpdateLaunchInformation + valid bool + }{ + { + desc: "should validate valid message", + msg: sample.MsgUpdateLaunchInformation(r, + sample.Address(r), + launchID, + true, + true, + true, + false, + ), + valid: true, + }, + { + desc: "should validate valid message with new genesis chain ID", + msg: sample.MsgUpdateLaunchInformation(r, + sample.Address(r), + launchID, + true, + false, + false, + false, + ), + valid: true, + }, + { + desc: "should validate valid message with new source", + msg: sample.MsgUpdateLaunchInformation(r, + sample.Address(r), + launchID, + false, + true, + false, + false, + ), + valid: true, + }, + { + desc: "should validate valid message with new genesis", + msg: sample.MsgUpdateLaunchInformation(r, + sample.Address(r), + launchID, + false, + false, + true, + false, + ), + valid: true, + }, + { + desc: "should validate valid message with new genesis with a custom genesis url", + msg: sample.MsgUpdateLaunchInformation(r, + sample.Address(r), + launchID, + false, + false, + true, + true, + ), + valid: true, + }, + { + desc: "should prevent validate message with invalid coordinator address", + msg: sample.MsgUpdateLaunchInformation(r, + "invalid", + launchID, + false, + true, + true, + false, + ), + valid: false, + }, + { + desc: "should prevent validate message with no value to edit", + msg: sample.MsgUpdateLaunchInformation(r, + sample.Address(r), + launchID, + false, + false, + false, + false, + ), + valid: false, + }, + { + desc: "should prevent validate message with invalid initial genesis hash", + msg: msgInvalidGenesisHash, + valid: false, + }, + { + desc: "should prevent validate message with invalid initial genesis chain ID", + msg: msgInvalidGenesisChainID, + valid: false, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + err := tc.msg.ValidateBasic() + if tc.valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} diff --git a/x/launch/types/param_change.pb.go b/x/launch/types/param_change.pb.go new file mode 100644 index 00000000..122913c3 --- /dev/null +++ b/x/launch/types/param_change.pb.go @@ -0,0 +1,458 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: network/launch/v1/param_change.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type ParamChange struct { + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + Module string `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` + Param string `protobuf:"bytes,3,opt,name=param,proto3" json:"param,omitempty"` + Value []byte `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *ParamChange) Reset() { *m = ParamChange{} } +func (m *ParamChange) String() string { return proto.CompactTextString(m) } +func (*ParamChange) ProtoMessage() {} +func (*ParamChange) Descriptor() ([]byte, []int) { + return fileDescriptor_2dc6682ab9eafba3, []int{0} +} +func (m *ParamChange) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ParamChange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ParamChange.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ParamChange) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParamChange.Merge(m, src) +} +func (m *ParamChange) XXX_Size() int { + return m.Size() +} +func (m *ParamChange) XXX_DiscardUnknown() { + xxx_messageInfo_ParamChange.DiscardUnknown(m) +} + +var xxx_messageInfo_ParamChange proto.InternalMessageInfo + +func (m *ParamChange) GetLaunchID() uint64 { + if m != nil { + return m.LaunchID + } + return 0 +} + +func (m *ParamChange) GetModule() string { + if m != nil { + return m.Module + } + return "" +} + +func (m *ParamChange) GetParam() string { + if m != nil { + return m.Param + } + return "" +} + +func (m *ParamChange) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +func init() { + proto.RegisterType((*ParamChange)(nil), "network.launch.v1.ParamChange") +} + +func init() { + proto.RegisterFile("network/launch/v1/param_change.proto", fileDescriptor_2dc6682ab9eafba3) +} + +var fileDescriptor_2dc6682ab9eafba3 = []byte{ + // 208 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xc9, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0x49, 0x2c, 0xcd, 0x4b, 0xce, 0xd0, 0x2f, 0x33, 0xd4, 0x2f, 0x48, + 0x2c, 0x4a, 0xcc, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0x4b, 0x4f, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, + 0x17, 0x12, 0x84, 0xaa, 0xd2, 0x83, 0xa8, 0xd2, 0x2b, 0x33, 0x54, 0xca, 0xe5, 0xe2, 0x0e, 0x00, + 0x29, 0x74, 0x06, 0xab, 0x13, 0x92, 0xe2, 0xe2, 0x80, 0xc8, 0x79, 0xba, 0x48, 0x30, 0x2a, 0x30, + 0x6a, 0xb0, 0x04, 0xc1, 0xf9, 0x42, 0x62, 0x5c, 0x6c, 0xb9, 0xf9, 0x29, 0xa5, 0x39, 0xa9, 0x12, + 0x4c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x50, 0x9e, 0x90, 0x08, 0x17, 0x2b, 0xd8, 0x2e, 0x09, 0x66, + 0xb0, 0x30, 0x84, 0x03, 0x12, 0x2d, 0x4b, 0xcc, 0x29, 0x4d, 0x95, 0x60, 0x51, 0x60, 0xd4, 0xe0, + 0x09, 0x82, 0x70, 0x9c, 0x9c, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, + 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, + 0x23, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x33, 0x3d, 0x2f, 0xb3, + 0x24, 0x55, 0x1f, 0xe6, 0xa7, 0x0a, 0x98, 0xaf, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, + 0x9e, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xbc, 0x6f, 0xfc, 0xf4, 0x00, 0x00, 0x00, +} + +func (m *ParamChange) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ParamChange) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ParamChange) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Value) > 0 { + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintParamChange(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x22 + } + if len(m.Param) > 0 { + i -= len(m.Param) + copy(dAtA[i:], m.Param) + i = encodeVarintParamChange(dAtA, i, uint64(len(m.Param))) + i-- + dAtA[i] = 0x1a + } + if len(m.Module) > 0 { + i -= len(m.Module) + copy(dAtA[i:], m.Module) + i = encodeVarintParamChange(dAtA, i, uint64(len(m.Module))) + i-- + dAtA[i] = 0x12 + } + if m.LaunchID != 0 { + i = encodeVarintParamChange(dAtA, i, uint64(m.LaunchID)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintParamChange(dAtA []byte, offset int, v uint64) int { + offset -= sovParamChange(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ParamChange) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LaunchID != 0 { + n += 1 + sovParamChange(uint64(m.LaunchID)) + } + l = len(m.Module) + if l > 0 { + n += 1 + l + sovParamChange(uint64(l)) + } + l = len(m.Param) + if l > 0 { + n += 1 + l + sovParamChange(uint64(l)) + } + l = len(m.Value) + if l > 0 { + n += 1 + l + sovParamChange(uint64(l)) + } + return n +} + +func sovParamChange(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParamChange(x uint64) (n int) { + return sovParamChange(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ParamChange) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParamChange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ParamChange: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamChange: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + } + m.LaunchID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParamChange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LaunchID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Module", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParamChange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParamChange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParamChange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Module = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Param", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParamChange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParamChange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParamChange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Param = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParamChange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthParamChange + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthParamChange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) + if m.Value == nil { + m.Value = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipParamChange(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParamChange + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParamChange(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParamChange + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParamChange + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParamChange + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParamChange + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParamChange + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParamChange + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParamChange = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParamChange = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParamChange = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/launch/types/params.go b/x/launch/types/params.go index ac415d07..68dc148d 100644 --- a/x/launch/types/params.go +++ b/x/launch/types/params.go @@ -5,10 +5,7 @@ import ( "fmt" "time" - "gopkg.in/yaml.v2" - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ) var ( @@ -30,21 +27,8 @@ var ( MaxParametrableRevertDelay = time.Hour * 24 DefaultMaxMetadataLength uint64 = 2000 - - KeyLaunchTimeRange = []byte("LaunchTimeRange") - KeyRevertDelay = []byte("RevertDelay") - KeyChainCreationFee = []byte("ChainCreationFee") - KeyRequestFee = []byte("RequestFee") - KeyMaxMetadataLength = []byte("MaxMetadataLength") ) -var _ paramtypes.ParamSet = (*Params)(nil) - -// ParamKeyTable the param key table for launch module -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - // NewLaunchTimeRange creates a new LaunchTimeRange instance func NewLaunchTimeRange(minLaunchTime, maxLaunchTime time.Duration) LaunchTimeRange { return LaunchTimeRange{ @@ -83,18 +67,7 @@ func DefaultParams() Params { ) } -// ParamSetPairs get the params.ParamSet -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(KeyLaunchTimeRange, &p.LaunchTimeRange, validateLaunchTimeRange), - paramtypes.NewParamSetPair(KeyRevertDelay, &p.RevertDelay, validateRevertDelay), - paramtypes.NewParamSetPair(KeyChainCreationFee, &p.ChainCreationFee, validateFee), - paramtypes.NewParamSetPair(KeyRequestFee, &p.RequestFee, validateFee), - paramtypes.NewParamSetPair(KeyMaxMetadataLength, &p.MaxMetadataLength, validateMaxMetadataLength), - } -} - -// Validate validates the set of params +// Validate validates the set of params. func (p Params) Validate() error { if err := validateLaunchTimeRange(p.LaunchTimeRange); err != nil { return err @@ -111,12 +84,6 @@ func (p Params) Validate() error { return p.RequestFee.Validate() } -// String implements the Stringer interface. -func (p Params) String() string { - out, _ := yaml.Marshal(p) - return string(out) -} - func validateLaunchTimeRange(i interface{}) error { v, ok := i.(LaunchTimeRange) if !ok { @@ -156,7 +123,7 @@ func validateRevertDelay(i interface{}) error { return nil } -func validateFee(i interface{}) error { +func validateRequestFee(i interface{}) error { v, ok := i.(sdk.Coins) if !ok { return fmt.Errorf("invalid parameter type: %T", i) @@ -170,3 +137,13 @@ func validateMaxMetadataLength(i interface{}) error { } return nil } + +func (l *LaunchTimeRange) Equal(cmp *LaunchTimeRange) bool { + switch { + case l.GetMinLaunchTime().Nanoseconds() != cmp.GetMinLaunchTime().Nanoseconds(): + return false + case l.GetMaxLaunchTime().Nanoseconds() != cmp.GetMaxLaunchTime().Nanoseconds(): + return false + } + return true +} diff --git a/x/launch/types/params.pb.go b/x/launch/types/params.pb.go index 7b5a45ad..00746153 100644 --- a/x/launch/types/params.pb.go +++ b/x/launch/types/params.pb.go @@ -1,12 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/params.proto +// source: network/launch/v1/params.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" @@ -29,7 +31,7 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// Params defines the parameters for the staking module. +// Params defines the parameters for the module. type Params struct { LaunchTimeRange LaunchTimeRange `protobuf:"bytes,1,opt,name=launchTimeRange,proto3" json:"launchTimeRange"` RevertDelay time.Duration `protobuf:"bytes,2,opt,name=revertDelay,proto3,stdduration" json:"revertDelay"` @@ -39,10 +41,11 @@ type Params struct { MaxMetadataLength uint64 `protobuf:"varint,5,opt,name=maxMetadataLength,proto3" json:"maxMetadataLength,omitempty"` } -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_849132336bdb896c, []int{0} + return fileDescriptor_51141490c7f13780, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -115,7 +118,7 @@ func (m *LaunchTimeRange) Reset() { *m = LaunchTimeRange{} } func (m *LaunchTimeRange) String() string { return proto.CompactTextString(m) } func (*LaunchTimeRange) ProtoMessage() {} func (*LaunchTimeRange) Descriptor() ([]byte, []int) { - return fileDescriptor_849132336bdb896c, []int{1} + return fileDescriptor_51141490c7f13780, []int{1} } func (m *LaunchTimeRange) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -159,44 +162,93 @@ func (m *LaunchTimeRange) GetMaxLaunchTime() time.Duration { } func init() { - proto.RegisterType((*Params)(nil), "spn.launch.Params") - proto.RegisterType((*LaunchTimeRange)(nil), "spn.launch.LaunchTimeRange") -} - -func init() { proto.RegisterFile("spn/launch/params.proto", fileDescriptor_849132336bdb896c) } - -var fileDescriptor_849132336bdb896c = []byte{ - // 433 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x93, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0xc7, 0x7d, 0xad, 0xa9, 0xd0, 0x55, 0xa8, 0x60, 0x21, 0x61, 0x8a, 0x64, 0x47, 0x5d, 0xc8, - 0x00, 0x77, 0x2a, 0x6c, 0x8c, 0x6e, 0x41, 0x42, 0x14, 0x09, 0x59, 0x4c, 0x30, 0x9d, 0xed, 0x87, - 0x7d, 0x22, 0xbe, 0x33, 0x77, 0xe7, 0x2a, 0xfd, 0x12, 0x88, 0x09, 0x75, 0x44, 0x2c, 0x48, 0x7c, - 0x92, 0x8e, 0x1d, 0x99, 0x12, 0x94, 0x7c, 0x0b, 0x26, 0xe4, 0xb3, 0xa3, 0x38, 0xc9, 0x12, 0x26, - 0x26, 0xdb, 0xf7, 0xde, 0xff, 0xff, 0x7e, 0xef, 0x9d, 0x1f, 0xbe, 0xa7, 0x2b, 0x41, 0x47, 0xac, - 0x16, 0x69, 0x41, 0x2b, 0xa6, 0x58, 0xa9, 0x49, 0xa5, 0xa4, 0x91, 0x1e, 0xd6, 0x95, 0x20, 0x6d, - 0xe0, 0xf0, 0x6e, 0x2e, 0x73, 0x69, 0x8f, 0x69, 0xf3, 0xd6, 0x66, 0x1c, 0x06, 0xa9, 0xd4, 0xa5, - 0xd4, 0x34, 0x61, 0x1a, 0xe8, 0xf9, 0x71, 0x02, 0x86, 0x1d, 0xd3, 0x54, 0x72, 0xb1, 0x88, 0xe7, - 0x52, 0xe6, 0x23, 0xa0, 0xf6, 0x2b, 0xa9, 0x3f, 0xd0, 0xac, 0x56, 0xcc, 0x70, 0xd9, 0xc5, 0x8f, - 0x3e, 0xbb, 0x78, 0xef, 0x8d, 0x2d, 0xe9, 0xbd, 0xc2, 0x07, 0x6d, 0xa9, 0xb7, 0xbc, 0x84, 0x98, - 0x89, 0x1c, 0x7c, 0x34, 0x40, 0xc3, 0xfd, 0x27, 0x0f, 0xc8, 0x12, 0x83, 0x9c, 0xad, 0xa6, 0x44, - 0xee, 0xd5, 0x24, 0x74, 0xe2, 0x75, 0xa5, 0xf7, 0x1c, 0xef, 0x2b, 0x38, 0x07, 0x65, 0x4e, 0x61, - 0xc4, 0x2e, 0xfc, 0x1d, 0x6b, 0x74, 0x9f, 0xb4, 0x34, 0x64, 0x41, 0x43, 0x4e, 0x3b, 0x9a, 0xe8, - 0x66, 0x63, 0x73, 0x39, 0x0d, 0x51, 0xdc, 0xd7, 0x79, 0xdf, 0x11, 0xbe, 0x9d, 0x16, 0x8c, 0x8b, - 0x13, 0x05, 0x36, 0xf1, 0x05, 0x80, 0xbf, 0x3b, 0xd8, 0xb5, 0x66, 0x6d, 0xeb, 0xa4, 0x69, 0x9d, - 0x74, 0xad, 0x93, 0x13, 0xc9, 0x45, 0xf4, 0xbe, 0x31, 0xfb, 0x33, 0x09, 0x1f, 0xe6, 0xdc, 0x14, - 0x75, 0x42, 0x52, 0x59, 0xd2, 0x6e, 0x4e, 0xed, 0xe3, 0xb1, 0xce, 0x3e, 0x52, 0x73, 0x51, 0x81, - 0xb6, 0x82, 0x9f, 0xd3, 0x70, 0xb8, 0x65, 0xaa, 0x8e, 0x37, 0x78, 0xbc, 0xaf, 0x08, 0x63, 0x05, - 0x9f, 0x6a, 0xd0, 0xa6, 0xc1, 0x73, 0xff, 0x2b, 0x5e, 0x8f, 0xc4, 0x7b, 0x84, 0xef, 0x94, 0x6c, - 0xfc, 0x1a, 0x0c, 0xcb, 0x98, 0x61, 0x67, 0x20, 0x72, 0x53, 0xf8, 0x37, 0x06, 0x68, 0xe8, 0xc6, - 0x9b, 0x81, 0x67, 0xee, 0xe5, 0xb7, 0xd0, 0x39, 0xfa, 0x81, 0xf0, 0xc1, 0xda, 0x1d, 0x7b, 0x2f, - 0xf1, 0xad, 0x92, 0x8b, 0xe5, 0x69, 0xf7, 0x5f, 0x6c, 0x75, 0x9d, 0xab, 0x4a, 0x6b, 0xc5, 0xc6, - 0x3d, 0xab, 0x9d, 0x7f, 0xb1, 0xea, 0x2b, 0xa3, 0xe8, 0x6a, 0x16, 0xa0, 0xeb, 0x59, 0x80, 0x7e, - 0xcf, 0x02, 0xf4, 0x65, 0x1e, 0x38, 0xd7, 0xf3, 0xc0, 0xf9, 0x35, 0x0f, 0x9c, 0x77, 0xfd, 0x69, - 0x19, 0x10, 0x19, 0xa8, 0x92, 0x0b, 0x43, 0x9b, 0x2d, 0x1b, 0x2f, 0xf6, 0xcc, 0xce, 0x2c, 0xd9, - 0xb3, 0xf5, 0x9e, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x56, 0x7c, 0x98, 0x82, 0x03, 0x00, - 0x00, -} + proto.RegisterType((*Params)(nil), "network.launch.v1.Params") + proto.RegisterType((*LaunchTimeRange)(nil), "network.launch.v1.LaunchTimeRange") +} + +func init() { proto.RegisterFile("network/launch/v1/params.proto", fileDescriptor_51141490c7f13780) } + +var fileDescriptor_51141490c7f13780 = []byte{ + // 491 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x92, 0x31, 0x6f, 0xd3, 0x40, + 0x14, 0xc7, 0x73, 0x6d, 0xa8, 0xd0, 0x15, 0x54, 0x62, 0x21, 0x91, 0x76, 0x70, 0xa2, 0x2c, 0x44, + 0x11, 0xdc, 0x29, 0xb0, 0x31, 0xba, 0x05, 0x09, 0xa9, 0x48, 0xc8, 0x62, 0x82, 0xa1, 0x3a, 0x3b, + 0x8f, 0xcb, 0xa9, 0xf1, 0x5d, 0xea, 0x3b, 0x87, 0xe4, 0x2b, 0x30, 0x31, 0x21, 0xc4, 0xc4, 0x06, + 0x62, 0xca, 0xc8, 0x37, 0xa0, 0x63, 0x47, 0xa6, 0x16, 0x25, 0x43, 0xf8, 0x0c, 0x4c, 0xc8, 0xe7, + 0x8b, 0x70, 0x9b, 0x81, 0x32, 0x74, 0xb1, 0xfd, 0xee, 0xbd, 0xf7, 0xf7, 0xcf, 0x7f, 0xff, 0xb1, + 0x2f, 0xc1, 0xbc, 0x51, 0xe9, 0x21, 0x1d, 0xb0, 0x4c, 0xc6, 0x7d, 0x3a, 0xea, 0xd2, 0x21, 0x4b, + 0x59, 0xa2, 0xc9, 0x30, 0x55, 0x46, 0x79, 0x35, 0xd7, 0x27, 0x45, 0x9f, 0x8c, 0xba, 0x3b, 0x35, + 0x96, 0x08, 0xa9, 0xa8, 0xbd, 0x16, 0x53, 0x3b, 0x7e, 0xac, 0x74, 0xa2, 0x34, 0x8d, 0x98, 0x06, + 0x3a, 0xea, 0x46, 0x60, 0x58, 0x97, 0xc6, 0x4a, 0x48, 0xd7, 0xdf, 0x2e, 0xfa, 0x07, 0xb6, 0xa2, + 0x45, 0xe1, 0x5a, 0xb7, 0xb9, 0xe2, 0xaa, 0x38, 0xcf, 0x9f, 0x96, 0x82, 0x5c, 0x29, 0x3e, 0x00, + 0x6a, 0xab, 0x28, 0x7b, 0x4d, 0x7b, 0x59, 0xca, 0x8c, 0x50, 0x4e, 0xb0, 0xf5, 0xbd, 0x8a, 0x37, + 0x9e, 0x5b, 0x4e, 0x2f, 0xc4, 0x5b, 0x05, 0xdb, 0x0b, 0x91, 0x40, 0xc8, 0x24, 0x87, 0x3a, 0x6a, + 0xa2, 0xf6, 0xe6, 0x83, 0x16, 0x59, 0x61, 0x27, 0xfb, 0xe7, 0x27, 0x83, 0xea, 0xf1, 0x69, 0xa3, + 0x12, 0x5e, 0x14, 0xf0, 0x1e, 0xe3, 0xcd, 0x14, 0x46, 0x90, 0x9a, 0x3d, 0x18, 0xb0, 0x49, 0x7d, + 0xcd, 0xea, 0x6d, 0x93, 0x02, 0x8a, 0x2c, 0xa1, 0xc8, 0x9e, 0x83, 0x0a, 0xae, 0xe7, 0x32, 0x1f, + 0xce, 0x1a, 0x28, 0x2c, 0xef, 0x79, 0xdf, 0x10, 0xbe, 0x15, 0xf7, 0x99, 0x90, 0xbb, 0x29, 0xd8, + 0xc1, 0x27, 0x00, 0xf5, 0xf5, 0xe6, 0xba, 0x15, 0x73, 0x2e, 0xe4, 0x96, 0x11, 0x67, 0x19, 0xd9, + 0x55, 0x42, 0x06, 0x47, 0xb9, 0xd8, 0xef, 0xd3, 0xc6, 0x5d, 0x2e, 0x4c, 0x3f, 0x8b, 0x48, 0xac, + 0x12, 0x67, 0x99, 0xbb, 0xdd, 0xd7, 0xbd, 0x43, 0x6a, 0x26, 0x43, 0xd0, 0x76, 0xe1, 0xeb, 0x59, + 0xa3, 0x7d, 0xc9, 0x51, 0xfd, 0x71, 0x31, 0xed, 0xdc, 0x18, 0x00, 0x67, 0xf1, 0xe4, 0x20, 0xff, + 0x3f, 0xfa, 0xcb, 0x62, 0xda, 0x41, 0xe1, 0x0a, 0xa5, 0xf7, 0x1e, 0x61, 0x9c, 0xc2, 0x51, 0x06, + 0xda, 0xe4, 0xd0, 0xd5, 0x7f, 0x41, 0xbf, 0xba, 0x42, 0xe8, 0xb0, 0x44, 0xe2, 0xdd, 0xc3, 0xb5, + 0x84, 0x8d, 0x9f, 0x81, 0x61, 0x3d, 0x66, 0xd8, 0x3e, 0x48, 0x6e, 0xfa, 0xf5, 0x6b, 0x4d, 0xd4, + 0xae, 0x86, 0xab, 0x8d, 0x47, 0xcd, 0x5f, 0x9f, 0x1a, 0xe8, 0xed, 0x62, 0xda, 0xb9, 0xb3, 0xcc, + 0xf9, 0x78, 0x99, 0xf4, 0x22, 0x3e, 0xad, 0xcf, 0x08, 0x6f, 0x5d, 0x48, 0x85, 0xf7, 0x14, 0xdf, + 0x4c, 0x84, 0xfc, 0x7b, 0xea, 0x02, 0x75, 0xa9, 0x00, 0x9c, 0xdf, 0xb4, 0x52, 0x6c, 0x5c, 0x92, + 0x5a, 0xfb, 0x1f, 0xa9, 0xf2, 0x66, 0x10, 0x1c, 0xcf, 0x7c, 0x74, 0x32, 0xf3, 0xd1, 0xcf, 0x99, + 0x8f, 0xde, 0xcd, 0xfd, 0xca, 0xc9, 0xdc, 0xaf, 0xfc, 0x98, 0xfb, 0x95, 0x97, 0x65, 0x27, 0x05, + 0x97, 0xc2, 0x00, 0x5d, 0xf9, 0x5c, 0xeb, 0x67, 0xb4, 0x61, 0xdf, 0xf7, 0xf0, 0x4f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x1f, 0xad, 0x82, 0xea, 0xf7, 0x03, 0x00, 0x00, +} + +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.LaunchTimeRange.Equal(&that1.LaunchTimeRange) { + return false + } + if this.RevertDelay != that1.RevertDelay { + return false + } + if len(this.ChainCreationFee) != len(that1.ChainCreationFee) { + return false + } + for i := range this.ChainCreationFee { + if !this.ChainCreationFee[i].Equal(&that1.ChainCreationFee[i]) { + return false + } + } + if len(this.RequestFee) != len(that1.RequestFee) { + return false + } + for i := range this.RequestFee { + if !this.RequestFee[i].Equal(&that1.RequestFee[i]) { + return false + } + } + if this.MaxMetadataLength != that1.MaxMetadataLength { + return false + } + return true +} func (m *Params) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) diff --git a/x/launch/types/params_test.go b/x/launch/types/params_test.go deleted file mode 100644 index ef15516d..00000000 --- a/x/launch/types/params_test.go +++ /dev/null @@ -1,224 +0,0 @@ -package types - -import ( - "errors" - "fmt" - "math/rand" - "testing" - "time" - - sdkmath "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/stretchr/testify/require" -) - -func TestParamsValidate(t *testing.T) { - tests := []struct { - name string - params Params - err error - }{ - { - name: "should prevent validate params with invalid launch time range", - params: NewParams( - DefaultMaxLaunchTime, - DefaultMinLaunchTime, - DefaultRevertDelay, - DefaultFee, - DefaultFee, - DefaultMaxMetadataLength, - ), - err: errors.New("MinLaunchTime can't be higher than MaxLaunchTime"), - }, - { - name: "should validate valid params", - params: NewParams( - DefaultMinLaunchTime, - DefaultMaxLaunchTime, - DefaultRevertDelay, - DefaultFee, - DefaultFee, - DefaultMaxMetadataLength, - ), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.params.Validate() - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateLaunchTimeRange(t *testing.T) { - tests := []struct { - name string - launchTimeRange interface{} - err error - }{ - { - name: "should prevent validate launch time range with invalid interface", - launchTimeRange: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "should prevent validate launch time range where min is negative", - launchTimeRange: NewLaunchTimeRange(-1, 1), - err: errors.New("MinLaunchTime can't be negative"), - }, - { - name: "should prevent validate launch time range where max is too high", - launchTimeRange: NewLaunchTimeRange(1, MaxParametrableLaunchTime+1), - err: errors.New("max parametrable launch time reached"), - }, - { - name: "should prevent validate launch time range where max lower than min", - launchTimeRange: NewLaunchTimeRange(10, 1), - err: errors.New("MinLaunchTime can't be higher than MaxLaunchTime"), - }, - { - name: "should validate launch time range with max launch time", - launchTimeRange: NewLaunchTimeRange(1, MaxParametrableLaunchTime), - }, - { - name: "should validate valid launch time range", - launchTimeRange: NewLaunchTimeRange(0, time.Hour*24), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateLaunchTimeRange(tt.launchTimeRange) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateRevertDelay(t *testing.T) { - tests := []struct { - name string - revertDelay interface{} - err error - }{ - { - name: "should prevent validate revert delay with invalid interface", - revertDelay: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "should prevent validate revert delay too high", - revertDelay: MaxParametrableRevertDelay + 1, - err: errors.New("max parametrable revert delay reached"), - }, - { - name: "should prevent validate revert delay not positive", - revertDelay: time.Duration(0), - err: errors.New("revert delay parameter must be positive"), - }, - { - name: "should validate max revert delay", - revertDelay: MaxParametrableRevertDelay, - }, - { - name: "should validate valid revert delay", - revertDelay: time.Minute, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateRevertDelay(tt.revertDelay) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateFee(t *testing.T) { - tests := []struct { - name string - fee interface{} - err error - }{ - { - name: "should prevent validate creation fee with invalid interface", - fee: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "should prevent validate creation fee with invalid coin", - fee: sdk.Coins{sdk.Coin{Denom: "foo", Amount: sdkmath.NewInt(-1)}}, - err: errors.New("coin -1foo amount is not positive"), - }, - { - name: "should validate empty fee", - fee: DefaultFee, - }, - { - name: "should validate valid fee", - fee: sdk.NewCoins( - sdk.NewInt64Coin("foo", rand.Int63n(1000)+1), - sdk.NewInt64Coin("bar", rand.Int63n(1000)+1), - ), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateFee(tt.fee) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateMaxMetadataLength(t *testing.T) { - tests := []struct { - name string - maxMetadataLength interface{} - err error - }{ - { - name: "invalid interface", - maxMetadataLength: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "invalid number type", - maxMetadataLength: 1000, - err: fmt.Errorf("invalid parameter type: int"), - }, - { - name: "valid param", - maxMetadataLength: uint64(1000), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateMaxMetadataLength(tt.maxMetadataLength) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/launch/types/peer_test.go b/x/launch/types/peer_test.go index 5097429c..4c0e84c5 100644 --- a/x/launch/types/peer_test.go +++ b/x/launch/types/peer_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" ) func TestPeer_Validate(t *testing.T) { diff --git a/x/launch/types/query.pb.go b/x/launch/types/query.pb.go index e36f3f2e..ec16cdc6 100644 --- a/x/launch/types/query.pb.go +++ b/x/launch/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/query.proto +// source: network/launch/v1/query.proto package types @@ -8,6 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -31,6 +32,89 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + type QueryGetChainRequest struct { LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` } @@ -39,7 +123,7 @@ func (m *QueryGetChainRequest) Reset() { *m = QueryGetChainRequest{} } func (m *QueryGetChainRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetChainRequest) ProtoMessage() {} func (*QueryGetChainRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{0} + return fileDescriptor_71e200d407e37726, []int{2} } func (m *QueryGetChainRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -76,14 +160,14 @@ func (m *QueryGetChainRequest) GetLaunchID() uint64 { } type QueryGetChainResponse struct { - Chain Chain `protobuf:"bytes,1,opt,name=chain,proto3" json:"chain"` + Chain Chain `protobuf:"bytes,1,opt,name=Chain,proto3" json:"Chain"` } func (m *QueryGetChainResponse) Reset() { *m = QueryGetChainResponse{} } func (m *QueryGetChainResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetChainResponse) ProtoMessage() {} func (*QueryGetChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{1} + return fileDescriptor_71e200d407e37726, []int{3} } func (m *QueryGetChainResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -127,7 +211,7 @@ func (m *QueryAllChainRequest) Reset() { *m = QueryAllChainRequest{} } func (m *QueryAllChainRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllChainRequest) ProtoMessage() {} func (*QueryAllChainRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{2} + return fileDescriptor_71e200d407e37726, []int{4} } func (m *QueryAllChainRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -164,7 +248,7 @@ func (m *QueryAllChainRequest) GetPagination() *query.PageRequest { } type QueryAllChainResponse struct { - Chain []Chain `protobuf:"bytes,1,rep,name=chain,proto3" json:"chain"` + Chain []Chain `protobuf:"bytes,1,rep,name=Chain,proto3" json:"Chain"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -172,7 +256,7 @@ func (m *QueryAllChainResponse) Reset() { *m = QueryAllChainResponse{} } func (m *QueryAllChainResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllChainResponse) ProtoMessage() {} func (*QueryAllChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{3} + return fileDescriptor_71e200d407e37726, []int{5} } func (m *QueryAllChainResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -224,7 +308,7 @@ func (m *QueryGetGenesisAccountRequest) Reset() { *m = QueryGetGenesisAc func (m *QueryGetGenesisAccountRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetGenesisAccountRequest) ProtoMessage() {} func (*QueryGetGenesisAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{4} + return fileDescriptor_71e200d407e37726, []int{6} } func (m *QueryGetGenesisAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -275,7 +359,7 @@ func (m *QueryGetGenesisAccountResponse) Reset() { *m = QueryGetGenesisA func (m *QueryGetGenesisAccountResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetGenesisAccountResponse) ProtoMessage() {} func (*QueryGetGenesisAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{5} + return fileDescriptor_71e200d407e37726, []int{7} } func (m *QueryGetGenesisAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -320,7 +404,7 @@ func (m *QueryAllGenesisAccountRequest) Reset() { *m = QueryAllGenesisAc func (m *QueryAllGenesisAccountRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllGenesisAccountRequest) ProtoMessage() {} func (*QueryAllGenesisAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{6} + return fileDescriptor_71e200d407e37726, []int{8} } func (m *QueryAllGenesisAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -372,7 +456,7 @@ func (m *QueryAllGenesisAccountResponse) Reset() { *m = QueryAllGenesisA func (m *QueryAllGenesisAccountResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllGenesisAccountResponse) ProtoMessage() {} func (*QueryAllGenesisAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{7} + return fileDescriptor_71e200d407e37726, []int{9} } func (m *QueryAllGenesisAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -415,23 +499,23 @@ func (m *QueryAllGenesisAccountResponse) GetPagination() *query.PageResponse { return nil } -type QueryGetVestingAccountRequest struct { +type QueryGetGenesisValidatorRequest struct { LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryGetVestingAccountRequest) Reset() { *m = QueryGetVestingAccountRequest{} } -func (m *QueryGetVestingAccountRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetVestingAccountRequest) ProtoMessage() {} -func (*QueryGetVestingAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{8} +func (m *QueryGetGenesisValidatorRequest) Reset() { *m = QueryGetGenesisValidatorRequest{} } +func (m *QueryGetGenesisValidatorRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetGenesisValidatorRequest) ProtoMessage() {} +func (*QueryGetGenesisValidatorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{10} } -func (m *QueryGetVestingAccountRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetGenesisValidatorRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetVestingAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetGenesisValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetVestingAccountRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetGenesisValidatorRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -441,48 +525,48 @@ func (m *QueryGetVestingAccountRequest) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } -func (m *QueryGetVestingAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetVestingAccountRequest.Merge(m, src) +func (m *QueryGetGenesisValidatorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetGenesisValidatorRequest.Merge(m, src) } -func (m *QueryGetVestingAccountRequest) XXX_Size() int { +func (m *QueryGetGenesisValidatorRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetVestingAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetVestingAccountRequest.DiscardUnknown(m) +func (m *QueryGetGenesisValidatorRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetGenesisValidatorRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetVestingAccountRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetGenesisValidatorRequest proto.InternalMessageInfo -func (m *QueryGetVestingAccountRequest) GetLaunchID() uint64 { +func (m *QueryGetGenesisValidatorRequest) GetLaunchID() uint64 { if m != nil { return m.LaunchID } return 0 } -func (m *QueryGetVestingAccountRequest) GetAddress() string { +func (m *QueryGetGenesisValidatorRequest) GetAddress() string { if m != nil { return m.Address } return "" } -type QueryGetVestingAccountResponse struct { - VestingAccount VestingAccount `protobuf:"bytes,1,opt,name=vestingAccount,proto3" json:"vestingAccount"` +type QueryGetGenesisValidatorResponse struct { + GenesisValidator GenesisValidator `protobuf:"bytes,1,opt,name=genesisValidator,proto3" json:"genesisValidator"` } -func (m *QueryGetVestingAccountResponse) Reset() { *m = QueryGetVestingAccountResponse{} } -func (m *QueryGetVestingAccountResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetVestingAccountResponse) ProtoMessage() {} -func (*QueryGetVestingAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{9} +func (m *QueryGetGenesisValidatorResponse) Reset() { *m = QueryGetGenesisValidatorResponse{} } +func (m *QueryGetGenesisValidatorResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetGenesisValidatorResponse) ProtoMessage() {} +func (*QueryGetGenesisValidatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{11} } -func (m *QueryGetVestingAccountResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetGenesisValidatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetVestingAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetGenesisValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetVestingAccountResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetGenesisValidatorResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -492,42 +576,42 @@ func (m *QueryGetVestingAccountResponse) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *QueryGetVestingAccountResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetVestingAccountResponse.Merge(m, src) +func (m *QueryGetGenesisValidatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetGenesisValidatorResponse.Merge(m, src) } -func (m *QueryGetVestingAccountResponse) XXX_Size() int { +func (m *QueryGetGenesisValidatorResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetVestingAccountResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetVestingAccountResponse.DiscardUnknown(m) +func (m *QueryGetGenesisValidatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetGenesisValidatorResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetVestingAccountResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetGenesisValidatorResponse proto.InternalMessageInfo -func (m *QueryGetVestingAccountResponse) GetVestingAccount() VestingAccount { +func (m *QueryGetGenesisValidatorResponse) GetGenesisValidator() GenesisValidator { if m != nil { - return m.VestingAccount + return m.GenesisValidator } - return VestingAccount{} + return GenesisValidator{} } -type QueryAllVestingAccountRequest struct { +type QueryAllGenesisValidatorRequest struct { LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllVestingAccountRequest) Reset() { *m = QueryAllVestingAccountRequest{} } -func (m *QueryAllVestingAccountRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllVestingAccountRequest) ProtoMessage() {} -func (*QueryAllVestingAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{10} +func (m *QueryAllGenesisValidatorRequest) Reset() { *m = QueryAllGenesisValidatorRequest{} } +func (m *QueryAllGenesisValidatorRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllGenesisValidatorRequest) ProtoMessage() {} +func (*QueryAllGenesisValidatorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{12} } -func (m *QueryAllVestingAccountRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllGenesisValidatorRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllVestingAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllGenesisValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllVestingAccountRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllGenesisValidatorRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -537,49 +621,49 @@ func (m *QueryAllVestingAccountRequest) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } -func (m *QueryAllVestingAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllVestingAccountRequest.Merge(m, src) +func (m *QueryAllGenesisValidatorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllGenesisValidatorRequest.Merge(m, src) } -func (m *QueryAllVestingAccountRequest) XXX_Size() int { +func (m *QueryAllGenesisValidatorRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllVestingAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllVestingAccountRequest.DiscardUnknown(m) +func (m *QueryAllGenesisValidatorRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllGenesisValidatorRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllVestingAccountRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllGenesisValidatorRequest proto.InternalMessageInfo -func (m *QueryAllVestingAccountRequest) GetLaunchID() uint64 { +func (m *QueryAllGenesisValidatorRequest) GetLaunchID() uint64 { if m != nil { return m.LaunchID } return 0 } -func (m *QueryAllVestingAccountRequest) GetPagination() *query.PageRequest { +func (m *QueryAllGenesisValidatorRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllVestingAccountResponse struct { - VestingAccount []VestingAccount `protobuf:"bytes,1,rep,name=vestingAccount,proto3" json:"vestingAccount"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryAllGenesisValidatorResponse struct { + GenesisValidator []GenesisValidator `protobuf:"bytes,1,rep,name=genesisValidator,proto3" json:"genesisValidator"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllVestingAccountResponse) Reset() { *m = QueryAllVestingAccountResponse{} } -func (m *QueryAllVestingAccountResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllVestingAccountResponse) ProtoMessage() {} -func (*QueryAllVestingAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{11} +func (m *QueryAllGenesisValidatorResponse) Reset() { *m = QueryAllGenesisValidatorResponse{} } +func (m *QueryAllGenesisValidatorResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllGenesisValidatorResponse) ProtoMessage() {} +func (*QueryAllGenesisValidatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{13} } -func (m *QueryAllVestingAccountResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllGenesisValidatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllVestingAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllGenesisValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllVestingAccountResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllGenesisValidatorResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -589,49 +673,49 @@ func (m *QueryAllVestingAccountResponse) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *QueryAllVestingAccountResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllVestingAccountResponse.Merge(m, src) +func (m *QueryAllGenesisValidatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllGenesisValidatorResponse.Merge(m, src) } -func (m *QueryAllVestingAccountResponse) XXX_Size() int { +func (m *QueryAllGenesisValidatorResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllVestingAccountResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllVestingAccountResponse.DiscardUnknown(m) +func (m *QueryAllGenesisValidatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllGenesisValidatorResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllVestingAccountResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllGenesisValidatorResponse proto.InternalMessageInfo -func (m *QueryAllVestingAccountResponse) GetVestingAccount() []VestingAccount { +func (m *QueryAllGenesisValidatorResponse) GetGenesisValidator() []GenesisValidator { if m != nil { - return m.VestingAccount + return m.GenesisValidator } return nil } -func (m *QueryAllVestingAccountResponse) GetPagination() *query.PageResponse { +func (m *QueryAllGenesisValidatorResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } return nil } -type QueryGetGenesisValidatorRequest struct { +type QueryGetVestingAccountRequest struct { LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryGetGenesisValidatorRequest) Reset() { *m = QueryGetGenesisValidatorRequest{} } -func (m *QueryGetGenesisValidatorRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetGenesisValidatorRequest) ProtoMessage() {} -func (*QueryGetGenesisValidatorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{12} +func (m *QueryGetVestingAccountRequest) Reset() { *m = QueryGetVestingAccountRequest{} } +func (m *QueryGetVestingAccountRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetVestingAccountRequest) ProtoMessage() {} +func (*QueryGetVestingAccountRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{14} } -func (m *QueryGetGenesisValidatorRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetVestingAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetGenesisValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetVestingAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetGenesisValidatorRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetVestingAccountRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -641,48 +725,48 @@ func (m *QueryGetGenesisValidatorRequest) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (m *QueryGetGenesisValidatorRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetGenesisValidatorRequest.Merge(m, src) +func (m *QueryGetVestingAccountRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetVestingAccountRequest.Merge(m, src) } -func (m *QueryGetGenesisValidatorRequest) XXX_Size() int { +func (m *QueryGetVestingAccountRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetGenesisValidatorRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetGenesisValidatorRequest.DiscardUnknown(m) +func (m *QueryGetVestingAccountRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetVestingAccountRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetGenesisValidatorRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetVestingAccountRequest proto.InternalMessageInfo -func (m *QueryGetGenesisValidatorRequest) GetLaunchID() uint64 { +func (m *QueryGetVestingAccountRequest) GetLaunchID() uint64 { if m != nil { return m.LaunchID } return 0 } -func (m *QueryGetGenesisValidatorRequest) GetAddress() string { +func (m *QueryGetVestingAccountRequest) GetAddress() string { if m != nil { return m.Address } return "" } -type QueryGetGenesisValidatorResponse struct { - GenesisValidator GenesisValidator `protobuf:"bytes,1,opt,name=genesisValidator,proto3" json:"genesisValidator"` +type QueryGetVestingAccountResponse struct { + VestingAccount VestingAccount `protobuf:"bytes,1,opt,name=vestingAccount,proto3" json:"vestingAccount"` } -func (m *QueryGetGenesisValidatorResponse) Reset() { *m = QueryGetGenesisValidatorResponse{} } -func (m *QueryGetGenesisValidatorResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetGenesisValidatorResponse) ProtoMessage() {} -func (*QueryGetGenesisValidatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{13} +func (m *QueryGetVestingAccountResponse) Reset() { *m = QueryGetVestingAccountResponse{} } +func (m *QueryGetVestingAccountResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetVestingAccountResponse) ProtoMessage() {} +func (*QueryGetVestingAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{15} } -func (m *QueryGetGenesisValidatorResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetVestingAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetGenesisValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetVestingAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetGenesisValidatorResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetVestingAccountResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -692,42 +776,42 @@ func (m *QueryGetGenesisValidatorResponse) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *QueryGetGenesisValidatorResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetGenesisValidatorResponse.Merge(m, src) +func (m *QueryGetVestingAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetVestingAccountResponse.Merge(m, src) } -func (m *QueryGetGenesisValidatorResponse) XXX_Size() int { +func (m *QueryGetVestingAccountResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetGenesisValidatorResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetGenesisValidatorResponse.DiscardUnknown(m) +func (m *QueryGetVestingAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetVestingAccountResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetGenesisValidatorResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetVestingAccountResponse proto.InternalMessageInfo -func (m *QueryGetGenesisValidatorResponse) GetGenesisValidator() GenesisValidator { +func (m *QueryGetVestingAccountResponse) GetVestingAccount() VestingAccount { if m != nil { - return m.GenesisValidator + return m.VestingAccount } - return GenesisValidator{} + return VestingAccount{} } -type QueryAllGenesisValidatorRequest struct { +type QueryAllVestingAccountRequest struct { LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllGenesisValidatorRequest) Reset() { *m = QueryAllGenesisValidatorRequest{} } -func (m *QueryAllGenesisValidatorRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllGenesisValidatorRequest) ProtoMessage() {} -func (*QueryAllGenesisValidatorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{14} +func (m *QueryAllVestingAccountRequest) Reset() { *m = QueryAllVestingAccountRequest{} } +func (m *QueryAllVestingAccountRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllVestingAccountRequest) ProtoMessage() {} +func (*QueryAllVestingAccountRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{16} } -func (m *QueryAllGenesisValidatorRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllVestingAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllGenesisValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllVestingAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllGenesisValidatorRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllVestingAccountRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -737,49 +821,49 @@ func (m *QueryAllGenesisValidatorRequest) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (m *QueryAllGenesisValidatorRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllGenesisValidatorRequest.Merge(m, src) +func (m *QueryAllVestingAccountRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllVestingAccountRequest.Merge(m, src) } -func (m *QueryAllGenesisValidatorRequest) XXX_Size() int { +func (m *QueryAllVestingAccountRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllGenesisValidatorRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllGenesisValidatorRequest.DiscardUnknown(m) +func (m *QueryAllVestingAccountRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllVestingAccountRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllGenesisValidatorRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllVestingAccountRequest proto.InternalMessageInfo -func (m *QueryAllGenesisValidatorRequest) GetLaunchID() uint64 { +func (m *QueryAllVestingAccountRequest) GetLaunchID() uint64 { if m != nil { return m.LaunchID } return 0 } -func (m *QueryAllGenesisValidatorRequest) GetPagination() *query.PageRequest { +func (m *QueryAllVestingAccountRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllGenesisValidatorResponse struct { - GenesisValidator []GenesisValidator `protobuf:"bytes,1,rep,name=genesisValidator,proto3" json:"genesisValidator"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryAllVestingAccountResponse struct { + VestingAccount []VestingAccount `protobuf:"bytes,1,rep,name=vestingAccount,proto3" json:"vestingAccount"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllGenesisValidatorResponse) Reset() { *m = QueryAllGenesisValidatorResponse{} } -func (m *QueryAllGenesisValidatorResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllGenesisValidatorResponse) ProtoMessage() {} -func (*QueryAllGenesisValidatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{15} +func (m *QueryAllVestingAccountResponse) Reset() { *m = QueryAllVestingAccountResponse{} } +func (m *QueryAllVestingAccountResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllVestingAccountResponse) ProtoMessage() {} +func (*QueryAllVestingAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_71e200d407e37726, []int{17} } -func (m *QueryAllGenesisValidatorResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllVestingAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllGenesisValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllVestingAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllGenesisValidatorResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllVestingAccountResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -789,26 +873,26 @@ func (m *QueryAllGenesisValidatorResponse) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *QueryAllGenesisValidatorResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllGenesisValidatorResponse.Merge(m, src) +func (m *QueryAllVestingAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllVestingAccountResponse.Merge(m, src) } -func (m *QueryAllGenesisValidatorResponse) XXX_Size() int { +func (m *QueryAllVestingAccountResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllGenesisValidatorResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllGenesisValidatorResponse.DiscardUnknown(m) +func (m *QueryAllVestingAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllVestingAccountResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllGenesisValidatorResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllVestingAccountResponse proto.InternalMessageInfo -func (m *QueryAllGenesisValidatorResponse) GetGenesisValidator() []GenesisValidator { +func (m *QueryAllVestingAccountResponse) GetVestingAccount() []VestingAccount { if m != nil { - return m.GenesisValidator + return m.VestingAccount } return nil } -func (m *QueryAllGenesisValidatorResponse) GetPagination() *query.PageResponse { +func (m *QueryAllVestingAccountResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } @@ -824,7 +908,7 @@ func (m *QueryGetRequestRequest) Reset() { *m = QueryGetRequestRequest{} func (m *QueryGetRequestRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetRequestRequest) ProtoMessage() {} func (*QueryGetRequestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{16} + return fileDescriptor_71e200d407e37726, []int{18} } func (m *QueryGetRequestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -868,14 +952,14 @@ func (m *QueryGetRequestRequest) GetRequestID() uint64 { } type QueryGetRequestResponse struct { - Request Request `protobuf:"bytes,1,opt,name=request,proto3" json:"request"` + Request Request `protobuf:"bytes,1,opt,name=Request,proto3" json:"Request"` } func (m *QueryGetRequestResponse) Reset() { *m = QueryGetRequestResponse{} } func (m *QueryGetRequestResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetRequestResponse) ProtoMessage() {} func (*QueryGetRequestResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{17} + return fileDescriptor_71e200d407e37726, []int{19} } func (m *QueryGetRequestResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -920,7 +1004,7 @@ func (m *QueryAllRequestRequest) Reset() { *m = QueryAllRequestRequest{} func (m *QueryAllRequestRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllRequestRequest) ProtoMessage() {} func (*QueryAllRequestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{18} + return fileDescriptor_71e200d407e37726, []int{20} } func (m *QueryAllRequestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -964,7 +1048,7 @@ func (m *QueryAllRequestRequest) GetPagination() *query.PageRequest { } type QueryAllRequestResponse struct { - Request []Request `protobuf:"bytes,1,rep,name=request,proto3" json:"request"` + Request []Request `protobuf:"bytes,1,rep,name=Request,proto3" json:"Request"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -972,7 +1056,7 @@ func (m *QueryAllRequestResponse) Reset() { *m = QueryAllRequestResponse func (m *QueryAllRequestResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllRequestResponse) ProtoMessage() {} func (*QueryAllRequestResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{19} + return fileDescriptor_71e200d407e37726, []int{21} } func (m *QueryAllRequestResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1015,88 +1099,6 @@ func (m *QueryAllRequestResponse) GetPagination() *query.PageResponse { return nil } -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { -} - -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{20} -} -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) -} -func (m *QueryParamsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo - -// QueryParamsResponse is response type for the Query/Params RPC method. -type QueryParamsResponse struct { - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` -} - -func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } -func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryParamsResponse) ProtoMessage() {} -func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{21} -} -func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsResponse.Merge(m, src) -} -func (m *QueryParamsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo - -func (m *QueryParamsResponse) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - type QueryAllParamChangeRequest struct { LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` @@ -1106,7 +1108,7 @@ func (m *QueryAllParamChangeRequest) Reset() { *m = QueryAllParamChangeR func (m *QueryAllParamChangeRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllParamChangeRequest) ProtoMessage() {} func (*QueryAllParamChangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{22} + return fileDescriptor_71e200d407e37726, []int{22} } func (m *QueryAllParamChangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1150,15 +1152,15 @@ func (m *QueryAllParamChangeRequest) GetPagination() *query.PageRequest { } type QueryAllParamChangeResponse struct { - ParamChanges []ParamChange `protobuf:"bytes,1,rep,name=paramChanges,proto3" json:"paramChanges"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + ParamChange []ParamChange `protobuf:"bytes,1,rep,name=paramChange,proto3" json:"paramChange"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (m *QueryAllParamChangeResponse) Reset() { *m = QueryAllParamChangeResponse{} } func (m *QueryAllParamChangeResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllParamChangeResponse) ProtoMessage() {} func (*QueryAllParamChangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1032ea7977e72b4c, []int{23} + return fileDescriptor_71e200d407e37726, []int{23} } func (m *QueryAllParamChangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1187,9 +1189,9 @@ func (m *QueryAllParamChangeResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAllParamChangeResponse proto.InternalMessageInfo -func (m *QueryAllParamChangeResponse) GetParamChanges() []ParamChange { +func (m *QueryAllParamChangeResponse) GetParamChange() []ParamChange { if m != nil { - return m.ParamChanges + return m.ParamChange } return nil } @@ -1202,106 +1204,109 @@ func (m *QueryAllParamChangeResponse) GetPagination() *query.PageResponse { } func init() { - proto.RegisterType((*QueryGetChainRequest)(nil), "spn.launch.QueryGetChainRequest") - proto.RegisterType((*QueryGetChainResponse)(nil), "spn.launch.QueryGetChainResponse") - proto.RegisterType((*QueryAllChainRequest)(nil), "spn.launch.QueryAllChainRequest") - proto.RegisterType((*QueryAllChainResponse)(nil), "spn.launch.QueryAllChainResponse") - proto.RegisterType((*QueryGetGenesisAccountRequest)(nil), "spn.launch.QueryGetGenesisAccountRequest") - proto.RegisterType((*QueryGetGenesisAccountResponse)(nil), "spn.launch.QueryGetGenesisAccountResponse") - proto.RegisterType((*QueryAllGenesisAccountRequest)(nil), "spn.launch.QueryAllGenesisAccountRequest") - proto.RegisterType((*QueryAllGenesisAccountResponse)(nil), "spn.launch.QueryAllGenesisAccountResponse") - proto.RegisterType((*QueryGetVestingAccountRequest)(nil), "spn.launch.QueryGetVestingAccountRequest") - proto.RegisterType((*QueryGetVestingAccountResponse)(nil), "spn.launch.QueryGetVestingAccountResponse") - proto.RegisterType((*QueryAllVestingAccountRequest)(nil), "spn.launch.QueryAllVestingAccountRequest") - proto.RegisterType((*QueryAllVestingAccountResponse)(nil), "spn.launch.QueryAllVestingAccountResponse") - proto.RegisterType((*QueryGetGenesisValidatorRequest)(nil), "spn.launch.QueryGetGenesisValidatorRequest") - proto.RegisterType((*QueryGetGenesisValidatorResponse)(nil), "spn.launch.QueryGetGenesisValidatorResponse") - proto.RegisterType((*QueryAllGenesisValidatorRequest)(nil), "spn.launch.QueryAllGenesisValidatorRequest") - proto.RegisterType((*QueryAllGenesisValidatorResponse)(nil), "spn.launch.QueryAllGenesisValidatorResponse") - proto.RegisterType((*QueryGetRequestRequest)(nil), "spn.launch.QueryGetRequestRequest") - proto.RegisterType((*QueryGetRequestResponse)(nil), "spn.launch.QueryGetRequestResponse") - proto.RegisterType((*QueryAllRequestRequest)(nil), "spn.launch.QueryAllRequestRequest") - proto.RegisterType((*QueryAllRequestResponse)(nil), "spn.launch.QueryAllRequestResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "spn.launch.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "spn.launch.QueryParamsResponse") - proto.RegisterType((*QueryAllParamChangeRequest)(nil), "spn.launch.QueryAllParamChangeRequest") - proto.RegisterType((*QueryAllParamChangeResponse)(nil), "spn.launch.QueryAllParamChangeResponse") -} - -func init() { proto.RegisterFile("spn/launch/query.proto", fileDescriptor_1032ea7977e72b4c) } - -var fileDescriptor_1032ea7977e72b4c = []byte{ - // 1116 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x98, 0xcf, 0x6f, 0xdc, 0x44, - 0x14, 0xc7, 0x33, 0xdd, 0xfc, 0x68, 0x1f, 0x28, 0x6a, 0x27, 0xa1, 0x09, 0x26, 0x75, 0xc2, 0x00, - 0x4d, 0xd3, 0x90, 0x35, 0x49, 0x14, 0x21, 0x54, 0x45, 0x68, 0x93, 0x92, 0xd0, 0x4b, 0x55, 0x16, - 0xa9, 0x07, 0x0e, 0x54, 0xce, 0xc6, 0x72, 0x8c, 0x1c, 0xdb, 0xb1, 0xbd, 0x11, 0x55, 0x89, 0x84, - 0x40, 0x48, 0xdc, 0x00, 0x71, 0x80, 0x7f, 0x80, 0x03, 0x12, 0x9c, 0xe8, 0x0d, 0x89, 0x73, 0x8f, - 0x15, 0x5c, 0x38, 0x21, 0x94, 0xf0, 0x87, 0xa0, 0x9d, 0x79, 0xde, 0xf5, 0x78, 0xc7, 0x5e, 0xef, - 0x6a, 0x93, 0x5b, 0x76, 0xe6, 0xcd, 0xbc, 0xcf, 0xf7, 0xfb, 0xde, 0xda, 0x6f, 0x03, 0xd7, 0xa3, - 0xc0, 0x33, 0x5c, 0xb3, 0xe9, 0x35, 0x0e, 0x8c, 0xa3, 0xa6, 0x15, 0x3e, 0xae, 0x06, 0xa1, 0x1f, - 0xfb, 0x14, 0xa2, 0xc0, 0xab, 0x8a, 0x75, 0x6d, 0xda, 0xf6, 0x6d, 0x9f, 0x2f, 0x1b, 0xad, 0xbf, - 0x44, 0x84, 0x36, 0x67, 0xfb, 0xbe, 0xed, 0x5a, 0x86, 0x19, 0x38, 0x86, 0xe9, 0x79, 0x7e, 0x6c, - 0xc6, 0x8e, 0xef, 0x45, 0xb8, 0x7b, 0xbb, 0xe1, 0x47, 0x87, 0x7e, 0x64, 0xec, 0x99, 0x91, 0x25, - 0x2e, 0x36, 0x8e, 0x57, 0xf7, 0xac, 0xd8, 0x5c, 0x35, 0x02, 0xd3, 0x76, 0x3c, 0x1e, 0x8c, 0xb1, - 0x2f, 0x8b, 0xd8, 0x47, 0x22, 0x85, 0xf8, 0x80, 0x5b, 0xb3, 0x29, 0xbc, 0xd0, 0x3a, 0x6a, 0x5a, - 0x51, 0x8c, 0x3b, 0x0b, 0xa9, 0x9d, 0x63, 0x2b, 0x8a, 0x1d, 0xcf, 0x7e, 0x64, 0x36, 0x1a, 0x7e, - 0xd3, 0x53, 0x45, 0xd8, 0x96, 0x67, 0x45, 0x4e, 0x94, 0x89, 0x60, 0x8a, 0x88, 0x63, 0xd3, 0x75, - 0xf6, 0xcd, 0xd8, 0x0f, 0x31, 0x26, 0x6d, 0x50, 0xe3, 0xc0, 0x74, 0x12, 0xe8, 0x99, 0xd4, 0x7a, - 0x60, 0x86, 0xe6, 0x21, 0x22, 0xb3, 0x35, 0x98, 0xfe, 0xa0, 0xa5, 0x77, 0xd7, 0x8a, 0xb7, 0x5b, - 0xf1, 0x75, 0x81, 0x4d, 0x35, 0xb8, 0x2c, 0xc2, 0xef, 0xdd, 0x9d, 0x25, 0x0b, 0xe4, 0xd6, 0x68, - 0xbd, 0xfd, 0x99, 0xed, 0xc0, 0x4b, 0x99, 0x33, 0x51, 0xe0, 0x7b, 0x91, 0x45, 0x57, 0x60, 0x8c, - 0x27, 0xe5, 0x27, 0x5e, 0x58, 0xbb, 0x56, 0xed, 0x94, 0xa5, 0xca, 0x23, 0xb7, 0x46, 0x9f, 0xfd, - 0x33, 0x3f, 0x52, 0x17, 0x51, 0xec, 0x63, 0xcc, 0x5d, 0x73, 0x5d, 0x29, 0xf7, 0x0e, 0x40, 0xc7, - 0x75, 0xbc, 0xeb, 0x66, 0x15, 0x9d, 0x6e, 0x95, 0xa8, 0x2a, 0x6a, 0x8f, 0x25, 0xaa, 0x3e, 0x30, - 0x6d, 0x0b, 0xcf, 0xd6, 0x53, 0x27, 0xd9, 0x37, 0x04, 0x41, 0x3b, 0x09, 0xba, 0x41, 0x2b, 0xbd, - 0x41, 0xe9, 0xae, 0x04, 0x74, 0x89, 0x03, 0x2d, 0xf6, 0x04, 0x12, 0xb9, 0x24, 0x22, 0x1f, 0x6e, - 0x24, 0xce, 0xed, 0x8a, 0x0a, 0xd6, 0x44, 0x89, 0x4b, 0xd8, 0x4e, 0xd7, 0x60, 0xc2, 0xdc, 0xdf, - 0x0f, 0xad, 0x28, 0xe2, 0x08, 0x57, 0xb6, 0x66, 0xff, 0x7c, 0xba, 0x32, 0x8d, 0x14, 0x35, 0xb1, - 0xf3, 0x61, 0x1c, 0x3a, 0x9e, 0x5d, 0x4f, 0x02, 0xd9, 0x27, 0xa0, 0xe7, 0x25, 0x44, 0x2b, 0xde, - 0x87, 0x49, 0x5b, 0xda, 0x41, 0xc3, 0xb5, 0xb4, 0x27, 0xf2, 0x59, 0x34, 0x27, 0x73, 0x8e, 0x7d, - 0x49, 0x50, 0x5d, 0xcd, 0x75, 0xfb, 0x57, 0xb7, 0xa3, 0xf0, 0x78, 0x90, 0xa2, 0xff, 0x46, 0x50, - 0xb2, 0x82, 0xa2, 0x40, 0x72, 0x65, 0x10, 0xc9, 0xe7, 0xd2, 0x18, 0x0f, 0xc5, 0xe3, 0xe1, 0xe2, - 0x1a, 0x23, 0x9b, 0xb0, 0xe3, 0xd2, 0xb1, 0xb4, 0xa3, 0x6a, 0x0c, 0xf9, 0x6c, 0xe2, 0x92, 0x7c, - 0x4e, 0x6a, 0x8c, 0xfe, 0xd5, 0x9d, 0x47, 0x63, 0xf4, 0x21, 0xb9, 0x32, 0x88, 0xe4, 0xe1, 0x35, - 0xc6, 0x11, 0xcc, 0x67, 0xbe, 0xc0, 0x0f, 0x93, 0x47, 0xfe, 0x79, 0xb5, 0x46, 0x08, 0x0b, 0xf9, - 0x29, 0xd1, 0xa9, 0xfb, 0x70, 0xd5, 0xce, 0xec, 0x61, 0x7b, 0xcc, 0x29, 0xbe, 0x44, 0xed, 0x18, - 0x74, 0xab, 0xeb, 0x2c, 0xfb, 0x8a, 0xa0, 0xce, 0xce, 0xb7, 0xb6, 0x2f, 0x9d, 0xc3, 0x6a, 0x92, - 0xdf, 0x09, 0x8a, 0x57, 0x72, 0x14, 0x8a, 0xaf, 0x0c, 0x2a, 0x7e, 0x78, 0xcd, 0x52, 0x87, 0xeb, - 0x49, 0xe5, 0x12, 0x71, 0x25, 0xbc, 0x9b, 0x83, 0x2b, 0x38, 0xac, 0xdc, 0xbb, 0xcb, 0xb3, 0x8f, - 0xd6, 0x3b, 0x0b, 0xec, 0x3e, 0xcc, 0x74, 0xdd, 0x89, 0x3e, 0xac, 0xc3, 0x04, 0xc6, 0x61, 0xed, - 0xa7, 0xd2, 0xf2, 0x31, 0x1a, 0x55, 0x27, 0x91, 0xec, 0x33, 0x64, 0xac, 0xb9, 0x6e, 0x1f, 0x8c, - 0xc3, 0xaa, 0xef, 0x0f, 0x04, 0xe5, 0xa4, 0xd3, 0xab, 0xe4, 0x54, 0xca, 0xc9, 0x19, 0x5e, 0xed, - 0xa6, 0x81, 0x72, 0xb0, 0x07, 0x7c, 0x3a, 0xc3, 0x6c, 0x6c, 0x17, 0xa6, 0xa4, 0x55, 0x44, 0x7d, - 0x0b, 0xc6, 0xc5, 0x14, 0x87, 0xc6, 0xd3, 0x34, 0xa9, 0x88, 0x45, 0x50, 0x8c, 0x63, 0x9f, 0x13, - 0xd0, 0x12, 0xe1, 0x3c, 0x60, 0xfb, 0xc0, 0xf4, 0xda, 0x1e, 0x5d, 0x88, 0xf7, 0x3f, 0x13, 0x78, - 0x45, 0x89, 0x80, 0xa2, 0x6a, 0xf0, 0x62, 0xd0, 0x59, 0x8e, 0xb0, 0x08, 0x33, 0x5d, 0xd2, 0xc4, - 0x3e, 0xea, 0x93, 0x8e, 0x0c, 0xad, 0x1a, 0x6b, 0x7f, 0x4c, 0xc2, 0x18, 0x67, 0xa5, 0x27, 0x30, - 0xc6, 0x27, 0x42, 0xba, 0x90, 0x06, 0x51, 0xcd, 0xcc, 0xda, 0xab, 0x05, 0x11, 0x22, 0x07, 0x33, - 0xbe, 0xf8, 0xeb, 0xbf, 0xef, 0x2f, 0x2d, 0xd1, 0x45, 0x23, 0xb6, 0xbc, 0x7d, 0x2b, 0x3c, 0x74, - 0xbc, 0xd8, 0xc8, 0xce, 0xec, 0xc6, 0x93, 0xc4, 0xfb, 0x13, 0xda, 0x84, 0xcb, 0xfc, 0x86, 0x9a, - 0xeb, 0x2a, 0x08, 0x32, 0x93, 0xb3, 0x82, 0x20, 0x3b, 0xfa, 0xb2, 0xd7, 0x39, 0x81, 0x4e, 0xe7, - 0x8a, 0x08, 0xe8, 0x2f, 0x04, 0x26, 0xe5, 0x09, 0x88, 0x2e, 0xa9, 0xd4, 0x29, 0xe7, 0x3c, 0xed, - 0x76, 0x99, 0x50, 0xe4, 0xd9, 0xe6, 0x3c, 0x9b, 0xf4, 0x4e, 0x0e, 0x4f, 0xe6, 0xb7, 0x50, 0xca, - 0x1b, 0xe3, 0x09, 0xbe, 0xb1, 0x4e, 0xe8, 0x4f, 0x04, 0xae, 0xc9, 0xf7, 0xb7, 0xfc, 0x5a, 0x52, - 0xb9, 0x51, 0x96, 0x38, 0x77, 0x7c, 0x64, 0xef, 0x70, 0xe2, 0x75, 0xba, 0xda, 0x37, 0x31, 0xb7, - 0x55, 0x9e, 0x1f, 0xd4, 0xb6, 0x2a, 0xa7, 0x24, 0xb5, 0xad, 0xea, 0x51, 0xa6, 0xa7, 0xad, 0x99, - 0x1f, 0xa1, 0xf9, 0xb6, 0xca, 0xf7, 0xe7, 0xda, 0x5a, 0x96, 0x38, 0x77, 0xf8, 0xea, 0x69, 0x6b, - 0x3e, 0x31, 0x7d, 0x4a, 0xe0, 0x6a, 0xf6, 0x6d, 0x4b, 0x97, 0x0b, 0x9a, 0x30, 0x3b, 0x5b, 0x68, - 0x6f, 0x96, 0x0b, 0x46, 0xd4, 0xf7, 0x38, 0xea, 0xbb, 0x74, 0xb3, 0x47, 0x07, 0xb4, 0x7f, 0x9d, - 0xab, 0xed, 0xfd, 0x95, 0xc0, 0x54, 0x36, 0x47, 0xcb, 0xe0, 0xe5, 0x82, 0x66, 0x2c, 0x41, 0x5e, - 0x30, 0xba, 0xb0, 0x3b, 0x9c, 0x7c, 0x83, 0xae, 0x0f, 0x40, 0x4e, 0x7f, 0x24, 0x30, 0x99, 0x7a, - 0x02, 0xb7, 0x50, 0x6f, 0xaa, 0xb2, 0x77, 0xbf, 0x5f, 0xb4, 0xc5, 0x9e, 0x71, 0x08, 0xb8, 0xc1, - 0x01, 0x0d, 0xba, 0x92, 0x03, 0x98, 0x7a, 0xdc, 0xa7, 0xd1, 0xbe, 0x23, 0x30, 0x91, 0xbc, 0xcb, - 0x98, 0xaa, 0x96, 0xf2, 0xac, 0xa1, 0xbd, 0x56, 0x18, 0x83, 0x2c, 0x9b, 0x9c, 0xe5, 0x6d, 0xba, - 0x91, 0xc3, 0x82, 0x33, 0x80, 0x54, 0xdc, 0xf6, 0xe0, 0x74, 0x42, 0xbf, 0x26, 0x00, 0x78, 0x65, - 0xcb, 0x2a, 0xa6, 0xb2, 0xa0, 0x27, 0x56, 0xf7, 0x9c, 0xc2, 0x56, 0x39, 0xd6, 0x32, 0x5d, 0x2a, - 0x8d, 0x45, 0x03, 0x18, 0x17, 0x53, 0x01, 0xd5, 0xbb, 0x32, 0x48, 0x03, 0x87, 0x36, 0x9f, 0xbb, - 0x8f, 0xd9, 0xdf, 0xe0, 0xd9, 0xe7, 0xe9, 0x8d, 0xa2, 0x02, 0x45, 0x5b, 0x5b, 0xcf, 0x4e, 0x75, - 0xf2, 0xfc, 0x54, 0x27, 0xff, 0x9e, 0xea, 0xe4, 0xdb, 0x33, 0x7d, 0xe4, 0xf9, 0x99, 0x3e, 0xf2, - 0xf7, 0x99, 0x3e, 0xf2, 0xd1, 0x2d, 0xdb, 0x89, 0x0f, 0x9a, 0x7b, 0xd5, 0x86, 0x7f, 0x98, 0xbd, - 0xe2, 0xd3, 0xe4, 0x92, 0xf8, 0x71, 0x60, 0x45, 0x7b, 0xe3, 0xfc, 0x5f, 0x54, 0xeb, 0xff, 0x07, - 0x00, 0x00, 0xff, 0xff, 0x58, 0x7c, 0x3b, 0x07, 0xf6, 0x13, 0x00, 0x00, + proto.RegisterType((*QueryParamsRequest)(nil), "network.launch.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "network.launch.v1.QueryParamsResponse") + proto.RegisterType((*QueryGetChainRequest)(nil), "network.launch.v1.QueryGetChainRequest") + proto.RegisterType((*QueryGetChainResponse)(nil), "network.launch.v1.QueryGetChainResponse") + proto.RegisterType((*QueryAllChainRequest)(nil), "network.launch.v1.QueryAllChainRequest") + proto.RegisterType((*QueryAllChainResponse)(nil), "network.launch.v1.QueryAllChainResponse") + proto.RegisterType((*QueryGetGenesisAccountRequest)(nil), "network.launch.v1.QueryGetGenesisAccountRequest") + proto.RegisterType((*QueryGetGenesisAccountResponse)(nil), "network.launch.v1.QueryGetGenesisAccountResponse") + proto.RegisterType((*QueryAllGenesisAccountRequest)(nil), "network.launch.v1.QueryAllGenesisAccountRequest") + proto.RegisterType((*QueryAllGenesisAccountResponse)(nil), "network.launch.v1.QueryAllGenesisAccountResponse") + proto.RegisterType((*QueryGetGenesisValidatorRequest)(nil), "network.launch.v1.QueryGetGenesisValidatorRequest") + proto.RegisterType((*QueryGetGenesisValidatorResponse)(nil), "network.launch.v1.QueryGetGenesisValidatorResponse") + proto.RegisterType((*QueryAllGenesisValidatorRequest)(nil), "network.launch.v1.QueryAllGenesisValidatorRequest") + proto.RegisterType((*QueryAllGenesisValidatorResponse)(nil), "network.launch.v1.QueryAllGenesisValidatorResponse") + proto.RegisterType((*QueryGetVestingAccountRequest)(nil), "network.launch.v1.QueryGetVestingAccountRequest") + proto.RegisterType((*QueryGetVestingAccountResponse)(nil), "network.launch.v1.QueryGetVestingAccountResponse") + proto.RegisterType((*QueryAllVestingAccountRequest)(nil), "network.launch.v1.QueryAllVestingAccountRequest") + proto.RegisterType((*QueryAllVestingAccountResponse)(nil), "network.launch.v1.QueryAllVestingAccountResponse") + proto.RegisterType((*QueryGetRequestRequest)(nil), "network.launch.v1.QueryGetRequestRequest") + proto.RegisterType((*QueryGetRequestResponse)(nil), "network.launch.v1.QueryGetRequestResponse") + proto.RegisterType((*QueryAllRequestRequest)(nil), "network.launch.v1.QueryAllRequestRequest") + proto.RegisterType((*QueryAllRequestResponse)(nil), "network.launch.v1.QueryAllRequestResponse") + proto.RegisterType((*QueryAllParamChangeRequest)(nil), "network.launch.v1.QueryAllParamChangeRequest") + proto.RegisterType((*QueryAllParamChangeResponse)(nil), "network.launch.v1.QueryAllParamChangeResponse") +} + +func init() { proto.RegisterFile("network/launch/v1/query.proto", fileDescriptor_71e200d407e37726) } + +var fileDescriptor_71e200d407e37726 = []byte{ + // 1165 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x98, 0xcd, 0x6f, 0x1b, 0x45, + 0x18, 0xc6, 0x33, 0x75, 0x9a, 0x36, 0x6f, 0x24, 0x4a, 0xa6, 0x06, 0xd2, 0x25, 0xdd, 0x84, 0xed, + 0x47, 0x3e, 0xaa, 0xee, 0x62, 0x87, 0x0a, 0x41, 0x89, 0x90, 0x9d, 0x92, 0xa8, 0x12, 0x88, 0xe2, + 0xaa, 0x3d, 0x70, 0x20, 0xda, 0x38, 0xab, 0xcd, 0x8a, 0xcd, 0xae, 0xe3, 0x5d, 0x1b, 0xa2, 0x12, + 0x89, 0xcf, 0x2b, 0x42, 0x42, 0x82, 0x13, 0x1c, 0x38, 0x71, 0x42, 0x1c, 0x7a, 0x42, 0x70, 0x41, + 0x42, 0xea, 0xb1, 0x82, 0x0b, 0x27, 0x84, 0x12, 0x24, 0xfe, 0x04, 0xae, 0xc8, 0x33, 0xef, 0xc6, + 0xde, 0x8f, 0xd9, 0x8f, 0xc6, 0xe9, 0xa5, 0xaa, 0x67, 0xde, 0x99, 0xf9, 0x3d, 0xcf, 0xbc, 0x59, + 0x3f, 0x6b, 0x38, 0xef, 0x18, 0xfe, 0x7b, 0x6e, 0xfb, 0x5d, 0xcd, 0xd6, 0x3b, 0x4e, 0x73, 0x4b, + 0xeb, 0x56, 0xb4, 0x9d, 0x8e, 0xd1, 0xde, 0x55, 0x5b, 0x6d, 0xd7, 0x77, 0xe9, 0x24, 0x4e, 0xab, + 0x7c, 0x5a, 0xed, 0x56, 0xa4, 0x49, 0x7d, 0xdb, 0x72, 0x5c, 0x8d, 0xfd, 0xcb, 0xab, 0xa4, 0xc5, + 0xa6, 0xeb, 0x6d, 0xbb, 0x9e, 0xb6, 0xa1, 0x7b, 0x06, 0x5f, 0xae, 0x75, 0x2b, 0x1b, 0x86, 0xaf, + 0x57, 0xb4, 0x96, 0x6e, 0x5a, 0x8e, 0xee, 0x5b, 0xae, 0x83, 0xb5, 0xe7, 0x78, 0xed, 0x3a, 0xfb, + 0xa4, 0xf1, 0x0f, 0x38, 0x55, 0x36, 0x5d, 0xd3, 0xe5, 0xe3, 0xbd, 0xff, 0xe1, 0xe8, 0xb4, 0xe9, + 0xba, 0xa6, 0x6d, 0x68, 0x7a, 0xcb, 0xd2, 0x74, 0xc7, 0x71, 0x7d, 0xb6, 0x5b, 0xb0, 0x26, 0x81, + 0xbf, 0xb9, 0xa5, 0x5b, 0xc1, 0x69, 0x73, 0xf1, 0x69, 0xd3, 0x70, 0x0c, 0xcf, 0xf2, 0xd6, 0xf5, + 0x66, 0xd3, 0xed, 0x38, 0x3e, 0x16, 0x2e, 0x88, 0x0b, 0xbb, 0xba, 0x6d, 0x6d, 0xea, 0xbe, 0xdb, + 0xc6, 0xd2, 0x8b, 0xf1, 0xd2, 0x96, 0xde, 0xd6, 0xb7, 0xd7, 0x9b, 0x5b, 0xba, 0x63, 0x1a, 0x58, + 0x25, 0x0b, 0xaa, 0x02, 0xf0, 0x99, 0xf8, 0x7c, 0xdb, 0xd8, 0xe9, 0x18, 0x9e, 0x2f, 0x46, 0xef, + 0x1a, 0x9e, 0x6f, 0x39, 0x66, 0x18, 0x5d, 0x29, 0x03, 0x7d, 0xab, 0xe7, 0xf9, 0x2d, 0xb6, 0x7d, + 0x83, 0x6f, 0xa2, 0xdc, 0x86, 0xb3, 0xa1, 0x51, 0xaf, 0xe5, 0x3a, 0x9e, 0x41, 0x5f, 0x81, 0x31, + 0x8e, 0x31, 0x45, 0x66, 0xc9, 0xfc, 0x44, 0xf5, 0x9c, 0x1a, 0xbb, 0x61, 0x95, 0x2f, 0xa9, 0x8f, + 0x3f, 0xf8, 0x6b, 0x66, 0xe4, 0xfb, 0x7f, 0x7f, 0x5c, 0x24, 0x0d, 0x5c, 0xa3, 0x54, 0xa1, 0xcc, + 0x36, 0x5d, 0x33, 0xfc, 0x95, 0x9e, 0xcb, 0x78, 0x18, 0x95, 0xe0, 0x34, 0x5f, 0x7e, 0xf3, 0x06, + 0xdb, 0x77, 0xb4, 0x71, 0xf8, 0x59, 0x79, 0x03, 0x9e, 0x8a, 0xac, 0x41, 0x94, 0x17, 0xe0, 0x24, + 0x1b, 0x40, 0x92, 0xa9, 0x04, 0x12, 0x36, 0x5f, 0x1f, 0xed, 0x81, 0x34, 0x78, 0xb1, 0xf2, 0x0e, + 0x22, 0xd4, 0x6c, 0x3b, 0x84, 0xb0, 0x0a, 0xd0, 0xef, 0x35, 0xdc, 0xf2, 0xb2, 0x8a, 0xfd, 0xd5, + 0x6b, 0x4c, 0x95, 0xf7, 0x35, 0x36, 0xa6, 0x7a, 0x4b, 0x37, 0x0d, 0x5c, 0xdb, 0x18, 0x58, 0xa9, + 0x7c, 0x45, 0x90, 0xb7, 0x7f, 0x40, 0x9c, 0xb7, 0x94, 0x9b, 0x97, 0xae, 0x85, 0xb8, 0x4e, 0x30, + 0xae, 0xb9, 0x4c, 0x2e, 0x7e, 0x64, 0x08, 0xcc, 0x85, 0xf3, 0x81, 0x8f, 0x6b, 0xbc, 0x33, 0x6b, + 0xbc, 0x0d, 0x72, 0x5c, 0x02, 0xad, 0xc2, 0x29, 0x7d, 0x73, 0xb3, 0x6d, 0x78, 0x1e, 0x43, 0x18, + 0xaf, 0x4f, 0xfd, 0x7e, 0xff, 0x6a, 0x19, 0x29, 0x6a, 0x7c, 0xe6, 0xb6, 0xdf, 0xb6, 0x1c, 0xb3, + 0x11, 0x14, 0x2a, 0x3b, 0x20, 0x8b, 0x0e, 0x44, 0x47, 0xde, 0x84, 0x27, 0xcc, 0xd0, 0x0c, 0xfa, + 0xfe, 0x5c, 0x82, 0x35, 0xe1, 0x2d, 0xd0, 0xa3, 0xc8, 0x72, 0xe5, 0x13, 0x82, 0x22, 0x6b, 0xb6, + 0x5d, 0x5c, 0xe4, 0x6a, 0x82, 0xd5, 0x8f, 0xd2, 0x02, 0x3f, 0x11, 0x54, 0x9e, 0x40, 0x91, 0xa2, + 0xbc, 0x74, 0x04, 0xe5, 0xc3, 0x6b, 0x93, 0x1d, 0x98, 0x89, 0xdc, 0xda, 0xdd, 0xe0, 0xf9, 0x75, + 0x5c, 0x8d, 0xb2, 0x0b, 0xb3, 0xe2, 0x23, 0xd1, 0xb0, 0x3b, 0xf0, 0xa4, 0x19, 0x99, 0xc3, 0x66, + 0xb9, 0x20, 0xb6, 0xec, 0xb0, 0x14, 0x4d, 0x8b, 0x6d, 0xa1, 0x7c, 0x46, 0x50, 0x6e, 0xff, 0xaa, + 0x0a, 0xc9, 0x1d, 0x56, 0xcb, 0xfc, 0x4a, 0xd0, 0x83, 0x44, 0x8e, 0x54, 0x0f, 0x4a, 0x47, 0xf4, + 0xe0, 0x58, 0x9e, 0x30, 0x77, 0xf9, 0x37, 0xcd, 0xe3, 0x7b, 0xc2, 0x44, 0x0f, 0xec, 0xff, 0x9d, + 0x75, 0x43, 0x33, 0x29, 0x4f, 0x98, 0xf0, 0x16, 0xc1, 0xdf, 0x59, 0x78, 0x79, 0xe8, 0x09, 0x53, + 0x5c, 0xe4, 0x71, 0x3c, 0x61, 0x0a, 0x28, 0x2f, 0x1d, 0x41, 0xf9, 0xf0, 0xda, 0xa4, 0x01, 0x4f, + 0x07, 0xb7, 0x16, 0x68, 0xcb, 0x61, 0xdd, 0x34, 0x8c, 0x63, 0xbe, 0xb9, 0x79, 0x83, 0x9d, 0x3e, + 0xda, 0xe8, 0x0f, 0x28, 0x77, 0xe0, 0x99, 0xd8, 0x9e, 0x68, 0xc4, 0xcb, 0x70, 0x0a, 0x87, 0xf0, + 0xee, 0xa5, 0x04, 0x07, 0xb0, 0x02, 0xa5, 0x07, 0x0b, 0x94, 0x0f, 0x10, 0xb5, 0x66, 0xdb, 0x05, + 0x50, 0x87, 0x75, 0xcb, 0xdf, 0x12, 0x54, 0x35, 0x78, 0x7c, 0x92, 0xaa, 0x52, 0x21, 0x55, 0xc3, + 0xbb, 0xc9, 0x0f, 0x09, 0x48, 0x01, 0x20, 0x0b, 0x7d, 0x2b, 0x2c, 0xc1, 0x3e, 0x4e, 0x8f, 0x7e, + 0x20, 0xf0, 0x6c, 0x22, 0x02, 0xfa, 0xb4, 0x0a, 0x13, 0xad, 0xfe, 0x30, 0x7a, 0x25, 0x8b, 0x42, + 0x2b, 0xaf, 0x42, 0xbf, 0x06, 0x17, 0x0e, 0xcd, 0xb3, 0xea, 0x7f, 0x67, 0xe0, 0x24, 0x03, 0xa6, + 0x1f, 0x11, 0x18, 0xe3, 0x51, 0x99, 0x5e, 0x4a, 0x00, 0x8a, 0x67, 0x72, 0xe9, 0x72, 0x56, 0x19, + 0x3f, 0x4f, 0x99, 0xff, 0xf8, 0x8f, 0x7f, 0xbe, 0x3c, 0xa1, 0xd0, 0x59, 0xcd, 0x32, 0x1d, 0xcb, + 0x37, 0x34, 0xd1, 0xbb, 0x04, 0xfd, 0x9c, 0xc0, 0xe9, 0x20, 0x58, 0xd3, 0x39, 0xd1, 0xf6, 0x91, + 0xb8, 0x2e, 0xcd, 0x67, 0x17, 0x22, 0x89, 0xc6, 0x48, 0x16, 0xe8, 0x9c, 0x80, 0x84, 0xbd, 0x6b, + 0x69, 0xf7, 0x82, 0xb6, 0xd8, 0xa3, 0x9f, 0x12, 0x18, 0x7f, 0xdd, 0xf2, 0xb2, 0x88, 0x22, 0xe9, + 0x5d, 0x4c, 0x14, 0x4d, 0xe1, 0xca, 0x45, 0x46, 0x24, 0xd3, 0xe9, 0x34, 0x22, 0xfa, 0x0b, 0x81, + 0xc9, 0x58, 0x6e, 0xa5, 0xcf, 0xa7, 0xe8, 0x4e, 0x8c, 0x9b, 0x52, 0xa5, 0xc0, 0x0a, 0x04, 0x5c, + 0x61, 0x80, 0xcb, 0xf4, 0xba, 0x00, 0x30, 0xf2, 0xfe, 0x39, 0x60, 0x9e, 0x76, 0x0f, 0xbf, 0x18, + 0xf7, 0xe8, 0x7d, 0x02, 0xb4, 0x67, 0x63, 0x5e, 0x01, 0xa2, 0xbc, 0x2c, 0x16, 0x20, 0xcc, 0xb6, + 0xca, 0x4b, 0x4c, 0xc0, 0x12, 0xad, 0x14, 0x16, 0x40, 0x7f, 0x23, 0x70, 0x36, 0x21, 0x05, 0xd2, + 0x6a, 0xb6, 0x8d, 0xd1, 0xd8, 0x26, 0x2d, 0x15, 0x5a, 0x83, 0xec, 0xaf, 0x31, 0xf6, 0x57, 0xe9, + 0x72, 0x06, 0xfb, 0xe1, 0x3b, 0x7d, 0xb2, 0xfd, 0x3f, 0x13, 0x28, 0x0f, 0xd8, 0x9f, 0x43, 0x88, + 0x38, 0x7f, 0x8a, 0x85, 0xa4, 0x64, 0x45, 0xe5, 0x3a, 0x13, 0x72, 0x8d, 0x2e, 0x3d, 0x82, 0x90, + 0xa0, 0xfb, 0xc3, 0xb1, 0x20, 0xb5, 0xfb, 0x13, 0xa3, 0x50, 0x6a, 0xf7, 0x27, 0xc7, 0x96, 0xcc, + 0xee, 0x8f, 0xfc, 0x84, 0x91, 0xde, 0xfd, 0x79, 0x05, 0x88, 0xb2, 0x5c, 0x6a, 0xf7, 0x0b, 0x04, + 0x64, 0x75, 0xbf, 0x58, 0x00, 0xfd, 0x8e, 0x00, 0xf4, 0x03, 0x0c, 0x5d, 0x48, 0x71, 0x2f, 0x9c, + 0x46, 0xa4, 0xc5, 0x3c, 0xa5, 0x08, 0xb8, 0xcc, 0x00, 0x5f, 0xa4, 0xd7, 0x04, 0x80, 0x18, 0xaa, + 0x42, 0xce, 0x1e, 0x06, 0xad, 0x3d, 0xfa, 0x35, 0x81, 0x89, 0x9e, 0xb7, 0x99, 0x94, 0xb1, 0xcc, + 0x24, 0xa6, 0x8c, 0xe7, 0x1b, 0xa5, 0xc2, 0x28, 0xaf, 0xd0, 0x85, 0xdc, 0x94, 0xf4, 0x1b, 0x02, + 0x67, 0x7a, 0x64, 0x03, 0xdf, 0xe4, 0xf4, 0x6a, 0xca, 0x91, 0xf1, 0xc4, 0x22, 0xa9, 0x79, 0xcb, + 0x91, 0xf2, 0x0a, 0xa3, 0xbc, 0x44, 0x2f, 0x08, 0x28, 0x07, 0x7f, 0xd7, 0xab, 0xd7, 0x1f, 0xec, + 0xcb, 0xe4, 0xe1, 0xbe, 0x4c, 0xfe, 0xde, 0x97, 0xc9, 0x17, 0x07, 0xf2, 0xc8, 0xc3, 0x03, 0x79, + 0xe4, 0xcf, 0x03, 0x79, 0xe4, 0xed, 0x79, 0xd3, 0xf2, 0xb7, 0x3a, 0x1b, 0x6a, 0xd3, 0xdd, 0x8e, + 0x6e, 0xf4, 0x7e, 0xb0, 0x95, 0xbf, 0xdb, 0x32, 0xbc, 0x8d, 0x31, 0xf6, 0x93, 0xdd, 0xd2, 0xff, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x08, 0x6f, 0x6c, 0xe9, 0x77, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1316,30 +1321,24 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { - // Queries a chain by index. - Chain(ctx context.Context, in *QueryGetChainRequest, opts ...grpc.CallOption) (*QueryGetChainResponse, error) - // Queries a list of chain items. - ChainAll(ctx context.Context, in *QueryAllChainRequest, opts ...grpc.CallOption) (*QueryAllChainResponse, error) - // Queries a genesisAccount by index. - GenesisAccount(ctx context.Context, in *QueryGetGenesisAccountRequest, opts ...grpc.CallOption) (*QueryGetGenesisAccountResponse, error) - // Queries a list of genesisAccount items. - GenesisAccountAll(ctx context.Context, in *QueryAllGenesisAccountRequest, opts ...grpc.CallOption) (*QueryAllGenesisAccountResponse, error) - // Queries a vestingAccount by index. - VestingAccount(ctx context.Context, in *QueryGetVestingAccountRequest, opts ...grpc.CallOption) (*QueryGetVestingAccountResponse, error) - // Queries a list of vestingAccount items. - VestingAccountAll(ctx context.Context, in *QueryAllVestingAccountRequest, opts ...grpc.CallOption) (*QueryAllVestingAccountResponse, error) - // Queries a genesisValidator by index. - GenesisValidator(ctx context.Context, in *QueryGetGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryGetGenesisValidatorResponse, error) - // Queries a list of genesisValidator items. - GenesisValidatorAll(ctx context.Context, in *QueryAllGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryAllGenesisValidatorResponse, error) - // Queries a list of ParamChange items. - ParamChangeAll(ctx context.Context, in *QueryAllParamChangeRequest, opts ...grpc.CallOption) (*QueryAllParamChangeResponse, error) - // Queries a request by index. - Request(ctx context.Context, in *QueryGetRequestRequest, opts ...grpc.CallOption) (*QueryGetRequestResponse, error) - // Queries a list of request for a chain. - RequestAll(ctx context.Context, in *QueryAllRequestRequest, opts ...grpc.CallOption) (*QueryAllRequestResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of Chain items. + GetChain(ctx context.Context, in *QueryGetChainRequest, opts ...grpc.CallOption) (*QueryGetChainResponse, error) + ListChain(ctx context.Context, in *QueryAllChainRequest, opts ...grpc.CallOption) (*QueryAllChainResponse, error) + // Queries a list of GenesisAccount items. + GetGenesisAccount(ctx context.Context, in *QueryGetGenesisAccountRequest, opts ...grpc.CallOption) (*QueryGetGenesisAccountResponse, error) + ListGenesisAccount(ctx context.Context, in *QueryAllGenesisAccountRequest, opts ...grpc.CallOption) (*QueryAllGenesisAccountResponse, error) + // Queries a list of GenesisValidator items. + GetGenesisValidator(ctx context.Context, in *QueryGetGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryGetGenesisValidatorResponse, error) + ListGenesisValidator(ctx context.Context, in *QueryAllGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryAllGenesisValidatorResponse, error) + // Queries a list of VestingAccount items. + GetVestingAccount(ctx context.Context, in *QueryGetVestingAccountRequest, opts ...grpc.CallOption) (*QueryGetVestingAccountResponse, error) + ListVestingAccount(ctx context.Context, in *QueryAllVestingAccountRequest, opts ...grpc.CallOption) (*QueryAllVestingAccountResponse, error) + // Queries a list of Request items. + GetRequest(ctx context.Context, in *QueryGetRequestRequest, opts ...grpc.CallOption) (*QueryGetRequestResponse, error) + ListRequest(ctx context.Context, in *QueryAllRequestRequest, opts ...grpc.CallOption) (*QueryAllRequestResponse, error) + ListParamChange(ctx context.Context, in *QueryAllParamChangeRequest, opts ...grpc.CallOption) (*QueryAllParamChangeResponse, error) } type queryClient struct { @@ -1350,108 +1349,108 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Chain(ctx context.Context, in *QueryGetChainRequest, opts ...grpc.CallOption) (*QueryGetChainResponse, error) { - out := new(QueryGetChainResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/Chain", in, out, opts...) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ChainAll(ctx context.Context, in *QueryAllChainRequest, opts ...grpc.CallOption) (*QueryAllChainResponse, error) { - out := new(QueryAllChainResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/ChainAll", in, out, opts...) +func (c *queryClient) GetChain(ctx context.Context, in *QueryGetChainRequest, opts ...grpc.CallOption) (*QueryGetChainResponse, error) { + out := new(QueryGetChainResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/GetChain", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) GenesisAccount(ctx context.Context, in *QueryGetGenesisAccountRequest, opts ...grpc.CallOption) (*QueryGetGenesisAccountResponse, error) { - out := new(QueryGetGenesisAccountResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/GenesisAccount", in, out, opts...) +func (c *queryClient) ListChain(ctx context.Context, in *QueryAllChainRequest, opts ...grpc.CallOption) (*QueryAllChainResponse, error) { + out := new(QueryAllChainResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/ListChain", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) GenesisAccountAll(ctx context.Context, in *QueryAllGenesisAccountRequest, opts ...grpc.CallOption) (*QueryAllGenesisAccountResponse, error) { - out := new(QueryAllGenesisAccountResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/GenesisAccountAll", in, out, opts...) +func (c *queryClient) GetGenesisAccount(ctx context.Context, in *QueryGetGenesisAccountRequest, opts ...grpc.CallOption) (*QueryGetGenesisAccountResponse, error) { + out := new(QueryGetGenesisAccountResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/GetGenesisAccount", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) VestingAccount(ctx context.Context, in *QueryGetVestingAccountRequest, opts ...grpc.CallOption) (*QueryGetVestingAccountResponse, error) { - out := new(QueryGetVestingAccountResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/VestingAccount", in, out, opts...) +func (c *queryClient) ListGenesisAccount(ctx context.Context, in *QueryAllGenesisAccountRequest, opts ...grpc.CallOption) (*QueryAllGenesisAccountResponse, error) { + out := new(QueryAllGenesisAccountResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/ListGenesisAccount", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) VestingAccountAll(ctx context.Context, in *QueryAllVestingAccountRequest, opts ...grpc.CallOption) (*QueryAllVestingAccountResponse, error) { - out := new(QueryAllVestingAccountResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/VestingAccountAll", in, out, opts...) +func (c *queryClient) GetGenesisValidator(ctx context.Context, in *QueryGetGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryGetGenesisValidatorResponse, error) { + out := new(QueryGetGenesisValidatorResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/GetGenesisValidator", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) GenesisValidator(ctx context.Context, in *QueryGetGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryGetGenesisValidatorResponse, error) { - out := new(QueryGetGenesisValidatorResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/GenesisValidator", in, out, opts...) +func (c *queryClient) ListGenesisValidator(ctx context.Context, in *QueryAllGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryAllGenesisValidatorResponse, error) { + out := new(QueryAllGenesisValidatorResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/ListGenesisValidator", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) GenesisValidatorAll(ctx context.Context, in *QueryAllGenesisValidatorRequest, opts ...grpc.CallOption) (*QueryAllGenesisValidatorResponse, error) { - out := new(QueryAllGenesisValidatorResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/GenesisValidatorAll", in, out, opts...) +func (c *queryClient) GetVestingAccount(ctx context.Context, in *QueryGetVestingAccountRequest, opts ...grpc.CallOption) (*QueryGetVestingAccountResponse, error) { + out := new(QueryGetVestingAccountResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/GetVestingAccount", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ParamChangeAll(ctx context.Context, in *QueryAllParamChangeRequest, opts ...grpc.CallOption) (*QueryAllParamChangeResponse, error) { - out := new(QueryAllParamChangeResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/ParamChangeAll", in, out, opts...) +func (c *queryClient) ListVestingAccount(ctx context.Context, in *QueryAllVestingAccountRequest, opts ...grpc.CallOption) (*QueryAllVestingAccountResponse, error) { + out := new(QueryAllVestingAccountResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/ListVestingAccount", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Request(ctx context.Context, in *QueryGetRequestRequest, opts ...grpc.CallOption) (*QueryGetRequestResponse, error) { +func (c *queryClient) GetRequest(ctx context.Context, in *QueryGetRequestRequest, opts ...grpc.CallOption) (*QueryGetRequestResponse, error) { out := new(QueryGetRequestResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/Request", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/GetRequest", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) RequestAll(ctx context.Context, in *QueryAllRequestRequest, opts ...grpc.CallOption) (*QueryAllRequestResponse, error) { +func (c *queryClient) ListRequest(ctx context.Context, in *QueryAllRequestRequest, opts ...grpc.CallOption) (*QueryAllRequestResponse, error) { out := new(QueryAllRequestResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/RequestAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/ListRequest", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Query/Params", in, out, opts...) +func (c *queryClient) ListParamChange(ctx context.Context, in *QueryAllParamChangeRequest, opts ...grpc.CallOption) (*QueryAllParamChangeResponse, error) { + out := new(QueryAllParamChangeResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Query/ListParamChange", in, out, opts...) if err != nil { return nil, err } @@ -1460,348 +1459,398 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . // QueryServer is the server API for Query service. type QueryServer interface { - // Queries a chain by index. - Chain(context.Context, *QueryGetChainRequest) (*QueryGetChainResponse, error) - // Queries a list of chain items. - ChainAll(context.Context, *QueryAllChainRequest) (*QueryAllChainResponse, error) - // Queries a genesisAccount by index. - GenesisAccount(context.Context, *QueryGetGenesisAccountRequest) (*QueryGetGenesisAccountResponse, error) - // Queries a list of genesisAccount items. - GenesisAccountAll(context.Context, *QueryAllGenesisAccountRequest) (*QueryAllGenesisAccountResponse, error) - // Queries a vestingAccount by index. - VestingAccount(context.Context, *QueryGetVestingAccountRequest) (*QueryGetVestingAccountResponse, error) - // Queries a list of vestingAccount items. - VestingAccountAll(context.Context, *QueryAllVestingAccountRequest) (*QueryAllVestingAccountResponse, error) - // Queries a genesisValidator by index. - GenesisValidator(context.Context, *QueryGetGenesisValidatorRequest) (*QueryGetGenesisValidatorResponse, error) - // Queries a list of genesisValidator items. - GenesisValidatorAll(context.Context, *QueryAllGenesisValidatorRequest) (*QueryAllGenesisValidatorResponse, error) - // Queries a list of ParamChange items. - ParamChangeAll(context.Context, *QueryAllParamChangeRequest) (*QueryAllParamChangeResponse, error) - // Queries a request by index. - Request(context.Context, *QueryGetRequestRequest) (*QueryGetRequestResponse, error) - // Queries a list of request for a chain. - RequestAll(context.Context, *QueryAllRequestRequest) (*QueryAllRequestResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of Chain items. + GetChain(context.Context, *QueryGetChainRequest) (*QueryGetChainResponse, error) + ListChain(context.Context, *QueryAllChainRequest) (*QueryAllChainResponse, error) + // Queries a list of GenesisAccount items. + GetGenesisAccount(context.Context, *QueryGetGenesisAccountRequest) (*QueryGetGenesisAccountResponse, error) + ListGenesisAccount(context.Context, *QueryAllGenesisAccountRequest) (*QueryAllGenesisAccountResponse, error) + // Queries a list of GenesisValidator items. + GetGenesisValidator(context.Context, *QueryGetGenesisValidatorRequest) (*QueryGetGenesisValidatorResponse, error) + ListGenesisValidator(context.Context, *QueryAllGenesisValidatorRequest) (*QueryAllGenesisValidatorResponse, error) + // Queries a list of VestingAccount items. + GetVestingAccount(context.Context, *QueryGetVestingAccountRequest) (*QueryGetVestingAccountResponse, error) + ListVestingAccount(context.Context, *QueryAllVestingAccountRequest) (*QueryAllVestingAccountResponse, error) + // Queries a list of Request items. + GetRequest(context.Context, *QueryGetRequestRequest) (*QueryGetRequestResponse, error) + ListRequest(context.Context, *QueryAllRequestRequest) (*QueryAllRequestResponse, error) + ListParamChange(context.Context, *QueryAllParamChangeRequest) (*QueryAllParamChangeResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Chain(ctx context.Context, req *QueryGetChainRequest) (*QueryGetChainResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Chain not implemented") +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) ChainAll(ctx context.Context, req *QueryAllChainRequest) (*QueryAllChainResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChainAll not implemented") +func (*UnimplementedQueryServer) GetChain(ctx context.Context, req *QueryGetChainRequest) (*QueryGetChainResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChain not implemented") } -func (*UnimplementedQueryServer) GenesisAccount(ctx context.Context, req *QueryGetGenesisAccountRequest) (*QueryGetGenesisAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GenesisAccount not implemented") +func (*UnimplementedQueryServer) ListChain(ctx context.Context, req *QueryAllChainRequest) (*QueryAllChainResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListChain not implemented") } -func (*UnimplementedQueryServer) GenesisAccountAll(ctx context.Context, req *QueryAllGenesisAccountRequest) (*QueryAllGenesisAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GenesisAccountAll not implemented") +func (*UnimplementedQueryServer) GetGenesisAccount(ctx context.Context, req *QueryGetGenesisAccountRequest) (*QueryGetGenesisAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGenesisAccount not implemented") } -func (*UnimplementedQueryServer) VestingAccount(ctx context.Context, req *QueryGetVestingAccountRequest) (*QueryGetVestingAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VestingAccount not implemented") +func (*UnimplementedQueryServer) ListGenesisAccount(ctx context.Context, req *QueryAllGenesisAccountRequest) (*QueryAllGenesisAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListGenesisAccount not implemented") } -func (*UnimplementedQueryServer) VestingAccountAll(ctx context.Context, req *QueryAllVestingAccountRequest) (*QueryAllVestingAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VestingAccountAll not implemented") +func (*UnimplementedQueryServer) GetGenesisValidator(ctx context.Context, req *QueryGetGenesisValidatorRequest) (*QueryGetGenesisValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGenesisValidator not implemented") } -func (*UnimplementedQueryServer) GenesisValidator(ctx context.Context, req *QueryGetGenesisValidatorRequest) (*QueryGetGenesisValidatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GenesisValidator not implemented") +func (*UnimplementedQueryServer) ListGenesisValidator(ctx context.Context, req *QueryAllGenesisValidatorRequest) (*QueryAllGenesisValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListGenesisValidator not implemented") } -func (*UnimplementedQueryServer) GenesisValidatorAll(ctx context.Context, req *QueryAllGenesisValidatorRequest) (*QueryAllGenesisValidatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GenesisValidatorAll not implemented") +func (*UnimplementedQueryServer) GetVestingAccount(ctx context.Context, req *QueryGetVestingAccountRequest) (*QueryGetVestingAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetVestingAccount not implemented") } -func (*UnimplementedQueryServer) ParamChangeAll(ctx context.Context, req *QueryAllParamChangeRequest) (*QueryAllParamChangeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ParamChangeAll not implemented") +func (*UnimplementedQueryServer) ListVestingAccount(ctx context.Context, req *QueryAllVestingAccountRequest) (*QueryAllVestingAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListVestingAccount not implemented") } -func (*UnimplementedQueryServer) Request(ctx context.Context, req *QueryGetRequestRequest) (*QueryGetRequestResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Request not implemented") +func (*UnimplementedQueryServer) GetRequest(ctx context.Context, req *QueryGetRequestRequest) (*QueryGetRequestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRequest not implemented") } -func (*UnimplementedQueryServer) RequestAll(ctx context.Context, req *QueryAllRequestRequest) (*QueryAllRequestResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RequestAll not implemented") +func (*UnimplementedQueryServer) ListRequest(ctx context.Context, req *QueryAllRequestRequest) (*QueryAllRequestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListRequest not implemented") } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +func (*UnimplementedQueryServer) ListParamChange(ctx context.Context, req *QueryAllParamChangeRequest) (*QueryAllParamChangeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListParamChange not implemented") } func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } -func _Query_Chain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetChainRequest) +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Chain(ctx, in) + return srv.(QueryServer).Params(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/Chain", + FullMethod: "/network.launch.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Chain(ctx, req.(*QueryGetChainRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ChainAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllChainRequest) +func _Query_GetChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetChainRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ChainAll(ctx, in) + return srv.(QueryServer).GetChain(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/ChainAll", + FullMethod: "/network.launch.v1.Query/GetChain", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ChainAll(ctx, req.(*QueryAllChainRequest)) + return srv.(QueryServer).GetChain(ctx, req.(*QueryGetChainRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_GenesisAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetGenesisAccountRequest) +func _Query_ListChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllChainRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).GenesisAccount(ctx, in) + return srv.(QueryServer).ListChain(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/GenesisAccount", + FullMethod: "/network.launch.v1.Query/ListChain", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).GenesisAccount(ctx, req.(*QueryGetGenesisAccountRequest)) + return srv.(QueryServer).ListChain(ctx, req.(*QueryAllChainRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_GenesisAccountAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllGenesisAccountRequest) +func _Query_GetGenesisAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetGenesisAccountRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).GenesisAccountAll(ctx, in) + return srv.(QueryServer).GetGenesisAccount(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/GenesisAccountAll", + FullMethod: "/network.launch.v1.Query/GetGenesisAccount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).GenesisAccountAll(ctx, req.(*QueryAllGenesisAccountRequest)) + return srv.(QueryServer).GetGenesisAccount(ctx, req.(*QueryGetGenesisAccountRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_VestingAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetVestingAccountRequest) +func _Query_ListGenesisAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllGenesisAccountRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).VestingAccount(ctx, in) + return srv.(QueryServer).ListGenesisAccount(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/VestingAccount", + FullMethod: "/network.launch.v1.Query/ListGenesisAccount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).VestingAccount(ctx, req.(*QueryGetVestingAccountRequest)) + return srv.(QueryServer).ListGenesisAccount(ctx, req.(*QueryAllGenesisAccountRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_VestingAccountAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllVestingAccountRequest) +func _Query_GetGenesisValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetGenesisValidatorRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).VestingAccountAll(ctx, in) + return srv.(QueryServer).GetGenesisValidator(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/VestingAccountAll", + FullMethod: "/network.launch.v1.Query/GetGenesisValidator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).VestingAccountAll(ctx, req.(*QueryAllVestingAccountRequest)) + return srv.(QueryServer).GetGenesisValidator(ctx, req.(*QueryGetGenesisValidatorRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_GenesisValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetGenesisValidatorRequest) +func _Query_ListGenesisValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllGenesisValidatorRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).GenesisValidator(ctx, in) + return srv.(QueryServer).ListGenesisValidator(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/GenesisValidator", + FullMethod: "/network.launch.v1.Query/ListGenesisValidator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).GenesisValidator(ctx, req.(*QueryGetGenesisValidatorRequest)) + return srv.(QueryServer).ListGenesisValidator(ctx, req.(*QueryAllGenesisValidatorRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_GenesisValidatorAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllGenesisValidatorRequest) +func _Query_GetVestingAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetVestingAccountRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).GenesisValidatorAll(ctx, in) + return srv.(QueryServer).GetVestingAccount(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/GenesisValidatorAll", + FullMethod: "/network.launch.v1.Query/GetVestingAccount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).GenesisValidatorAll(ctx, req.(*QueryAllGenesisValidatorRequest)) + return srv.(QueryServer).GetVestingAccount(ctx, req.(*QueryGetVestingAccountRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ParamChangeAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllParamChangeRequest) +func _Query_ListVestingAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllVestingAccountRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ParamChangeAll(ctx, in) + return srv.(QueryServer).ListVestingAccount(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/ParamChangeAll", + FullMethod: "/network.launch.v1.Query/ListVestingAccount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ParamChangeAll(ctx, req.(*QueryAllParamChangeRequest)) + return srv.(QueryServer).ListVestingAccount(ctx, req.(*QueryAllVestingAccountRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Request_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_GetRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryGetRequestRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Request(ctx, in) + return srv.(QueryServer).GetRequest(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/Request", + FullMethod: "/network.launch.v1.Query/GetRequest", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Request(ctx, req.(*QueryGetRequestRequest)) + return srv.(QueryServer).GetRequest(ctx, req.(*QueryGetRequestRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_RequestAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_ListRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllRequestRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).RequestAll(ctx, in) + return srv.(QueryServer).ListRequest(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/RequestAll", + FullMethod: "/network.launch.v1.Query/ListRequest", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).RequestAll(ctx, req.(*QueryAllRequestRequest)) + return srv.(QueryServer).ListRequest(ctx, req.(*QueryAllRequestRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) +func _Query_ListParamChange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllParamChangeRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) + return srv.(QueryServer).ListParamChange(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Query/Params", + FullMethod: "/network.launch.v1.Query/ListParamChange", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).ListParamChange(ctx, req.(*QueryAllParamChangeRequest)) } return interceptor(ctx, in, info, handler) } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.launch.Query", + ServiceName: "network.launch.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "Chain", - Handler: _Query_Chain_Handler, + MethodName: "Params", + Handler: _Query_Params_Handler, }, { - MethodName: "ChainAll", - Handler: _Query_ChainAll_Handler, + MethodName: "GetChain", + Handler: _Query_GetChain_Handler, }, { - MethodName: "GenesisAccount", - Handler: _Query_GenesisAccount_Handler, + MethodName: "ListChain", + Handler: _Query_ListChain_Handler, }, { - MethodName: "GenesisAccountAll", - Handler: _Query_GenesisAccountAll_Handler, + MethodName: "GetGenesisAccount", + Handler: _Query_GetGenesisAccount_Handler, }, { - MethodName: "VestingAccount", - Handler: _Query_VestingAccount_Handler, + MethodName: "ListGenesisAccount", + Handler: _Query_ListGenesisAccount_Handler, }, { - MethodName: "VestingAccountAll", - Handler: _Query_VestingAccountAll_Handler, + MethodName: "GetGenesisValidator", + Handler: _Query_GetGenesisValidator_Handler, }, { - MethodName: "GenesisValidator", - Handler: _Query_GenesisValidator_Handler, + MethodName: "ListGenesisValidator", + Handler: _Query_ListGenesisValidator_Handler, }, { - MethodName: "GenesisValidatorAll", - Handler: _Query_GenesisValidatorAll_Handler, + MethodName: "GetVestingAccount", + Handler: _Query_GetVestingAccount_Handler, }, { - MethodName: "ParamChangeAll", - Handler: _Query_ParamChangeAll_Handler, + MethodName: "ListVestingAccount", + Handler: _Query_ListVestingAccount_Handler, }, { - MethodName: "Request", - Handler: _Query_Request_Handler, + MethodName: "GetRequest", + Handler: _Query_GetRequest_Handler, }, { - MethodName: "RequestAll", - Handler: _Query_RequestAll_Handler, + MethodName: "ListRequest", + Handler: _Query_ListRequest_Handler, }, { - MethodName: "Params", - Handler: _Query_Params_Handler, + MethodName: "ListParamChange", + Handler: _Query_ListParamChange_Handler, }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/launch/query.proto", + Metadata: "network/launch/v1/query.proto", +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *QueryGetChainRequest) Marshal() (dAtA []byte, err error) { @@ -2106,7 +2155,7 @@ func (m *QueryAllGenesisAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryGetVestingAccountRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetGenesisValidatorRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2116,12 +2165,12 @@ func (m *QueryGetVestingAccountRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetVestingAccountRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetGenesisValidatorRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetVestingAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetGenesisValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2141,7 +2190,7 @@ func (m *QueryGetVestingAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryGetVestingAccountResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetGenesisValidatorResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2151,18 +2200,18 @@ func (m *QueryGetVestingAccountResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetVestingAccountResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetGenesisValidatorResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetVestingAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetGenesisValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.VestingAccount.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.GenesisValidator.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2174,7 +2223,7 @@ func (m *QueryGetVestingAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryAllVestingAccountRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllGenesisValidatorRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2184,12 +2233,12 @@ func (m *QueryAllVestingAccountRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllVestingAccountRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllGenesisValidatorRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllVestingAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllGenesisValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2214,7 +2263,7 @@ func (m *QueryAllVestingAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryAllVestingAccountResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllGenesisValidatorResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2224,12 +2273,12 @@ func (m *QueryAllVestingAccountResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllVestingAccountResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllGenesisValidatorResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllVestingAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllGenesisValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2246,10 +2295,10 @@ func (m *QueryAllVestingAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, i-- dAtA[i] = 0x12 } - if len(m.VestingAccount) > 0 { - for iNdEx := len(m.VestingAccount) - 1; iNdEx >= 0; iNdEx-- { + if len(m.GenesisValidator) > 0 { + for iNdEx := len(m.GenesisValidator) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.VestingAccount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.GenesisValidator[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2263,7 +2312,7 @@ func (m *QueryAllVestingAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryGetGenesisValidatorRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetVestingAccountRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2273,12 +2322,12 @@ func (m *QueryGetGenesisValidatorRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetGenesisValidatorRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetVestingAccountRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetGenesisValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetVestingAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2298,7 +2347,7 @@ func (m *QueryGetGenesisValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *QueryGetGenesisValidatorResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetVestingAccountResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2308,18 +2357,18 @@ func (m *QueryGetGenesisValidatorResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetGenesisValidatorResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetVestingAccountResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetGenesisValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetVestingAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.GenesisValidator.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.VestingAccount.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2331,7 +2380,7 @@ func (m *QueryGetGenesisValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } -func (m *QueryAllGenesisValidatorRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllVestingAccountRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2341,12 +2390,12 @@ func (m *QueryAllGenesisValidatorRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllGenesisValidatorRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllVestingAccountRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllGenesisValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllVestingAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2371,7 +2420,7 @@ func (m *QueryAllGenesisValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *QueryAllGenesisValidatorResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllVestingAccountResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2381,12 +2430,12 @@ func (m *QueryAllGenesisValidatorResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllGenesisValidatorResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllVestingAccountResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllGenesisValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllVestingAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2403,10 +2452,10 @@ func (m *QueryAllGenesisValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (in i-- dAtA[i] = 0x12 } - if len(m.GenesisValidator) > 0 { - for iNdEx := len(m.GenesisValidator) - 1; iNdEx >= 0; iNdEx-- { + if len(m.VestingAccount) > 0 { + for iNdEx := len(m.VestingAccount) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.GenesisValidator[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.VestingAccount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2575,62 +2624,6 @@ func (m *QueryAllRequestResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - func (m *QueryAllParamChangeRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2703,10 +2696,10 @@ func (m *QueryAllParamChangeResponse) MarshalToSizedBuffer(dAtA []byte) (int, er i-- dAtA[i] = 0x12 } - if len(m.ParamChanges) > 0 { - for iNdEx := len(m.ParamChanges) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ParamChange) > 0 { + for iNdEx := len(m.ParamChange) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.ParamChanges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ParamChange[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2731,6 +2724,26 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + func (m *QueryGetChainRequest) Size() (n int) { if m == nil { return 0 @@ -2848,7 +2861,7 @@ func (m *QueryAllGenesisAccountResponse) Size() (n int) { return n } -func (m *QueryGetVestingAccountRequest) Size() (n int) { +func (m *QueryGetGenesisValidatorRequest) Size() (n int) { if m == nil { return 0 } @@ -2864,18 +2877,18 @@ func (m *QueryGetVestingAccountRequest) Size() (n int) { return n } -func (m *QueryGetVestingAccountResponse) Size() (n int) { +func (m *QueryGetGenesisValidatorResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.VestingAccount.Size() + l = m.GenesisValidator.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllVestingAccountRequest) Size() (n int) { +func (m *QueryAllGenesisValidatorRequest) Size() (n int) { if m == nil { return 0 } @@ -2891,14 +2904,14 @@ func (m *QueryAllVestingAccountRequest) Size() (n int) { return n } -func (m *QueryAllVestingAccountResponse) Size() (n int) { +func (m *QueryAllGenesisValidatorResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.VestingAccount) > 0 { - for _, e := range m.VestingAccount { + if len(m.GenesisValidator) > 0 { + for _, e := range m.GenesisValidator { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -2910,7 +2923,7 @@ func (m *QueryAllVestingAccountResponse) Size() (n int) { return n } -func (m *QueryGetGenesisValidatorRequest) Size() (n int) { +func (m *QueryGetVestingAccountRequest) Size() (n int) { if m == nil { return 0 } @@ -2926,18 +2939,18 @@ func (m *QueryGetGenesisValidatorRequest) Size() (n int) { return n } -func (m *QueryGetGenesisValidatorResponse) Size() (n int) { +func (m *QueryGetVestingAccountResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.GenesisValidator.Size() + l = m.VestingAccount.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllGenesisValidatorRequest) Size() (n int) { +func (m *QueryAllVestingAccountRequest) Size() (n int) { if m == nil { return 0 } @@ -2953,14 +2966,14 @@ func (m *QueryAllGenesisValidatorRequest) Size() (n int) { return n } -func (m *QueryAllGenesisValidatorResponse) Size() (n int) { +func (m *QueryAllVestingAccountResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.GenesisValidator) > 0 { - for _, e := range m.GenesisValidator { + if len(m.VestingAccount) > 0 { + for _, e := range m.VestingAccount { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -3033,26 +3046,6 @@ func (m *QueryAllRequestResponse) Size() (n int) { return n } -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - func (m *QueryAllParamChangeRequest) Size() (n int) { if m == nil { return 0 @@ -3075,24 +3068,157 @@ func (m *QueryAllParamChangeResponse) Size() (n int) { } var l int _ = l - if len(m.ParamChanges) > 0 { - for _, e := range m.ParamChanges { + if len(m.ParamChange) > 0 { + for _, e := range m.ParamChange { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil } func (m *QueryGetChainRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) @@ -3861,7 +3987,7 @@ func (m *QueryAllGenesisAccountResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetVestingAccountRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetGenesisValidatorRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3884,10 +4010,10 @@ func (m *QueryGetVestingAccountRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetVestingAccountRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetGenesisValidatorRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetVestingAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetGenesisValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3962,7 +4088,7 @@ func (m *QueryGetVestingAccountRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetVestingAccountResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetGenesisValidatorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3985,15 +4111,15 @@ func (m *QueryGetVestingAccountResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetVestingAccountResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetGenesisValidatorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetVestingAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetGenesisValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VestingAccount", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field GenesisValidator", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4020,7 +4146,7 @@ func (m *QueryGetVestingAccountResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.VestingAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.GenesisValidator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4045,7 +4171,7 @@ func (m *QueryGetVestingAccountResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllVestingAccountRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllGenesisValidatorRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4068,10 +4194,10 @@ func (m *QueryAllVestingAccountRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllVestingAccountRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllGenesisValidatorRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllVestingAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllGenesisValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4150,7 +4276,7 @@ func (m *QueryAllVestingAccountRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllVestingAccountResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllGenesisValidatorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4173,15 +4299,15 @@ func (m *QueryAllVestingAccountResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllVestingAccountResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllGenesisValidatorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllVestingAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllGenesisValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VestingAccount", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field GenesisValidator", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4208,8 +4334,8 @@ func (m *QueryAllVestingAccountResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.VestingAccount = append(m.VestingAccount, VestingAccount{}) - if err := m.VestingAccount[len(m.VestingAccount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.GenesisValidator = append(m.GenesisValidator, GenesisValidator{}) + if err := m.GenesisValidator[len(m.GenesisValidator)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4270,7 +4396,7 @@ func (m *QueryAllVestingAccountResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetGenesisValidatorRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetVestingAccountRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4293,10 +4419,10 @@ func (m *QueryGetGenesisValidatorRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetGenesisValidatorRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetVestingAccountRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetGenesisValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetVestingAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4371,7 +4497,7 @@ func (m *QueryGetGenesisValidatorRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetGenesisValidatorResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetVestingAccountResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4394,15 +4520,15 @@ func (m *QueryGetGenesisValidatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetGenesisValidatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetVestingAccountResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetGenesisValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetVestingAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenesisValidator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VestingAccount", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4429,7 +4555,7 @@ func (m *QueryGetGenesisValidatorResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.GenesisValidator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.VestingAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4454,7 +4580,7 @@ func (m *QueryGetGenesisValidatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllGenesisValidatorRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllVestingAccountRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4477,10 +4603,10 @@ func (m *QueryAllGenesisValidatorRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllGenesisValidatorRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllVestingAccountRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllGenesisValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllVestingAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4559,7 +4685,7 @@ func (m *QueryAllGenesisValidatorRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllGenesisValidatorResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllVestingAccountResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4582,15 +4708,15 @@ func (m *QueryAllGenesisValidatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllGenesisValidatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllVestingAccountResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllGenesisValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllVestingAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenesisValidator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VestingAccount", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4617,8 +4743,8 @@ func (m *QueryAllGenesisValidatorResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.GenesisValidator = append(m.GenesisValidator, GenesisValidator{}) - if err := m.GenesisValidator[len(m.GenesisValidator)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.VestingAccount = append(m.VestingAccount, VestingAccount{}) + if err := m.VestingAccount[len(m.VestingAccount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5075,139 +5201,6 @@ func (m *QueryAllRequestResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *QueryAllParamChangeRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5344,7 +5337,7 @@ func (m *QueryAllParamChangeResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ParamChanges", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ParamChange", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5371,8 +5364,8 @@ func (m *QueryAllParamChangeResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ParamChanges = append(m.ParamChanges, ParamChange{}) - if err := m.ParamChanges[len(m.ParamChanges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ParamChange = append(m.ParamChange, ParamChange{}) + if err := m.ParamChange[len(m.ParamChange)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/launch/types/query.pb.gw.go b/x/launch/types/query.pb.gw.go index 83336967..293737a7 100644 --- a/x/launch/types/query.pb.gw.go +++ b/x/launch/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: spn/launch/query.proto +// source: network/launch/v1/query.proto /* Package types is a reverse proxy. @@ -33,7 +33,25 @@ var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage var _ = metadata.Join -func request_Query_Chain_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_GetChain_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetChainRequest var metadata runtime.ServerMetadata @@ -55,12 +73,12 @@ func request_Query_Chain_0(ctx context.Context, marshaler runtime.Marshaler, cli return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := client.Chain(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetChain(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Chain_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_GetChain_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetChainRequest var metadata runtime.ServerMetadata @@ -82,48 +100,48 @@ func local_request_Query_Chain_0(ctx context.Context, marshaler runtime.Marshale return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := server.Chain(ctx, &protoReq) + msg, err := server.GetChain(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ChainAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_ListChain_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_ChainAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_ListChain_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllChainRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ChainAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListChain_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ChainAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListChain(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ChainAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_ListChain_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllChainRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ChainAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListChain_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ChainAll(ctx, &protoReq) + msg, err := server.ListChain(ctx, &protoReq) return msg, metadata, err } -func request_Query_GenesisAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_GetGenesisAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetGenesisAccountRequest var metadata runtime.ServerMetadata @@ -156,12 +174,12 @@ func request_Query_GenesisAccount_0(ctx context.Context, marshaler runtime.Marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.GenesisAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetGenesisAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_GenesisAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_GetGenesisAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetGenesisAccountRequest var metadata runtime.ServerMetadata @@ -194,16 +212,16 @@ func local_request_Query_GenesisAccount_0(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.GenesisAccount(ctx, &protoReq) + msg, err := server.GetGenesisAccount(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_GenesisAccountAll_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_ListGenesisAccount_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_GenesisAccountAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_ListGenesisAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllGenesisAccountRequest var metadata runtime.ServerMetadata @@ -228,16 +246,16 @@ func request_Query_GenesisAccountAll_0(ctx context.Context, marshaler runtime.Ma if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_GenesisAccountAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListGenesisAccount_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GenesisAccountAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListGenesisAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_GenesisAccountAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_ListGenesisAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllGenesisAccountRequest var metadata runtime.ServerMetadata @@ -262,17 +280,17 @@ func local_request_Query_GenesisAccountAll_0(ctx context.Context, marshaler runt if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_GenesisAccountAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListGenesisAccount_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GenesisAccountAll(ctx, &protoReq) + msg, err := server.ListGenesisAccount(ctx, &protoReq) return msg, metadata, err } -func request_Query_VestingAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetVestingAccountRequest +func request_Query_GetGenesisValidator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetGenesisValidatorRequest var metadata runtime.ServerMetadata var ( @@ -304,13 +322,13 @@ func request_Query_VestingAccount_0(ctx context.Context, marshaler runtime.Marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.VestingAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetGenesisValidator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_VestingAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetVestingAccountRequest +func local_request_Query_GetGenesisValidator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetGenesisValidatorRequest var metadata runtime.ServerMetadata var ( @@ -342,17 +360,17 @@ func local_request_Query_VestingAccount_0(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.VestingAccount(ctx, &protoReq) + msg, err := server.GetGenesisValidator(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_VestingAccountAll_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_ListGenesisValidator_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_VestingAccountAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllVestingAccountRequest +func request_Query_ListGenesisValidator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllGenesisValidatorRequest var metadata runtime.ServerMetadata var ( @@ -376,17 +394,17 @@ func request_Query_VestingAccountAll_0(ctx context.Context, marshaler runtime.Ma if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_VestingAccountAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListGenesisValidator_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.VestingAccountAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListGenesisValidator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_VestingAccountAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllVestingAccountRequest +func local_request_Query_ListGenesisValidator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllGenesisValidatorRequest var metadata runtime.ServerMetadata var ( @@ -410,17 +428,17 @@ func local_request_Query_VestingAccountAll_0(ctx context.Context, marshaler runt if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_VestingAccountAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListGenesisValidator_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.VestingAccountAll(ctx, &protoReq) + msg, err := server.ListGenesisValidator(ctx, &protoReq) return msg, metadata, err } -func request_Query_GenesisValidator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetGenesisValidatorRequest +func request_Query_GetVestingAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetVestingAccountRequest var metadata runtime.ServerMetadata var ( @@ -452,13 +470,13 @@ func request_Query_GenesisValidator_0(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.GenesisValidator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetVestingAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_GenesisValidator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetGenesisValidatorRequest +func local_request_Query_GetVestingAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetVestingAccountRequest var metadata runtime.ServerMetadata var ( @@ -490,89 +508,17 @@ func local_request_Query_GenesisValidator_0(ctx context.Context, marshaler runti return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.GenesisValidator(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_GenesisValidatorAll_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Query_GenesisValidatorAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllGenesisValidatorRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["launchID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") - } - - protoReq.LaunchID, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_GenesisValidatorAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GenesisValidatorAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_GenesisValidatorAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllGenesisValidatorRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["launchID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") - } - - protoReq.LaunchID, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_GenesisValidatorAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GenesisValidatorAll(ctx, &protoReq) + msg, err := server.GetVestingAccount(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ParamChangeAll_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_ListVestingAccount_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_ParamChangeAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllParamChangeRequest +func request_Query_ListVestingAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllVestingAccountRequest var metadata runtime.ServerMetadata var ( @@ -596,17 +542,17 @@ func request_Query_ParamChangeAll_0(ctx context.Context, marshaler runtime.Marsh if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ParamChangeAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListVestingAccount_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ParamChangeAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListVestingAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ParamChangeAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllParamChangeRequest +func local_request_Query_ListVestingAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllVestingAccountRequest var metadata runtime.ServerMetadata var ( @@ -630,16 +576,16 @@ func local_request_Query_ParamChangeAll_0(ctx context.Context, marshaler runtime if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ParamChangeAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListVestingAccount_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ParamChangeAll(ctx, &protoReq) + msg, err := server.ListVestingAccount(ctx, &protoReq) return msg, metadata, err } -func request_Query_Request_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_GetRequest_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetRequestRequest var metadata runtime.ServerMetadata @@ -672,12 +618,12 @@ func request_Query_Request_0(ctx context.Context, marshaler runtime.Marshaler, c return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "requestID", err) } - msg, err := client.Request(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetRequest(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Request_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_GetRequest_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetRequestRequest var metadata runtime.ServerMetadata @@ -710,16 +656,16 @@ func local_request_Query_Request_0(ctx context.Context, marshaler runtime.Marsha return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "requestID", err) } - msg, err := server.Request(ctx, &protoReq) + msg, err := server.GetRequest(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_RequestAll_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_ListRequest_0 = &utilities.DoubleArray{Encoding: map[string]int{"launchID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_RequestAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_ListRequest_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllRequestRequest var metadata runtime.ServerMetadata @@ -744,16 +690,16 @@ func request_Query_RequestAll_0(ctx context.Context, marshaler runtime.Marshaler if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_RequestAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListRequest_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.RequestAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListRequest(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_RequestAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_ListRequest_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllRequestRequest var metadata runtime.ServerMetadata @@ -778,29 +724,47 @@ func local_request_Query_RequestAll_0(ctx context.Context, marshaler runtime.Mar if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_RequestAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListRequest_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.RequestAll(ctx, &protoReq) + msg, err := server.ListRequest(ctx, &protoReq) return msg, metadata, err } -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest +var ( + filter_Query_ListParamChange_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_ListParamChange_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllParamChangeRequest var metadata runtime.ServerMetadata - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListParamChange_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListParamChange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest +func local_request_Query_ListParamChange_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllParamChangeRequest var metadata runtime.ServerMetadata - msg, err := server.Params(ctx, &protoReq) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListParamChange_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListParamChange(ctx, &protoReq) return msg, metadata, err } @@ -811,7 +775,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - mux.Handle("GET", pattern_Query_Chain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -822,7 +786,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Chain_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -830,11 +794,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Chain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ChainAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetChain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -845,7 +809,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ChainAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetChain_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -853,11 +817,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ChainAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetChain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_GenesisAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListChain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -868,7 +832,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_GenesisAccount_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListChain_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -876,11 +840,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_GenesisAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListChain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_GenesisAccountAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetGenesisAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -891,7 +855,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_GenesisAccountAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetGenesisAccount_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -899,11 +863,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_GenesisAccountAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetGenesisAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_VestingAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListGenesisAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -914,7 +878,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_VestingAccount_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListGenesisAccount_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -922,11 +886,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_VestingAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListGenesisAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_VestingAccountAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetGenesisValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -937,7 +901,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_VestingAccountAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetGenesisValidator_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -945,11 +909,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_VestingAccountAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetGenesisValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_GenesisValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListGenesisValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -960,7 +924,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_GenesisValidator_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListGenesisValidator_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -968,11 +932,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_GenesisValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListGenesisValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_GenesisValidatorAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetVestingAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -983,7 +947,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_GenesisValidatorAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetVestingAccount_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -991,11 +955,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_GenesisValidatorAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetVestingAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ParamChangeAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListVestingAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1006,7 +970,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ParamChangeAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListVestingAccount_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1014,11 +978,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ParamChangeAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListVestingAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Request_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1029,7 +993,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Request_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetRequest_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1037,11 +1001,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Request_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_RequestAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1052,7 +1016,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_RequestAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListRequest_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1060,11 +1024,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_RequestAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListParamChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1075,7 +1039,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListParamChange_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1083,7 +1047,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListParamChange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1128,7 +1092,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - mux.Handle("GET", pattern_Query_Chain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1137,18 +1101,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Chain_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Chain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ChainAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetChain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1157,18 +1121,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ChainAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetChain_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ChainAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetChain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_GenesisAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListChain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1177,18 +1141,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_GenesisAccount_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListChain_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_GenesisAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListChain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_GenesisAccountAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetGenesisAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1197,18 +1161,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_GenesisAccountAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetGenesisAccount_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_GenesisAccountAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetGenesisAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_VestingAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListGenesisAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1217,18 +1181,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_VestingAccount_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListGenesisAccount_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_VestingAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListGenesisAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_VestingAccountAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetGenesisValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1237,18 +1201,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_VestingAccountAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetGenesisValidator_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_VestingAccountAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetGenesisValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_GenesisValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListGenesisValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1257,18 +1221,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_GenesisValidator_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListGenesisValidator_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_GenesisValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListGenesisValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_GenesisValidatorAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetVestingAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1277,18 +1241,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_GenesisValidatorAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetVestingAccount_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_GenesisValidatorAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetVestingAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ParamChangeAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListVestingAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1297,18 +1261,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ParamChangeAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListVestingAccount_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ParamChangeAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListVestingAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Request_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1317,18 +1281,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Request_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetRequest_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Request_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_RequestAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1337,18 +1301,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_RequestAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListRequest_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_RequestAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListParamChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1357,14 +1321,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListParamChange_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListParamChange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1372,53 +1336,53 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Chain_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "launch", "chain", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ignite", "network", "launch", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ChainAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "launch", "chain"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetChain_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "launch", "chain", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GenesisAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"tendermint", "spn", "launch", "genesis_account", "launchID", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListChain_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "launch", "chain"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GenesisAccountAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "launch", "genesis_account", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetGenesisAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"ignite", "network", "launch", "genesis_account", "launchID", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_VestingAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"tendermint", "spn", "launch", "vesting_account", "launchID", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListGenesisAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "launch", "genesis_account", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_VestingAccountAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "launch", "vesting_account", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetGenesisValidator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"ignite", "network", "launch", "genesis_validator", "launchID", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GenesisValidator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"tendermint", "spn", "launch", "genesis_validator", "launchID", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListGenesisValidator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "launch", "genesis_validator", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GenesisValidatorAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "launch", "genesis_validator", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetVestingAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"ignite", "network", "launch", "vesting_account", "launchID", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ParamChangeAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "launch", "paramChange", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListVestingAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "launch", "vesting_account", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Request_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"tendermint", "spn", "launch", "request", "launchID", "requestID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetRequest_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"ignite", "network", "launch", "request", "launchID", "requestID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_RequestAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "launch", "request", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListRequest_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "launch", "request", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "launch", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListParamChange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "launch", "param_change"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( - forward_Query_Chain_0 = runtime.ForwardResponseMessage + forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_ChainAll_0 = runtime.ForwardResponseMessage + forward_Query_GetChain_0 = runtime.ForwardResponseMessage - forward_Query_GenesisAccount_0 = runtime.ForwardResponseMessage + forward_Query_ListChain_0 = runtime.ForwardResponseMessage - forward_Query_GenesisAccountAll_0 = runtime.ForwardResponseMessage + forward_Query_GetGenesisAccount_0 = runtime.ForwardResponseMessage - forward_Query_VestingAccount_0 = runtime.ForwardResponseMessage + forward_Query_ListGenesisAccount_0 = runtime.ForwardResponseMessage - forward_Query_VestingAccountAll_0 = runtime.ForwardResponseMessage + forward_Query_GetGenesisValidator_0 = runtime.ForwardResponseMessage - forward_Query_GenesisValidator_0 = runtime.ForwardResponseMessage + forward_Query_ListGenesisValidator_0 = runtime.ForwardResponseMessage - forward_Query_GenesisValidatorAll_0 = runtime.ForwardResponseMessage + forward_Query_GetVestingAccount_0 = runtime.ForwardResponseMessage - forward_Query_ParamChangeAll_0 = runtime.ForwardResponseMessage + forward_Query_ListVestingAccount_0 = runtime.ForwardResponseMessage - forward_Query_Request_0 = runtime.ForwardResponseMessage + forward_Query_GetRequest_0 = runtime.ForwardResponseMessage - forward_Query_RequestAll_0 = runtime.ForwardResponseMessage + forward_Query_ListRequest_0 = runtime.ForwardResponseMessage - forward_Query_Params_0 = runtime.ForwardResponseMessage + forward_Query_ListParamChange_0 = runtime.ForwardResponseMessage ) diff --git a/x/launch/types/request.pb.go b/x/launch/types/request.pb.go index 51c79816..a097d5d4 100644 --- a/x/launch/types/request.pb.go +++ b/x/launch/types/request.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/request.proto +// source: network/launch/v1/request.proto package types @@ -49,7 +49,7 @@ func (x Request_Status) String() string { } func (Request_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_7845b3945cf8e950, []int{0, 0} + return fileDescriptor_04c8c5b093f3f6d1, []int{0, 0} } type Request struct { @@ -58,14 +58,14 @@ type Request struct { Creator string `protobuf:"bytes,3,opt,name=creator,proto3" json:"creator,omitempty"` CreatedAt int64 `protobuf:"varint,4,opt,name=createdAt,proto3" json:"createdAt,omitempty"` Content RequestContent `protobuf:"bytes,5,opt,name=content,proto3" json:"content"` - Status Request_Status `protobuf:"varint,6,opt,name=status,proto3,enum=spn.launch.Request_Status" json:"status,omitempty"` + Status Request_Status `protobuf:"varint,6,opt,name=status,proto3,enum=network.launch.v1.Request_Status" json:"status,omitempty"` } func (m *Request) Reset() { *m = Request{} } func (m *Request) String() string { return proto.CompactTextString(m) } func (*Request) ProtoMessage() {} func (*Request) Descriptor() ([]byte, []int) { - return fileDescriptor_7845b3945cf8e950, []int{0} + return fileDescriptor_04c8c5b093f3f6d1, []int{0} } func (m *Request) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -151,7 +151,7 @@ func (m *RequestContent) Reset() { *m = RequestContent{} } func (m *RequestContent) String() string { return proto.CompactTextString(m) } func (*RequestContent) ProtoMessage() {} func (*RequestContent) Descriptor() ([]byte, []int) { - return fileDescriptor_7845b3945cf8e950, []int{1} + return fileDescriptor_04c8c5b093f3f6d1, []int{1} } func (m *RequestContent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -281,7 +281,7 @@ func (m *AccountRemoval) Reset() { *m = AccountRemoval{} } func (m *AccountRemoval) String() string { return proto.CompactTextString(m) } func (*AccountRemoval) ProtoMessage() {} func (*AccountRemoval) Descriptor() ([]byte, []int) { - return fileDescriptor_7845b3945cf8e950, []int{2} + return fileDescriptor_04c8c5b093f3f6d1, []int{2} } func (m *AccountRemoval) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -325,7 +325,7 @@ func (m *ValidatorRemoval) Reset() { *m = ValidatorRemoval{} } func (m *ValidatorRemoval) String() string { return proto.CompactTextString(m) } func (*ValidatorRemoval) ProtoMessage() {} func (*ValidatorRemoval) Descriptor() ([]byte, []int) { - return fileDescriptor_7845b3945cf8e950, []int{3} + return fileDescriptor_04c8c5b093f3f6d1, []int{3} } func (m *ValidatorRemoval) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -361,125 +361,55 @@ func (m *ValidatorRemoval) GetValAddress() string { return "" } -type ParamChange struct { - LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` - Module string `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` - Param string `protobuf:"bytes,3,opt,name=param,proto3" json:"param,omitempty"` - Value []byte `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *ParamChange) Reset() { *m = ParamChange{} } -func (m *ParamChange) String() string { return proto.CompactTextString(m) } -func (*ParamChange) ProtoMessage() {} -func (*ParamChange) Descriptor() ([]byte, []int) { - return fileDescriptor_7845b3945cf8e950, []int{4} -} -func (m *ParamChange) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ParamChange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ParamChange.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *ParamChange) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParamChange.Merge(m, src) -} -func (m *ParamChange) XXX_Size() int { - return m.Size() -} -func (m *ParamChange) XXX_DiscardUnknown() { - xxx_messageInfo_ParamChange.DiscardUnknown(m) -} - -var xxx_messageInfo_ParamChange proto.InternalMessageInfo - -func (m *ParamChange) GetLaunchID() uint64 { - if m != nil { - return m.LaunchID - } - return 0 -} - -func (m *ParamChange) GetModule() string { - if m != nil { - return m.Module - } - return "" -} - -func (m *ParamChange) GetParam() string { - if m != nil { - return m.Param - } - return "" -} - -func (m *ParamChange) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - func init() { - proto.RegisterEnum("spn.launch.Request_Status", Request_Status_name, Request_Status_value) - proto.RegisterType((*Request)(nil), "spn.launch.Request") - proto.RegisterType((*RequestContent)(nil), "spn.launch.RequestContent") - proto.RegisterType((*AccountRemoval)(nil), "spn.launch.AccountRemoval") - proto.RegisterType((*ValidatorRemoval)(nil), "spn.launch.ValidatorRemoval") - proto.RegisterType((*ParamChange)(nil), "spn.launch.ParamChange") -} - -func init() { proto.RegisterFile("spn/launch/request.proto", fileDescriptor_7845b3945cf8e950) } - -var fileDescriptor_7845b3945cf8e950 = []byte{ - // 599 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xcf, 0x6e, 0xd3, 0x40, - 0x10, 0xc6, 0xed, 0xb4, 0x4d, 0x9a, 0x4d, 0x15, 0x45, 0xab, 0x0a, 0x4c, 0x54, 0x85, 0xc8, 0x27, - 0x5f, 0x70, 0x44, 0xb8, 0x20, 0x38, 0x39, 0x75, 0xd4, 0x3f, 0x42, 0x25, 0xda, 0xa2, 0x1c, 0xb8, - 0x54, 0x5b, 0x7b, 0xe5, 0x5a, 0xb2, 0x77, 0x83, 0x77, 0x1d, 0xc1, 0x5b, 0xf0, 0x04, 0x3c, 0x05, - 0x4f, 0xc0, 0xa9, 0xc7, 0x8a, 0x13, 0x27, 0x84, 0xda, 0x17, 0x41, 0xbb, 0x6b, 0x27, 0xb1, 0x1b, - 0x21, 0x6e, 0x9e, 0x99, 0xdf, 0x7c, 0xfa, 0xbc, 0x33, 0xbb, 0xc0, 0xe2, 0x0b, 0x3a, 0x4a, 0x70, - 0x4e, 0x83, 0x9b, 0x51, 0x46, 0x3e, 0xe5, 0x84, 0x0b, 0x77, 0x91, 0x31, 0xc1, 0x20, 0xe0, 0x0b, - 0xea, 0xea, 0x4a, 0xff, 0x30, 0x62, 0x11, 0x53, 0xe9, 0x91, 0xfc, 0xd2, 0x44, 0xff, 0x59, 0xc0, - 0x78, 0xca, 0xf8, 0x95, 0x2e, 0xe8, 0xa0, 0x28, 0x0d, 0x37, 0x64, 0x23, 0x42, 0x09, 0x8f, 0xf9, - 0x15, 0x0e, 0x02, 0x96, 0x53, 0xb1, 0x85, 0x58, 0x12, 0x2e, 0x62, 0x1a, 0xd5, 0x08, 0x7b, 0x8b, - 0xc6, 0x12, 0x27, 0x71, 0x88, 0x05, 0xcb, 0x34, 0x63, 0x7f, 0x6b, 0x80, 0x16, 0xd2, 0xb6, 0x61, - 0x1f, 0xec, 0x6b, 0xfa, 0xcc, 0xb7, 0xcc, 0xa1, 0xe9, 0xec, 0xa2, 0x55, 0x0c, 0x8f, 0x40, 0xbb, - 0xf8, 0xbb, 0x33, 0xdf, 0x6a, 0xa8, 0xe2, 0x3a, 0x01, 0x2d, 0xd0, 0x0a, 0x32, 0x22, 0x65, 0xad, - 0x9d, 0xa1, 0xe9, 0xb4, 0x51, 0x19, 0xca, 0x3e, 0xf5, 0x49, 0x42, 0x4f, 0x58, 0xbb, 0x43, 0xd3, - 0xd9, 0x41, 0xeb, 0x04, 0x7c, 0x03, 0x5a, 0x01, 0xa3, 0x82, 0x50, 0x61, 0xed, 0x0d, 0x4d, 0xa7, - 0x33, 0xee, 0xbb, 0xeb, 0x43, 0x73, 0x0b, 0x5f, 0xc7, 0x9a, 0x98, 0xec, 0xde, 0xfe, 0x7e, 0x6e, - 0xa0, 0xb2, 0x01, 0x8e, 0x41, 0x93, 0x0b, 0x2c, 0x72, 0x6e, 0x35, 0x87, 0xa6, 0xd3, 0xdd, 0xda, - 0xea, 0x5e, 0x2a, 0x02, 0x15, 0xa4, 0xfd, 0x12, 0x34, 0x75, 0x06, 0x76, 0x40, 0x6b, 0x36, 0xbd, - 0xf0, 0xcf, 0x2e, 0x4e, 0x7a, 0x06, 0x3c, 0x00, 0xfb, 0xde, 0x6c, 0x86, 0xde, 0xcf, 0xa7, 0x7e, - 0xcf, 0x94, 0x11, 0x9a, 0x9e, 0x4f, 0x8f, 0x3f, 0x4c, 0xfd, 0x5e, 0xc3, 0xfe, 0xb1, 0x03, 0xba, - 0x55, 0x23, 0xd0, 0x07, 0xdd, 0xe2, 0x38, 0x3d, 0x7d, 0xde, 0xea, 0xb4, 0x6a, 0xe6, 0x4f, 0x2a, - 0xc4, 0xa9, 0x81, 0x6a, 0x3d, 0x52, 0xa5, 0x18, 0x5b, 0xa9, 0xd2, 0x78, 0xac, 0x32, 0xaf, 0x10, - 0x52, 0xa5, 0xda, 0x03, 0xcf, 0x41, 0xaf, 0xd0, 0x9d, 0x97, 0x93, 0x55, 0x23, 0xe8, 0x8c, 0x8f, - 0xb6, 0xb8, 0x59, 0x31, 0xa7, 0x06, 0x7a, 0xd4, 0x27, 0x1d, 0x15, 0x0b, 0x84, 0x48, 0xca, 0x96, - 0x38, 0x51, 0x03, 0xab, 0x39, 0xf2, 0x2a, 0x84, 0x74, 0x54, 0xed, 0x91, 0x8e, 0x56, 0x4b, 0x56, - 0xea, 0xec, 0x3d, 0x76, 0x34, 0xaf, 0x31, 0xd2, 0x51, 0xbd, 0x0f, 0xbe, 0x05, 0x9d, 0x05, 0xce, - 0x70, 0x7a, 0x7c, 0x83, 0x69, 0x44, 0xd4, 0xa0, 0x3b, 0xe3, 0xa7, 0x9b, 0x32, 0xb3, 0x75, 0xf9, - 0xd4, 0x40, 0x9b, 0xf4, 0xa4, 0xbd, 0x5a, 0x2e, 0xdb, 0x07, 0xdd, 0xaa, 0x6f, 0x38, 0x06, 0x2d, - 0x1c, 0x86, 0x19, 0xe1, 0x5c, 0x0d, 0xaf, 0x3d, 0xb1, 0x7e, 0x7e, 0x7f, 0x71, 0x58, 0x5c, 0x41, - 0x4f, 0x57, 0x2e, 0x45, 0x16, 0xd3, 0x08, 0x95, 0xa0, 0xfd, 0x0e, 0xf4, 0xea, 0xae, 0xe1, 0x6b, - 0x00, 0x96, 0x38, 0xf1, 0xfe, 0x53, 0x6a, 0x83, 0xb5, 0x53, 0xd0, 0xd9, 0x30, 0xff, 0xcf, 0xcb, - 0xf7, 0x04, 0x34, 0x53, 0x16, 0xe6, 0x09, 0x51, 0x2b, 0xd2, 0x46, 0x45, 0x04, 0x0f, 0xc1, 0x9e, - 0xfa, 0xe1, 0xe2, 0xd2, 0xe9, 0x40, 0x66, 0x97, 0x38, 0xc9, 0x89, 0x9a, 0xde, 0x01, 0xd2, 0xc1, - 0x64, 0x72, 0x7b, 0x3f, 0x30, 0xef, 0xee, 0x07, 0xe6, 0x9f, 0xfb, 0x81, 0xf9, 0xf5, 0x61, 0x60, - 0xdc, 0x3d, 0x0c, 0x8c, 0x5f, 0x0f, 0x03, 0xe3, 0xa3, 0x13, 0xc5, 0xe2, 0x26, 0xbf, 0x76, 0x03, - 0x96, 0x8e, 0x04, 0xa1, 0x21, 0xc9, 0xd2, 0x98, 0x8a, 0x91, 0x7c, 0x3c, 0x3e, 0x97, 0xcf, 0x87, - 0xf8, 0xb2, 0x20, 0xfc, 0xba, 0xa9, 0xde, 0x8c, 0x57, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x50, - 0x97, 0x9d, 0x49, 0xf4, 0x04, 0x00, 0x00, + proto.RegisterEnum("network.launch.v1.Request_Status", Request_Status_name, Request_Status_value) + proto.RegisterType((*Request)(nil), "network.launch.v1.Request") + proto.RegisterType((*RequestContent)(nil), "network.launch.v1.RequestContent") + proto.RegisterType((*AccountRemoval)(nil), "network.launch.v1.AccountRemoval") + proto.RegisterType((*ValidatorRemoval)(nil), "network.launch.v1.ValidatorRemoval") +} + +func init() { proto.RegisterFile("network/launch/v1/request.proto", fileDescriptor_04c8c5b093f3f6d1) } + +var fileDescriptor_04c8c5b093f3f6d1 = []byte{ + // 580 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x4f, 0x8f, 0xd2, 0x40, + 0x18, 0xc6, 0x5b, 0x60, 0x61, 0x19, 0x0c, 0xc1, 0xc9, 0x1e, 0x2a, 0x31, 0x5d, 0x44, 0x13, 0xeb, + 0xc1, 0x36, 0xe0, 0x45, 0x8f, 0x2d, 0x25, 0x0b, 0x6a, 0x56, 0x9c, 0x35, 0x1c, 0xbc, 0x90, 0x6e, + 0x99, 0x94, 0x46, 0xe8, 0x60, 0x3b, 0x54, 0xfd, 0x16, 0x7e, 0x18, 0x3f, 0x83, 0xd9, 0xe3, 0xc6, + 0x93, 0x27, 0x63, 0xe0, 0xea, 0x87, 0x30, 0x33, 0x9d, 0xc2, 0x96, 0x3f, 0x9b, 0xbd, 0x75, 0xde, + 0xfe, 0xde, 0x67, 0x9e, 0x99, 0xf7, 0x7d, 0x07, 0x9c, 0x06, 0x98, 0x7e, 0x21, 0xe1, 0x27, 0x63, + 0xea, 0x2c, 0x02, 0x77, 0x62, 0xc4, 0x2d, 0x23, 0xc4, 0x9f, 0x17, 0x38, 0xa2, 0xfa, 0x3c, 0x24, + 0x94, 0xc0, 0xfb, 0x02, 0xd0, 0x13, 0x40, 0x8f, 0x5b, 0xf5, 0x07, 0x2e, 0x89, 0x66, 0x24, 0x1a, + 0x71, 0xc0, 0x48, 0x16, 0x09, 0x5d, 0x3f, 0xf1, 0x88, 0x47, 0x92, 0x38, 0xfb, 0x12, 0xd1, 0xa7, + 0xbb, 0x9b, 0x78, 0x38, 0xc0, 0x91, 0x1f, 0x8d, 0x1c, 0xd7, 0x25, 0x8b, 0x40, 0x6c, 0x56, 0x7f, + 0x76, 0x18, 0x8c, 0x9d, 0xa9, 0x3f, 0x76, 0x28, 0x09, 0x05, 0xfa, 0x64, 0x17, 0x9d, 0x3b, 0xa1, + 0x33, 0x1b, 0xb9, 0x13, 0x27, 0xf0, 0xf0, 0xe1, 0x9d, 0x63, 0x1c, 0x51, 0x3f, 0xf0, 0xb2, 0x3b, + 0x37, 0x7f, 0xe6, 0x40, 0x09, 0x25, 0x07, 0x87, 0x75, 0x70, 0x9c, 0xe0, 0x7d, 0x5b, 0x91, 0x1b, + 0xb2, 0x56, 0x40, 0xeb, 0x35, 0x7c, 0x08, 0xca, 0xe2, 0x7e, 0xfa, 0xb6, 0x92, 0xe3, 0x3f, 0x37, + 0x01, 0xd8, 0x06, 0x25, 0x37, 0xc4, 0xcc, 0xa5, 0x92, 0x6f, 0xc8, 0x5a, 0xd9, 0x52, 0x7e, 0xfd, + 0x78, 0x7e, 0x22, 0x6e, 0xc8, 0x1c, 0x8f, 0x43, 0x1c, 0x45, 0x17, 0x34, 0xf4, 0x03, 0x0f, 0xa5, + 0x20, 0x53, 0xe4, 0x9f, 0x78, 0x6c, 0x52, 0xa5, 0xd0, 0x90, 0xb5, 0x3c, 0xda, 0x04, 0xa0, 0x09, + 0x4a, 0x2e, 0x09, 0x28, 0x0e, 0xa8, 0x72, 0xd4, 0x90, 0xb5, 0x4a, 0xfb, 0x91, 0xbe, 0x53, 0x10, + 0x5d, 0x18, 0xef, 0x24, 0xa0, 0x55, 0xb8, 0xfa, 0x73, 0x2a, 0xa1, 0x34, 0x0f, 0xbe, 0x02, 0xc5, + 0x88, 0x3a, 0x74, 0x11, 0x29, 0xc5, 0x86, 0xac, 0x55, 0x6f, 0x53, 0xd0, 0x2f, 0x38, 0x88, 0x44, + 0x42, 0xb3, 0x05, 0x8a, 0x49, 0x04, 0x56, 0x40, 0x69, 0xd0, 0x3d, 0xb7, 0xfb, 0xe7, 0x67, 0x35, + 0x09, 0xde, 0x03, 0xc7, 0xe6, 0x60, 0x80, 0xde, 0x0d, 0xbb, 0x76, 0x4d, 0x66, 0x2b, 0xd4, 0x7d, + 0xdd, 0xed, 0x7c, 0xe8, 0xda, 0xb5, 0x5c, 0xf3, 0x5f, 0x1e, 0x54, 0xb3, 0x7e, 0xe0, 0x1b, 0x50, + 0x15, 0x55, 0x34, 0x93, 0x3b, 0xe7, 0xb7, 0xba, 0xff, 0x28, 0x67, 0x19, 0xb0, 0x27, 0xa1, 0xad, + 0x54, 0x26, 0x26, 0x2a, 0x98, 0x8a, 0xe5, 0x0e, 0x8a, 0x0d, 0x33, 0x20, 0x13, 0xcb, 0xa6, 0xc2, + 0xf7, 0xa0, 0x26, 0xe4, 0x87, 0x69, 0x7b, 0xf1, 0xc2, 0x55, 0xda, 0x8f, 0x0f, 0x7b, 0x5b, 0xa3, + 0x3d, 0x09, 0xed, 0xa4, 0x33, 0x7f, 0xa2, 0xb3, 0x10, 0x9e, 0x91, 0xd8, 0x99, 0xf2, 0x9a, 0xee, + 0xf7, 0x67, 0x66, 0x40, 0xe6, 0x2f, 0x9b, 0xca, 0xfc, 0xad, 0xfb, 0x3e, 0x95, 0x3b, 0x3a, 0xe8, + 0x6f, 0xb8, 0x85, 0x32, 0x7f, 0xdb, 0xe9, 0xd0, 0x02, 0x15, 0x3e, 0x27, 0x1d, 0x3e, 0x26, 0xbc, + 0x25, 0x2a, 0x6d, 0x75, 0x8f, 0xda, 0x60, 0x43, 0xf5, 0x24, 0x74, 0x33, 0xc9, 0x2a, 0xaf, 0x9b, + 0xb2, 0x69, 0x83, 0x6a, 0xf6, 0x14, 0x6c, 0x06, 0x9c, 0xa4, 0xd3, 0x79, 0x99, 0x6f, 0x9d, 0x01, + 0x01, 0x36, 0xdf, 0x82, 0xda, 0xb6, 0x79, 0xf8, 0x12, 0x80, 0xd8, 0x99, 0x9a, 0x77, 0x94, 0xba, + 0xc1, 0x5a, 0xd6, 0xd5, 0x52, 0x95, 0xaf, 0x97, 0xaa, 0xfc, 0x77, 0xa9, 0xca, 0xdf, 0x57, 0xaa, + 0x74, 0xbd, 0x52, 0xa5, 0xdf, 0x2b, 0x55, 0xfa, 0xa8, 0x79, 0x3e, 0x9d, 0x2c, 0x2e, 0x75, 0x97, + 0xcc, 0x0c, 0xdf, 0x0b, 0x7c, 0x8a, 0x8d, 0xf4, 0x81, 0xf8, 0x9a, 0x3e, 0x11, 0xf4, 0xdb, 0x1c, + 0x47, 0x97, 0x45, 0xfe, 0x2c, 0xbc, 0xf8, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xaa, 0xc3, 0xbe, + 0x20, 0x05, 0x00, 0x00, } func (m *Request) Marshal() (dAtA []byte, err error) { @@ -760,55 +690,6 @@ func (m *ValidatorRemoval) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ParamChange) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ParamChange) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ParamChange) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Value) > 0 { - i -= len(m.Value) - copy(dAtA[i:], m.Value) - i = encodeVarintRequest(dAtA, i, uint64(len(m.Value))) - i-- - dAtA[i] = 0x22 - } - if len(m.Param) > 0 { - i -= len(m.Param) - copy(dAtA[i:], m.Param) - i = encodeVarintRequest(dAtA, i, uint64(len(m.Param))) - i-- - dAtA[i] = 0x1a - } - if len(m.Module) > 0 { - i -= len(m.Module) - copy(dAtA[i:], m.Module) - i = encodeVarintRequest(dAtA, i, uint64(len(m.Module))) - i-- - dAtA[i] = 0x12 - } - if m.LaunchID != 0 { - i = encodeVarintRequest(dAtA, i, uint64(m.LaunchID)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - func encodeVarintRequest(dAtA []byte, offset int, v uint64) int { offset -= sovRequest(v) base := offset @@ -957,30 +838,6 @@ func (m *ValidatorRemoval) Size() (n int) { return n } -func (m *ParamChange) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.LaunchID != 0 { - n += 1 + sovRequest(uint64(m.LaunchID)) - } - l = len(m.Module) - if l > 0 { - n += 1 + l + sovRequest(uint64(l)) - } - l = len(m.Param) - if l > 0 { - n += 1 + l + sovRequest(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovRequest(uint64(l)) - } - return n -} - func sovRequest(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -1602,173 +1459,6 @@ func (m *ValidatorRemoval) Unmarshal(dAtA []byte) error { } return nil } -func (m *ParamChange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRequest - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ParamChange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ParamChange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) - } - m.LaunchID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRequest - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LaunchID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Module", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRequest - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRequest - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRequest - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Module = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Param", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRequest - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRequest - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRequest - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Param = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRequest - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRequest - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthRequest - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) - if m.Value == nil { - m.Value = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRequest(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRequest - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func skipRequest(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/launch/types/request_content.go b/x/launch/types/request_content.go index ca3d89e5..4cd5dbc1 100644 --- a/x/launch/types/request_content.go +++ b/x/launch/types/request_content.go @@ -56,11 +56,6 @@ func NewGenesisAccount(launchID uint64, address string, coins sdk.Coins) Request // Validate implements GenesisAccount validation func (m GenesisAccount) Validate(launchID uint64) error { - _, err := sdk.AccAddressFromBech32(m.Address) - if err != nil { - return sdkerrors.Wrap(ErrInvalidGenesisAddress, err.Error()) - } - if !m.Coins.IsValid() || m.Coins.Empty() { return sdkerrors.Wrap(ErrInvalidCoins, m.Address) } @@ -87,11 +82,6 @@ func NewVestingAccount(launchID uint64, address string, vestingOptions VestingOp // Validate implements VestingAccount validation func (m VestingAccount) Validate(launchID uint64) error { - _, err := sdk.AccAddressFromBech32(m.Address) - if err != nil { - return sdkerrors.Wrap(ErrInvalidVestingAddress, err.Error()) - } - if err := m.VestingOptions.Validate(); err != nil { return sdkerrors.Wrapf(ErrInvalidVestingOption, err.Error()) } @@ -128,11 +118,6 @@ func NewGenesisValidator( // Validate implements GenesisValidator validation func (m GenesisValidator) Validate(launchID uint64) error { - _, err := sdk.AccAddressFromBech32(m.Address) - if err != nil { - return sdkerrors.Wrap(ErrInvalidValidatorAddress, err.Error()) - } - if len(m.GenTx) == 0 { return sdkerrors.Wrap(ErrInvalidGenTx, "empty gentx") } @@ -173,10 +158,6 @@ func NewAccountRemoval(address string) RequestContent { // Validate implements AccountRemoval validation func (m AccountRemoval) Validate() error { - _, err := sdk.AccAddressFromBech32(m.Address) - if err != nil { - return sdkerrors.Wrap(ErrInvalidGenesisAddress, err.Error()) - } return nil } @@ -193,10 +174,6 @@ func NewValidatorRemoval(address string) RequestContent { // Validate implements ValidatorRemoval validation func (m ValidatorRemoval) Validate() error { - _, err := sdk.AccAddressFromBech32(m.ValAddress) - if err != nil { - return sdkerrors.Wrap(ErrInvalidValidatorAddress, err.Error()) - } return nil } diff --git a/x/launch/types/request_content.pb.go b/x/launch/types/request_content.pb.go new file mode 100644 index 00000000..50e15797 --- /dev/null +++ b/x/launch/types/request_content.pb.go @@ -0,0 +1,39 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: network/launch/v1/request_content.proto + +package types + +import ( + fmt "fmt" + math "math" + + proto "github.com/cosmos/gogoproto/proto" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func init() { + proto.RegisterFile("network/launch/v1/request_content.proto", fileDescriptor_58c26b4c0782928a) +} + +var fileDescriptor_58c26b4c0782928a = []byte{ + // 138 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0x49, 0x2c, 0xcd, 0x4b, 0xce, 0xd0, 0x2f, 0x33, 0xd4, 0x2f, 0x4a, + 0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0x89, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xcd, 0x2b, 0xd1, 0x2b, 0x28, + 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x84, 0x2a, 0xd4, 0x83, 0x28, 0xd4, 0x2b, 0x33, 0x74, 0x72, 0x3a, + 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, + 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0x8d, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, + 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xcc, 0xf4, 0xbc, 0xcc, 0x92, 0x54, 0x7d, 0x98, 0x3d, 0x15, + 0x30, 0x9b, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xa6, 0x1b, 0x03, 0x02, 0x00, 0x00, + 0xff, 0xff, 0x63, 0x34, 0x19, 0x14, 0x88, 0x00, 0x00, 0x00, +} diff --git a/x/launch/types/request_content_test.go b/x/launch/types/request_content_test.go index 02d8615f..380b3937 100644 --- a/x/launch/types/request_content_test.go +++ b/x/launch/types/request_content_test.go @@ -9,9 +9,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - tc "github.com/tendermint/spn/testutil/constructor" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" + tc "github.com/ignite/network/testutil/constructor" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" ) func TestRequestContent_Validate(t *testing.T) { @@ -118,7 +118,7 @@ func TestNewGenesisAccount(t *testing.T) { require.NotNil(t, genesisAccount) require.EqualValues(t, launchID, genesisAccount.LaunchID) require.EqualValues(t, address, genesisAccount.Address) - require.True(t, coins.IsEqual(genesisAccount.Coins)) + require.True(t, coins.Equal(genesisAccount.Coins)) require.Nil(t, requestContent.GetVestingAccount()) require.Nil(t, requestContent.GetValidatorRemoval()) @@ -172,7 +172,7 @@ func TestNewGenesisValidator(t *testing.T) { require.EqualValues(t, address, genesisValidator.Address) require.EqualValues(t, gentTx, genesisValidator.GenTx) require.EqualValues(t, consPubKey, genesisValidator.ConsPubKey) - require.True(t, selfDelegation.IsEqual(genesisValidator.SelfDelegation)) + require.True(t, selfDelegation.Equal(genesisValidator.SelfDelegation)) require.EqualValues(t, peer, genesisValidator.Peer) require.Nil(t, requestContent.GetGenesisAccount()) diff --git a/x/launch/types/tx.pb.go b/x/launch/types/tx.pb.go index 392910be..93239238 100644 --- a/x/launch/types/tx.pb.go +++ b/x/launch/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/tx.proto +// source: network/launch/v1/tx.proto package types @@ -9,6 +9,8 @@ import ( _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -35,6 +37,99 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_485455467792033b, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_485455467792033b, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + type MsgCreateChain struct { Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` GenesisChainID string `protobuf:"bytes,2,opt,name=genesisChainID,proto3" json:"genesisChainID,omitempty"` @@ -43,7 +138,7 @@ type MsgCreateChain struct { InitialGenesis InitialGenesis `protobuf:"bytes,5,opt,name=initialGenesis,proto3" json:"initialGenesis"` HasProject bool `protobuf:"varint,6,opt,name=hasProject,proto3" json:"hasProject,omitempty"` ProjectID uint64 `protobuf:"varint,7,opt,name=projectID,proto3" json:"projectID,omitempty"` - AccountBalance github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,8,rep,name=AccountBalance,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"AccountBalance"` + AccountBalance github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,8,rep,name=accountBalance,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"accountBalance"` Metadata []byte `protobuf:"bytes,9,opt,name=metadata,proto3" json:"metadata,omitempty"` } @@ -51,7 +146,7 @@ func (m *MsgCreateChain) Reset() { *m = MsgCreateChain{} } func (m *MsgCreateChain) String() string { return proto.CompactTextString(m) } func (*MsgCreateChain) ProtoMessage() {} func (*MsgCreateChain) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{0} + return fileDescriptor_485455467792033b, []int{2} } func (m *MsgCreateChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -151,7 +246,7 @@ func (m *MsgCreateChainResponse) Reset() { *m = MsgCreateChainResponse{} func (m *MsgCreateChainResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateChainResponse) ProtoMessage() {} func (*MsgCreateChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{1} + return fileDescriptor_485455467792033b, []int{3} } func (m *MsgCreateChainResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -199,7 +294,7 @@ func (m *MsgEditChain) Reset() { *m = MsgEditChain{} } func (m *MsgEditChain) String() string { return proto.CompactTextString(m) } func (*MsgEditChain) ProtoMessage() {} func (*MsgEditChain) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{2} + return fileDescriptor_485455467792033b, []int{4} } func (m *MsgEditChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -270,7 +365,7 @@ func (m *MsgEditChainResponse) Reset() { *m = MsgEditChainResponse{} } func (m *MsgEditChainResponse) String() string { return proto.CompactTextString(m) } func (*MsgEditChainResponse) ProtoMessage() {} func (*MsgEditChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{3} + return fileDescriptor_485455467792033b, []int{5} } func (m *MsgEditChainResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -312,7 +407,7 @@ func (m *MsgUpdateLaunchInformation) Reset() { *m = MsgUpdateLaunchInfor func (m *MsgUpdateLaunchInformation) String() string { return proto.CompactTextString(m) } func (*MsgUpdateLaunchInformation) ProtoMessage() {} func (*MsgUpdateLaunchInformation) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{4} + return fileDescriptor_485455467792033b, []int{6} } func (m *MsgUpdateLaunchInformation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -390,7 +485,7 @@ func (m *MsgUpdateLaunchInformationResponse) Reset() { *m = MsgUpdateLau func (m *MsgUpdateLaunchInformationResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateLaunchInformationResponse) ProtoMessage() {} func (*MsgUpdateLaunchInformationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{5} + return fileDescriptor_485455467792033b, []int{7} } func (m *MsgUpdateLaunchInformationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -429,7 +524,7 @@ func (m *MsgSendRequest) Reset() { *m = MsgSendRequest{} } func (m *MsgSendRequest) String() string { return proto.CompactTextString(m) } func (*MsgSendRequest) ProtoMessage() {} func (*MsgSendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{6} + return fileDescriptor_485455467792033b, []int{8} } func (m *MsgSendRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -488,7 +583,7 @@ func (m *MsgSendRequestResponse) Reset() { *m = MsgSendRequestResponse{} func (m *MsgSendRequestResponse) String() string { return proto.CompactTextString(m) } func (*MsgSendRequestResponse) ProtoMessage() {} func (*MsgSendRequestResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{7} + return fileDescriptor_485455467792033b, []int{9} } func (m *MsgSendRequestResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -542,7 +637,7 @@ func (m *MsgSettleRequest) Reset() { *m = MsgSettleRequest{} } func (m *MsgSettleRequest) String() string { return proto.CompactTextString(m) } func (*MsgSettleRequest) ProtoMessage() {} func (*MsgSettleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{8} + return fileDescriptor_485455467792033b, []int{10} } func (m *MsgSettleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -606,7 +701,7 @@ func (m *MsgSettleRequestResponse) Reset() { *m = MsgSettleRequestRespon func (m *MsgSettleRequestResponse) String() string { return proto.CompactTextString(m) } func (*MsgSettleRequestResponse) ProtoMessage() {} func (*MsgSettleRequestResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{9} + return fileDescriptor_485455467792033b, []int{11} } func (m *MsgSettleRequestResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -645,7 +740,7 @@ func (m *MsgTriggerLaunch) Reset() { *m = MsgTriggerLaunch{} } func (m *MsgTriggerLaunch) String() string { return proto.CompactTextString(m) } func (*MsgTriggerLaunch) ProtoMessage() {} func (*MsgTriggerLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{10} + return fileDescriptor_485455467792033b, []int{12} } func (m *MsgTriggerLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -702,7 +797,7 @@ func (m *MsgTriggerLaunchResponse) Reset() { *m = MsgTriggerLaunchRespon func (m *MsgTriggerLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgTriggerLaunchResponse) ProtoMessage() {} func (*MsgTriggerLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{11} + return fileDescriptor_485455467792033b, []int{13} } func (m *MsgTriggerLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -740,7 +835,7 @@ func (m *MsgRevertLaunch) Reset() { *m = MsgRevertLaunch{} } func (m *MsgRevertLaunch) String() string { return proto.CompactTextString(m) } func (*MsgRevertLaunch) ProtoMessage() {} func (*MsgRevertLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{12} + return fileDescriptor_485455467792033b, []int{14} } func (m *MsgRevertLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -790,7 +885,7 @@ func (m *MsgRevertLaunchResponse) Reset() { *m = MsgRevertLaunchResponse func (m *MsgRevertLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgRevertLaunchResponse) ProtoMessage() {} func (*MsgRevertLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ef1bc2a1950b8046, []int{13} + return fileDescriptor_485455467792033b, []int{15} } func (m *MsgRevertLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -820,85 +915,98 @@ func (m *MsgRevertLaunchResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgRevertLaunchResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgCreateChain)(nil), "spn.launch.MsgCreateChain") - proto.RegisterType((*MsgCreateChainResponse)(nil), "spn.launch.MsgCreateChainResponse") - proto.RegisterType((*MsgEditChain)(nil), "spn.launch.MsgEditChain") - proto.RegisterType((*MsgEditChainResponse)(nil), "spn.launch.MsgEditChainResponse") - proto.RegisterType((*MsgUpdateLaunchInformation)(nil), "spn.launch.MsgUpdateLaunchInformation") - proto.RegisterType((*MsgUpdateLaunchInformationResponse)(nil), "spn.launch.MsgUpdateLaunchInformationResponse") - proto.RegisterType((*MsgSendRequest)(nil), "spn.launch.MsgSendRequest") - proto.RegisterType((*MsgSendRequestResponse)(nil), "spn.launch.MsgSendRequestResponse") - proto.RegisterType((*MsgSettleRequest)(nil), "spn.launch.MsgSettleRequest") - proto.RegisterType((*MsgSettleRequestResponse)(nil), "spn.launch.MsgSettleRequestResponse") - proto.RegisterType((*MsgTriggerLaunch)(nil), "spn.launch.MsgTriggerLaunch") - proto.RegisterType((*MsgTriggerLaunchResponse)(nil), "spn.launch.MsgTriggerLaunchResponse") - proto.RegisterType((*MsgRevertLaunch)(nil), "spn.launch.MsgRevertLaunch") - proto.RegisterType((*MsgRevertLaunchResponse)(nil), "spn.launch.MsgRevertLaunchResponse") -} - -func init() { proto.RegisterFile("spn/launch/tx.proto", fileDescriptor_ef1bc2a1950b8046) } - -var fileDescriptor_ef1bc2a1950b8046 = []byte{ - // 932 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x3f, 0x6f, 0xdb, 0x46, - 0x14, 0x37, 0x2d, 0xd9, 0x96, 0x9e, 0x5c, 0xb7, 0x60, 0x0d, 0x87, 0x66, 0x0d, 0x49, 0x60, 0x83, - 0x54, 0x4b, 0xc8, 0xc6, 0xed, 0x94, 0xcd, 0xb2, 0x8b, 0xc4, 0x40, 0x04, 0x18, 0xb4, 0xb3, 0xa4, - 0x43, 0x71, 0x22, 0x2f, 0xd4, 0xb5, 0xd2, 0x1d, 0xc3, 0x3b, 0x19, 0xe9, 0x5a, 0xf4, 0x03, 0x64, - 0xec, 0xd4, 0x0f, 0x90, 0xa9, 0x43, 0x3f, 0x44, 0xc6, 0xa0, 0x53, 0x81, 0xa2, 0x49, 0x61, 0x7f, - 0x8b, 0x4e, 0x05, 0xef, 0x48, 0xea, 0x48, 0x59, 0xb2, 0x80, 0x22, 0x93, 0xf8, 0xfe, 0xde, 0xef, - 0xbd, 0xf7, 0x7b, 0x77, 0x82, 0x4f, 0x79, 0x4c, 0xbd, 0x31, 0x9a, 0xd2, 0x60, 0xe4, 0x89, 0x97, - 0x6e, 0x9c, 0x30, 0xc1, 0x4c, 0xe0, 0x31, 0x75, 0x95, 0xd2, 0xde, 0x8d, 0x58, 0xc4, 0xa4, 0xda, - 0x4b, 0xbf, 0x94, 0x87, 0xdd, 0x89, 0x18, 0x8b, 0xc6, 0xd8, 0x93, 0xd2, 0x70, 0xfa, 0xdc, 0x13, - 0x64, 0x82, 0xb9, 0x40, 0x93, 0x38, 0x73, 0x68, 0x07, 0x8c, 0x4f, 0x18, 0xf7, 0x86, 0x88, 0x63, - 0xef, 0xf2, 0xc1, 0x10, 0x0b, 0xf4, 0xc0, 0x0b, 0x18, 0xa1, 0x99, 0x7d, 0x5f, 0xd9, 0xbf, 0x53, - 0x99, 0x95, 0x90, 0x99, 0xf6, 0x34, 0x48, 0xc1, 0x08, 0x15, 0x21, 0x96, 0xa6, 0x4f, 0xf0, 0x8b, - 0x29, 0xe6, 0x42, 0x59, 0x9c, 0xbf, 0x6b, 0xb0, 0x33, 0xe0, 0xd1, 0x71, 0x82, 0x91, 0xc0, 0xc7, - 0x69, 0x88, 0xd9, 0x85, 0x56, 0xc0, 0x58, 0x12, 0x12, 0x8a, 0x04, 0x4b, 0x2c, 0xa3, 0x6b, 0xf4, - 0x9a, 0xbe, 0xae, 0x32, 0xef, 0xc1, 0x4e, 0x84, 0x29, 0xe6, 0x84, 0xcb, 0x88, 0xd3, 0x13, 0x6b, - 0x5d, 0x3a, 0x55, 0xb4, 0xe6, 0x01, 0x34, 0x39, 0x9b, 0x26, 0x01, 0x7e, 0xea, 0x3f, 0xb1, 0x6a, - 0xd2, 0x65, 0xa6, 0x30, 0xdb, 0x00, 0x4a, 0x78, 0x8c, 0xf8, 0xc8, 0xaa, 0x4b, 0xb3, 0xa6, 0x31, - 0x1f, 0xc3, 0x0e, 0xa1, 0x44, 0x10, 0x34, 0x7e, 0xa4, 0xd2, 0x5a, 0x1b, 0x5d, 0xa3, 0xd7, 0x3a, - 0xb4, 0xdd, 0x59, 0x8f, 0xdd, 0xd3, 0x92, 0x47, 0xbf, 0xfe, 0xe6, 0x5d, 0x67, 0xcd, 0xaf, 0xc4, - 0xa5, 0x27, 0x8d, 0x10, 0x3f, 0x4b, 0xd8, 0xf7, 0x38, 0x10, 0xd6, 0x66, 0xd7, 0xe8, 0x35, 0x7c, - 0x4d, 0x93, 0xe2, 0x8c, 0xd5, 0xe7, 0xe9, 0x89, 0xb5, 0xd5, 0x35, 0x7a, 0x75, 0x7f, 0xa6, 0x30, - 0x7f, 0x35, 0x60, 0xe7, 0x28, 0x08, 0xd8, 0x94, 0x8a, 0x3e, 0x1a, 0x23, 0x1a, 0x60, 0xab, 0xd1, - 0xad, 0xf5, 0x5a, 0x87, 0xfb, 0x6e, 0xd6, 0xfc, 0x74, 0x52, 0x6e, 0x36, 0x29, 0xf7, 0x98, 0x11, - 0xda, 0xff, 0x36, 0xc5, 0xf1, 0xef, 0xbb, 0xce, 0x17, 0x11, 0x11, 0xa3, 0xe9, 0xd0, 0x0d, 0xd8, - 0x24, 0x9b, 0x54, 0xf6, 0x73, 0x9f, 0x87, 0x3f, 0x78, 0xe2, 0xc7, 0x18, 0x73, 0x19, 0xf0, 0xfa, - 0x7d, 0xa7, 0xb7, 0xa2, 0x2b, 0xf7, 0x2b, 0x68, 0x4c, 0x1b, 0x1a, 0x13, 0x2c, 0x50, 0x88, 0x04, - 0xb2, 0x9a, 0x5d, 0xa3, 0xb7, 0xed, 0x17, 0xb2, 0xf3, 0x35, 0xec, 0x95, 0xc7, 0xeb, 0x63, 0x1e, - 0x33, 0xca, 0x65, 0x94, 0xea, 0xe1, 0xe9, 0x89, 0x9c, 0x71, 0xdd, 0x2f, 0x64, 0xe7, 0xb5, 0x01, - 0xdb, 0x03, 0x1e, 0x7d, 0x13, 0x12, 0xb1, 0x2a, 0x27, 0xf4, 0x74, 0xeb, 0xe5, 0x74, 0xa6, 0x03, - 0xdb, 0x1c, 0x8b, 0xb3, 0xa2, 0xc5, 0x35, 0x39, 0x81, 0x92, 0xae, 0x3c, 0x83, 0x7a, 0x75, 0x06, - 0x7a, 0x89, 0x1b, 0x95, 0x12, 0xf7, 0x60, 0x57, 0xc7, 0x9a, 0x17, 0xe8, 0xfc, 0xbc, 0x0e, 0xf6, - 0x80, 0x47, 0x4f, 0xe3, 0x10, 0x09, 0xfc, 0x44, 0x61, 0xa1, 0xcf, 0x59, 0x32, 0x41, 0x82, 0xb0, - 0xff, 0x5b, 0xd2, 0xfc, 0x0a, 0xd4, 0x6e, 0x5f, 0x81, 0xfa, 0xf2, 0x15, 0xd8, 0x98, 0x5b, 0x81, - 0xfe, 0xdc, 0x0a, 0x6c, 0xde, 0xb6, 0x02, 0x55, 0xf2, 0x3b, 0x77, 0xc1, 0x59, 0xdc, 0x85, 0xa2, - 0x59, 0x3f, 0x19, 0xf2, 0x1e, 0x38, 0xc7, 0x34, 0xf4, 0xd5, 0x05, 0x61, 0x5a, 0xb0, 0x15, 0xa4, - 0xbc, 0x29, 0x9a, 0x93, 0x8b, 0x4b, 0x1b, 0xf3, 0x10, 0xb6, 0x02, 0x46, 0x05, 0xa6, 0x42, 0x76, - 0xa4, 0x82, 0x35, 0xcb, 0x7d, 0xac, 0x3c, 0xb2, 0x75, 0xcd, 0x03, 0x9c, 0x67, 0x92, 0xac, 0x1a, - 0x86, 0x82, 0xac, 0x07, 0xd0, 0xcc, 0xee, 0xad, 0x82, 0xad, 0x33, 0x45, 0xca, 0x2f, 0x34, 0x15, - 0xec, 0x28, 0x8e, 0x13, 0x76, 0x89, 0x43, 0x89, 0xa9, 0xe1, 0x97, 0x74, 0xce, 0x2f, 0x06, 0x7c, - 0x22, 0x93, 0x0b, 0x31, 0xc6, 0x79, 0x89, 0x5f, 0xc2, 0x26, 0x27, 0x11, 0xc5, 0x59, 0x85, 0x7d, - 0xeb, 0x8f, 0xdf, 0xef, 0xef, 0x66, 0x4b, 0x7d, 0x14, 0x86, 0x09, 0xe6, 0xfc, 0x5c, 0x24, 0x84, - 0x46, 0x7e, 0xe6, 0xb7, 0xb4, 0xf4, 0x12, 0xc8, 0x5a, 0x15, 0xa4, 0x05, 0x5b, 0x48, 0x81, 0x91, - 0x3c, 0x68, 0xf8, 0xb9, 0xe8, 0xd8, 0x60, 0x55, 0x91, 0x15, 0x73, 0xf9, 0x4d, 0xc1, 0xbe, 0x48, - 0x48, 0x14, 0xe1, 0x44, 0xcd, 0xcf, 0x7c, 0x78, 0x03, 0x75, 0x97, 0x60, 0x5f, 0x99, 0xd4, 0x27, - 0x00, 0xea, 0xfb, 0x82, 0x4c, 0x70, 0x31, 0x3e, 0xf5, 0x5e, 0xb9, 0xf9, 0x7b, 0xe5, 0x5e, 0xe4, - 0xef, 0x55, 0xbf, 0x91, 0x8e, 0xef, 0xd5, 0xfb, 0x8e, 0xe1, 0x6b, 0x71, 0x59, 0x39, 0x25, 0xc4, - 0x45, 0x39, 0x04, 0x3e, 0x1e, 0xf0, 0xc8, 0xc7, 0x97, 0x38, 0x11, 0x1f, 0xb6, 0x18, 0x67, 0x1f, - 0xee, 0x54, 0x8e, 0xca, 0x51, 0x1c, 0xfe, 0x55, 0x87, 0xda, 0x80, 0x47, 0xe6, 0x00, 0x5a, 0xfa, - 0xc3, 0x57, 0x62, 0x6a, 0xf9, 0xd6, 0xb4, 0x9d, 0xc5, 0xb6, 0x82, 0xa4, 0x8f, 0xa0, 0x39, 0xbb, - 0x31, 0xad, 0x4a, 0x40, 0x61, 0xb1, 0xbb, 0x8b, 0x2c, 0x45, 0xa2, 0x17, 0x70, 0x67, 0xd1, 0xad, - 0x75, 0xaf, 0x12, 0xbc, 0xc0, 0xcf, 0x76, 0x57, 0xf3, 0x2b, 0x8e, 0x1c, 0x40, 0x4b, 0xdf, 0xfd, - 0x6a, 0x2b, 0x34, 0xdb, 0x5c, 0x2b, 0x6e, 0xda, 0xd7, 0x73, 0xf8, 0xa8, 0xbc, 0x69, 0x07, 0x73, - 0x41, 0x9a, 0xd5, 0xbe, 0xbb, 0xcc, 0xaa, 0x27, 0x2d, 0xef, 0x41, 0x35, 0x69, 0xc9, 0x3a, 0x97, - 0xf4, 0x46, 0x46, 0x9a, 0x67, 0xb0, 0x5d, 0xa2, 0xe3, 0x67, 0x95, 0x28, 0xdd, 0x68, 0x7f, 0xbe, - 0xc4, 0x98, 0x67, 0xec, 0xf7, 0xdf, 0x5c, 0xb5, 0x8d, 0xb7, 0x57, 0x6d, 0xe3, 0x9f, 0xab, 0xb6, - 0xf1, 0xea, 0xba, 0xbd, 0xf6, 0xf6, 0xba, 0xbd, 0xf6, 0xe7, 0x75, 0x7b, 0xed, 0x99, 0xfe, 0xc4, - 0x0b, 0x4c, 0x43, 0x9c, 0x4c, 0x08, 0x15, 0x5e, 0xfa, 0xe7, 0xec, 0x65, 0xf1, 0x4f, 0x32, 0x7d, - 0xe8, 0x87, 0x9b, 0x72, 0xdb, 0xbe, 0xfa, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x21, 0x24, 0x5c, 0x78, - 0x64, 0x0a, 0x00, 0x00, + proto.RegisterType((*MsgUpdateParams)(nil), "network.launch.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "network.launch.v1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgCreateChain)(nil), "network.launch.v1.MsgCreateChain") + proto.RegisterType((*MsgCreateChainResponse)(nil), "network.launch.v1.MsgCreateChainResponse") + proto.RegisterType((*MsgEditChain)(nil), "network.launch.v1.MsgEditChain") + proto.RegisterType((*MsgEditChainResponse)(nil), "network.launch.v1.MsgEditChainResponse") + proto.RegisterType((*MsgUpdateLaunchInformation)(nil), "network.launch.v1.MsgUpdateLaunchInformation") + proto.RegisterType((*MsgUpdateLaunchInformationResponse)(nil), "network.launch.v1.MsgUpdateLaunchInformationResponse") + proto.RegisterType((*MsgSendRequest)(nil), "network.launch.v1.MsgSendRequest") + proto.RegisterType((*MsgSendRequestResponse)(nil), "network.launch.v1.MsgSendRequestResponse") + proto.RegisterType((*MsgSettleRequest)(nil), "network.launch.v1.MsgSettleRequest") + proto.RegisterType((*MsgSettleRequestResponse)(nil), "network.launch.v1.MsgSettleRequestResponse") + proto.RegisterType((*MsgTriggerLaunch)(nil), "network.launch.v1.MsgTriggerLaunch") + proto.RegisterType((*MsgTriggerLaunchResponse)(nil), "network.launch.v1.MsgTriggerLaunchResponse") + proto.RegisterType((*MsgRevertLaunch)(nil), "network.launch.v1.MsgRevertLaunch") + proto.RegisterType((*MsgRevertLaunchResponse)(nil), "network.launch.v1.MsgRevertLaunchResponse") +} + +func init() { proto.RegisterFile("network/launch/v1/tx.proto", fileDescriptor_485455467792033b) } + +var fileDescriptor_485455467792033b = []byte{ + // 1112 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0xce, 0xd6, 0x8e, 0x63, 0x4f, 0x4c, 0x68, 0x57, 0x51, 0xb3, 0x59, 0x15, 0xdb, 0x5d, 0x10, + 0x35, 0x41, 0xd9, 0x25, 0x29, 0x70, 0x88, 0xb8, 0xc4, 0x09, 0x02, 0x4b, 0x8d, 0x88, 0xb6, 0xc9, + 0xa5, 0x48, 0x54, 0xe3, 0xf5, 0x74, 0xbd, 0xd4, 0xbb, 0xe3, 0xee, 0x8c, 0x4d, 0x23, 0x0e, 0x20, + 0x8e, 0x9c, 0x7a, 0xe6, 0x0c, 0x08, 0x71, 0x0a, 0x52, 0x25, 0x2e, 0x9c, 0x38, 0xf5, 0x58, 0x71, + 0x40, 0x9c, 0x5a, 0x94, 0x1c, 0xf2, 0x1f, 0x38, 0xa1, 0x9d, 0x99, 0x5d, 0xcf, 0xae, 0xd7, 0x71, + 0x10, 0xca, 0x25, 0xf1, 0xbc, 0xf9, 0x66, 0xde, 0x7b, 0xdf, 0x7b, 0xdf, 0xec, 0x03, 0x7a, 0x80, + 0xe8, 0x17, 0x38, 0x7c, 0x68, 0xf5, 0xe1, 0x30, 0x70, 0x7a, 0xd6, 0x68, 0xc3, 0xa2, 0x8f, 0xcd, + 0x41, 0x88, 0x29, 0x56, 0xaf, 0x89, 0x3d, 0x93, 0xef, 0x99, 0xa3, 0x0d, 0xfd, 0x1a, 0xf4, 0xbd, + 0x00, 0x5b, 0xec, 0x2f, 0x47, 0xe9, 0x35, 0x07, 0x13, 0x1f, 0x13, 0xab, 0x03, 0x09, 0xb2, 0x46, + 0x1b, 0x1d, 0x44, 0xe1, 0x86, 0xe5, 0x60, 0x2f, 0x10, 0xfb, 0x2b, 0x62, 0xdf, 0x27, 0x6e, 0x74, + 0xbb, 0x4f, 0x5c, 0xb1, 0xb1, 0xca, 0x37, 0xee, 0xb3, 0x95, 0xc5, 0x17, 0x62, 0x6b, 0xd9, 0xc5, + 0x2e, 0xe6, 0xf6, 0xe8, 0x97, 0xb0, 0xd6, 0x5d, 0x8c, 0xdd, 0x3e, 0xb2, 0xd8, 0xaa, 0x33, 0x7c, + 0x60, 0x51, 0xcf, 0x47, 0x84, 0x42, 0x7f, 0x20, 0x00, 0xaf, 0x4d, 0x26, 0xe3, 0xf4, 0x60, 0x12, + 0x49, 0x6d, 0x72, 0x7b, 0x00, 0x43, 0xe8, 0xc7, 0x5e, 0xeb, 0x93, 0xfb, 0x21, 0x7a, 0x34, 0x44, + 0x84, 0x72, 0x80, 0xf1, 0x9b, 0x02, 0x5e, 0xdd, 0x23, 0xee, 0xe1, 0xa0, 0x0b, 0x29, 0xda, 0x67, + 0x47, 0xd5, 0xf7, 0x41, 0x05, 0x0e, 0x69, 0x0f, 0x87, 0x1e, 0x3d, 0xd2, 0x94, 0x86, 0xd2, 0xac, + 0xb4, 0xb4, 0x3f, 0x9e, 0xae, 0x2f, 0x8b, 0x7c, 0xb6, 0xbb, 0xdd, 0x10, 0x11, 0x72, 0x97, 0x86, + 0x5e, 0xe0, 0xda, 0x63, 0xa8, 0xfa, 0x01, 0x28, 0x71, 0xe7, 0xda, 0x95, 0x86, 0xd2, 0x5c, 0xdc, + 0x5c, 0x35, 0x27, 0xd8, 0x36, 0xb9, 0x8b, 0x56, 0xe5, 0xd9, 0x8b, 0xfa, 0xdc, 0x4f, 0x67, 0xc7, + 0x6b, 0x8a, 0x2d, 0xce, 0x6c, 0xdd, 0xfe, 0xe6, 0xec, 0x78, 0x6d, 0x7c, 0xdb, 0xb7, 0x67, 0xc7, + 0x6b, 0x8d, 0x38, 0xfa, 0xc7, 0x71, 0xfc, 0x99, 0x50, 0x8d, 0x55, 0xb0, 0x92, 0x31, 0xd9, 0x88, + 0x0c, 0x70, 0x40, 0x90, 0xf1, 0x63, 0x11, 0x2c, 0xed, 0x11, 0x77, 0x27, 0x44, 0x90, 0xa2, 0x9d, + 0x88, 0x33, 0x75, 0x0b, 0x2c, 0x3a, 0x18, 0x87, 0x5d, 0x2f, 0x80, 0x14, 0x87, 0x33, 0x53, 0x93, + 0xc1, 0xea, 0x9b, 0x60, 0xc9, 0x45, 0x01, 0x22, 0x1e, 0x61, 0x77, 0xb5, 0x77, 0x59, 0x92, 0x15, + 0x3b, 0x63, 0x55, 0x6f, 0x80, 0x0a, 0xc1, 0xc3, 0xd0, 0x41, 0x87, 0xf6, 0x1d, 0xad, 0xc0, 0x20, + 0x63, 0x83, 0x5a, 0x03, 0x80, 0x2f, 0x3e, 0x86, 0xa4, 0xa7, 0x15, 0xd9, 0xb6, 0x64, 0x51, 0x3f, + 0x01, 0x4b, 0x5e, 0xe0, 0x51, 0x0f, 0xf6, 0x3f, 0xe2, 0xd7, 0x6a, 0xf3, 0x8c, 0xca, 0x9b, 0x39, + 0x54, 0xb6, 0x53, 0xc0, 0x56, 0x31, 0xa2, 0xd4, 0xce, 0x1c, 0x8f, 0x1c, 0xf6, 0x20, 0xd9, 0x0f, + 0xf1, 0xe7, 0xc8, 0xa1, 0x5a, 0xa9, 0xa1, 0x34, 0xcb, 0xb6, 0x64, 0x89, 0xc2, 0x1d, 0xf0, 0x9f, + 0xed, 0x5d, 0x6d, 0xa1, 0xa1, 0x34, 0x8b, 0xf6, 0xd8, 0xa0, 0x3e, 0x55, 0xc0, 0x12, 0x74, 0x1c, + 0x3c, 0x0c, 0x68, 0x0b, 0xf6, 0x61, 0xe0, 0x20, 0xad, 0xdc, 0x28, 0xb0, 0xd2, 0x0a, 0xc6, 0x22, + 0x89, 0x98, 0x42, 0x22, 0xe6, 0x0e, 0xf6, 0x82, 0xd6, 0xa3, 0x28, 0x8e, 0x7f, 0x5e, 0xd4, 0x6f, + 0xb9, 0x1e, 0xed, 0x0d, 0x3b, 0xa6, 0x83, 0x7d, 0xa1, 0x04, 0xf1, 0x6f, 0x9d, 0x74, 0x1f, 0x5a, + 0xf4, 0x68, 0x80, 0x08, 0x3b, 0xf0, 0xf3, 0xcb, 0x7a, 0xf3, 0x82, 0x50, 0xf2, 0xdd, 0xd9, 0xf1, + 0x5a, 0xb5, 0x8f, 0x5c, 0xe8, 0x1c, 0xdd, 0x8f, 0xf4, 0x48, 0x78, 0x0b, 0x65, 0x62, 0x54, 0x75, + 0x50, 0xf6, 0x11, 0x85, 0x5d, 0x48, 0xa1, 0x56, 0x69, 0x28, 0xcd, 0xaa, 0x9d, 0xac, 0xb7, 0xae, + 0x46, 0x6d, 0x26, 0x57, 0xd6, 0x78, 0x17, 0x5c, 0x4f, 0xf7, 0x49, 0xdc, 0x42, 0xd1, 0x3d, 0x9c, + 0xee, 0xf6, 0x2e, 0x6b, 0x96, 0xa2, 0x9d, 0xac, 0x8d, 0x3f, 0x15, 0x50, 0xdd, 0x23, 0xee, 0x87, + 0x5d, 0x8f, 0xfe, 0xff, 0xe6, 0x92, 0x1d, 0x5d, 0x49, 0x3b, 0x52, 0x0d, 0x50, 0x25, 0x88, 0xee, + 0x27, 0x45, 0x2a, 0xb0, 0x1a, 0xa6, 0x6c, 0xe9, 0x2a, 0x16, 0xb3, 0x55, 0x94, 0xe9, 0x98, 0x9f, + 0x49, 0xc7, 0x75, 0xb0, 0x2c, 0xe7, 0x95, 0xe8, 0xe9, 0xd7, 0x2b, 0x40, 0x4f, 0xb4, 0x76, 0x87, + 0x47, 0x17, 0x3c, 0xc0, 0xa1, 0x0f, 0xa9, 0x87, 0x2f, 0x2f, 0xfd, 0x49, 0xdd, 0x15, 0x66, 0xeb, + 0xae, 0x78, 0xbe, 0xee, 0xe6, 0x27, 0x74, 0xd7, 0x9e, 0xd0, 0x5d, 0xe9, 0x82, 0xba, 0xcb, 0x2a, + 0x2e, 0x87, 0xd1, 0x37, 0x80, 0x31, 0x9d, 0xb8, 0x84, 0xdf, 0x5f, 0x14, 0xf6, 0x5e, 0xdd, 0x45, + 0x41, 0xd7, 0xe6, 0x4f, 0xb4, 0xba, 0x09, 0x16, 0x9c, 0xa8, 0x2d, 0x2f, 0xc0, 0x67, 0x0c, 0x3c, + 0x97, 0xcb, 0x6d, 0xb0, 0xe0, 0xe0, 0x80, 0xa2, 0x80, 0x32, 0x12, 0xf3, 0xd3, 0x13, 0xce, 0x77, + 0x38, 0x50, 0x3c, 0x2b, 0xf1, 0xb9, 0xad, 0x6a, 0x94, 0x5d, 0xec, 0xcc, 0xb8, 0xc7, 0xa4, 0x23, + 0x85, 0x9c, 0x48, 0xe7, 0x06, 0xa8, 0x88, 0x0f, 0x4d, 0xa2, 0x9d, 0xb1, 0x21, 0xea, 0x69, 0x38, + 0xa4, 0x78, 0x7b, 0x30, 0x08, 0xf1, 0x08, 0x75, 0x59, 0xa0, 0x65, 0x3b, 0x65, 0x33, 0x7e, 0x50, + 0xc0, 0x55, 0x76, 0x39, 0xa5, 0x7d, 0x14, 0x33, 0xf2, 0x0e, 0x28, 0x11, 0xcf, 0x0d, 0xd0, 0x6c, + 0x42, 0x04, 0xee, 0x5c, 0x3e, 0x52, 0x41, 0x16, 0xb2, 0x41, 0x6a, 0x60, 0x01, 0xf2, 0x60, 0x58, + 0x3f, 0x95, 0xed, 0x78, 0xb9, 0xb5, 0x18, 0x91, 0x20, 0x1c, 0x18, 0x3a, 0xd0, 0xb2, 0x61, 0x26, + 0x35, 0xfd, 0x9d, 0xe7, 0x70, 0x10, 0x7a, 0xae, 0x8b, 0x42, 0x5e, 0xfb, 0x4b, 0x53, 0xca, 0x2e, + 0x00, 0xfc, 0xf7, 0x81, 0xe7, 0x23, 0x51, 0x60, 0xdd, 0xe4, 0x03, 0x86, 0x19, 0x0f, 0x18, 0xe6, + 0x41, 0x3c, 0x60, 0xb4, 0xca, 0x51, 0x65, 0x9f, 0xbc, 0xac, 0x2b, 0xb6, 0x74, 0x2e, 0xa7, 0x7d, + 0x79, 0x82, 0xa9, 0x1c, 0x92, 0x04, 0xbf, 0x64, 0xd3, 0x83, 0x8d, 0x46, 0x28, 0xa4, 0x97, 0x9b, + 0x5e, 0x4e, 0x60, 0xfc, 0xe3, 0x2f, 0x3b, 0x8f, 0xe3, 0xda, 0xfc, 0xbe, 0x04, 0x0a, 0x7b, 0xc4, + 0x55, 0x3f, 0x03, 0xd5, 0xd4, 0x68, 0x63, 0xe4, 0x34, 0x7c, 0x66, 0x80, 0xd0, 0xd7, 0x66, 0x63, + 0x92, 0x36, 0xff, 0x14, 0x2c, 0xca, 0x03, 0xc6, 0xcd, 0xfc, 0xa3, 0x12, 0x44, 0x7f, 0x6b, 0x26, + 0x24, 0xb9, 0xfc, 0x10, 0x54, 0xc6, 0x9f, 0x97, 0x7a, 0xfe, 0xb9, 0x04, 0xa0, 0xdf, 0x9a, 0x01, + 0x48, 0xae, 0xfd, 0x0a, 0xac, 0x4c, 0x7b, 0xc4, 0xd7, 0xcf, 0x4b, 0x7d, 0x02, 0xae, 0xbf, 0xf7, + 0x9f, 0xe0, 0x32, 0x69, 0xf2, 0x2b, 0x37, 0x85, 0x34, 0x09, 0x32, 0x8d, 0xb4, 0xbc, 0x87, 0x07, + 0x82, 0x57, 0xd2, 0x4f, 0xc6, 0xeb, 0xd3, 0xce, 0x4a, 0x20, 0xfd, 0xed, 0x0b, 0x80, 0x64, 0x17, + 0x69, 0x45, 0x4f, 0x71, 0x91, 0x02, 0x4d, 0x73, 0x91, 0xab, 0xab, 0xa8, 0x6f, 0x53, 0xa2, 0x9a, + 0xd2, 0xb7, 0x32, 0x66, 0x5a, 0xdf, 0xe6, 0xe9, 0x43, 0x9f, 0xff, 0x3a, 0x1a, 0x9c, 0x5a, 0xad, + 0x67, 0x27, 0x35, 0xe5, 0xf9, 0x49, 0x4d, 0xf9, 0xfb, 0xa4, 0xa6, 0x3c, 0x39, 0xad, 0xcd, 0x3d, + 0x3f, 0xad, 0xcd, 0xfd, 0x75, 0x5a, 0x9b, 0xbb, 0x27, 0x8f, 0x64, 0x9e, 0x1b, 0x78, 0x14, 0x59, + 0x13, 0xc3, 0x38, 0x1b, 0xcc, 0x3a, 0x25, 0xf6, 0xb4, 0xdc, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, + 0x18, 0xd5, 0x53, 0x1f, 0x77, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -913,6 +1021,9 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) CreateChain(ctx context.Context, in *MsgCreateChain, opts ...grpc.CallOption) (*MsgCreateChainResponse, error) EditChain(ctx context.Context, in *MsgEditChain, opts ...grpc.CallOption) (*MsgEditChainResponse, error) UpdateLaunchInformation(ctx context.Context, in *MsgUpdateLaunchInformation, opts ...grpc.CallOption) (*MsgUpdateLaunchInformationResponse, error) @@ -930,9 +1041,18 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/network.launch.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) CreateChain(ctx context.Context, in *MsgCreateChain, opts ...grpc.CallOption) (*MsgCreateChainResponse, error) { out := new(MsgCreateChainResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Msg/CreateChain", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Msg/CreateChain", in, out, opts...) if err != nil { return nil, err } @@ -941,7 +1061,7 @@ func (c *msgClient) CreateChain(ctx context.Context, in *MsgCreateChain, opts .. func (c *msgClient) EditChain(ctx context.Context, in *MsgEditChain, opts ...grpc.CallOption) (*MsgEditChainResponse, error) { out := new(MsgEditChainResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Msg/EditChain", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Msg/EditChain", in, out, opts...) if err != nil { return nil, err } @@ -950,7 +1070,7 @@ func (c *msgClient) EditChain(ctx context.Context, in *MsgEditChain, opts ...grp func (c *msgClient) UpdateLaunchInformation(ctx context.Context, in *MsgUpdateLaunchInformation, opts ...grpc.CallOption) (*MsgUpdateLaunchInformationResponse, error) { out := new(MsgUpdateLaunchInformationResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Msg/UpdateLaunchInformation", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Msg/UpdateLaunchInformation", in, out, opts...) if err != nil { return nil, err } @@ -959,7 +1079,7 @@ func (c *msgClient) UpdateLaunchInformation(ctx context.Context, in *MsgUpdateLa func (c *msgClient) SendRequest(ctx context.Context, in *MsgSendRequest, opts ...grpc.CallOption) (*MsgSendRequestResponse, error) { out := new(MsgSendRequestResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Msg/SendRequest", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Msg/SendRequest", in, out, opts...) if err != nil { return nil, err } @@ -968,7 +1088,7 @@ func (c *msgClient) SendRequest(ctx context.Context, in *MsgSendRequest, opts .. func (c *msgClient) SettleRequest(ctx context.Context, in *MsgSettleRequest, opts ...grpc.CallOption) (*MsgSettleRequestResponse, error) { out := new(MsgSettleRequestResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Msg/SettleRequest", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Msg/SettleRequest", in, out, opts...) if err != nil { return nil, err } @@ -977,7 +1097,7 @@ func (c *msgClient) SettleRequest(ctx context.Context, in *MsgSettleRequest, opt func (c *msgClient) TriggerLaunch(ctx context.Context, in *MsgTriggerLaunch, opts ...grpc.CallOption) (*MsgTriggerLaunchResponse, error) { out := new(MsgTriggerLaunchResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Msg/TriggerLaunch", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Msg/TriggerLaunch", in, out, opts...) if err != nil { return nil, err } @@ -986,7 +1106,7 @@ func (c *msgClient) TriggerLaunch(ctx context.Context, in *MsgTriggerLaunch, opt func (c *msgClient) RevertLaunch(ctx context.Context, in *MsgRevertLaunch, opts ...grpc.CallOption) (*MsgRevertLaunchResponse, error) { out := new(MsgRevertLaunchResponse) - err := c.cc.Invoke(ctx, "/spn.launch.Msg/RevertLaunch", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.launch.v1.Msg/RevertLaunch", in, out, opts...) if err != nil { return nil, err } @@ -995,6 +1115,9 @@ func (c *msgClient) RevertLaunch(ctx context.Context, in *MsgRevertLaunch, opts // MsgServer is the server API for Msg service. type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) CreateChain(context.Context, *MsgCreateChain) (*MsgCreateChainResponse, error) EditChain(context.Context, *MsgEditChain) (*MsgEditChainResponse, error) UpdateLaunchInformation(context.Context, *MsgUpdateLaunchInformation) (*MsgUpdateLaunchInformationResponse, error) @@ -1008,6 +1131,9 @@ type MsgServer interface { type UnimplementedMsgServer struct { } +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} func (*UnimplementedMsgServer) CreateChain(ctx context.Context, req *MsgCreateChain) (*MsgCreateChainResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateChain not implemented") } @@ -1034,6 +1160,24 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/network.launch.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_CreateChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgCreateChain) if err := dec(in); err != nil { @@ -1044,7 +1188,7 @@ func _Msg_CreateChain_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Msg/CreateChain", + FullMethod: "/network.launch.v1.Msg/CreateChain", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).CreateChain(ctx, req.(*MsgCreateChain)) @@ -1062,7 +1206,7 @@ func _Msg_EditChain_Handler(srv interface{}, ctx context.Context, dec func(inter } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Msg/EditChain", + FullMethod: "/network.launch.v1.Msg/EditChain", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).EditChain(ctx, req.(*MsgEditChain)) @@ -1080,7 +1224,7 @@ func _Msg_UpdateLaunchInformation_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Msg/UpdateLaunchInformation", + FullMethod: "/network.launch.v1.Msg/UpdateLaunchInformation", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateLaunchInformation(ctx, req.(*MsgUpdateLaunchInformation)) @@ -1098,7 +1242,7 @@ func _Msg_SendRequest_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Msg/SendRequest", + FullMethod: "/network.launch.v1.Msg/SendRequest", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).SendRequest(ctx, req.(*MsgSendRequest)) @@ -1116,7 +1260,7 @@ func _Msg_SettleRequest_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Msg/SettleRequest", + FullMethod: "/network.launch.v1.Msg/SettleRequest", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).SettleRequest(ctx, req.(*MsgSettleRequest)) @@ -1134,7 +1278,7 @@ func _Msg_TriggerLaunch_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Msg/TriggerLaunch", + FullMethod: "/network.launch.v1.Msg/TriggerLaunch", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).TriggerLaunch(ctx, req.(*MsgTriggerLaunch)) @@ -1152,7 +1296,7 @@ func _Msg_RevertLaunch_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.launch.Msg/RevertLaunch", + FullMethod: "/network.launch.v1.Msg/RevertLaunch", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RevertLaunch(ctx, req.(*MsgRevertLaunch)) @@ -1161,9 +1305,13 @@ func _Msg_RevertLaunch_Handler(srv interface{}, ctx context.Context, dec func(in } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.launch.Msg", + ServiceName: "network.launch.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, { MethodName: "CreateChain", Handler: _Msg_CreateChain_Handler, @@ -1194,7 +1342,70 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/launch/tx.proto", + Metadata: "network/launch/v1/tx.proto", +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil } func (m *MsgCreateChain) Marshal() (dAtA []byte, err error) { @@ -1669,12 +1880,12 @@ func (m *MsgTriggerLaunch) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LaunchTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LaunchTime):]) - if err4 != nil { - return 0, err4 + n5, err5 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LaunchTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LaunchTime):]) + if err5 != nil { + return 0, err5 } - i -= n4 - i = encodeVarintTx(dAtA, i, uint64(n4)) + i -= n5 + i = encodeVarintTx(dAtA, i, uint64(n5)) i-- dAtA[i] = 0x1a if m.LaunchID != 0 { @@ -1784,6 +1995,30 @@ func encodeVarintTx(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgCreateChain) Size() (n int) { if m == nil { return 0 @@ -2037,6 +2272,171 @@ func sovTx(x uint64) (n int) { func sozTx(x uint64) (n int) { return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgCreateChain) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/launch/types/types.go b/x/launch/types/types.go new file mode 100644 index 00000000..ab1254f4 --- /dev/null +++ b/x/launch/types/types.go @@ -0,0 +1 @@ +package types diff --git a/x/launch/types/vesting_account.pb.go b/x/launch/types/vesting_account.pb.go index ea2b8b6c..cff453b3 100644 --- a/x/launch/types/vesting_account.pb.go +++ b/x/launch/types/vesting_account.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/launch/vesting_account.proto +// source: network/launch/v1/vesting_account.proto package types @@ -8,6 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" @@ -40,7 +41,7 @@ func (m *VestingAccount) Reset() { *m = VestingAccount{} } func (m *VestingAccount) String() string { return proto.CompactTextString(m) } func (*VestingAccount) ProtoMessage() {} func (*VestingAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_db19ff708781896c, []int{0} + return fileDescriptor_51552d948d85602c, []int{0} } func (m *VestingAccount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -92,7 +93,6 @@ func (m *VestingAccount) GetVestingOptions() VestingOptions { type VestingOptions struct { // Types that are valid to be assigned to Options: - // // *VestingOptions_DelayedVesting Options isVestingOptions_Options `protobuf_oneof:"options"` } @@ -101,7 +101,7 @@ func (m *VestingOptions) Reset() { *m = VestingOptions{} } func (m *VestingOptions) String() string { return proto.CompactTextString(m) } func (*VestingOptions) ProtoMessage() {} func (*VestingOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_db19ff708781896c, []int{1} + return fileDescriptor_51552d948d85602c, []int{1} } func (m *VestingOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -176,7 +176,7 @@ func (m *DelayedVesting) Reset() { *m = DelayedVesting{} } func (m *DelayedVesting) String() string { return proto.CompactTextString(m) } func (*DelayedVesting) ProtoMessage() {} func (*DelayedVesting) Descriptor() ([]byte, []int) { - return fileDescriptor_db19ff708781896c, []int{2} + return fileDescriptor_51552d948d85602c, []int{2} } func (m *DelayedVesting) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -227,44 +227,49 @@ func (m *DelayedVesting) GetEndTime() time.Time { } func init() { - proto.RegisterType((*VestingAccount)(nil), "spn.launch.VestingAccount") - proto.RegisterType((*VestingOptions)(nil), "spn.launch.VestingOptions") - proto.RegisterType((*DelayedVesting)(nil), "spn.launch.DelayedVesting") -} - -func init() { proto.RegisterFile("spn/launch/vesting_account.proto", fileDescriptor_db19ff708781896c) } - -var fileDescriptor_db19ff708781896c = []byte{ - // 458 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x93, 0x31, 0x6f, 0xd4, 0x30, - 0x14, 0xc7, 0xe3, 0x5e, 0xc5, 0xb5, 0x2e, 0xba, 0xc1, 0xea, 0x90, 0xde, 0x90, 0x44, 0x5d, 0xc8, - 0x52, 0x5b, 0x3d, 0x76, 0xa4, 0x9a, 0x1b, 0xca, 0x84, 0x14, 0xaa, 0x0e, 0x30, 0x54, 0x4e, 0x62, - 0x52, 0x8b, 0xc4, 0x8e, 0xce, 0x4e, 0x45, 0x37, 0x3e, 0xc2, 0xcd, 0x7c, 0x84, 0xce, 0x7c, 0x88, - 0x8e, 0x15, 0x13, 0x53, 0x8b, 0xee, 0xbe, 0x05, 0x13, 0x4a, 0xec, 0x1c, 0xe4, 0x26, 0x36, 0xa6, - 0xe4, 0xf9, 0xfd, 0xff, 0x79, 0xbf, 0x97, 0xf7, 0x0c, 0x23, 0x5d, 0x4b, 0x52, 0xb2, 0x46, 0x66, - 0xd7, 0xe4, 0x86, 0x6b, 0x23, 0x64, 0x71, 0xc5, 0xb2, 0x4c, 0x35, 0xd2, 0xe0, 0x7a, 0xa1, 0x8c, - 0x42, 0x50, 0xd7, 0x12, 0x5b, 0xc5, 0xf4, 0xb0, 0x50, 0x85, 0xea, 0x8e, 0x49, 0xfb, 0x66, 0x15, - 0xd3, 0x20, 0x53, 0xba, 0x52, 0x9a, 0xa4, 0x4c, 0x73, 0x72, 0x73, 0x9a, 0x72, 0xc3, 0x4e, 0x49, - 0xa6, 0x84, 0x74, 0xf9, 0x23, 0x9b, 0xbf, 0xb2, 0x46, 0x1b, 0xb8, 0x54, 0x58, 0x28, 0x55, 0x94, - 0x9c, 0x74, 0x51, 0xda, 0x7c, 0x24, 0x46, 0x54, 0x5c, 0x1b, 0x56, 0xd5, 0x56, 0x70, 0x7c, 0x07, - 0xe0, 0xe4, 0xd2, 0x72, 0x9d, 0x59, 0x2c, 0x34, 0x85, 0x7b, 0x16, 0xe7, 0xcd, 0xdc, 0x07, 0x11, - 0x88, 0x77, 0x93, 0x4d, 0x8c, 0x66, 0x70, 0xcc, 0xf2, 0x7c, 0xc1, 0xb5, 0xf6, 0x77, 0x22, 0x10, - 0xef, 0x53, 0xff, 0xfb, 0xb7, 0x93, 0x43, 0x57, 0xf2, 0xcc, 0x66, 0xde, 0x99, 0x85, 0x90, 0x45, - 0xd2, 0x0b, 0xd1, 0x39, 0x9c, 0xb8, 0xce, 0xdf, 0xd6, 0x46, 0x28, 0xa9, 0xfd, 0x51, 0x04, 0xe2, - 0x83, 0xd9, 0x14, 0xff, 0xe9, 0x1c, 0x5f, 0x0e, 0x14, 0x74, 0xf7, 0xfe, 0x31, 0xf4, 0x92, 0x2d, - 0xdf, 0x31, 0xdb, 0xb0, 0xba, 0x13, 0x34, 0x87, 0x93, 0x9c, 0x97, 0xec, 0x96, 0xe7, 0x2e, 0xd1, - 0x11, 0x6f, 0x7d, 0x7b, 0x3e, 0x50, 0x9c, 0x7b, 0xc9, 0x96, 0x87, 0xee, 0xc3, 0xb1, 0x72, 0x25, - 0xbe, 0x8c, 0xe0, 0x64, 0xa8, 0x47, 0x5f, 0x01, 0x7c, 0x6e, 0x94, 0x61, 0x25, 0x65, 0x25, 0x93, - 0x19, 0xf7, 0x41, 0x34, 0x8a, 0x0f, 0x66, 0x47, 0xd8, 0xb5, 0xdd, 0x8e, 0x05, 0xbb, 0xb1, 0xe0, - 0xd7, 0x4a, 0x48, 0xfa, 0xa1, 0xa5, 0xff, 0xf5, 0x18, 0xbe, 0x28, 0x84, 0xb9, 0x6e, 0x52, 0x9c, - 0xa9, 0xca, 0x8d, 0xc5, 0x3d, 0x4e, 0x74, 0xfe, 0x89, 0x98, 0xdb, 0x9a, 0xeb, 0xce, 0x70, 0xf7, - 0x14, 0xc6, 0xff, 0x28, 0xd5, 0xc9, 0x80, 0x05, 0x2d, 0x01, 0x1c, 0xbb, 0xbf, 0xe4, 0xef, 0xfc, - 0x57, 0xae, 0x1e, 0x03, 0xbd, 0x82, 0x63, 0x2e, 0xf3, 0x0b, 0x51, 0xf1, 0xcd, 0xa0, 0xed, 0x16, - 0xe2, 0x7e, 0x0b, 0xf1, 0x45, 0xbf, 0x85, 0x74, 0xaf, 0x45, 0x5a, 0x3e, 0x85, 0x20, 0xe9, 0x4d, - 0x94, 0xde, 0xaf, 0x02, 0xf0, 0xb0, 0x0a, 0xc0, 0xcf, 0x55, 0x00, 0x96, 0xeb, 0xc0, 0x7b, 0x58, - 0x07, 0xde, 0x8f, 0x75, 0xe0, 0xbd, 0xff, 0x1b, 0xc6, 0x70, 0x99, 0xf3, 0x45, 0x25, 0xa4, 0x21, - 0xed, 0x15, 0xfb, 0xdc, 0x5f, 0xb2, 0x0e, 0x29, 0x7d, 0xd6, 0x95, 0x7a, 0xf9, 0x3b, 0x00, 0x00, - 0xff, 0xff, 0x52, 0x5f, 0x8e, 0xbc, 0x7f, 0x03, 0x00, 0x00, + proto.RegisterType((*VestingAccount)(nil), "network.launch.v1.VestingAccount") + proto.RegisterType((*VestingOptions)(nil), "network.launch.v1.VestingOptions") + proto.RegisterType((*DelayedVesting)(nil), "network.launch.v1.DelayedVesting") +} + +func init() { + proto.RegisterFile("network/launch/v1/vesting_account.proto", fileDescriptor_51552d948d85602c) +} + +var fileDescriptor_51552d948d85602c = []byte{ + // 501 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x93, 0x31, 0x6f, 0xd3, 0x40, + 0x14, 0xc7, 0x7d, 0x4d, 0x45, 0xda, 0x6b, 0x15, 0xa9, 0x56, 0x07, 0x37, 0x83, 0x1d, 0xba, 0xd4, + 0xaa, 0xd4, 0x3b, 0x25, 0xec, 0x48, 0x35, 0x1d, 0x40, 0x0c, 0x95, 0x4c, 0xd5, 0x81, 0x25, 0x3a, + 0xdb, 0xc7, 0xe5, 0x54, 0xfb, 0x2e, 0xe4, 0x2e, 0x81, 0x7c, 0x8b, 0xce, 0x7c, 0x00, 0x84, 0x10, + 0x43, 0x90, 0xf8, 0x10, 0x1d, 0x2b, 0x26, 0xa6, 0x16, 0x25, 0x43, 0xbf, 0x03, 0x13, 0xb2, 0xef, + 0x5c, 0x91, 0xc0, 0xc0, 0xd8, 0xc5, 0xf6, 0xbb, 0xf7, 0x7f, 0x7a, 0x3f, 0xbf, 0xf7, 0x3f, 0x78, + 0x20, 0xa8, 0x7e, 0x27, 0x47, 0x17, 0x38, 0x27, 0x63, 0x91, 0x0e, 0xf0, 0xa4, 0x8b, 0x27, 0x54, + 0x69, 0x2e, 0x58, 0x9f, 0xa4, 0xa9, 0x1c, 0x0b, 0x8d, 0x86, 0x23, 0xa9, 0xa5, 0xbb, 0x63, 0x85, + 0xc8, 0x08, 0xd1, 0xa4, 0xdb, 0xde, 0x21, 0x05, 0x17, 0x12, 0x57, 0x4f, 0xa3, 0x6a, 0xfb, 0xa9, + 0x54, 0x85, 0x54, 0x38, 0x21, 0x8a, 0xe2, 0x49, 0x37, 0xa1, 0x9a, 0x74, 0x71, 0x2a, 0xb9, 0xb0, + 0xf9, 0x3d, 0x93, 0xef, 0x57, 0x11, 0x36, 0x81, 0x4d, 0xed, 0x32, 0xc9, 0xa4, 0x39, 0x2f, 0xbf, + 0xec, 0x69, 0xc0, 0xa4, 0x64, 0x39, 0xc5, 0x55, 0x94, 0x8c, 0xdf, 0x60, 0xcd, 0x0b, 0xaa, 0x34, + 0x29, 0x86, 0x46, 0xb0, 0xff, 0x15, 0xc0, 0xd6, 0xb9, 0x21, 0x3e, 0x36, 0xc0, 0x6e, 0x1b, 0x6e, + 0x18, 0xc8, 0x17, 0x27, 0x1e, 0xe8, 0x80, 0x70, 0x3d, 0xbe, 0x8f, 0xdd, 0x1e, 0x6c, 0x92, 0x2c, + 0x1b, 0x51, 0xa5, 0xbc, 0xb5, 0x0e, 0x08, 0x37, 0x23, 0xef, 0xfb, 0xb7, 0xa3, 0x5d, 0x0b, 0x72, + 0x6c, 0x32, 0xaf, 0xf4, 0x88, 0x0b, 0x16, 0xd7, 0x42, 0xf7, 0x14, 0xb6, 0xec, 0x4c, 0x4e, 0x87, + 0x9a, 0x4b, 0xa1, 0xbc, 0x46, 0x07, 0x84, 0x5b, 0xbd, 0xc7, 0xe8, 0xaf, 0x99, 0xa0, 0xf3, 0x25, + 0x61, 0xb4, 0x7e, 0x75, 0x13, 0x38, 0xf1, 0x4a, 0xf9, 0xfe, 0xe0, 0x1e, 0xd9, 0x9e, 0xb8, 0x2f, + 0x61, 0x2b, 0xa3, 0x39, 0x99, 0xd2, 0xcc, 0x26, 0x2a, 0xf0, 0x7f, 0xb7, 0x38, 0x59, 0x12, 0x3e, + 0x77, 0xe2, 0x95, 0xd2, 0x68, 0x13, 0x36, 0xa5, 0xed, 0xf4, 0xa5, 0x01, 0x5b, 0xcb, 0x7a, 0x77, + 0x06, 0xe0, 0xb6, 0x96, 0x9a, 0xe4, 0x11, 0xc9, 0x89, 0x48, 0xa9, 0x07, 0x3a, 0x8d, 0x70, 0xab, + 0xb7, 0x87, 0xec, 0x10, 0xca, 0xd5, 0x21, 0xbb, 0x3a, 0xf4, 0x4c, 0x72, 0x11, 0xbd, 0x2d, 0x7f, + 0xe2, 0xd7, 0x4d, 0x70, 0xc0, 0xb8, 0x1e, 0x8c, 0x13, 0x94, 0xca, 0xc2, 0xae, 0xce, 0xbe, 0x8e, + 0x54, 0x76, 0x81, 0xf5, 0x74, 0x48, 0x55, 0x55, 0xf0, 0xf9, 0x36, 0x08, 0xff, 0x53, 0xaa, 0x3e, + 0xdc, 0xcd, 0x0e, 0xb7, 0x73, 0xca, 0x48, 0x3a, 0xed, 0x97, 0x3e, 0x51, 0x9f, 0xee, 0x66, 0x87, + 0x20, 0x5e, 0x22, 0x74, 0x3f, 0x02, 0xd8, 0xb4, 0x23, 0xf4, 0xd6, 0x1e, 0x20, 0x6d, 0x0d, 0xe7, + 0x3e, 0x85, 0x4d, 0x2a, 0xb2, 0x33, 0x5e, 0x50, 0x6b, 0x91, 0x36, 0x32, 0xfe, 0x45, 0xb5, 0x7f, + 0xd1, 0x59, 0xed, 0xdf, 0x68, 0xa3, 0x04, 0xbd, 0xbc, 0x0d, 0x40, 0x5c, 0x17, 0x45, 0xd1, 0xd5, + 0xdc, 0x07, 0xd7, 0x73, 0x1f, 0xfc, 0x9c, 0xfb, 0xe0, 0x72, 0xe1, 0x3b, 0xd7, 0x0b, 0xdf, 0xf9, + 0xb1, 0xf0, 0x9d, 0xd7, 0x7f, 0x22, 0x72, 0x26, 0xb8, 0xa6, 0xb8, 0xbe, 0xb9, 0xef, 0xeb, 0xbb, + 0x5b, 0x81, 0x26, 0x8f, 0xaa, 0x56, 0x4f, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x54, 0x9c, + 0x53, 0xda, 0x03, 0x00, 0x00, } func (m *VestingAccount) Marshal() (dAtA []byte, err error) { diff --git a/x/launch/types/vesting_options_test.go b/x/launch/types/vesting_options_test.go index 4638ff95..d944f282 100644 --- a/x/launch/types/vesting_options_test.go +++ b/x/launch/types/vesting_options_test.go @@ -8,9 +8,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - tc "github.com/tendermint/spn/testutil/constructor" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/launch/types" + tc "github.com/ignite/network/testutil/constructor" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/launch/types" ) func TestNewDelayedVesting(t *testing.T) { @@ -23,8 +23,8 @@ func TestNewDelayedVesting(t *testing.T) { delayedVesting := vestingOptions.GetDelayedVesting() require.NotNil(t, delayedVesting) - require.True(t, vesting.IsEqual(delayedVesting.Vesting)) - require.True(t, totalBalance.IsEqual(delayedVesting.TotalBalance)) + require.True(t, vesting.Equal(delayedVesting.Vesting)) + require.True(t, totalBalance.Equal(delayedVesting.TotalBalance)) require.EqualValues(t, endTime, delayedVesting.EndTime) }) } diff --git a/x/monitoringc/client/cli/query.go b/x/monitoringc/client/cli/query.go deleted file mode 100644 index 863c2f8d..00000000 --- a/x/monitoringc/client/cli/query.go +++ /dev/null @@ -1,35 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/spf13/cobra" - "github.com/tendermint/spn/x/monitoringc/types" -) - -// GetQueryCmd returns the cli query commands for this module -func GetQueryCmd(queryRoute string) *cobra.Command { - // Group monitoringc queries under a subcommand - cmd := &cobra.Command{ - Use: types.FullModuleName, - Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdShowVerifiedClientIds(), - CmdShowProviderClientID(), - CmdListProviderClientID(), - CmdShowLaunchIDFromChannelID(), - CmdListLaunchIDFromChannelID(), - CmdShowMonitoringHistory(), - CmdQueryParams(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/monitoringc/client/cli/query_launch_id_from_channel_id.go b/x/monitoringc/client/cli/query_launch_id_from_channel_id.go deleted file mode 100644 index 56300dcc..00000000 --- a/x/monitoringc/client/cli/query_launch_id_from_channel_id.go +++ /dev/null @@ -1,74 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func CmdListLaunchIDFromChannelID() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-launch-id-from-channel-id", - Short: "List all launch ID to channel ID associations", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllLaunchIDFromChannelIDRequest{ - Pagination: pageReq, - } - - res, err := queryClient.LaunchIDFromChannelIDAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowLaunchIDFromChannelID() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-launch-id-from-channel-id [channel-id]", - Short: "Shows the launch ID for a channel ID", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argChannelID := args[0] - - params := &types.QueryGetLaunchIDFromChannelIDRequest{ - ChannelID: argChannelID, - } - - res, err := queryClient.LaunchIDFromChannelID(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringc/client/cli/query_launch_id_from_channel_id_test.go b/x/monitoringc/client/cli/query_launch_id_from_channel_id_test.go deleted file mode 100644 index 290aa050..00000000 --- a/x/monitoringc/client/cli/query_launch_id_from_channel_id_test.go +++ /dev/null @@ -1,138 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/client/cli" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (suite *QueryTestSuite) TestShowLaunchIDFromChannelID() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.MonitoringcState.LaunchIDsFromChannelID - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - name string - idChannelID string - - args []string - err error - obj types.LaunchIDFromChannelID - }{ - { - name: "should allow valid query", - idChannelID: objs[0].ChannelID, - - args: common, - obj: objs[0], - }, - { - name: "should fail if not found", - idChannelID: strconv.Itoa(100000), - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.name, func(t *testing.T) { - args := []string{ - tc.idChannelID, - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowLaunchIDFromChannelID(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetLaunchIDFromChannelIDResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.LaunchIDFromChannelID) - require.Equal(t, - nullify.Fill(&tc.obj), - nullify.Fill(&resp.LaunchIDFromChannelID), - ) - } - }) - } -} - -func (suite *QueryTestSuite) TestListLaunchIDFromChannelID() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.MonitoringcState.LaunchIDsFromChannelID - - request := func(next []byte, offset, limit uint64, total bool) []string { - args := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should paginate by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(objs); i += step { - args := request(nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListLaunchIDFromChannelID(), args) - require.NoError(t, err) - var resp types.QueryAllLaunchIDFromChannelIDResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.LaunchIDFromChannelID), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.LaunchIDFromChannelID), - ) - } - }) - suite.T().Run("should paginate by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(objs); i += step { - args := request(next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListLaunchIDFromChannelID(), args) - require.NoError(t, err) - var resp types.QueryAllLaunchIDFromChannelIDResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.LaunchIDFromChannelID), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.LaunchIDFromChannelID), - ) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should paginate all", func(t *testing.T) { - args := request(nil, 0, uint64(len(objs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListLaunchIDFromChannelID(), args) - require.NoError(t, err) - var resp types.QueryAllLaunchIDFromChannelIDResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(objs), int(resp.Pagination.Total)) - require.ElementsMatch(t, - nullify.Fill(objs), - nullify.Fill(resp.LaunchIDFromChannelID), - ) - }) -} diff --git a/x/monitoringc/client/cli/query_monitoring_history.go b/x/monitoringc/client/cli/query_monitoring_history.go deleted file mode 100644 index 7b80b57e..00000000 --- a/x/monitoringc/client/cli/query_monitoring_history.go +++ /dev/null @@ -1,45 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func CmdShowMonitoringHistory() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-monitoring-history [launch-id]", - Short: "Shows the monitoring history for a launch", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argLaunchID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - params := &types.QueryGetMonitoringHistoryRequest{ - LaunchID: argLaunchID, - } - - res, err := queryClient.MonitoringHistory(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringc/client/cli/query_monitoring_history_test.go b/x/monitoringc/client/cli/query_monitoring_history_test.go deleted file mode 100644 index 36fd751f..00000000 --- a/x/monitoringc/client/cli/query_monitoring_history_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/client/cli" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (suite *QueryTestSuite) TestShowMonitoringHistory() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.MonitoringcState.MonitoringHistories - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idLaunchID uint64 - - args []string - err error - obj types.MonitoringHistory - }{ - { - desc: "should allow valid query", - idLaunchID: objs[0].LaunchID, - - args: common, - obj: objs[0], - }, - { - desc: "should fail if not found", - idLaunchID: 100000, - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - strconv.Itoa(int(tc.idLaunchID)), - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowMonitoringHistory(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetMonitoringHistoryResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.MonitoringHistory) - require.Equal(t, - nullify.Fill(&tc.obj), - nullify.Fill(&resp.MonitoringHistory), - ) - } - }) - } -} diff --git a/x/monitoringc/client/cli/query_params.go b/x/monitoringc/client/cli/query_params.go deleted file mode 100644 index ae07a72a..00000000 --- a/x/monitoringc/client/cli/query_params.go +++ /dev/null @@ -1,35 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func CmdQueryParams() *cobra.Command { - cmd := &cobra.Command{ - Use: "params", - Short: "Shows the parameters of the module", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringc/client/cli/query_provider_client_id.go b/x/monitoringc/client/cli/query_provider_client_id.go deleted file mode 100644 index 4784867d..00000000 --- a/x/monitoringc/client/cli/query_provider_client_id.go +++ /dev/null @@ -1,79 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func CmdListProviderClientID() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-provider-client-id", - Short: "List all provider client IDs", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllProviderClientIDRequest{ - Pagination: pageReq, - } - - res, err := queryClient.ProviderClientIDAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowProviderClientID() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-provider-client-id [launch-id]", - Short: "shows a providerClientID", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argLaunchID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - params := &types.QueryGetProviderClientIDRequest{ - LaunchID: argLaunchID, - } - - res, err := queryClient.ProviderClientID(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringc/client/cli/query_provider_client_id_test.go b/x/monitoringc/client/cli/query_provider_client_id_test.go deleted file mode 100644 index 1b324e59..00000000 --- a/x/monitoringc/client/cli/query_provider_client_id_test.go +++ /dev/null @@ -1,138 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/client/cli" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (suite *QueryTestSuite) TestShowProviderClientID() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.MonitoringcState.ProviderClientIDs - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idLaunchID uint64 - - args []string - err error - obj types.ProviderClientID - }{ - { - desc: "should allow valid query", - idLaunchID: objs[0].LaunchID, - - args: common, - obj: objs[0], - }, - { - desc: "should fail if not found", - idLaunchID: 100000, - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - strconv.Itoa(int(tc.idLaunchID)), - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowProviderClientID(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetProviderClientIDResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.ProviderClientID) - require.Equal(t, - nullify.Fill(&tc.obj), - nullify.Fill(&resp.ProviderClientID), - ) - } - }) - } -} - -func (suite *QueryTestSuite) TestListProviderClientID() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.MonitoringcState.ProviderClientIDs - - request := func(next []byte, offset, limit uint64, total bool) []string { - args := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should paginate by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(objs); i += step { - args := request(nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListProviderClientID(), args) - require.NoError(t, err) - var resp types.QueryAllProviderClientIDResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.ProviderClientID), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.ProviderClientID), - ) - } - }) - suite.T().Run("should paginate by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(objs); i += step { - args := request(next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListProviderClientID(), args) - require.NoError(t, err) - var resp types.QueryAllProviderClientIDResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.ProviderClientID), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.ProviderClientID), - ) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should paginate all", func(t *testing.T) { - args := request(nil, 0, uint64(len(objs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListProviderClientID(), args) - require.NoError(t, err) - var resp types.QueryAllProviderClientIDResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(objs), int(resp.Pagination.Total)) - require.ElementsMatch(t, - nullify.Fill(objs), - nullify.Fill(resp.ProviderClientID), - ) - }) -} diff --git a/x/monitoringc/client/cli/query_test.go b/x/monitoringc/client/cli/query_test.go deleted file mode 100644 index d7b54620..00000000 --- a/x/monitoringc/client/cli/query_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package cli_test - -import ( - "testing" - - "github.com/stretchr/testify/suite" - - "github.com/tendermint/spn/testutil/networksuite" -) - -// QueryTestSuite is a test suite for query tests -type QueryTestSuite struct { - networksuite.NetworkTestSuite -} - -// TestQueryTestSuite runs test of the query suite -func TestQueryTestSuite(t *testing.T) { - suite.Run(t, new(QueryTestSuite)) -} diff --git a/x/monitoringc/client/cli/query_verified_client_ids.go b/x/monitoringc/client/cli/query_verified_client_ids.go deleted file mode 100644 index 4451c28b..00000000 --- a/x/monitoringc/client/cli/query_verified_client_ids.go +++ /dev/null @@ -1,43 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func CmdShowVerifiedClientIds() *cobra.Command { - cmd := &cobra.Command{ - Use: "verified-client-ids [launch-id]", - Short: "Shows all verified client IDs for a launch", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argLaunchID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - params := &types.QueryGetVerifiedClientIdsRequest{ - LaunchID: argLaunchID, - } - - res, err := queryClient.VerifiedClientIds(cmd.Context(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringc/client/cli/query_verified_client_ids_test.go b/x/monitoringc/client/cli/query_verified_client_ids_test.go deleted file mode 100644 index f6a6d312..00000000 --- a/x/monitoringc/client/cli/query_verified_client_ids_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/client/cli" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (suite *QueryTestSuite) TestShowVerifiedClientIds() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.MonitoringcState.VerifiedClientIDs - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idLaunchID uint64 - - args []string - err error - obj types.VerifiedClientID - }{ - { - desc: "should allow valid query", - idLaunchID: objs[0].LaunchID, - - args: common, - obj: objs[0], - }, - { - desc: "should fail if not found", - idLaunchID: 100000, - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - strconv.Itoa(int(tc.idLaunchID)), - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowVerifiedClientIds(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetVerifiedClientIdsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.ClientIds) - require.Equal(t, - nullify.Fill(&tc.obj.ClientIDs), - nullify.Fill(&resp.ClientIds), - ) - } - }) - } -} diff --git a/x/monitoringc/client/cli/tx.go b/x/monitoringc/client/cli/tx.go index 304d7d5e..941b0494 100644 --- a/x/monitoringc/client/cli/tx.go +++ b/x/monitoringc/client/cli/tx.go @@ -2,24 +2,29 @@ package cli import ( "fmt" + "time" - "github.com/cosmos/cosmos-sdk/client" "github.com/spf13/cobra" - "github.com/tendermint/spn/x/monitoringc/types" + "github.com/cosmos/cosmos-sdk/client" + // "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/ignite/network/x/monitoringc/types" ) -// GetTxCmd returns the transaction commands for this module +var DefaultRelativePacketTimeoutTimestamp = uint64((time.Duration(10) * time.Minute).Nanoseconds()) + +const listSeparator = "," + +// GetTxCmd returns the transaction commands for this module. func GetTxCmd() *cobra.Command { cmd := &cobra.Command{ - Use: types.FullModuleName, + Use: types.ModuleName, Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), DisableFlagParsing: true, SuggestionsMinimumDistance: 2, RunE: client.ValidateCmd, } - cmd.AddCommand(CmdCreateClient()) // this line is used by starport scaffolding # 1 return cmd diff --git a/x/monitoringc/client/cli/tx_create_client.go b/x/monitoringc/client/cli/tx_create_client.go deleted file mode 100644 index e1b70e98..00000000 --- a/x/monitoringc/client/cli/tx_create_client.go +++ /dev/null @@ -1,70 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/monitoringc/types" -) - -const ( - flagUnbondingPeriod = "unbonding-period" - flagRevisionHeight = "revision-height" -) - -func CmdCreateClient() *cobra.Command { - cmd := &cobra.Command{ - Use: "create-client [launch-id] [consensus-state-file] [validator-set-file]", - Short: "Create a verified client ID to connect to the chain with the specified launch ID", - Args: cobra.ExactArgs(3), - RunE: func(cmd *cobra.Command, args []string) (err error) { - var ( - unbondingTime, _ = cmd.Flags().GetInt64(flagUnbondingPeriod) - revisionHeight, _ = cmd.Flags().GetUint64(flagRevisionHeight) - ) - - launchID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - cs, err := spntypes.ParseConsensusStateFromFile(args[1]) - if err != nil { - return err - } - - vs, err := spntypes.ParseValidatorSetFromFile(args[2]) - if err != nil { - return err - } - - msg := types.NewMsgCreateClient( - clientCtx.GetFromAddress().String(), - launchID, - cs, - vs, - unbondingTime, - revisionHeight, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().Int64(flagUnbondingPeriod, spntypes.DefaultUnbondingPeriod, "Custom unbonding period of the provider chain") - cmd.Flags().Uint64(flagRevisionHeight, spntypes.DefaultRevisionHeight, "Custom revision height for the IBC client of the provider chain") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringc/genesis.go b/x/monitoringc/genesis.go deleted file mode 100644 index bfcca91f..00000000 --- a/x/monitoringc/genesis.go +++ /dev/null @@ -1,62 +0,0 @@ -package monitoringc - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -// InitGenesis initializes the monitoringc module's state from a provided genesis -// state. -func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { - // Set all the verifiedClientID - for _, elem := range genState.VerifiedClientIDs { - k.SetVerifiedClientID(ctx, elem) - } - // Set all the providerClientID - for _, elem := range genState.ProviderClientIDs { - k.SetProviderClientID(ctx, elem) - } - // Set all the launchIDFromVerifiedClientID - for _, elem := range genState.LaunchIDsFromVerifiedClientID { - k.SetLaunchIDFromVerifiedClientID(ctx, elem) - } - // Set all the launchIDFromChannelID - for _, elem := range genState.LaunchIDsFromChannelID { - k.SetLaunchIDFromChannelID(ctx, elem) - } - // Set all the monitoringHistory - for _, elem := range genState.MonitoringHistories { - k.SetMonitoringHistory(ctx, elem) - } - // this line is used by starport scaffolding # genesis/module/init - k.SetPort(ctx, genState.PortId) - // Only try to bind to port if it is not already bound, since we may already own - // port capability from capability InitGenesis - if !k.IsBound(ctx, genState.PortId) { - // module binds to the port on InitChain - // and claims the returned capability - err := k.BindPort(ctx, genState.PortId) - if err != nil { - panic("could not claim port capability: " + err.Error()) - } - } - k.SetParams(ctx, genState.Params) -} - -// ExportGenesis returns the monitoringc module's exported genesis. -func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - genesis := types.DefaultGenesis() - genesis.Params = k.GetParams(ctx) - - genesis.PortId = k.GetPort(ctx) - genesis.VerifiedClientIDs = k.GetAllVerifiedClientID(ctx) - genesis.ProviderClientIDs = k.GetAllProviderClientID(ctx) - genesis.LaunchIDsFromVerifiedClientID = k.GetAllLaunchIDFromVerifiedClientID(ctx) - genesis.LaunchIDsFromChannelID = k.GetAllLaunchIDFromChannelID(ctx) - genesis.MonitoringHistories = k.GetAllMonitoringHistory(ctx) - // this line is used by starport scaffolding # genesis/module/export - - return genesis -} diff --git a/x/monitoringc/genesis_test.go b/x/monitoringc/genesis_test.go deleted file mode 100644 index 2489f209..00000000 --- a/x/monitoringc/genesis_test.go +++ /dev/null @@ -1,81 +0,0 @@ -package monitoringc_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func TestGenesis(t *testing.T) { - genesisState := types.GenesisState{ - Params: types.DefaultParams(), - PortId: types.PortID, - VerifiedClientIDs: []types.VerifiedClientID{ - { - LaunchID: 0, - ClientIDs: []string{"0"}, - }, - { - LaunchID: 1, - ClientIDs: []string{"0"}, - }, - }, - ProviderClientIDs: []types.ProviderClientID{ - { - LaunchID: 0, - }, - { - LaunchID: 1, - }, - }, - LaunchIDsFromVerifiedClientID: []types.LaunchIDFromVerifiedClientID{ - { - ClientID: "0", - }, - { - ClientID: "1", - }, - }, - LaunchIDsFromChannelID: []types.LaunchIDFromChannelID{ - { - ChannelID: "0", - }, - { - ChannelID: "1", - }, - }, - MonitoringHistories: []types.MonitoringHistory{ - { - LaunchID: 0, - }, - { - LaunchID: 1, - }, - }, - // this line is used by starport scaffolding # genesis/test/state - } - - ctx, tk, _ := testkeeper.NewTestSetup(t) - t.Run("should allow import and export of genesis", func(t *testing.T) { - monitoringc.InitGenesis(ctx, *tk.MonitoringConsumerKeeper, genesisState) - got := monitoringc.ExportGenesis(ctx, *tk.MonitoringConsumerKeeper) - require.NotNil(t, got) - - nullify.Fill(&genesisState) - nullify.Fill(got) - - require.Equal(t, genesisState.PortId, got.PortId) - - require.ElementsMatch(t, genesisState.VerifiedClientIDs, got.VerifiedClientIDs) - require.ElementsMatch(t, genesisState.ProviderClientIDs, got.ProviderClientIDs) - require.ElementsMatch(t, genesisState.LaunchIDsFromVerifiedClientID, got.LaunchIDsFromVerifiedClientID) - require.ElementsMatch(t, genesisState.LaunchIDsFromChannelID, got.LaunchIDsFromChannelID) - require.ElementsMatch(t, genesisState.MonitoringHistories, got.MonitoringHistories) - // this line is used by starport scaffolding # genesis/test/assert - }) -} diff --git a/x/monitoringc/keeper/grpc.go b/x/monitoringc/keeper/grpc.go deleted file mode 100644 index 44ff95f4..00000000 --- a/x/monitoringc/keeper/grpc.go +++ /dev/null @@ -1,7 +0,0 @@ -package keeper - -import ( - "github.com/tendermint/spn/x/monitoringc/types" -) - -var _ types.QueryServer = Keeper{} diff --git a/x/monitoringc/keeper/grpc_launch_id_from_channel_id.go b/x/monitoringc/keeper/grpc_launch_id_from_channel_id.go deleted file mode 100644 index fe4c30ce..00000000 --- a/x/monitoringc/keeper/grpc_launch_id_from_channel_id.go +++ /dev/null @@ -1,57 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (k Keeper) LaunchIDFromChannelIDAll(c context.Context, req *types.QueryAllLaunchIDFromChannelIDRequest) (*types.QueryAllLaunchIDFromChannelIDResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var LaunchIDsFromChannelID []types.LaunchIDFromChannelID - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - LaunchIDsFromChannelIDtore := prefix.NewStore(store, types.KeyPrefix(types.LaunchIDFromChannelIDKeyPrefix)) - - pageRes, err := query.Paginate(LaunchIDsFromChannelIDtore, req.Pagination, func(key []byte, value []byte) error { - var launchIDFromChannelID types.LaunchIDFromChannelID - if err := k.cdc.Unmarshal(value, &launchIDFromChannelID); err != nil { - return err - } - - LaunchIDsFromChannelID = append(LaunchIDsFromChannelID, launchIDFromChannelID) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllLaunchIDFromChannelIDResponse{LaunchIDFromChannelID: LaunchIDsFromChannelID, Pagination: pageRes}, nil -} - -func (k Keeper) LaunchIDFromChannelID(c context.Context, req *types.QueryGetLaunchIDFromChannelIDRequest) (*types.QueryGetLaunchIDFromChannelIDResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetLaunchIDFromChannelID( - ctx, - req.ChannelID, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetLaunchIDFromChannelIDResponse{LaunchIDFromChannelID: val}, nil -} diff --git a/x/monitoringc/keeper/grpc_monitoring_history.go b/x/monitoringc/keeper/grpc_monitoring_history.go deleted file mode 100644 index d2811f1a..00000000 --- a/x/monitoringc/keeper/grpc_monitoring_history.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (k Keeper) MonitoringHistory(c context.Context, req *types.QueryGetMonitoringHistoryRequest) (*types.QueryGetMonitoringHistoryResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetMonitoringHistory( - ctx, - req.LaunchID, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetMonitoringHistoryResponse{MonitoringHistory: val}, nil -} diff --git a/x/monitoringc/keeper/grpc_monitoring_history_test.go b/x/monitoringc/keeper/grpc_monitoring_history_test.go deleted file mode 100644 index b2aa8048..00000000 --- a/x/monitoringc/keeper/grpc_monitoring_history_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func TestMonitoringHistoryQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - items := createNMonitoringHistory(ctx, tk.MonitoringConsumerKeeper, 2) - for _, tc := range []struct { - name string - request *types.QueryGetMonitoringHistoryRequest - response *types.QueryGetMonitoringHistoryResponse - err error - }{ - { - name: "should allow valid first query", - request: &types.QueryGetMonitoringHistoryRequest{ - LaunchID: items[0].LaunchID, - }, - response: &types.QueryGetMonitoringHistoryResponse{MonitoringHistory: items[0]}, - }, - { - name: "should allow valid second query", - request: &types.QueryGetMonitoringHistoryRequest{ - LaunchID: items[1].LaunchID, - }, - response: &types.QueryGetMonitoringHistoryResponse{MonitoringHistory: items[1]}, - }, - { - name: "should return key not found", - request: &types.QueryGetMonitoringHistoryRequest{ - LaunchID: 100000, - }, - err: status.Error(codes.NotFound, "not found"), - }, - { - name: "should return invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.MonitoringConsumerKeeper.MonitoringHistory(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, - nullify.Fill(tc.response), - nullify.Fill(response), - ) - } - }) - } -} diff --git a/x/monitoringc/keeper/grpc_params.go b/x/monitoringc/keeper/grpc_params.go deleted file mode 100644 index 21a2f1fd..00000000 --- a/x/monitoringc/keeper/grpc_params.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil -} diff --git a/x/monitoringc/keeper/grpc_params_test.go b/x/monitoringc/keeper/grpc_params_test.go deleted file mode 100644 index b4a5a4c2..00000000 --- a/x/monitoringc/keeper/grpc_params_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func TestParamsQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - - t.Run("should allow params query", func(t *testing.T) { - params := types.DefaultParams() - tk.MonitoringConsumerKeeper.SetParams(ctx, params) - - response, err := tk.MonitoringConsumerKeeper.Params(wctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.Equal(t, &types.QueryParamsResponse{Params: params}, response) - - _, err = tk.MonitoringConsumerKeeper.Params(wctx, nil) - require.Error(t, err) - }) -} diff --git a/x/monitoringc/keeper/grpc_provider_client_id.go b/x/monitoringc/keeper/grpc_provider_client_id.go deleted file mode 100644 index 2e11bdc4..00000000 --- a/x/monitoringc/keeper/grpc_provider_client_id.go +++ /dev/null @@ -1,57 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (k Keeper) ProviderClientIDAll(c context.Context, req *types.QueryAllProviderClientIDRequest) (*types.QueryAllProviderClientIDResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var providerClientIDs []types.ProviderClientID - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - providerClientIDStore := prefix.NewStore(store, types.KeyPrefix(types.ProviderClientIDKeyPrefix)) - - pageRes, err := query.Paginate(providerClientIDStore, req.Pagination, func(key []byte, value []byte) error { - var providerClientID types.ProviderClientID - if err := k.cdc.Unmarshal(value, &providerClientID); err != nil { - return err - } - - providerClientIDs = append(providerClientIDs, providerClientID) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllProviderClientIDResponse{ProviderClientID: providerClientIDs, Pagination: pageRes}, nil -} - -func (k Keeper) ProviderClientID(c context.Context, req *types.QueryGetProviderClientIDRequest) (*types.QueryGetProviderClientIDResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetProviderClientID( - ctx, - req.LaunchID, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetProviderClientIDResponse{ProviderClientID: val}, nil -} diff --git a/x/monitoringc/keeper/grpc_verified_client_ids.go b/x/monitoringc/keeper/grpc_verified_client_ids.go deleted file mode 100644 index f69f65d0..00000000 --- a/x/monitoringc/keeper/grpc_verified_client_ids.go +++ /dev/null @@ -1,27 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -func (k Keeper) VerifiedClientIds(goCtx context.Context, req *types.QueryGetVerifiedClientIdsRequest) (*types.QueryGetVerifiedClientIdsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(goCtx) - - verifiedClientID, found := k.GetVerifiedClientID(ctx, req.LaunchID) - if !found { - return nil, status.Errorf(codes.NotFound, "launch id not found %d", req.LaunchID) - } - - return &types.QueryGetVerifiedClientIdsResponse{ - ClientIds: verifiedClientID.ClientIDs, - }, nil -} diff --git a/x/monitoringc/keeper/grpc_verified_client_ids_test.go b/x/monitoringc/keeper/grpc_verified_client_ids_test.go deleted file mode 100644 index bbf265dc..00000000 --- a/x/monitoringc/keeper/grpc_verified_client_ids_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func TestVerifiedClientIds(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - items := createNVerifiedClientID(ctx, tk.MonitoringConsumerKeeper, 2) - for _, tc := range []struct { - name string - request *types.QueryGetVerifiedClientIdsRequest - response *types.QueryGetVerifiedClientIdsResponse - err error - }{ - { - name: "should allow valid first query", - request: &types.QueryGetVerifiedClientIdsRequest{ - LaunchID: items[0].LaunchID, - }, - response: &types.QueryGetVerifiedClientIdsResponse{ClientIds: items[0].ClientIDs}, - }, - { - name: "should allow valid second query", - request: &types.QueryGetVerifiedClientIdsRequest{ - LaunchID: items[1].LaunchID, - }, - response: &types.QueryGetVerifiedClientIdsResponse{ClientIds: items[1].ClientIDs}, - }, - { - name: "should return key not found", - request: &types.QueryGetVerifiedClientIdsRequest{ - LaunchID: 100000, - }, - err: status.Error(codes.NotFound, "launch id not found 100000"), - }, - { - name: "should return invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.MonitoringConsumerKeeper.VerifiedClientIds(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, - nullify.Fill(tc.response), - nullify.Fill(response), - ) - } - }) - } -} diff --git a/x/monitoringc/keeper/handshake.go b/x/monitoringc/keeper/handshake.go deleted file mode 100644 index 3ae7a106..00000000 --- a/x/monitoringc/keeper/handshake.go +++ /dev/null @@ -1,124 +0,0 @@ -package keeper - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/tendermint/spn/x/monitoringc/types" - - ignterrors "github.com/ignite/modules/pkg/errors" -) - -// VerifyClientIDFromConnID verifies if the client ID associated with the provided connection ID -// is a verified client ID and if no connection is yet established with the provider chain -// this operation should be performed at OnChanOpenInit handshake phase -func (k Keeper) VerifyClientIDFromConnID(ctx sdk.Context, connID string) error { - clientID, err := k.getClientIDFromConnID(ctx, connID) - if err != nil { - return err - } - - // check if the client ID is verified - lidFromCid, found := k.GetLaunchIDFromVerifiedClientID(ctx, clientID) - if !found { - return sdkerrors.Wrapf(types.ErrClientNotVerified, clientID) - } - - // check if the connection with the provider for this launch ID is already established - pCid, found := k.GetProviderClientID(ctx, lidFromCid.LaunchID) - if found { - return sdkerrors.Wrapf( - types.ErrConnectionAlreadyEstablished, - "provider client ID for launch ID %d is: %s", - pCid.LaunchID, pCid.ClientID, - ) - } - - return nil -} - -// RegisterProviderClientIDFromChannelID registers the verified client ID for the provider -// this operation should be performed at OnChanOpenAck -func (k Keeper) RegisterProviderClientIDFromChannelID(ctx sdk.Context, channelID string) error { - connID, err := k.getConnIDFromChannelID(ctx, channelID) - if err != nil { - return err - } - - clientID, err := k.getClientIDFromConnID(ctx, connID) - if err != nil { - return err - } - - // get the launch ID from the client ID - lidFromCid, found := k.GetLaunchIDFromVerifiedClientID(ctx, clientID) - if !found { - // client should be verified at this phase, so a critical error is returned - return ignterrors.Criticalf("client ID %s should be verified during registration", clientID) - } - - // another connection could have been established between OnChanOpenInit and OnChanOpenAck - // so we check if provider client ID exists - pCid, found := k.GetProviderClientID(ctx, lidFromCid.LaunchID) - if found { - return sdkerrors.Wrapf( - types.ErrConnectionAlreadyEstablished, - "provider connection for launch ID %d has been established: %s", - pCid.LaunchID, pCid.ClientID, - ) - } - launchID := lidFromCid.LaunchID - - // update the chain since it is not MonitoringConnected - if err = k.launchKeeper.EnableMonitoringConnection(ctx, launchID); err != nil { - return err - } - - // register the client for the provider - k.SetProviderClientID(ctx, types.ProviderClientID{ - ClientID: clientID, - LaunchID: launchID, - }) - - // associate the channel ID for the provider connection with the correct launch ID - k.SetLaunchIDFromChannelID(ctx, types.LaunchIDFromChannelID{ - LaunchID: launchID, - ChannelID: channelID, - }) - - return nil -} - -// getClientIDFromConnID retrieves the client ID associated with a connection ID -func (k Keeper) getClientIDFromConnID(ctx sdk.Context, connID string) (string, error) { - conn, ok := k.connectionKeeper.GetConnection(ctx, connID) - if !ok { - return "", sdkerrors.Wrapf( - connectiontypes.ErrConnectionNotFound, - "connection not found for connection ID: %s", - connID, - ) - } - return conn.GetClientID(), nil -} - -// getConnIDFromChannelID retrieves the connection ID associated with the provided channel ID -func (k Keeper) getConnIDFromChannelID(ctx sdk.Context, channelID string) (string, error) { - // retrieve the client ID from the channel - channel, ok := k.channelKeeper.GetChannel(ctx, types.PortID, channelID) - if !ok { - return "", sdkerrors.Wrapf( - channeltypes.ErrChannelNotFound, - "channel not found for channel ID: %s", - channelID, - ) - } - if len(channel.ConnectionHops) != 1 { - return "", sdkerrors.Wrap( - channeltypes.ErrTooManyConnectionHops, - "must have direct connection to consumer chain", - ) - } - return channel.ConnectionHops[0], nil -} diff --git a/x/monitoringc/keeper/handshake_test.go b/x/monitoringc/keeper/handshake_test.go deleted file mode 100644 index 8630d629..00000000 --- a/x/monitoringc/keeper/handshake_test.go +++ /dev/null @@ -1,186 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - launchtypes "github.com/tendermint/spn/x/launch/types" - "github.com/tendermint/spn/x/monitoringc/types" - - ignterrors "github.com/ignite/modules/pkg/errors" -) - -// testSetupWithFooClient returns a test setup with monitoring keeper containing necessary IBC mocks for a client with ID foo -func testSetupWithFooClient(t *testing.T) (sdk.Context, testkeeper.TestKeepers, testkeeper.TestMsgServers) { - return testkeeper.NewTestSetupWithIBCMocks( - t, - []testkeeper.Connection{ - { - ConnID: "foo", - Conn: connectiontypes.ConnectionEnd{ - ClientId: "foo", - }, - }, - }, - []testkeeper.Channel{ - { - ChannelID: "foo", - Channel: channeltypes.Channel{ - ConnectionHops: []string{"foo"}, - }, - }, - }, - ) -} - -func TestKeeper_VerifyClientIDFromChannelID(t *testing.T) { - t.Run("should return no error if the client is verified and provider has no connection yet", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - tk.MonitoringConsumerKeeper.SetLaunchIDFromVerifiedClientID(ctx, types.LaunchIDFromVerifiedClientID{ - LaunchID: 1, - ClientID: "foo", - }) - err := tk.MonitoringConsumerKeeper.VerifyClientIDFromConnID(ctx, "foo") - require.NoError(t, err) - }) - - t.Run("should fail if connection doesn't exist", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - err := tk.MonitoringConsumerKeeper.VerifyClientIDFromConnID(ctx, "bar") - require.ErrorIs(t, err, connectiontypes.ErrConnectionNotFound) - }) - - t.Run("should fail if the client is not verified", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - err := tk.MonitoringConsumerKeeper.VerifyClientIDFromConnID(ctx, "foo") - require.ErrorIs(t, err, types.ErrClientNotVerified) - }) - - t.Run("should fail if the provider already has an established connection", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - tk.MonitoringConsumerKeeper.SetLaunchIDFromVerifiedClientID(ctx, types.LaunchIDFromVerifiedClientID{ - LaunchID: 1, - ClientID: "foo", - }) - tk.MonitoringConsumerKeeper.SetProviderClientID(ctx, types.ProviderClientID{ - LaunchID: 1, - ClientID: "bar", - }) - err := tk.MonitoringConsumerKeeper.VerifyClientIDFromConnID(ctx, "foo") - require.ErrorIs(t, err, types.ErrConnectionAlreadyEstablished) - }) -} - -func TestKeeper_RegisterProviderClientIDFromChannelID(t *testing.T) { - t.Run("should register the client id", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - tk.MonitoringConsumerKeeper.SetLaunchIDFromVerifiedClientID(ctx, types.LaunchIDFromVerifiedClientID{ - LaunchID: 1, - ClientID: "foo", - }) - - chain := launchtypes.Chain{ - LaunchID: 1, - } - tk.LaunchKeeper.SetChain(ctx, chain) - - err := tk.MonitoringConsumerKeeper.RegisterProviderClientIDFromChannelID(ctx, "foo") - require.NoError(t, err) - - // check that the chain is properly set to have MonitoringConnected be true - chain, found := tk.LaunchKeeper.GetChain(ctx, 1) - require.True(t, found) - require.True(t, chain.MonitoringConnected) - - // the provider client ID should be created - pCid, found := tk.MonitoringConsumerKeeper.GetProviderClientID(ctx, 1) - require.True(t, found) - require.EqualValues(t, 1, pCid.LaunchID) - require.EqualValues(t, "foo", pCid.ClientID) - - // the channel ID is associated with the correct launch ID - launchIDFromChanID, found := tk.MonitoringConsumerKeeper.GetLaunchIDFromChannelID(ctx, "foo") - require.True(t, found) - require.EqualValues(t, 1, launchIDFromChanID.LaunchID) - require.EqualValues(t, "foo", launchIDFromChanID.ChannelID) - }) - - t.Run("should fail if the channel doesn't exist", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - err := tk.MonitoringConsumerKeeper.RegisterProviderClientIDFromChannelID(ctx, "bar") - require.ErrorIs(t, err, channeltypes.ErrChannelNotFound) - }) - - t.Run("should fail with critical error if the client is not verified", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - err := tk.MonitoringConsumerKeeper.RegisterProviderClientIDFromChannelID(ctx, "foo") - require.ErrorIs(t, err, ignterrors.ErrCritical) - }) - - t.Run("should fail if the provider already has an established connection", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - tk.MonitoringConsumerKeeper.SetLaunchIDFromVerifiedClientID(ctx, types.LaunchIDFromVerifiedClientID{ - LaunchID: 1, - ClientID: "foo", - }) - tk.MonitoringConsumerKeeper.SetProviderClientID(ctx, types.ProviderClientID{ - LaunchID: 1, - ClientID: "bar", - }) - err := tk.MonitoringConsumerKeeper.RegisterProviderClientIDFromChannelID(ctx, "foo") - require.ErrorIs(t, err, types.ErrConnectionAlreadyEstablished) - }) - - t.Run("should fail if monitoring connection already enabled on chain", func(t *testing.T) { - ctx, tk, _ := testSetupWithFooClient(t) - tk.MonitoringConsumerKeeper.SetLaunchIDFromVerifiedClientID(ctx, types.LaunchIDFromVerifiedClientID{ - LaunchID: 1, - ClientID: "foo", - }) - chain := launchtypes.Chain{ - LaunchID: 1, - MonitoringConnected: true, - } - tk.LaunchKeeper.SetChain(ctx, chain) - err := tk.MonitoringConsumerKeeper.RegisterProviderClientIDFromChannelID(ctx, "foo") - require.ErrorIs(t, err, launchtypes.ErrChainMonitoringConnected) - }) - - t.Run("should fail if the channel has more than 1 hop connection", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithIBCMocks( - t, - []testkeeper.Connection{}, - []testkeeper.Channel{ - { - ChannelID: "foo", - Channel: channeltypes.Channel{ - ConnectionHops: []string{"foo", "bar"}, - }, - }, - }, - ) - err := tk.MonitoringConsumerKeeper.RegisterProviderClientIDFromChannelID(ctx, "foo") - require.ErrorIs(t, err, channeltypes.ErrTooManyConnectionHops) - }) - - t.Run("should fail if the connection doesn't exist", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithIBCMocks( - t, - []testkeeper.Connection{}, - []testkeeper.Channel{ - { - ChannelID: "foo", - Channel: channeltypes.Channel{ - ConnectionHops: []string{"foo"}, - }, - }, - }, - ) - err := tk.MonitoringConsumerKeeper.RegisterProviderClientIDFromChannelID(ctx, "foo") - require.ErrorIs(t, err, connectiontypes.ErrConnectionNotFound) - }) -} diff --git a/x/monitoringc/keeper/invariants.go b/x/monitoringc/keeper/invariants.go index 3cf29b8d..665f6b67 100644 --- a/x/monitoringc/keeper/invariants.go +++ b/x/monitoringc/keeper/invariants.go @@ -4,7 +4,8 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/monitoringc/types" + + "github.com/ignite/network/x/monitoringc/types" ) const ( @@ -28,10 +29,16 @@ func AllInvariants(k Keeper) sdk.Invariant { // entry in `LaunchIDFromVerifiedClientID` func MissingVerifiedClientIDInvariant(k Keeper) sdk.Invariant { return func(ctx sdk.Context) (string, bool) { - allVerifiedClientID := k.GetAllVerifiedClientID(ctx) - allLaunchIDFromVerifiedClientlID := k.GetAllLaunchIDFromVerifiedClientID(ctx) + allVerifiedClientID, err := k.AllVerifiedClientID(ctx) + if err != nil { + return "", false + } + allLaunchIDFromVerifiedClientID, err := k.AllLaunchIDFromVerifiedClientID(ctx) + if err != nil { + return "", false + } clientIDMap := make(map[string]struct{}) - for _, launchIDFromVerifiedClientID := range allLaunchIDFromVerifiedClientlID { + for _, launchIDFromVerifiedClientID := range allLaunchIDFromVerifiedClientID { clientIDMap[clientIDKey(launchIDFromVerifiedClientID.LaunchID, launchIDFromVerifiedClientID.ClientID)] = struct{}{} } for _, verifiedClientID := range allVerifiedClientID { diff --git a/x/monitoringc/keeper/invariants_test.go b/x/monitoringc/keeper/invariants_test.go index 02e254d0..c1431caf 100644 --- a/x/monitoringc/keeper/invariants_test.go +++ b/x/monitoringc/keeper/invariants_test.go @@ -4,10 +4,11 @@ import ( "testing" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" + + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" ) func TestMissingVerifiedClientIDInvariant(t *testing.T) { @@ -17,13 +18,15 @@ func TestMissingVerifiedClientIDInvariant(t *testing.T) { launchID := sample.Uint64(r) for i := uint64(0); i < n; i++ { clientID := sample.AlphaString(r, 10) - tk.MonitoringConsumerKeeper.AddVerifiedClientID(ctx, launchID, clientID) - tk.MonitoringConsumerKeeper.SetLaunchIDFromVerifiedClientID(ctx, types.LaunchIDFromVerifiedClientID{ + err := tk.MonitoringConsumerKeeper.AddVerifiedClientID(ctx, launchID, clientID) + require.NoError(t, err) + err = tk.MonitoringConsumerKeeper.LaunchIDFromVerifiedClientID.Set(ctx, clientID, types.LaunchIDFromVerifiedClientID{ ClientID: clientID, LaunchID: launchID, }) + require.NoError(t, err) } - msg, broken := keeper.MissingVerifiedClientIDInvariant(*tk.MonitoringConsumerKeeper)(ctx) + msg, broken := keeper.MissingVerifiedClientIDInvariant(tk.MonitoringConsumerKeeper)(ctx) require.False(t, broken, msg) }) @@ -32,9 +35,10 @@ func TestMissingVerifiedClientIDInvariant(t *testing.T) { launchID := sample.Uint64(r) for i := uint64(0); i < n; i++ { clientID := sample.AlphaString(r, 10) - tk.MonitoringConsumerKeeper.AddVerifiedClientID(ctx, launchID, clientID) + err := tk.MonitoringConsumerKeeper.AddVerifiedClientID(ctx, launchID, clientID) + require.NoError(t, err) } - msg, broken := keeper.MissingVerifiedClientIDInvariant(*tk.MonitoringConsumerKeeper)(ctx) + msg, broken := keeper.MissingVerifiedClientIDInvariant(tk.MonitoringConsumerKeeper)(ctx) require.True(t, broken, msg) }) } diff --git a/x/monitoringc/keeper/keeper.go b/x/monitoringc/keeper/keeper.go index 3ae2db64..b00105bc 100644 --- a/x/monitoringc/keeper/keeper.go +++ b/x/monitoringc/keeper/keeper.go @@ -1,30 +1,55 @@ package keeper import ( + "context" "fmt" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + "cosmossdk.io/core/store" + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/log" + "cosmossdk.io/store/prefix" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" - capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" - "github.com/tendermint/spn/x/monitoringc/types" + "github.com/ignite/network/x/monitoringc/types" ) type ( Keeper struct { - cdc codec.BinaryCodec - portKey []byte - storeKey storetypes.StoreKey - memKey storetypes.StoreKey - paramstore paramtypes.Subspace - scopedKeeper capabilitykeeper.ScopedKeeper - launchKeeper types.LaunchKeeper - rewardKeeper types.RewardKeeper + cdc codec.BinaryCodec + addressCodec address.Codec + storeService store.KVStoreService + logger log.Logger + + // the address capable of executing a MsgUpdateParams message. + // Typically, this should be the x/gov module account. + authority string + + Schema collections.Schema + Params collections.Item[types.Params] + LaunchIDFromChannelID collections.Map[string, types.LaunchIDFromChannelID] + LaunchIDFromVerifiedClientID collections.Map[string, types.LaunchIDFromVerifiedClientID] + MonitoringHistory collections.Map[uint64, types.MonitoringHistory] + VerifiedClientID collections.Map[uint64, types.VerifiedClientID] + ProviderClientID collections.Map[uint64, types.ProviderClientID] + // this line is used by starport scaffolding # collection/type + + ibcKeeperFn func() *ibckeeper.Keeper + capabilityScopedFn func(string) capabilitykeeper.ScopedKeeper + + launchKeeper types.LaunchKeeper + rewardKeeper types.RewardKeeper + + // TODO set ibc keepers clientKeeper types.ClientKeeper portKeeper types.PortKeeper connectionKeeper types.ConnectionKeeper @@ -34,69 +59,177 @@ type ( func NewKeeper( cdc codec.BinaryCodec, - storeKey, - memKey storetypes.StoreKey, - ps paramtypes.Subspace, - clientKeeper types.ClientKeeper, - connectionKeeper types.ConnectionKeeper, - channelKeeper types.ChannelKeeper, - portKeeper types.PortKeeper, - scopedKeeper capabilitykeeper.ScopedKeeper, + addressCodec address.Codec, + storeService store.KVStoreService, + logger log.Logger, + authority string, + ibcKeeperFn func() *ibckeeper.Keeper, + capabilityScopedFn func(string) capabilitykeeper.ScopedKeeper, launchKeeper types.LaunchKeeper, rewardKeeper types.RewardKeeper, -) *Keeper { - // set KeyTable if it has not already been set - if !ps.HasKeyTable() { - ps = ps.WithKeyTable(types.ParamKeyTable()) +) Keeper { + if _, err := addressCodec.StringToBytes(authority); err != nil { + panic(fmt.Sprintf("invalid authority address %s: %s", authority, err)) + } + + sb := collections.NewSchemaBuilder(storeService) + + k := Keeper{ + cdc: cdc, + addressCodec: addressCodec, + storeService: storeService, + authority: authority, + logger: logger, + ibcKeeperFn: ibcKeeperFn, + capabilityScopedFn: capabilityScopedFn, + launchKeeper: launchKeeper, + rewardKeeper: rewardKeeper, + // clientKeeper: clientKeeper, // TODO + // portKeeper: portKeeper, + // connectionKeeper: connectionKeeper, + // channelKeeper: channelKeeper, + Params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + LaunchIDFromChannelID: collections.NewMap(sb, types.LaunchIDFromChannelIDKey, "launchIDFromChannelID", collections.StringKey, codec.CollValue[types.LaunchIDFromChannelID](cdc)), + LaunchIDFromVerifiedClientID: collections.NewMap(sb, types.LaunchIDFromVerifiedClientIDKey, "launchIDFromVerifiedClientID", collections.StringKey, codec.CollValue[types.LaunchIDFromVerifiedClientID](cdc)), + MonitoringHistory: collections.NewMap(sb, types.MonitoringHistoryKey, "monitoringHistory", collections.Uint64Key, codec.CollValue[types.MonitoringHistory](cdc)), + VerifiedClientID: collections.NewMap(sb, types.VerifiedClientIDKey, "verifiedClientID", collections.Uint64Key, codec.CollValue[types.VerifiedClientID](cdc)), + ProviderClientID: collections.NewMap(sb, types.ProviderClientIDKey, "providerClientID", collections.Uint64Key, codec.CollValue[types.ProviderClientID](cdc)), + // this line is used by starport scaffolding # collection/instantiate } - return &Keeper{ - cdc: cdc, - portKey: types.PortKey, - storeKey: storeKey, - memKey: memKey, - paramstore: ps, - scopedKeeper: scopedKeeper, - launchKeeper: launchKeeper, - rewardKeeper: rewardKeeper, - clientKeeper: clientKeeper, - portKeeper: portKeeper, - connectionKeeper: connectionKeeper, - channelKeeper: channelKeeper, + schema, err := sb.Build() + if err != nil { + panic(err) } + k.Schema = schema + + return k +} + +// GetAuthority returns the module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger() log.Logger { + return k.logger.With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +// AddressCodec returns the address codec. +func (k Keeper) AddressCodec() address.Codec { + return k.addressCodec +} + +// ---------------------------------------------------------------------------- +// IBC Keeper Logic +// ---------------------------------------------------------------------------- + +// SetIBCKeepers sets all IBC Keepers +// TODO set +func (k Keeper) SetIBCKeepers( + clientKeeper types.ClientKeeper, + connectionKeeper types.ConnectionKeeper, + channelKeeper types.ChannelKeeper, + portKeeper types.PortKeeper, +) { + k.SetClientKeeper(clientKeeper) + k.SetPortKeeper(portKeeper) + k.SetConnectionKeeper(connectionKeeper) + k.SetChannelKeeper(channelKeeper) +} + +// SetClientKeeper sets IBC client keeper +func (k Keeper) SetClientKeeper(clientKeeper types.ClientKeeper) { + k.clientKeeper = clientKeeper +} + +// SetPortKeeper sets IBC port keeper +func (k Keeper) SetPortKeeper(portKeeper types.PortKeeper) { + k.portKeeper = portKeeper +} + +// SetConnectionKeeper sets IBC connection keeper +func (k Keeper) SetConnectionKeeper(connectionKeeper types.ConnectionKeeper) { + k.connectionKeeper = connectionKeeper } -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +// SetChannelKeeper sets IBC channel keeper +func (k Keeper) SetChannelKeeper(channelKeeper types.ChannelKeeper) { + k.channelKeeper = channelKeeper } -// IsBound checks if the module is already bound to the desired port -func (k Keeper) IsBound(ctx sdk.Context, portID string) bool { - _, ok := k.scopedKeeper.GetCapability(ctx, host.PortPath(portID)) - return ok +// ChanCloseInit defines a wrapper function for the channel Keeper's function. +func (k Keeper) ChanCloseInit(ctx sdk.Context, portID, channelID string) error { + capName := host.ChannelCapabilityPath(portID, channelID) + chanCap, ok := k.ScopedKeeper().GetCapability(ctx, capName) + if !ok { + return errorsmod.Wrapf(channeltypes.ErrChannelCapabilityNotFound, "could not retrieve channel capability at: %s", capName) + } + return k.ibcKeeperFn().ChannelKeeper.ChanCloseInit(ctx, portID, channelID, chanCap) } -// BindPort defines a wrapper function for the ort Keeper's function in +// ShouldBound checks if the IBC app module can be bound to the desired port +func (k Keeper) ShouldBound(ctx sdk.Context, portID string) bool { + scopedKeeper := k.ScopedKeeper() + if scopedKeeper == nil { + return false + } + _, ok := scopedKeeper.GetCapability(ctx, host.PortPath(portID)) + return !ok +} + +// BindPort defines a wrapper function for the port Keeper's function in // order to expose it to module's InitGenesis function func (k Keeper) BindPort(ctx sdk.Context, portID string) error { - cap := k.portKeeper.BindPort(ctx, portID) + cap := k.ibcKeeperFn().PortKeeper.BindPort(ctx, portID) return k.ClaimCapability(ctx, cap, host.PortPath(portID)) } -// GetPort returns the portID for the module. Used in ExportGenesis +// GetPort returns the portID for the IBC app module. Used in ExportGenesis func (k Keeper) GetPort(ctx sdk.Context) string { - store := ctx.KVStore(k.storeKey) - return string(store.Get(k.portKey)) + storeAdapter := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := prefix.NewStore(storeAdapter, []byte{}) + return string(store.Get(types.PortKey)) } -// SetPort sets the portID for the module. Used in InitGenesis +// SetPort sets the portID for the IBC app module. Used in InitGenesis func (k Keeper) SetPort(ctx sdk.Context, portID string) { - store := ctx.KVStore(k.storeKey) - store.Set(k.portKey, []byte(portID)) + storeAdapter := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := prefix.NewStore(storeAdapter, []byte{}) + store.Set(types.PortKey, []byte(portID)) +} + +// AuthenticateCapability wraps the scopedKeeper's AuthenticateCapability function +func (k Keeper) AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool { + return k.ScopedKeeper().AuthenticateCapability(ctx, cap, name) } -// ClaimCapability allows the transfer module that can claim a capability that IBC module +// ClaimCapability allows the IBC app module to claim a capability that core IBC // passes to it func (k Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error { - return k.scopedKeeper.ClaimCapability(ctx, cap, name) + return k.ScopedKeeper().ClaimCapability(ctx, cap, name) +} + +// ScopedKeeper returns the ScopedKeeper +func (k Keeper) ScopedKeeper() exported.ScopedKeeper { + return k.capabilityScopedFn(types.ModuleName) +} + +// ClearVerifiedClientIDs removes a set of verifiedClientID in the store from its launch ID +func (k Keeper) ClearVerifiedClientIDs(ctx context.Context, launchID uint64) error { + verifiedClientID, err := k.VerifiedClientID.Get(ctx, launchID) + if err != nil { + return err + } + if err := k.VerifiedClientID.Remove(ctx, launchID); err != nil { + return err + } + + for _, clientID := range verifiedClientID.GetClientIDs() { + if err := k.LaunchIDFromVerifiedClientID.Remove(ctx, clientID); err != nil { + return err + } + } + return nil } diff --git a/x/monitoringc/keeper/launch_id_from_channel_id.go b/x/monitoringc/keeper/launch_id_from_channel_id.go deleted file mode 100644 index 9e46d27c..00000000 --- a/x/monitoringc/keeper/launch_id_from_channel_id.go +++ /dev/null @@ -1,51 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -// SetLaunchIDFromChannelID set a specific launchIDFromChannelID in the store from its index -func (k Keeper) SetLaunchIDFromChannelID(ctx sdk.Context, launchIDFromChannelID types.LaunchIDFromChannelID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LaunchIDFromChannelIDKeyPrefix)) - b := k.cdc.MustMarshal(&launchIDFromChannelID) - store.Set(types.LaunchIDFromChannelIDKey( - launchIDFromChannelID.ChannelID, - ), b) -} - -// GetLaunchIDFromChannelID returns a launchIDFromChannelID from its index -func (k Keeper) GetLaunchIDFromChannelID( - ctx sdk.Context, - channelID string, -) (val types.LaunchIDFromChannelID, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LaunchIDFromChannelIDKeyPrefix)) - - b := store.Get(types.LaunchIDFromChannelIDKey( - channelID, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// GetAllLaunchIDFromChannelID returns all launchIDFromChannelID -func (k Keeper) GetAllLaunchIDFromChannelID(ctx sdk.Context) (list []types.LaunchIDFromChannelID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LaunchIDFromChannelIDKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.LaunchIDFromChannelID - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/monitoringc/keeper/launch_id_from_channel_id_test.go b/x/monitoringc/keeper/launch_id_from_channel_id_test.go deleted file mode 100644 index 3c7bc0be..00000000 --- a/x/monitoringc/keeper/launch_id_from_channel_id_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func createNLaunchIDFromChannelID(ctx sdk.Context, keeper *keeper.Keeper, n int) []types.LaunchIDFromChannelID { - items := make([]types.LaunchIDFromChannelID, n) - for i := range items { - items[i].ChannelID = strconv.Itoa(i) - keeper.SetLaunchIDFromChannelID(ctx, items[i]) - } - return items -} - -func TestLaunchIDFromChannelIDGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get", func(t *testing.T) { - items := createNLaunchIDFromChannelID(ctx, tk.MonitoringConsumerKeeper, 10) - for _, item := range items { - rst, found := tk.MonitoringConsumerKeeper.GetLaunchIDFromChannelID(ctx, - item.ChannelID, - ) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } - }) -} - -func TestLaunchIDFromChannelIDGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get all", func(t *testing.T) { - items := createNLaunchIDFromChannelID(ctx, tk.MonitoringConsumerKeeper, 10) - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.MonitoringConsumerKeeper.GetAllLaunchIDFromChannelID(ctx)), - ) - }) -} diff --git a/x/monitoringc/keeper/launch_id_from_verified_client_id.go b/x/monitoringc/keeper/launch_id_from_verified_client_id.go deleted file mode 100644 index 556dbe86..00000000 --- a/x/monitoringc/keeper/launch_id_from_verified_client_id.go +++ /dev/null @@ -1,51 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -// SetLaunchIDFromVerifiedClientID set a specific launchIDFromVerifiedClientID in the store from its index -func (k Keeper) SetLaunchIDFromVerifiedClientID(ctx sdk.Context, launchIDFromVerifiedClientID types.LaunchIDFromVerifiedClientID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LaunchIDFromVerifiedClientIDKeyPrefix)) - b := k.cdc.MustMarshal(&launchIDFromVerifiedClientID) - store.Set(types.LaunchIDFromVerifiedClientIDKey( - launchIDFromVerifiedClientID.ClientID, - ), b) -} - -// GetLaunchIDFromVerifiedClientID returns a launchIDFromVerifiedClientID from its index -func (k Keeper) GetLaunchIDFromVerifiedClientID( - ctx sdk.Context, - clientID string, -) (val types.LaunchIDFromVerifiedClientID, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LaunchIDFromVerifiedClientIDKeyPrefix)) - - b := store.Get(types.LaunchIDFromVerifiedClientIDKey( - clientID, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// GetAllLaunchIDFromVerifiedClientID returns all launchIDFromVerifiedClientID -func (k Keeper) GetAllLaunchIDFromVerifiedClientID(ctx sdk.Context) (list []types.LaunchIDFromVerifiedClientID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LaunchIDFromVerifiedClientIDKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.LaunchIDFromVerifiedClientID - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/monitoringc/keeper/launch_id_from_verified_client_id_test.go b/x/monitoringc/keeper/launch_id_from_verified_client_id_test.go deleted file mode 100644 index 6877d9f1..00000000 --- a/x/monitoringc/keeper/launch_id_from_verified_client_id_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func createNLaunchIDFromVerifiedClientID(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.LaunchIDFromVerifiedClientID { - items := make([]types.LaunchIDFromVerifiedClientID, n) - for i := range items { - items[i].ClientID = strconv.Itoa(i) - keeper.SetLaunchIDFromVerifiedClientID(ctx, items[i]) - } - return items -} - -func TestLaunchIDFromVerifiedClientIDGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get", func(t *testing.T) { - items := createNLaunchIDFromVerifiedClientID(tk.MonitoringConsumerKeeper, ctx, 10) - for _, item := range items { - rst, found := tk.MonitoringConsumerKeeper.GetLaunchIDFromVerifiedClientID(ctx, - item.ClientID, - ) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } - }) -} - -func TestLaunchIDFromVerifiedClientIDGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get all", func(t *testing.T) { - items := createNLaunchIDFromVerifiedClientID(tk.MonitoringConsumerKeeper, ctx, 10) - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.MonitoringConsumerKeeper.GetAllLaunchIDFromVerifiedClientID(ctx)), - ) - }) -} diff --git a/x/monitoringc/keeper/monitoring_history.go b/x/monitoringc/keeper/monitoring_history.go deleted file mode 100644 index 3fffbe4c..00000000 --- a/x/monitoringc/keeper/monitoring_history.go +++ /dev/null @@ -1,51 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -// SetMonitoringHistory set a specific monitoringHistory in the store from its index -func (k Keeper) SetMonitoringHistory(ctx sdk.Context, monitoringHistory types.MonitoringHistory) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MonitoringHistoryKeyPrefix)) - b := k.cdc.MustMarshal(&monitoringHistory) - store.Set(types.MonitoringHistoryKey( - monitoringHistory.LaunchID, - ), b) -} - -// GetMonitoringHistory returns a monitoringHistory from its index -func (k Keeper) GetMonitoringHistory( - ctx sdk.Context, - launchID uint64, -) (val types.MonitoringHistory, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MonitoringHistoryKeyPrefix)) - - b := store.Get(types.MonitoringHistoryKey( - launchID, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// GetAllMonitoringHistory returns all monitoringHistory -func (k Keeper) GetAllMonitoringHistory(ctx sdk.Context) (list []types.MonitoringHistory) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MonitoringHistoryKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.MonitoringHistory - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/monitoringc/keeper/monitoring_history_test.go b/x/monitoringc/keeper/monitoring_history_test.go deleted file mode 100644 index fc4f8e7e..00000000 --- a/x/monitoringc/keeper/monitoring_history_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func createNMonitoringHistory(ctx sdk.Context, keeper *keeper.Keeper, n int) []types.MonitoringHistory { - items := make([]types.MonitoringHistory, n) - for i := range items { - items[i].LaunchID = uint64(i) - keeper.SetMonitoringHistory(ctx, items[i]) - } - return items -} - -func TestMonitoringHistoryGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get", func(t *testing.T) { - items := createNMonitoringHistory(ctx, tk.MonitoringConsumerKeeper, 10) - for _, item := range items { - rst, found := tk.MonitoringConsumerKeeper.GetMonitoringHistory(ctx, - item.LaunchID, - ) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } - }) -} - -func TestMonitoringHistoryGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get all", func(t *testing.T) { - items := createNMonitoringHistory(ctx, tk.MonitoringConsumerKeeper, 10) - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.MonitoringConsumerKeeper.GetAllMonitoringHistory(ctx)), - ) - }) -} diff --git a/x/monitoringc/keeper/monitoring_packet.go b/x/monitoringc/keeper/monitoring_packet.go deleted file mode 100644 index d03fed99..00000000 --- a/x/monitoringc/keeper/monitoring_packet.go +++ /dev/null @@ -1,67 +0,0 @@ -package keeper - -import ( - "errors" - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/monitoringc/types" -) - -// OnRecvMonitoringPacket processes packet reception -func (k Keeper) OnRecvMonitoringPacket( - ctx sdk.Context, - packet channeltypes.Packet, - data spntypes.MonitoringPacket, -) (packetAck spntypes.MonitoringPacketAck, err error) { - // validate packet data upon receiving - if err := data.ValidateBasic(); err != nil { - return packetAck, err - } - - // retrieve launch ID for channel ID - lidFromCid, found := k.GetLaunchIDFromChannelID(ctx, packet.DestinationChannel) - if !found { - return packetAck, fmt.Errorf("no launch ID associated to channel ID %s", packet.DestinationChannel) - } - - // save the latest received monitoring packet for documentation purpose - k.SetMonitoringHistory(ctx, types.MonitoringHistory{ - LaunchID: lidFromCid.LaunchID, - LatestMonitoringPacket: data, - }) - - // distribute reward from the signature count - err = k.rewardKeeper.DistributeRewards( - ctx, - lidFromCid.LaunchID, - data.SignatureCounts, - data.BlockHeight, - true, - ) - - return packetAck, err -} - -// OnAcknowledgementMonitoringPacket responds to the the success or failure of a packet -// acknowledgement written on the receiving chain. -func (k Keeper) OnAcknowledgementMonitoringPacket( - _ sdk.Context, - _ channeltypes.Packet, - _ spntypes.MonitoringPacket, - _ channeltypes.Acknowledgement, -) error { - return errors.New("not implemented") -} - -// OnTimeoutMonitoringPacket responds to the case where a packet has not been transmitted because of a timeout -func (k Keeper) OnTimeoutMonitoringPacket( - _ sdk.Context, - _ channeltypes.Packet, - _ spntypes.MonitoringPacket, -) error { - return errors.New("not implemented") -} diff --git a/x/monitoringc/keeper/monitoring_packet_test.go b/x/monitoringc/keeper/monitoring_packet_test.go deleted file mode 100644 index 7b14f82d..00000000 --- a/x/monitoringc/keeper/monitoring_packet_test.go +++ /dev/null @@ -1,166 +0,0 @@ -package keeper_test - -import ( - "testing" - - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/monitoringc/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - rewardtypes "github.com/tendermint/spn/x/reward/types" -) - -func Test_OnRecvMonitoringPacket(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - invalidChannel = "invalidchannel" - validChannel = "monitoringtest" - chain = sample.Chain(r, 0, 0) - valFoo = sample.Address(r) - valBar = sample.Address(r) - valOpAddrFoo = sample.Address(r) - valOpAddrBar = sample.Address(r) - coins = sample.Coins(r) - ) - - tk.MonitoringConsumerKeeper.SetLaunchIDFromChannelID(ctx, types.LaunchIDFromChannelID{ - ChannelID: invalidChannel, - LaunchID: 10000, - }) - chain.LaunchID = tk.LaunchKeeper.AppendChain(ctx, chain) - tk.MonitoringConsumerKeeper.SetLaunchIDFromChannelID(ctx, types.LaunchIDFromChannelID{ - ChannelID: validChannel, - LaunchID: chain.LaunchID, - }) - - t.Run("should allow set reward pool", func(t *testing.T) { - tk.RewardKeeper.SetRewardPool(ctx, rewardtypes.RewardPool{ - LaunchID: chain.LaunchID, - Provider: sample.Address(r), - InitialCoins: coins, - RemainingCoins: coins, - LastRewardHeight: 1, - Closed: false, - }) - err := tk.BankKeeper.MintCoins(ctx, rewardtypes.ModuleName, coins) - require.NoError(t, err) - }) - - // set validator profiles - tk.ProfileKeeper.SetValidator(ctx, profiletypes.Validator{ - Address: valFoo, - OperatorAddresses: []string{valOpAddrFoo}, - }) - tk.ProfileKeeper.SetValidatorByOperatorAddress(ctx, profiletypes.ValidatorByOperatorAddress{ - ValidatorAddress: valFoo, - OperatorAddress: valOpAddrFoo, - }) - tk.ProfileKeeper.SetValidator(ctx, profiletypes.Validator{ - Address: valBar, - OperatorAddresses: []string{valOpAddrBar}, - }) - tk.ProfileKeeper.SetValidatorByOperatorAddress(ctx, profiletypes.ValidatorByOperatorAddress{ - ValidatorAddress: valBar, - OperatorAddress: valOpAddrBar, - }) - - tests := []struct { - name string - packet channeltypes.Packet - data spntypes.MonitoringPacket - valid bool - }{ - { - name: "should successfully distribute rewards", - packet: channeltypes.Packet{ - DestinationChannel: validChannel, - }, - data: spntypes.MonitoringPacket{ - BlockHeight: 10, - SignatureCounts: tc.SignatureCounts(10, - tc.SignatureCount(t, valOpAddrFoo, "0.5"), - tc.SignatureCount(t, valOpAddrBar, "0.5"), - ), - }, - valid: true, - }, - { - name: "should prevent invalid data", - packet: channeltypes.Packet{}, - data: spntypes.MonitoringPacket{ - BlockHeight: 0, - SignatureCounts: spntypes.SignatureCounts{ - BlockCount: 1, - }, - }, - valid: false, - }, - { - name: "should prevent no launch ID associated to channel ID", - packet: channeltypes.Packet{ - DestinationChannel: "invalid", - }, - data: spntypes.MonitoringPacket{ - BlockHeight: 1, - SignatureCounts: spntypes.SignatureCounts{ - BlockCount: 1, - }, - }, - valid: false, - }, - { - name: "should fail distribute rewards", - packet: channeltypes.Packet{ - DestinationChannel: invalidChannel, - }, - data: spntypes.MonitoringPacket{ - BlockHeight: 1, - SignatureCounts: spntypes.SignatureCounts{ - BlockCount: 1, - }, - }, - valid: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - _, err := tk.MonitoringConsumerKeeper.OnRecvMonitoringPacket(ctx, tt.packet, tt.data) - if !tt.valid { - require.Error(t, err) - return - } - require.NoError(t, err) - }) - } -} - -func Test_OnAcknowledgementMonitoringPacket(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should return not implemented", func(t *testing.T) { - err := tk.MonitoringConsumerKeeper.OnAcknowledgementMonitoringPacket( - ctx, - channeltypes.Packet{}, - spntypes.MonitoringPacket{}, - channeltypes.Acknowledgement{}, - ) - require.EqualError(t, err, "not implemented") - }) -} - -func Test_OnTimeoutMonitoringPacket(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should return not implemented", func(t *testing.T) { - err := tk.MonitoringConsumerKeeper.OnTimeoutMonitoringPacket( - ctx, - channeltypes.Packet{}, - spntypes.MonitoringPacket{}, - ) - require.EqualError(t, err, "not implemented") - }) -} diff --git a/x/monitoringc/keeper/msg.go b/x/monitoringc/keeper/msg_server.go similarity index 85% rename from x/monitoringc/keeper/msg.go rename to x/monitoringc/keeper/msg_server.go index 0765871d..4779bae0 100644 --- a/x/monitoringc/keeper/msg.go +++ b/x/monitoringc/keeper/msg_server.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/tendermint/spn/x/monitoringc/types" + "github.com/ignite/network/x/monitoringc/types" ) type msgServer struct { diff --git a/x/monitoringc/keeper/msg_create_client.go b/x/monitoringc/keeper/msg_server_create_client.go similarity index 67% rename from x/monitoringc/keeper/msg_create_client.go rename to x/monitoringc/keeper/msg_server_create_client.go index 50e595f4..abee5c6a 100644 --- a/x/monitoringc/keeper/msg_create_client.go +++ b/x/monitoringc/keeper/msg_server_create_client.go @@ -7,21 +7,23 @@ import ( sdkerrors "cosmossdk.io/errors" "github.com/cometbft/cometbft/light" sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - committypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" - ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - "github.com/tendermint/spn/pkg/chainid" - launchtypes "github.com/tendermint/spn/x/launch/types" - "github.com/tendermint/spn/x/monitoringc/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + committypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" + ibctmtypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - ignterrors "github.com/ignite/modules/pkg/errors" + "github.com/ignite/network/pkg/chainid" + ignterrors "github.com/ignite/network/pkg/errors" + launchtypes "github.com/ignite/network/x/launch/types" + "github.com/ignite/network/x/monitoringc/types" ) -func (k msgServer) CreateClient(goCtx context.Context, msg *types.MsgCreateClient) (*types.MsgCreateClientResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) CreateClient(ctx context.Context, msg *types.MsgCreateClient) (*types.MsgCreateClientResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } - chain, found := k.launchKeeper.GetChain(ctx, msg.LaunchID) - if !found { + chain, err := k.launchKeeper.GetChain(ctx, msg.LaunchID) + if err != nil { return nil, sdkerrors.Wrapf(launchtypes.ErrChainNotFound, "invalid launch ID %d", msg.LaunchID) } @@ -56,21 +58,26 @@ func (k msgServer) CreateClient(goCtx context.Context, msg *types.MsgCreateClien } // create the client from IBC keeper + sdkCtx := sdk.UnwrapSDKContext(ctx) tmConsensusState, err := msg.ConsensusState.ToTendermintConsensusState() if err != nil { return nil, ignterrors.Criticalf("validated consensus state can't be converted %s", err.Error()) } - clientID, err := k.clientKeeper.CreateClient(ctx, clientState, &tmConsensusState) + clientID, err := k.clientKeeper.CreateClient(sdkCtx, clientState, &tmConsensusState) if err != nil { return nil, sdkerrors.Wrap(types.ErrClientCreationFailure, err.Error()) } // add the client ID as verified client ID - k.AddVerifiedClientID(ctx, msg.LaunchID, clientID) - k.SetLaunchIDFromVerifiedClientID(ctx, types.LaunchIDFromVerifiedClientID{ + if err := k.AddVerifiedClientID(ctx, msg.LaunchID, clientID); err != nil { + return nil, sdkerrors.Wrap(types.ErrClientCreationFailure, err.Error()) + } + if err := k.LaunchIDFromVerifiedClientID.Set(ctx, clientID, types.LaunchIDFromVerifiedClientID{ LaunchID: msg.LaunchID, ClientID: clientID, - }) + }); err != nil { + return nil, sdkerrors.Wrap(types.ErrClientCreationFailure, err.Error()) + } return &types.MsgCreateClientResponse{ ClientID: clientID, diff --git a/x/monitoringc/keeper/msg_create_client_test.go b/x/monitoringc/keeper/msg_server_create_client_test.go similarity index 82% rename from x/monitoringc/keeper/msg_create_client_test.go rename to x/monitoringc/keeper/msg_server_create_client_test.go index 662dd121..8207425d 100644 --- a/x/monitoringc/keeper/msg_create_client_test.go +++ b/x/monitoringc/keeper/msg_server_create_client_test.go @@ -6,16 +6,16 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + ibctmtypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - launchtypes "github.com/tendermint/spn/x/launch/types" - "github.com/tendermint/spn/x/monitoringc/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - ignterrors "github.com/ignite/modules/pkg/errors" + ignterrors "github.com/ignite/network/pkg/errors" + spntypes "github.com/ignite/network/pkg/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + launchtypes "github.com/ignite/network/x/launch/types" + "github.com/ignite/network/x/monitoringc/types" + profiletypes "github.com/ignite/network/x/profile/types" ) func Test_msgServer_CreateClient(t *testing.T) { @@ -23,8 +23,7 @@ func Test_msgServer_CreateClient(t *testing.T) { coordAddr = sample.Address(r) invalidChain = uint64(1000) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) consPubKeyStr = "jP0v8F0e2kSAS367V/QAikddQPze+V36v7lhkv1Iqgg=" cs = spntypes.NewConsensusState( @@ -65,7 +64,8 @@ func Test_msgServer_CreateClient(t *testing.T) { require.NoError(t, err) chainWithInvalidChainID := sample.Chain(r, resCreateChain.LaunchID+1, resCoord.CoordinatorID) chainWithInvalidChainID.GenesisChainID = "invalid_chain_id" - tk.LaunchKeeper.SetChain(sdkCtx, chainWithInvalidChainID) + err = tk.LaunchKeeper.Chain.Set(ctx, chainWithInvalidChainID.LaunchID, chainWithInvalidChainID) + require.NoError(t, err) _, err = ts.LaunchSrv.SendRequest(ctx, launchtypes.NewMsgSendRequest( coordAddr, resCreateChain.LaunchID, @@ -82,7 +82,7 @@ func Test_msgServer_CreateClient(t *testing.T) { _, err = ts.LaunchSrv.TriggerLaunch(ctx, launchtypes.NewMsgTriggerLaunch( coordAddr, resCreateChain.LaunchID, - sdkCtx.BlockTime().Add(launchtypes.DefaultMinLaunchTime), + ctx.BlockTime().Add(launchtypes.DefaultMinLaunchTime), )) require.NoError(t, err) @@ -189,18 +189,18 @@ func Test_msgServer_CreateClient(t *testing.T) { require.NoError(t, err) // verify the client is created - verifiedClients, found := tk.MonitoringConsumerKeeper.GetVerifiedClientID(sdkCtx, tt.msg.LaunchID) - require.True(t, found, "verified client ID should be added in the list") + verifiedClients, err := tk.MonitoringConsumerKeeper.VerifiedClientID.Get(ctx, tt.msg.LaunchID) + require.NoError(t, err, "verified client ID should be added in the list") require.EqualValues(t, tt.msg.LaunchID, verifiedClients.LaunchID) require.Contains(t, verifiedClients.ClientIDs, res.ClientID) - launchIDFromClient, found := tk.MonitoringConsumerKeeper.GetLaunchIDFromVerifiedClientID(sdkCtx, res.ClientID) - require.True(t, found, "launch ID should be registered for the verified client ID") + launchIDFromClient, err := tk.MonitoringConsumerKeeper.LaunchIDFromVerifiedClientID.Get(ctx, res.ClientID) + require.NoError(t, err, "launch ID should be registered for the verified client ID") require.EqualValues(t, res.ClientID, launchIDFromClient.ClientID) require.EqualValues(t, tt.msg.LaunchID, launchIDFromClient.LaunchID) // IBC client should be created - clientState, found := tk.IBCKeeper.ClientKeeper.GetClientState(sdkCtx, res.ClientID) + clientState, found := tk.IBCKeeper.ClientKeeper.GetClientState(ctx, res.ClientID) require.True(t, found, "IBC consumer client state should be created") cs, ok := clientState.(*ibctmtypes.ClientState) require.True(t, ok) diff --git a/x/monitoringc/keeper/msg_update_params.go b/x/monitoringc/keeper/msg_update_params.go new file mode 100644 index 00000000..2c0ce864 --- /dev/null +++ b/x/monitoringc/keeper/msg_update_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + + "github.com/ignite/network/x/monitoringc/types" +) + +func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if _, err := k.addressCodec.StringToBytes(req.Authority); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + if k.GetAuthority() != req.Authority { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) + } + + if err := req.Params.Validate(); err != nil { + return nil, err + } + + if err := k.Params.Set(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/monitoringc/keeper/msg_update_params_test.go b/x/monitoringc/keeper/msg_update_params_test.go new file mode 100644 index 00000000..2d4352d7 --- /dev/null +++ b/x/monitoringc/keeper/msg_update_params_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" +) + +func TestMsgUpdateParams(t *testing.T) { + k, ctx, _ := keepertest.MonitoringcKeeper(t) + ms := keeper.NewMsgServerImpl(k) + + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + // default params + testCases := []struct { + name string + input *types.MsgUpdateParams + expErr bool + expErrMsg string + }{ + { + name: "invalid authority", + input: &types.MsgUpdateParams{ + Authority: "invalid", + Params: params, + }, + expErr: true, + expErrMsg: "invalid authority", + }, + { + name: "send enabled param", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: types.Params{}, + }, + expErr: false, + }, + { + name: "all good", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: params, + }, + expErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, err := ms.UpdateParams(ctx, tc.input) + + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expErrMsg) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/monitoringc/keeper/params.go b/x/monitoringc/keeper/params.go deleted file mode 100644 index 4ae9af0a..00000000 --- a/x/monitoringc/keeper/params.go +++ /dev/null @@ -1,17 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -// GetParams get all parameters as types.Params -func (k Keeper) GetParams(ctx sdk.Context) types.Params { - return types.NewParams() -} - -// SetParams set the params -func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { - k.paramstore.SetParamSet(ctx, ¶ms) -} diff --git a/x/monitoringc/keeper/params_test.go b/x/monitoringc/keeper/params_test.go deleted file mode 100644 index ff4397e5..00000000 --- a/x/monitoringc/keeper/params_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func TestGetParams(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get", func(t *testing.T) { - params := types.DefaultParams() - tk.MonitoringConsumerKeeper.SetParams(ctx, params) - require.EqualValues(t, params, tk.MonitoringConsumerKeeper.GetParams(ctx)) - - params = types.NewParams() - tk.MonitoringConsumerKeeper.SetParams(ctx, params) - require.EqualValues(t, params, tk.MonitoringConsumerKeeper.GetParams(ctx)) - }) -} diff --git a/x/monitoringc/keeper/provider_client_id.go b/x/monitoringc/keeper/provider_client_id.go deleted file mode 100644 index 5f0f8275..00000000 --- a/x/monitoringc/keeper/provider_client_id.go +++ /dev/null @@ -1,48 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringc/types" -) - -// SetProviderClientID set a specific providerClientID in the store from its index -func (k Keeper) SetProviderClientID(ctx sdk.Context, providerClientID types.ProviderClientID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProviderClientIDKeyPrefix)) - b := k.cdc.MustMarshal(&providerClientID) - store.Set(types.ProviderClientIDKey( - providerClientID.LaunchID, - ), b) -} - -// GetProviderClientID returns a providerClientID from its index -func (k Keeper) GetProviderClientID(ctx sdk.Context, launchID uint64) (val types.ProviderClientID, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProviderClientIDKeyPrefix)) - - b := store.Get(types.ProviderClientIDKey( - launchID, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// GetAllProviderClientID returns all providerClientID -func (k Keeper) GetAllProviderClientID(ctx sdk.Context) (list []types.ProviderClientID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProviderClientIDKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.ProviderClientID - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/monitoringc/keeper/provider_client_id_test.go b/x/monitoringc/keeper/provider_client_id_test.go deleted file mode 100644 index 2bc2c0b0..00000000 --- a/x/monitoringc/keeper/provider_client_id_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func createNProviderClientID(ctx sdk.Context, keeper *keeper.Keeper, n int) []types.ProviderClientID { - items := make([]types.ProviderClientID, n) - for i := range items { - items[i].LaunchID = uint64(i) - keeper.SetProviderClientID(ctx, items[i]) - } - return items -} - -func TestProviderClientIDGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get", func(t *testing.T) { - items := createNProviderClientID(ctx, tk.MonitoringConsumerKeeper, 10) - for _, item := range items { - rst, found := tk.MonitoringConsumerKeeper.GetProviderClientID(ctx, - item.LaunchID, - ) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } - }) -} - -func TestProviderClientIDGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get all", func(t *testing.T) { - items := createNProviderClientID(ctx, tk.MonitoringConsumerKeeper, 10) - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.MonitoringConsumerKeeper.GetAllProviderClientID(ctx)), - ) - }) -} diff --git a/x/monitoringc/keeper/query.go b/x/monitoringc/keeper/query.go new file mode 100644 index 00000000..adcccccb --- /dev/null +++ b/x/monitoringc/keeper/query.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "github.com/ignite/network/x/monitoringc/types" +) + +var _ types.QueryServer = queryServer{} + +// NewQueryServerImpl returns an implementation of the QueryServer interface +// for the provided Keeper. +func NewQueryServerImpl(k Keeper) types.QueryServer { + return queryServer{k} +} + +type queryServer struct { + k Keeper +} diff --git a/x/monitoringc/keeper/query_launch_id_from_channel_id.go b/x/monitoringc/keeper/query_launch_id_from_channel_id.go new file mode 100644 index 00000000..f459ed92 --- /dev/null +++ b/x/monitoringc/keeper/query_launch_id_from_channel_id.go @@ -0,0 +1,50 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringc/types" +) + +func (q queryServer) ListLaunchIDFromChannelID(ctx context.Context, req *types.QueryAllLaunchIDFromChannelIDRequest) (*types.QueryAllLaunchIDFromChannelIDResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + launchIDFromChannelIDs, pageRes, err := query.CollectionPaginate( + ctx, + q.k.LaunchIDFromChannelID, + req.Pagination, + func(_ string, value types.LaunchIDFromChannelID) (types.LaunchIDFromChannelID, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllLaunchIDFromChannelIDResponse{LaunchIDFromChannelID: launchIDFromChannelIDs, Pagination: pageRes}, nil +} + +func (q queryServer) GetLaunchIDFromChannelID(ctx context.Context, req *types.QueryGetLaunchIDFromChannelIDRequest) (*types.QueryGetLaunchIDFromChannelIDResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.LaunchIDFromChannelID.Get(ctx, req.ChannelID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetLaunchIDFromChannelIDResponse{LaunchIDFromChannelID: val}, nil +} diff --git a/x/monitoringc/keeper/grpc_launch_id_from_channel_id_test.go b/x/monitoringc/keeper/query_launch_id_from_channel_id_test.go similarity index 52% rename from x/monitoringc/keeper/grpc_launch_id_from_channel_id_test.go rename to x/monitoringc/keeper/query_launch_id_from_channel_id_test.go index d82a40f1..13748a8c 100644 --- a/x/monitoringc/keeper/grpc_launch_id_from_channel_id_test.go +++ b/x/monitoringc/keeper/query_launch_id_from_channel_id_test.go @@ -1,58 +1,73 @@ package keeper_test import ( + "context" "strconv" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/types" + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" ) +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNLaunchIDFromChannelID(keeper keeper.Keeper, ctx context.Context, n int) []types.LaunchIDFromChannelID { + items := make([]types.LaunchIDFromChannelID, n) + for i := range items { + items[i].ChannelID = strconv.Itoa(i) + + _ = keeper.LaunchIDFromChannelID.Set(ctx, items[i].ChannelID, items[i]) + } + return items +} + func TestLaunchIDFromChannelIDQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - items := createNLaunchIDFromChannelID(ctx, tk.MonitoringConsumerKeeper, 2) - for _, tc := range []struct { - name string + k, ctx, _ := keepertest.MonitoringcKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNLaunchIDFromChannelID(k, ctx, 2) + tests := []struct { + desc string request *types.QueryGetLaunchIDFromChannelIDRequest response *types.QueryGetLaunchIDFromChannelIDResponse err error }{ { - name: "should allow valid first query", + desc: "First", request: &types.QueryGetLaunchIDFromChannelIDRequest{ - ChannelID: items[0].ChannelID, + ChannelID: msgs[0].ChannelID, }, - response: &types.QueryGetLaunchIDFromChannelIDResponse{LaunchIDFromChannelID: items[0]}, + response: &types.QueryGetLaunchIDFromChannelIDResponse{LaunchIDFromChannelID: msgs[0]}, }, { - name: "should allow valid second query", + desc: "Second", request: &types.QueryGetLaunchIDFromChannelIDRequest{ - ChannelID: items[1].ChannelID, + ChannelID: msgs[1].ChannelID, }, - response: &types.QueryGetLaunchIDFromChannelIDResponse{LaunchIDFromChannelID: items[1]}, + response: &types.QueryGetLaunchIDFromChannelIDResponse{LaunchIDFromChannelID: msgs[1]}, }, { - name: "should return key not found", + desc: "KeyNotFound", request: &types.QueryGetLaunchIDFromChannelIDRequest{ ChannelID: strconv.Itoa(100000), }, err: status.Error(codes.NotFound, "not found"), }, { - name: "should return invalid request", + desc: "InvalidRequest", err: status.Error(codes.InvalidArgument, "invalid request"), }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.MonitoringConsumerKeeper.LaunchIDFromChannelID(wctx, tc.request) + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetLaunchIDFromChannelID(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) } else { @@ -67,9 +82,9 @@ func TestLaunchIDFromChannelIDQuerySingle(t *testing.T) { } func TestLaunchIDFromChannelIDQueryPaginated(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - items := createNLaunchIDFromChannelID(ctx, tk.MonitoringConsumerKeeper, 5) + k, ctx, _ := keepertest.MonitoringcKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNLaunchIDFromChannelID(k, ctx, 5) request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllLaunchIDFromChannelIDRequest { return &types.QueryAllLaunchIDFromChannelIDRequest{ @@ -81,43 +96,43 @@ func TestLaunchIDFromChannelIDQueryPaginated(t *testing.T) { }, } } - t.Run("should paginate by offset", func(t *testing.T) { + t.Run("ByOffset", func(t *testing.T) { step := 2 - for i := 0; i < len(items); i += step { - resp, err := tk.MonitoringConsumerKeeper.LaunchIDFromChannelIDAll(wctx, request(nil, uint64(i), uint64(step), false)) + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListLaunchIDFromChannelID(ctx, request(nil, uint64(i), uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.LaunchIDFromChannelID), step) require.Subset(t, - nullify.Fill(items), + nullify.Fill(msgs), nullify.Fill(resp.LaunchIDFromChannelID), ) } }) - t.Run("should paginate by key", func(t *testing.T) { + t.Run("ByKey", func(t *testing.T) { step := 2 var next []byte - for i := 0; i < len(items); i += step { - resp, err := tk.MonitoringConsumerKeeper.LaunchIDFromChannelIDAll(wctx, request(next, 0, uint64(step), false)) + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListLaunchIDFromChannelID(ctx, request(next, 0, uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.LaunchIDFromChannelID), step) require.Subset(t, - nullify.Fill(items), + nullify.Fill(msgs), nullify.Fill(resp.LaunchIDFromChannelID), ) next = resp.Pagination.NextKey } }) - t.Run("should paginate all", func(t *testing.T) { - resp, err := tk.MonitoringConsumerKeeper.LaunchIDFromChannelIDAll(wctx, request(nil, 0, 0, true)) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListLaunchIDFromChannelID(ctx, request(nil, 0, 0, true)) require.NoError(t, err) - require.Equal(t, len(items), int(resp.Pagination.Total)) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) require.ElementsMatch(t, - nullify.Fill(items), + nullify.Fill(msgs), nullify.Fill(resp.LaunchIDFromChannelID), ) }) - t.Run("should return InvalidRequest", func(t *testing.T) { - _, err := tk.MonitoringConsumerKeeper.LaunchIDFromChannelIDAll(wctx, nil) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListLaunchIDFromChannelID(ctx, nil) require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) }) } diff --git a/x/monitoringc/keeper/query_monitoring_history.go b/x/monitoringc/keeper/query_monitoring_history.go new file mode 100644 index 00000000..5b578a81 --- /dev/null +++ b/x/monitoringc/keeper/query_monitoring_history.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringc/types" +) + +func (q queryServer) GetMonitoringHistory(ctx context.Context, req *types.QueryGetMonitoringHistoryRequest) (*types.QueryGetMonitoringHistoryResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.MonitoringHistory.Get(ctx, req.LaunchID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetMonitoringHistoryResponse{MonitoringHistory: val}, nil +} diff --git a/x/monitoringc/keeper/query_monitoring_history_test.go b/x/monitoringc/keeper/query_monitoring_history_test.go new file mode 100644 index 00000000..a22d22cd --- /dev/null +++ b/x/monitoringc/keeper/query_monitoring_history_test.go @@ -0,0 +1,81 @@ +package keeper_test + +import ( + "context" + "strconv" + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNMonitoringHistory(keeper keeper.Keeper, ctx context.Context, n int) []types.MonitoringHistory { + items := make([]types.MonitoringHistory, n) + for i := range items { + items[i].LaunchID = uint64(i) + + _ = keeper.MonitoringHistory.Set(ctx, items[i].LaunchID, items[i]) + } + return items +} + +func TestMonitoringHistoryQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.MonitoringcKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNMonitoringHistory(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetMonitoringHistoryRequest + response *types.QueryGetMonitoringHistoryResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetMonitoringHistoryRequest{ + LaunchID: msgs[0].LaunchID, + }, + response: &types.QueryGetMonitoringHistoryResponse{MonitoringHistory: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetMonitoringHistoryRequest{ + LaunchID: msgs[1].LaunchID, + }, + response: &types.QueryGetMonitoringHistoryResponse{MonitoringHistory: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetMonitoringHistoryRequest{ + LaunchID: 100000, + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetMonitoringHistory(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} diff --git a/x/monitoringc/keeper/query_params.go b/x/monitoringc/keeper/query_params.go new file mode 100644 index 00000000..c4fa5970 --- /dev/null +++ b/x/monitoringc/keeper/query_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringc/types" +) + +func (q queryServer) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + params, err := q.k.Params.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/x/monitoringc/keeper/query_params_test.go b/x/monitoringc/keeper/query_params_test.go new file mode 100644 index 00000000..1f68f41c --- /dev/null +++ b/x/monitoringc/keeper/query_params_test.go @@ -0,0 +1,23 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" +) + +func TestParamsQuery(t *testing.T) { + k, ctx, _ := keepertest.MonitoringcKeeper(t) + + qs := keeper.NewQueryServerImpl(k) + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + response, err := qs.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/monitoringc/keeper/query_provider_client_id.go b/x/monitoringc/keeper/query_provider_client_id.go new file mode 100644 index 00000000..2cc788c2 --- /dev/null +++ b/x/monitoringc/keeper/query_provider_client_id.go @@ -0,0 +1,50 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringc/types" +) + +func (q queryServer) ListProviderClientID(ctx context.Context, req *types.QueryAllProviderClientIDRequest) (*types.QueryAllProviderClientIDResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + providerClientIDs, pageRes, err := query.CollectionPaginate( + ctx, + q.k.ProviderClientID, + req.Pagination, + func(_ uint64, value types.ProviderClientID) (types.ProviderClientID, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllProviderClientIDResponse{ProviderClientID: providerClientIDs, Pagination: pageRes}, nil +} + +func (q queryServer) GetProviderClientID(ctx context.Context, req *types.QueryGetProviderClientIDRequest) (*types.QueryGetProviderClientIDResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.ProviderClientID.Get(ctx, req.LaunchID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetProviderClientIDResponse{ProviderClientID: val}, nil +} diff --git a/x/monitoringc/keeper/grpc_provider_client_id_test.go b/x/monitoringc/keeper/query_provider_client_id_test.go similarity index 51% rename from x/monitoringc/keeper/grpc_provider_client_id_test.go rename to x/monitoringc/keeper/query_provider_client_id_test.go index a9671355..6e702c05 100644 --- a/x/monitoringc/keeper/grpc_provider_client_id_test.go +++ b/x/monitoringc/keeper/query_provider_client_id_test.go @@ -1,57 +1,73 @@ package keeper_test import ( + "context" + "strconv" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/types" + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" ) +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNProviderClientID(keeper keeper.Keeper, ctx context.Context, n int) []types.ProviderClientID { + items := make([]types.ProviderClientID, n) + for i := range items { + items[i].LaunchID = uint64(i) + + _ = keeper.ProviderClientID.Set(ctx, items[i].LaunchID, items[i]) + } + return items +} + func TestProviderClientIDQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - items := createNProviderClientID(ctx, tk.MonitoringConsumerKeeper, 2) - for _, tc := range []struct { - name string + k, ctx, _ := keepertest.MonitoringcKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNProviderClientID(k, ctx, 2) + tests := []struct { + desc string request *types.QueryGetProviderClientIDRequest response *types.QueryGetProviderClientIDResponse err error }{ { - name: "should allow valid first query", + desc: "First", request: &types.QueryGetProviderClientIDRequest{ - LaunchID: items[0].LaunchID, + LaunchID: msgs[0].LaunchID, }, - response: &types.QueryGetProviderClientIDResponse{ProviderClientID: items[0]}, + response: &types.QueryGetProviderClientIDResponse{ProviderClientID: msgs[0]}, }, { - name: "should allow valid second query", + desc: "Second", request: &types.QueryGetProviderClientIDRequest{ - LaunchID: items[1].LaunchID, + LaunchID: msgs[1].LaunchID, }, - response: &types.QueryGetProviderClientIDResponse{ProviderClientID: items[1]}, + response: &types.QueryGetProviderClientIDResponse{ProviderClientID: msgs[1]}, }, { - name: "should return key not found", + desc: "KeyNotFound", request: &types.QueryGetProviderClientIDRequest{ LaunchID: 100000, }, err: status.Error(codes.NotFound, "not found"), }, { - name: "should return invalid request", + desc: "InvalidRequest", err: status.Error(codes.InvalidArgument, "invalid request"), }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.MonitoringConsumerKeeper.ProviderClientID(wctx, tc.request) + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetProviderClientID(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) } else { @@ -66,9 +82,9 @@ func TestProviderClientIDQuerySingle(t *testing.T) { } func TestProviderClientIDQueryPaginated(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - items := createNProviderClientID(ctx, tk.MonitoringConsumerKeeper, 2) + k, ctx, _ := keepertest.MonitoringcKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNProviderClientID(k, ctx, 5) request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllProviderClientIDRequest { return &types.QueryAllProviderClientIDRequest{ @@ -80,43 +96,43 @@ func TestProviderClientIDQueryPaginated(t *testing.T) { }, } } - t.Run("should paginate by offset", func(t *testing.T) { + t.Run("ByOffset", func(t *testing.T) { step := 2 - for i := 0; i < len(items); i += step { - resp, err := tk.MonitoringConsumerKeeper.ProviderClientIDAll(wctx, request(nil, uint64(i), uint64(step), false)) + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListProviderClientID(ctx, request(nil, uint64(i), uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.ProviderClientID), step) require.Subset(t, - nullify.Fill(items), + nullify.Fill(msgs), nullify.Fill(resp.ProviderClientID), ) } }) - t.Run("should paginate by key", func(t *testing.T) { + t.Run("ByKey", func(t *testing.T) { step := 2 var next []byte - for i := 0; i < len(items); i += step { - resp, err := tk.MonitoringConsumerKeeper.ProviderClientIDAll(wctx, request(next, 0, uint64(step), false)) + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListProviderClientID(ctx, request(next, 0, uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.ProviderClientID), step) require.Subset(t, - nullify.Fill(items), + nullify.Fill(msgs), nullify.Fill(resp.ProviderClientID), ) next = resp.Pagination.NextKey } }) - t.Run("should paginate all", func(t *testing.T) { - resp, err := tk.MonitoringConsumerKeeper.ProviderClientIDAll(wctx, request(nil, 0, 0, true)) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListProviderClientID(ctx, request(nil, 0, 0, true)) require.NoError(t, err) - require.Equal(t, len(items), int(resp.Pagination.Total)) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) require.ElementsMatch(t, - nullify.Fill(items), + nullify.Fill(msgs), nullify.Fill(resp.ProviderClientID), ) }) - t.Run("should return InvalidRequest", func(t *testing.T) { - _, err := tk.MonitoringConsumerKeeper.ProviderClientIDAll(wctx, nil) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListProviderClientID(ctx, nil) require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) }) } diff --git a/x/monitoringc/keeper/query_verified_client_id.go b/x/monitoringc/keeper/query_verified_client_id.go new file mode 100644 index 00000000..8d09ca3c --- /dev/null +++ b/x/monitoringc/keeper/query_verified_client_id.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringc/types" +) + +func (q queryServer) GetVerifiedClientID(ctx context.Context, req *types.QueryGetVerifiedClientIDRequest) (*types.QueryGetVerifiedClientIDResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.VerifiedClientID.Get(ctx, req.LaunchID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetVerifiedClientIDResponse{VerifiedClientID: val}, nil +} diff --git a/x/monitoringc/keeper/query_verified_client_id_test.go b/x/monitoringc/keeper/query_verified_client_id_test.go new file mode 100644 index 00000000..b0861b7f --- /dev/null +++ b/x/monitoringc/keeper/query_verified_client_id_test.go @@ -0,0 +1,81 @@ +package keeper_test + +import ( + "context" + "strconv" + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNVerifiedClientID(keeper keeper.Keeper, ctx context.Context, n int) []types.VerifiedClientID { + items := make([]types.VerifiedClientID, n) + for i := range items { + items[i].LaunchID = uint64(i) + + _ = keeper.VerifiedClientID.Set(ctx, items[i].LaunchID, items[i]) + } + return items +} + +func TestVerifiedClientIDQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.MonitoringcKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNVerifiedClientID(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetVerifiedClientIDRequest + response *types.QueryGetVerifiedClientIDResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetVerifiedClientIDRequest{ + LaunchID: msgs[0].LaunchID, + }, + response: &types.QueryGetVerifiedClientIDResponse{VerifiedClientID: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetVerifiedClientIDRequest{ + LaunchID: msgs[1].LaunchID, + }, + response: &types.QueryGetVerifiedClientIDResponse{VerifiedClientID: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetVerifiedClientIDRequest{ + LaunchID: 100000, + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetVerifiedClientID(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} diff --git a/x/monitoringc/keeper/verified_client_id.go b/x/monitoringc/keeper/verified_client_id.go index a6646152..54a1ae58 100644 --- a/x/monitoringc/keeper/verified_client_id.go +++ b/x/monitoringc/keeper/verified_client_id.go @@ -1,79 +1,48 @@ package keeper import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" + "context" + "errors" - "github.com/tendermint/spn/x/monitoringc/types" -) - -// SetVerifiedClientID set a specific verifiedClientID in the store from its launch id -func (k Keeper) SetVerifiedClientID(ctx sdk.Context, verifiedClientID types.VerifiedClientID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.VerifiedClientIDKeyPrefix)) - b := k.cdc.MustMarshal(&verifiedClientID) - store.Set(types.VerifiedClientIDKey(verifiedClientID.LaunchID), b) -} - -// ClearVerifiedClientIDs removes a set of verifiedClientID in the store from its launch ID -func (k Keeper) ClearVerifiedClientIDs(ctx sdk.Context, launchID uint64) { - verifiedClientID, found := k.GetVerifiedClientID(ctx, launchID) - if !found { - return - } - - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.VerifiedClientIDKeyPrefix)) - store.Delete(types.VerifiedClientIDKey(launchID)) - - for _, id := range verifiedClientID.GetClientIDs() { - store = prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LaunchIDFromVerifiedClientIDKeyPrefix)) - store.Delete(types.LaunchIDFromChannelIDKey(id)) - } -} - -// GetVerifiedClientID returns a verifiedClientID from its launch id -func (k Keeper) GetVerifiedClientID( - ctx sdk.Context, - launchID uint64, -) (val types.VerifiedClientID, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.VerifiedClientIDKeyPrefix)) + "cosmossdk.io/collections" - b := store.Get(types.VerifiedClientIDKey(launchID)) - if b == nil { - return val, false - } + "github.com/ignite/network/x/monitoringc/types" +) - k.cdc.MustUnmarshal(b, &val) - return val, true +// AllVerifiedClientID returns all VerifiedClientID. +func (k Keeper) AllVerifiedClientID(ctx context.Context) ([]types.VerifiedClientID, error) { + verifiedClientIDs := make([]types.VerifiedClientID, 0) + err := k.VerifiedClientID.Walk(ctx, nil, func(_ uint64, value types.VerifiedClientID) (bool, error) { + verifiedClientIDs = append(verifiedClientIDs, value) + return false, nil + }) + return verifiedClientIDs, err } -// GetAllVerifiedClientID returns all verifiedClientID -func (k Keeper) GetAllVerifiedClientID(ctx sdk.Context) (list []types.VerifiedClientID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.VerifiedClientIDKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.VerifiedClientID - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return +// AllLaunchIDFromVerifiedClientID returns all LaunchIDFromVerifiedClientID. +func (k Keeper) AllLaunchIDFromVerifiedClientID(ctx context.Context) ([]types.LaunchIDFromVerifiedClientID, error) { + launchIDFromVerifiedClientIDs := make([]types.LaunchIDFromVerifiedClientID, 0) + err := k.LaunchIDFromVerifiedClientID.Walk(ctx, nil, func(_ string, value types.LaunchIDFromVerifiedClientID) (bool, error) { + launchIDFromVerifiedClientIDs = append(launchIDFromVerifiedClientIDs, value) + return false, nil + }) + return launchIDFromVerifiedClientIDs, err } // AddVerifiedClientID add a specific verifiedClientID without duplication in the store from its launch id -func (k Keeper) AddVerifiedClientID(ctx sdk.Context, launchID uint64, clientID string) { - verifiedClientID, found := k.GetVerifiedClientID(ctx, launchID) - if !found { +func (k Keeper) AddVerifiedClientID(ctx context.Context, launchID uint64, clientID string) error { + verifiedClientID, err := k.VerifiedClientID.Get(ctx, launchID) + if errors.Is(err, collections.ErrNotFound) { verifiedClientID = types.VerifiedClientID{LaunchID: launchID} + } else if err != nil { + return err } for _, cID := range verifiedClientID.ClientIDs { if clientID == cID { - return + return nil } } verifiedClientID.ClientIDs = append(verifiedClientID.ClientIDs, clientID) - k.SetVerifiedClientID(ctx, verifiedClientID) + return k.VerifiedClientID.Set(ctx, launchID, verifiedClientID) } diff --git a/x/monitoringc/keeper/verified_client_id_test.go b/x/monitoringc/keeper/verified_client_id_test.go deleted file mode 100644 index 5faa65d4..00000000 --- a/x/monitoringc/keeper/verified_client_id_test.go +++ /dev/null @@ -1,126 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func createNVerifiedClientID(ctx sdk.Context, keeper *keeper.Keeper, n int) []types.VerifiedClientID { - items := make([]types.VerifiedClientID, n) - for i := range items { - items[i].LaunchID = uint64(i) - items[i].ClientIDs = []string{strconv.Itoa(i)} - keeper.SetVerifiedClientID(ctx, items[i]) - } - return items -} - -func TestVerifiedClientIDGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get", func(t *testing.T) { - items := createNVerifiedClientID(ctx, tk.MonitoringConsumerKeeper, 10) - for _, item := range items { - rst, found := tk.MonitoringConsumerKeeper.GetVerifiedClientID(ctx, item.LaunchID) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } - }) -} - -func TestVerifiedClientIDClear(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - t.Run("should successfully clear entries", func(t *testing.T) { - items := createNVerifiedClientID(ctx, tk.MonitoringConsumerKeeper, 1) - launchID := items[0].LaunchID - clientID := items[0].ClientIDs[0] - - tk.MonitoringConsumerKeeper.SetLaunchIDFromVerifiedClientID(ctx, types.LaunchIDFromVerifiedClientID{ - ClientID: clientID, - LaunchID: launchID, - }) - rst, found := tk.MonitoringConsumerKeeper.GetVerifiedClientID(ctx, launchID) - require.True(t, found) - require.Equal(t, - nullify.Fill(&items[0]), - nullify.Fill(&rst), - ) - - tk.MonitoringConsumerKeeper.ClearVerifiedClientIDs(ctx, launchID) - _, found = tk.MonitoringConsumerKeeper.GetVerifiedClientID(ctx, launchID) - require.False(t, found) - - _, found = tk.MonitoringConsumerKeeper.GetLaunchIDFromVerifiedClientID(ctx, clientID) - require.False(t, found) - }) -} - -func TestVerifiedClientIDGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get all", func(t *testing.T) { - items := createNVerifiedClientID(ctx, tk.MonitoringConsumerKeeper, 10) - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.MonitoringConsumerKeeper.GetAllVerifiedClientID(ctx)), - ) - }) -} - -func TestAddVerifiedClientID(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - t.Run("should update a verified client id", func(t *testing.T) { - var ( - launchID = uint64(1) - newClientID = "2" - verifiedClientID = types.VerifiedClientID{ - LaunchID: launchID, - ClientIDs: []string{"1"}, - } - ) - tk.MonitoringConsumerKeeper.SetVerifiedClientID(ctx, verifiedClientID) - tk.MonitoringConsumerKeeper.AddVerifiedClientID(ctx, launchID, newClientID) - got, found := tk.MonitoringConsumerKeeper.GetVerifiedClientID(ctx, launchID) - require.True(t, found) - verifiedClientID.ClientIDs = append(verifiedClientID.ClientIDs, newClientID) - require.Equal(t, verifiedClientID, got) - }) - - t.Run("should update a duplicated verified client id", func(t *testing.T) { - var ( - launchID = uint64(2) - newClientID = "2" - verifiedClientID = types.VerifiedClientID{ - LaunchID: launchID, - ClientIDs: []string{"1", newClientID}, - } - ) - tk.MonitoringConsumerKeeper.SetVerifiedClientID(ctx, verifiedClientID) - tk.MonitoringConsumerKeeper.AddVerifiedClientID(ctx, launchID, newClientID) - got, found := tk.MonitoringConsumerKeeper.GetVerifiedClientID(ctx, launchID) - require.True(t, found) - require.Equal(t, verifiedClientID, got) - }) - - t.Run("should update a non exiting verified client id", func(t *testing.T) { - verifiedClientID := types.VerifiedClientID{ - LaunchID: 3, - ClientIDs: []string{"1"}, - } - tk.MonitoringConsumerKeeper.AddVerifiedClientID(ctx, verifiedClientID.LaunchID, verifiedClientID.ClientIDs[0]) - got, found := tk.MonitoringConsumerKeeper.GetVerifiedClientID(ctx, verifiedClientID.LaunchID) - require.True(t, found) - require.Equal(t, verifiedClientID, got) - }) -} diff --git a/x/monitoringc/module.go b/x/monitoringc/module.go deleted file mode 100644 index 6e88bc3a..00000000 --- a/x/monitoringc/module.go +++ /dev/null @@ -1,169 +0,0 @@ -package monitoringc - -import ( - "context" - "encoding/json" - "fmt" - - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringc/client/cli" - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ porttypes.IBCModule = AppModule{} -) - -// ---------------------------------------------------------------------------- -// AppModuleBasic -// ---------------------------------------------------------------------------- - -// AppModuleBasic implements the AppModuleBasic interface for the monitoringc module. -type AppModuleBasic struct { - cdc codec.BinaryCodec -} - -func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { - return AppModuleBasic{cdc: cdc} -} - -// Name returns the monitoringc module's name. -func (AppModuleBasic) Name() string { - return types.ModuleName -} - -func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -// RegisterInterfaces registers the monitoringc module's interface types -func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { - types.RegisterInterfaces(reg) -} - -// DefaultGenesis returns the monitoringc module's default genesis state. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesis()) -} - -// ValidateGenesis performs genesis state validation for the monitoringc module. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - var genState types.GenesisState - if err := cdc.UnmarshalJSON(bz, &genState); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - return genState.Validate() -} - -// RegisterRESTRoutes registers the monitoringc module's REST service handlers. -func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { -} - -// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint -} - -// GetTxCmd returns the monitoringc module's root tx command. -func (a AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() -} - -// GetQueryCmd returns the monitoringc module's root query command. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd(types.StoreKey) -} - -// ---------------------------------------------------------------------------- -// AppModule -// ---------------------------------------------------------------------------- - -// AppModule implements the AppModule interface for the monitoringc module. -type AppModule struct { - AppModuleBasic - - keeper keeper.Keeper - accountKeeper types.AccountKeeper - bankKeeper types.BankKeeper -} - -func NewAppModule( - cdc codec.Codec, - keeper keeper.Keeper, - accountKeeper types.AccountKeeper, - bankKeeper types.BankKeeper, -) AppModule { - return AppModule{ - AppModuleBasic: NewAppModuleBasic(cdc), - keeper: keeper, - accountKeeper: accountKeeper, - bankKeeper: bankKeeper, - } -} - -// Name returns the monitoringc module's name. -func (am AppModule) Name() string { - return am.AppModuleBasic.Name() -} - -// QuerierRoute returns the monitoringc module's query routing key. -func (AppModule) QuerierRoute() string { return types.QuerierRoute } - -// RegisterServices registers a GRPC query service to respond to the -// module-specific GRPC queries. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) -} - -// RegisterInvariants registers the monitoringc module's invariants. -func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { - keeper.RegisterInvariants(ir, am.keeper) -} - -// InitGenesis performs the monitoringc module's genesis initialization It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { - var genState types.GenesisState - // Initialize global index to index in genesis state - cdc.MustUnmarshalJSON(gs, &genState) - - InitGenesis(ctx, am.keeper, genState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the monitoringc module's exported genesis state as raw JSON bytes. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - genState := ExportGenesis(ctx, am.keeper) - return cdc.MustMarshalJSON(genState) -} - -// ConsensusVersion implements ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 2 } - -// BeginBlock executes all ABCI BeginBlock logic respective to the monitoringc module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock executes all ABCI EndBlock logic respective to the monitoringc module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} diff --git a/x/monitoringc/module/autocli.go b/x/monitoringc/module/autocli.go new file mode 100644 index 00000000..a2a69e26 --- /dev/null +++ b/x/monitoringc/module/autocli.go @@ -0,0 +1,84 @@ +package monitoringc + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + + modulev1 "github.com/ignite/network/api/network/monitoringc/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Query_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Shows the parameters of the module", + }, + { + RpcMethod: "ListLaunchIDFromChannelID", + Use: "list-launch-id-from-channel-id", + Short: "List all LaunchIDFromChannelID", + }, + { + RpcMethod: "GetLaunchIDFromChannelID", + Use: "get-launch-id-from-channel-id [channel-id]", + Short: "Gets a LaunchIDFromChannelID", + Alias: []string{"show-launch-id-from-channel-id"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "channelID"}}, + }, + { + RpcMethod: "ListLaunchIDFromVerifiedClientID", + Use: "list-launch-id-from-verified-client-id", + Short: "List all LaunchIDFromVerifiedClientID", + }, + { + RpcMethod: "GetMonitoringHistory", + Use: "get-monitoring-history [launch-id]", + Short: "Gets a MonitoringHistory", + Alias: []string{"show-monitoring-history"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + { + RpcMethod: "GetVerifiedClientID", + Use: "get-verified-client-id [launch-id]", + Short: "Gets a VerifiedClientID", + Alias: []string{"show-verified-client-id"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + { + RpcMethod: "ListProviderClientID", + Use: "list-provider-client-id", + Short: "List all ProviderClientID", + }, + { + RpcMethod: "GetProviderClientID", + Use: "get-provider-client-id [launch-id]", + Short: "Gets a ProviderClientID", + Alias: []string{"show-provider-client-id"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + // this line is used by ignite scaffolding # autocli/query + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, // only required if you want to use the custom command + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "UpdateParams", + Skip: true, // skipped because authority gated + }, + { + RpcMethod: "CreateClient", + Use: "create-client [launch-id] [consensus-state] [validator-set] [unbonding-period] [revision-height]", + Short: "Send a CreateClient tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "consensusState"}, {ProtoField: "validatorSet"}, {ProtoField: "unbondingPeriod"}, {ProtoField: "revisionHeight"}}, + }, + // this line is used by ignite scaffolding # autocli/tx + }, + }, + } +} diff --git a/x/monitoringc/module/genesis.go b/x/monitoringc/module/genesis.go new file mode 100644 index 00000000..9db91cba --- /dev/null +++ b/x/monitoringc/module/genesis.go @@ -0,0 +1,106 @@ +package monitoringc + +import ( + "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) error { + // Set all the launchIDFromChannelID + for _, elem := range genState.LaunchIDFromChannelIDList { + if err := k.LaunchIDFromChannelID.Set(ctx, elem.ChannelID, elem); err != nil { + return err + } + } + // Set all the launchIDFromVerifiedClientID + for _, elem := range genState.LaunchIDFromVerifiedClientIDList { + if err := k.LaunchIDFromVerifiedClientID.Set(ctx, elem.ClientID, elem); err != nil { + return err + } + } + // Set all the monitoringHistory + for _, elem := range genState.MonitoringHistoryList { + if err := k.MonitoringHistory.Set(ctx, elem.LaunchID, elem); err != nil { + return err + } + } + + // Set all the verifiedClientID + for _, elem := range genState.VerifiedClientIDList { + if err := k.VerifiedClientID.Set(ctx, elem.LaunchID, elem); err != nil { + return err + } + } + // Set all the providerClientID + for _, elem := range genState.ProviderClientIDList { + if err := k.ProviderClientID.Set(ctx, elem.LaunchID, elem); err != nil { + return err + } + } + // this line is used by starport scaffolding # genesis/module/init + k.SetPort(ctx, genState.PortID) + // Only try to bind to port if it is not already bound, since we may already own + // port capability from capability InitGenesis + if k.ShouldBound(ctx, genState.PortID) { + // module binds to the port on InitChain + // and claims the returned capability + err := k.BindPort(ctx, genState.PortID) + if err != nil { + return errors.Wrap(err, "could not claim port capability") + } + } + + return k.Params.Set(ctx, genState.Params) +} + +// ExportGenesis returns the module's exported genesis. +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) { + var err error + + genesis := types.DefaultGenesis() + genesis.Params, err = k.Params.Get(ctx) + if err != nil { + return nil, err + } + + genesis.PortID = k.GetPort(ctx) + if err := k.LaunchIDFromChannelID.Walk(ctx, nil, func(_ string, val types.LaunchIDFromChannelID) (stop bool, err error) { + genesis.LaunchIDFromChannelIDList = append(genesis.LaunchIDFromChannelIDList, val) + return false, nil + }); err != nil { + return nil, err + } + if err := k.LaunchIDFromVerifiedClientID.Walk(ctx, nil, func(_ string, val types.LaunchIDFromVerifiedClientID) (stop bool, err error) { + genesis.LaunchIDFromVerifiedClientIDList = append(genesis.LaunchIDFromVerifiedClientIDList, val) + return false, nil + }); err != nil { + return nil, err + } + if err := k.MonitoringHistory.Walk(ctx, nil, func(_ uint64, val types.MonitoringHistory) (stop bool, err error) { + genesis.MonitoringHistoryList = append(genesis.MonitoringHistoryList, val) + return false, nil + }); err != nil { + return nil, err + } + + if err := k.VerifiedClientID.Walk(ctx, nil, func(_ uint64, val types.VerifiedClientID) (stop bool, err error) { + genesis.VerifiedClientIDList = append(genesis.VerifiedClientIDList, val) + return false, nil + }); err != nil { + return nil, err + } + + if err := k.ProviderClientID.Walk(ctx, nil, func(_ uint64, val types.ProviderClientID) (stop bool, err error) { + genesis.ProviderClientIDList = append(genesis.ProviderClientIDList, val) + return false, nil + }); err != nil { + return nil, err + } + // this line is used by starport scaffolding # genesis/module/export + + return genesis, nil +} diff --git a/x/monitoringc/module/genesis_test.go b/x/monitoringc/module/genesis_test.go new file mode 100644 index 00000000..933ed2a7 --- /dev/null +++ b/x/monitoringc/module/genesis_test.go @@ -0,0 +1,79 @@ +package monitoringc_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + monitoringc "github.com/ignite/network/x/monitoringc/module" + "github.com/ignite/network/x/monitoringc/types" +) + +func TestGenesis(t *testing.T) { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + PortID: types.PortID, + LaunchIDFromChannelIDList: []types.LaunchIDFromChannelID{ + { + ChannelID: "0", + }, + { + ChannelID: "1", + }, + }, + LaunchIDFromVerifiedClientIDList: []types.LaunchIDFromVerifiedClientID{ + { + ClientID: "0", + }, + { + ClientID: "1", + }, + }, + MonitoringHistoryList: []types.MonitoringHistory{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + VerifiedClientIDList: []types.VerifiedClientID{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + ProviderClientIDList: []types.ProviderClientID{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + // this line is used by starport scaffolding # genesis/test/state + } + + k, ctx, _ := keepertest.MonitoringcKeeper(t) + err := monitoringc.InitGenesis(ctx, k, genesisState) + require.NoError(t, err) + got, err := monitoringc.ExportGenesis(ctx, k) + require.NoError(t, err) + require.NotNil(t, got) + + nullify.Fill(&genesisState) + nullify.Fill(got) + + require.Equal(t, genesisState.PortID, got.PortID) + + require.ElementsMatch(t, genesisState.LaunchIDFromChannelIDList, got.LaunchIDFromChannelIDList) + require.ElementsMatch(t, genesisState.LaunchIDFromVerifiedClientIDList, got.LaunchIDFromVerifiedClientIDList) + require.ElementsMatch(t, genesisState.MonitoringHistoryList, got.MonitoringHistoryList) + require.ElementsMatch(t, genesisState.VerifiedClientIDList, got.VerifiedClientIDList) + require.ElementsMatch(t, genesisState.ProviderClientIDList, got.ProviderClientIDList) + // this line is used by starport scaffolding # genesis/test/assert +} diff --git a/x/monitoringc/module/module.go b/x/monitoringc/module/module.go new file mode 100644 index 00000000..2bcb1e6a --- /dev/null +++ b/x/monitoringc/module/module.go @@ -0,0 +1,244 @@ +package monitoringc + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + // this line is used by starport scaffolding # 1 + + modulev1 "github.com/ignite/network/api/network/monitoringc/module/v1" + "github.com/ignite/network/x/monitoringc/client/cli" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasInvariants = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) + _ porttypes.IBCModule = (*IBCModule)(nil) +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface that defines the +// independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module, which is used +// to marshal and unmarshal structs to/from []byte in order to persist them in the module's KVStore. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers a module's interface types and their concrete implementations as proto.Message. +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns a default GenesisState for the module, marshalled to json.RawMessage. +// The default GenesisState need to be defined by the module developer and is primarily used for testing. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis used to validate the GenesisState, given in its json.RawMessage form. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns the root Tx command for the module. +// These commands enrich the AutoCLI tx commands. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper)) +} + +// RegisterInvariants registers the invariants of the module. If an invariant deviates from its predicted value, the InvariantRegistry triggers appropriate logic (most often the chain will be halted) +func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { + keeper.RegisterInvariants(ir, am.keeper) +} + +// InitGenesis performs the module's genesis initialization. It returns no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + if err := InitGenesis(ctx, am.keeper, genState); err != nil { + panic(err) + } +} + +// ExportGenesis returns the module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState, err := ExportGenesis(ctx, am.keeper) + if err != nil { + panic(err) + } + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion is a sequence number for state-breaking change of the module. +// It should be incremented on each consensus-breaking change introduced by the module. +// To avoid wrong/empty versions, the initial version should be set to 1. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block. +// The end block implementation is optional. +func (am AppModule) EndBlock(_ context.Context) error { + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// ---------------------------------------------------------------------------- +// App Wiring Setup +// ---------------------------------------------------------------------------- + +func init() { + appmodule.Register( + &modulev1.Module{}, + appmodule.Provide(ProvideModule), + ) +} + +type ModuleInputs struct { + depinject.In + + AddressCodec address.Codec + StoreService store.KVStoreService + Cdc codec.Codec + Config *modulev1.Module + Logger log.Logger + + AccountKeeper types.AccountKeeper + BankKeeper types.BankKeeper + LaunchKeeper types.LaunchKeeper + RewardKeeper types.RewardKeeper + + IBCKeeperFn func() *ibckeeper.Keeper `optional:"true"` + CapabilityScopedFn func(string) capabilitykeeper.ScopedKeeper `optional:"true"` +} + +type ModuleOutputs struct { + depinject.Out + + MonitoringcKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + k := keeper.NewKeeper( + in.Cdc, + in.AddressCodec, + in.StoreService, + in.Logger, + authority.String(), + in.IBCKeeperFn, + in.CapabilityScopedFn, + in.LaunchKeeper, + in.RewardKeeper, + ) + m := NewAppModule( + in.Cdc, + k, + in.AccountKeeper, + in.BankKeeper, + ) + + return ModuleOutputs{MonitoringcKeeper: k, Module: m} +} diff --git a/x/monitoringc/module/module_ibc.go b/x/monitoringc/module/module_ibc.go new file mode 100644 index 00000000..e9955817 --- /dev/null +++ b/x/monitoringc/module/module_ibc.go @@ -0,0 +1,237 @@ +package monitoringc + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" +) + +// IBCModule implements the ICS26 interface for interchain accounts host chains +type IBCModule struct { + keeper keeper.Keeper +} + +// NewIBCModule creates a new IBCModule given the associated keeper +func NewIBCModule(k keeper.Keeper) IBCModule { + return IBCModule{ + keeper: k, + } +} + +// OnChanOpenInit implements the IBCModule interface +func (im IBCModule) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + // Require portID is the portID module is bound to + boundPort := im.keeper.GetPort(ctx) + if boundPort != portID { + return "", errorsmod.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", portID, boundPort) + } + + if version != types.Version { + return "", errorsmod.Wrapf(types.ErrInvalidVersion, "got %s, expected %s", version, types.Version) + } + + // Claim channel capability passed back by IBC module + if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return "", err + } + + return version, nil +} + +// OnChanOpenTry implements the IBCModule interface +func (im IBCModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + // Require portID is the portID module is bound to + boundPort := im.keeper.GetPort(ctx) + if boundPort != portID { + return "", errorsmod.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", portID, boundPort) + } + + if counterpartyVersion != types.Version { + return "", errorsmod.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: got: %s, expected %s", counterpartyVersion, types.Version) + } + + // Module may have already claimed capability in OnChanOpenInit in the case of crossing hellos + // (ie chainA and chainB both call ChanOpenInit before one of them calls ChanOpenTry) + // If module can already authenticate the capability then module already owns it so we don't need to claim + // Otherwise, module does not have channel capability and we must claim it from IBC + if !im.keeper.AuthenticateCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) { + // Only claim channel capability passed back by IBC module if we do not already own it + if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return "", err + } + } + + return types.Version, nil +} + +// OnChanOpenAck implements the IBCModule interface +func (im IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + _, + counterpartyVersion string, +) error { + if counterpartyVersion != types.Version { + return errorsmod.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: %s, expected %s", counterpartyVersion, types.Version) + } + return nil +} + +// OnChanOpenConfirm implements the IBCModule interface +func (im IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return nil +} + +// OnChanCloseInit implements the IBCModule interface +func (im IBCModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + // Disallow user-initiated channel closing for channels + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "user cannot close channel") +} + +// OnChanCloseConfirm implements the IBCModule interface +func (im IBCModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return nil +} + +// OnRecvPacket implements the IBCModule interface +func (im IBCModule) OnRecvPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + var ack channeltypes.Acknowledgement + + var modulePacketData types.MonitoringcPacketData + if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + return channeltypes.NewErrorAcknowledgement(errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error())) + } + + // Dispatch packet + switch packet := modulePacketData.Packet.(type) { + // this line is used by starport scaffolding # ibc/packet/module/recv + default: + err := fmt.Errorf("unrecognized %s packet type: %T", types.ModuleName, packet) + return channeltypes.NewErrorAcknowledgement(err) + } + + // NOTE: acknowledgement will be written synchronously during IBC handler execution. + return ack +} + +// OnAcknowledgementPacket implements the IBCModule interface +func (im IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + var ack channeltypes.Acknowledgement + if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet acknowledgement: %v", err) + } + + var modulePacketData types.MonitoringcPacketData + if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) + } + + var eventType string + + // Dispatch packet + switch packet := modulePacketData.Packet.(type) { + // this line is used by starport scaffolding # ibc/packet/module/ack + default: + errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) + return errorsmod.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyAck, fmt.Sprintf("%v", ack)), + ), + ) + + switch resp := ack.Response.(type) { + case *channeltypes.Acknowledgement_Result: + ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, + sdk.NewAttribute(types.AttributeKeyAckSuccess, string(resp.Result)), + ), + ) + case *channeltypes.Acknowledgement_Error: + ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, + sdk.NewAttribute(types.AttributeKeyAckError, resp.Error), + ), + ) + } + + return nil +} + +// OnTimeoutPacket implements the IBCModule interface +func (im IBCModule) OnTimeoutPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + relayer sdk.AccAddress, +) error { + var modulePacketData types.MonitoringcPacketData + if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) + } + + // Dispatch packet + switch packet := modulePacketData.Packet.(type) { + // this line is used by starport scaffolding # ibc/packet/module/timeout + default: + errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) + return errorsmod.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + } + + return nil +} diff --git a/x/monitoringc/module_simulation.go b/x/monitoringc/module/simulation.go similarity index 57% rename from x/monitoringc/module_simulation.go rename to x/monitoringc/module/simulation.go index f36d8582..3a4090c2 100644 --- a/x/monitoringc/module_simulation.go +++ b/x/monitoringc/module/simulation.go @@ -8,11 +8,14 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/tendermint/spn/testutil/sample" - monitoringcsimulation "github.com/tendermint/spn/x/monitoringc/simulation" - "github.com/tendermint/spn/x/monitoringc/types" + "github.com/ignite/network/testutil/sample" + monitoringcsimulation "github.com/ignite/network/x/monitoringc/simulation" + "github.com/ignite/network/x/monitoringc/types" ) +// avoid unused import issue +var _ = sample.AccAddress + const ( opWeightMsgCreateClient = "op_weight_msg_create_client" defaultWeightMsgCreateClient int = 50 @@ -20,49 +23,54 @@ const ( // this line is used by starport scaffolding # simapp/module/const ) -// GenerateGenesisState creates a randomized GenState of the module +// GenerateGenesisState creates a randomized GenState of the module. func (AppModule) GenerateGenesisState(simState *module.SimulationState) { accs := make([]string, len(simState.Accounts)) for i, acc := range simState.Accounts { accs[i] = acc.Address.String() } monitoringcGenesis := types.GenesisState{ - PortId: types.PortID, - Params: sample.MonitoringcParams(), + Params: types.DefaultParams(), + PortID: types.PortID, // this line is used by starport scaffolding # simapp/module/genesisState } simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&monitoringcGenesis) } -// ProposalContents doesn't return any content functions for governance proposals -func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { - return nil -} - -// RandomizedParams creates randomized param changes for the simulator -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { - return []simtypes.LegacyParamChange{} -} - -// RegisterStoreDecoder registers a decoder -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} +// RegisterStoreDecoder registers a decoder. +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} // WeightedOperations returns the all the gov module operations with their respective weights. func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { operations := make([]simtypes.WeightedOperation, 0) var weightMsgCreateClient int - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgCreateClient, &weightMsgCreateClient, nil, + simState.AppParams.GetOrGenerate(opWeightMsgCreateClient, &weightMsgCreateClient, nil, func(_ *rand.Rand) { weightMsgCreateClient = defaultWeightMsgCreateClient }, ) operations = append(operations, simulation.NewWeightedOperation( weightMsgCreateClient, - monitoringcsimulation.SimulateMsgCreateClient(am.accountKeeper, am.bankKeeper, am.keeper), + monitoringcsimulation.SimulateMsgCreateClient(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), )) // this line is used by starport scaffolding # simapp/module/operation return operations } + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + simulation.NewWeightedProposalMsg( + opWeightMsgCreateClient, + defaultWeightMsgCreateClient, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + monitoringcsimulation.SimulateMsgCreateClient(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + // this line is used by starport scaffolding # simapp/module/OpMsg + } +} diff --git a/x/monitoringc/module_ibc.go b/x/monitoringc/module_ibc.go deleted file mode 100644 index 18ef465b..00000000 --- a/x/monitoringc/module_ibc.go +++ /dev/null @@ -1,257 +0,0 @@ -package monitoringc - -import ( - "fmt" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/monitoringc/types" -) - -// OnChanOpenInit implements the IBCModule interface -func (am AppModule) OnChanOpenInit( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID, - channelID string, - chanCap *capabilitytypes.Capability, - _ channeltypes.Counterparty, - version string, -) (string, error) { - if order != channeltypes.ORDERED { - return "", sdkerrors.Wrapf(channeltypes.ErrInvalidChannelOrdering, "expected %s channel, got %s ", channeltypes.ORDERED, order) - } - - // Require portID is the portID module is bound to - boundPort := am.keeper.GetPort(ctx) - if boundPort != portID { - return "", sdkerrors.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", portID, boundPort) - } - - if version != types.Version { - return "", sdkerrors.Wrapf(types.ErrInvalidVersion, "got %s, expected %s", version, types.Version) - } - - // Claim channel capability passed back by IBC module - if err := am.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return "", err - } - - if len(connectionHops) != 1 { - return "", sdkerrors.Wrap( - channeltypes.ErrTooManyConnectionHops, - "must have direct connection to provider chain", - ) - } - - // Check if the client ID is a verified from MsgCreateClient - if err := am.keeper.VerifyClientIDFromConnID(ctx, connectionHops[0]); err != nil { - return "", sdkerrors.Wrap(types.ErrInvalidHandshake, err.Error()) - } - - return version, nil -} - -// OnChanOpenTry implements the IBCModule interface -func (am AppModule) OnChanOpenTry( - _ sdk.Context, - _ channeltypes.Order, - _ []string, - _, - _ string, - _ *capabilitytypes.Capability, - _ channeltypes.Counterparty, - _ string, -) (string, error) { - return "", sdkerrors.Wrap(types.ErrInvalidHandshake, "IBC handshake must be initiated by the consumer") -} - -// OnChanOpenAck implements the IBCModule interface -func (am AppModule) OnChanOpenAck( - ctx sdk.Context, - _, - channelID string, - _, - counterpartyVersion string, -) error { - if counterpartyVersion != types.Version { - return sdkerrors.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: %s, expected %s", counterpartyVersion, types.Version) - } - - // register the official client ID for the provider connection - if err := am.keeper.RegisterProviderClientIDFromChannelID(ctx, channelID); err != nil { - return sdkerrors.Wrap(types.ErrInvalidHandshake, err.Error()) - } - - return nil -} - -// OnChanOpenConfirm implements the IBCModule interface -func (am AppModule) OnChanOpenConfirm( - _ sdk.Context, - _, - _ string, -) error { - return sdkerrors.Wrap(types.ErrInvalidHandshake, "IBC handshake must be initiated by the consumer") -} - -// OnChanCloseInit implements the IBCModule interface -func (am AppModule) OnChanCloseInit( - _ sdk.Context, - _, - _ string, -) error { - // Disallow user-initiated channel closing for channels - return types.ErrCannotCloseChannel -} - -// OnChanCloseConfirm implements the IBCModule interface -func (am AppModule) OnChanCloseConfirm( - _ sdk.Context, - _, - _ string, -) error { - return nil -} - -// OnRecvPacket implements the IBCModule interface -func (am AppModule) OnRecvPacket( - ctx sdk.Context, - modulePacket channeltypes.Packet, - _ sdk.AccAddress, -) ibcexported.Acknowledgement { - var ack channeltypes.Acknowledgement - - // this line is used by starport scaffolding # oracle/packet/module/recv - - var modulePacketData spntypes.MonitoringPacketData - if err := types.ModuleCdc.UnmarshalJSON(modulePacket.GetData(), &modulePacketData); err != nil { - return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error())) - } - - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - case *spntypes.MonitoringPacketData_MonitoringPacket: - packetAck, err := am.keeper.OnRecvMonitoringPacket(ctx, modulePacket, *packet.MonitoringPacket) - if err != nil { - ack = channeltypes.NewErrorAcknowledgement(err) - } else { - // Encode packet acknowledgment - packetAckBytes, err := types.ModuleCdc.MarshalJSON(&packetAck) - if err != nil { - return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrap(types.ErrJSONMarshal, err.Error())) - } - ack = channeltypes.NewResultAcknowledgement(sdk.MustSortJSON(packetAckBytes)) - } - ctx.EventManager().EmitEvent( - sdk.NewEvent( - types.EventTypeMonitoringPacket, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeKeyAckSuccess, fmt.Sprintf("%t", err != nil)), - ), - ) - // this line is used by starport scaffolding # ibc/packet/module/recv - default: - err := fmt.Errorf("unrecognized %s packet type: %T", types.ModuleName, packet) - return channeltypes.NewErrorAcknowledgement(err) - } - - // NOTE: acknowledgement will be written synchronously during IBC handler execution. - return ack -} - -// OnAcknowledgementPacket implements the IBCModule interface -func (am AppModule) OnAcknowledgementPacket( - ctx sdk.Context, - modulePacket channeltypes.Packet, - acknowledgement []byte, - _ sdk.AccAddress, -) error { - var ack channeltypes.Acknowledgement - if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { - return sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error()) - } - - // this line is used by starport scaffolding # oracle/packet/module/ack - - var modulePacketData spntypes.MonitoringPacketData - if err := types.ModuleCdc.UnmarshalJSON(modulePacket.GetData(), &modulePacketData); err != nil { - return sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error()) - } - - var eventType string - - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - case *spntypes.MonitoringPacketData_MonitoringPacket: - err := am.keeper.OnAcknowledgementMonitoringPacket(ctx, modulePacket, *packet.MonitoringPacket, ack) - if err != nil { - return err - } - eventType = types.EventTypeMonitoringPacket - // this line is used by starport scaffolding # ibc/packet/module/ack - default: - return sdkerrors.Wrapf(types.ErrUnrecognizedPacketType, "packet type: %T", packet) - } - - ctx.EventManager().EmitEvent( - sdk.NewEvent( - eventType, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeKeyAck, fmt.Sprintf("%v", ack)), - ), - ) - - switch resp := ack.Response.(type) { - case *channeltypes.Acknowledgement_Result: - ctx.EventManager().EmitEvent( - sdk.NewEvent( - eventType, - sdk.NewAttribute(types.AttributeKeyAckSuccess, string(resp.Result)), - ), - ) - case *channeltypes.Acknowledgement_Error: - ctx.EventManager().EmitEvent( - sdk.NewEvent( - eventType, - sdk.NewAttribute(types.AttributeKeyAckError, resp.Error), - ), - ) - } - - return nil -} - -// OnTimeoutPacket implements the IBCModule interface -func (am AppModule) OnTimeoutPacket( - ctx sdk.Context, - modulePacket channeltypes.Packet, - _ sdk.AccAddress, -) error { - var modulePacketData spntypes.MonitoringPacketData - if err := types.ModuleCdc.UnmarshalJSON(modulePacket.GetData(), &modulePacketData); err != nil { - return sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error()) - } - - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - case *spntypes.MonitoringPacketData_MonitoringPacket: - err := am.keeper.OnTimeoutMonitoringPacket(ctx, modulePacket, *packet.MonitoringPacket) - if err != nil { - return err - } - // this line is used by starport scaffolding # ibc/packet/module/timeout - default: - return sdkerrors.Wrapf(types.ErrUnrecognizedPacketType, "packet type: %T", packet) - } - - return nil -} diff --git a/x/monitoringc/simulation/create_client.go b/x/monitoringc/simulation/create_client.go index 99e22178..18b8e842 100644 --- a/x/monitoringc/simulation/create_client.go +++ b/x/monitoringc/simulation/create_client.go @@ -4,17 +4,19 @@ import ( "math/rand" "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/tendermint/spn/x/monitoringc/keeper" - "github.com/tendermint/spn/x/monitoringc/types" + "github.com/ignite/network/x/monitoringc/keeper" + "github.com/ignite/network/x/monitoringc/types" ) func SimulateMsgCreateClient( ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper, + txGen client.TxConfig, ) simtypes.Operation { return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { @@ -25,6 +27,6 @@ func SimulateMsgCreateClient( // TODO: Handling the CreateClient simulation - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "CreateClient simulation not implemented"), nil, nil + return simtypes.NoOpMsg(types.ModuleName, sdk.MsgTypeURL(msg), "CreateClient simulation not implemented"), nil, nil } } diff --git a/x/monitoringc/simulation/helpers.go b/x/monitoringc/simulation/helpers.go new file mode 100644 index 00000000..92c437c0 --- /dev/null +++ b/x/monitoringc/simulation/helpers.go @@ -0,0 +1,15 @@ +package simulation + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" +) + +// FindAccount find a specific address from an account list +func FindAccount(accs []simtypes.Account, address string) (simtypes.Account, bool) { + creator, err := sdk.AccAddressFromBech32(address) + if err != nil { + panic(err) + } + return simtypes.FindAccount(accs, creator) +} diff --git a/x/monitoringc/types/codec.go b/x/monitoringc/types/codec.go index e11439ac..8db11aca 100644 --- a/x/monitoringc/types/codec.go +++ b/x/monitoringc/types/codec.go @@ -5,23 +5,24 @@ import ( cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" + // this line is used by starport scaffolding # 1 ) -func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgCreateClient{}, "monitoringc/CreateClient", nil) - // this line is used by starport scaffolding # 2 -} - func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgCreateClient{}, ) // this line is used by starport scaffolding # 3 + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } -var ( - Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) -) +// ModuleCdc references the global x/ibc-transfer module codec. Note, the codec +// should ONLY be used in certain instances of tests and for JSON encoding. +// +// The actual codec used for serialization should be provided to x/ibc transfer and +// defined at the application level. +var ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) diff --git a/x/monitoringc/types/errors.go b/x/monitoringc/types/errors.go index 5ad70b64..27361c02 100644 --- a/x/monitoringc/types/errors.go +++ b/x/monitoringc/types/errors.go @@ -8,21 +8,23 @@ import ( // x/monitoringc module sentinel errors var ( - ErrInvalidVersion = sdkerrors.Register(ModuleName, 2, "invalid version") - ErrInvalidClientState = sdkerrors.Register(ModuleName, 3, "invalid client state") - ErrInvalidConsensusState = sdkerrors.Register(ModuleName, 4, "invalid consensus state") - ErrInvalidValidatorSet = sdkerrors.Register(ModuleName, 5, "invalid validator set") - ErrInvalidValidatorSetHash = sdkerrors.Register(ModuleName, 6, "invalid validator set hash") - ErrClientCreationFailure = sdkerrors.Register(ModuleName, 7, "failed to create IBC client") - ErrInvalidHandshake = sdkerrors.Register(ModuleName, 8, "invalid handshake") - ErrClientNotVerified = sdkerrors.Register(ModuleName, 9, "ibc client not verified") - ErrConnectionAlreadyEstablished = sdkerrors.Register(ModuleName, 10, "ibc connection already established") - ErrInvalidUnbondingPeriod = sdkerrors.Register(ModuleName, 11, "invalid unbonding period") - ErrInvalidRevisionHeight = sdkerrors.Register(ModuleName, 12, "invalid revision height") - ErrVerifiedClientIDsNotFound = sdkerrors.Register(ModuleName, 13, "verified client IDs not found") - ErrInvalidClientCreatorAddress = sdkerrors.Register(ModuleName, 14, "invalid client creator address") - ErrCannotCloseChannel = sdkerrors.Register(ModuleName, 15, "user cannot close channel") - ErrJSONUnmarshal = sdkerrors.Register(ModuleName, 16, "failed to unmarshal JSON") - ErrJSONMarshal = sdkerrors.Register(ModuleName, 17, "failed to marshal JSON") - ErrUnrecognizedPacketType = sdkerrors.Register(ModuleName, 18, "unrecognized packet type") + ErrInvalidSigner = sdkerrors.Register(ModuleName, 1101, "expected gov account as only signer for proposal message") + ErrInvalidVersion = sdkerrors.Register(ModuleName, 1102, "invalid version") + ErrInvalidClientState = sdkerrors.Register(ModuleName, 1103, "invalid client state") + ErrInvalidConsensusState = sdkerrors.Register(ModuleName, 1104, "invalid consensus state") + ErrInvalidValidatorSet = sdkerrors.Register(ModuleName, 1105, "invalid validator set") + ErrInvalidValidatorSetHash = sdkerrors.Register(ModuleName, 1106, "invalid validator set hash") + ErrClientCreationFailure = sdkerrors.Register(ModuleName, 1107, "failed to create IBC client") + ErrInvalidHandshake = sdkerrors.Register(ModuleName, 1108, "invalid handshake") + ErrClientNotVerified = sdkerrors.Register(ModuleName, 1109, "ibc client not verified") + ErrConnectionAlreadyEstablished = sdkerrors.Register(ModuleName, 1110, "ibc connection already established") + ErrInvalidUnbondingPeriod = sdkerrors.Register(ModuleName, 1111, "invalid unbonding period") + ErrInvalidRevisionHeight = sdkerrors.Register(ModuleName, 1112, "invalid revision height") + ErrVerifiedClientIDsNotFound = sdkerrors.Register(ModuleName, 1113, "verified client IDs not found") + ErrInvalidClientCreatorAddress = sdkerrors.Register(ModuleName, 1114, "invalid client creator address") + ErrCannotCloseChannel = sdkerrors.Register(ModuleName, 1115, "user cannot close channel") + ErrJSONUnmarshal = sdkerrors.Register(ModuleName, 1116, "failed to unmarshal JSON") + ErrJSONMarshal = sdkerrors.Register(ModuleName, 1117, "failed to marshal JSON") + ErrUnrecognizedPacketType = sdkerrors.Register(ModuleName, 1118, "unrecognized packet type") + ErrInvalidPacketTimeout = sdkerrors.Register(ModuleName, 1119, "invalid packet timeout") ) diff --git a/x/monitoringc/types/events_ibc.go b/x/monitoringc/types/events_ibc.go index ba9b2fc7..07c66a43 100644 --- a/x/monitoringc/types/events_ibc.go +++ b/x/monitoringc/types/events_ibc.go @@ -2,8 +2,7 @@ package types // IBC events const ( - EventTypeTimeout = "timeout" - EventTypeMonitoringPacket = "monitoring_packet" + EventTypeTimeout = "timeout" // this line is used by starport scaffolding # ibc/packet/event AttributeKeyAckSuccess = "success" diff --git a/x/monitoringc/types/expected_ibc_keeper.go b/x/monitoringc/types/expected_ibc_keeper.go new file mode 100644 index 00000000..d2b06db7 --- /dev/null +++ b/x/monitoringc/types/expected_ibc_keeper.go @@ -0,0 +1,49 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" +) + +// ClientKeeper is imported to add the ability to create IBC Client from the module +type ClientKeeper interface { + CreateClient(ctx sdk.Context, clientState exported.ClientState, consensusState exported.ConsensusState) (string, error) + // CreateClient(ctx sdk.Context, clientType string, clientState, consensusState []byte) (string, error) +} + +// ConnectionKeeper is imported to check client ID during IBC handshake +type ConnectionKeeper interface { + GetConnection(ctx sdk.Context, connectionID string) (connectiontypes.ConnectionEnd, bool) +} + +// ChannelKeeper defines the expected IBC channel keeper. +type ChannelKeeper interface { + GetChannel(ctx sdk.Context, portID, channelID string) (channeltypes.Channel, bool) + GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) + SendPacket( + ctx sdk.Context, + channelCap *capabilitytypes.Capability, + sourcePort string, + sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, + ) (uint64, error) + ChanCloseInit(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error +} + +// PortKeeper defines the expected IBC port keeper. +type PortKeeper interface { + BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability +} + +// ScopedKeeper defines the expected IBC scoped keeper. +type ScopedKeeper interface { + GetCapability(ctx sdk.Context, name string) (*capabilitytypes.Capability, bool) + AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool + ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error +} diff --git a/x/monitoringc/types/expected_keepers.go b/x/monitoringc/types/expected_keepers.go index d35f9f3b..f64f5d20 100644 --- a/x/monitoringc/types/expected_keepers.go +++ b/x/monitoringc/types/expected_keepers.go @@ -1,24 +1,20 @@ package types import ( + "context" + tmtypes "github.com/cometbft/cometbft/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/cosmos/ibc-go/v7/modules/core/exported" - spntypes "github.com/tendermint/spn/pkg/types" - launchtypes "github.com/tendermint/spn/x/launch/types" + "github.com/ignite/network/pkg/types" + launchtypes "github.com/ignite/network/x/launch/types" ) type LaunchKeeper interface { - GetChain(ctx sdk.Context, launchID uint64) (launchtypes.Chain, bool) - EnableMonitoringConnection(ctx sdk.Context, launchID uint64) error + GetChain(ctx context.Context, launchID uint64) (launchtypes.Chain, error) + EnableMonitoringConnection(ctx context.Context, launchID uint64) error CheckValidatorSet( - ctx sdk.Context, + ctx context.Context, launchID uint64, chainID string, validatorSet tmtypes.ValidatorSet, @@ -27,54 +23,26 @@ type LaunchKeeper interface { type RewardKeeper interface { DistributeRewards( - ctx sdk.Context, + ctx context.Context, launchID uint64, - signatureCounts spntypes.SignatureCounts, + signatureCounts types.SignatureCounts, lastBlockHeight int64, closeRewardPool bool, ) error } -// AccountKeeper defines the expected account keeper used for simulations (noalias) +// AccountKeeper defines the expected interface for the Account module. type AccountKeeper interface { - GetAccount(ctx sdk.Context, addr sdk.AccAddress) types.AccountI + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI // only used for simulation } -// BankKeeper defines the expected interface needed to retrieve account balances. +// BankKeeper defines the expected interface for the Bank module. type BankKeeper interface { - SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins -} - -// ClientKeeper is imported to add the ability to create IBC Client from the module -type ClientKeeper interface { - CreateClient( - ctx sdk.Context, clientState exported.ClientState, consensusState exported.ConsensusState, - ) (string, error) -} - -// ConnectionKeeper is imported to check client ID during IBC handshake -type ConnectionKeeper interface { - GetConnection(ctx sdk.Context, connectionID string) (connectiontypes.ConnectionEnd, bool) -} - -// ChannelKeeper defines the expected IBC channel keeper -type ChannelKeeper interface { - GetChannel(ctx sdk.Context, srcPort, srcChan string) (channeltypes.Channel, bool) - GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) - SendPacket( - ctx sdk.Context, - channelCap *capabilitytypes.Capability, - sourcePort string, - sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, - data []byte, - ) (uint64, error) - WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.PacketI, acknowledgement exported.Acknowledgement) error - ChanCloseInit(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error + SpendableCoins(context.Context, sdk.AccAddress) sdk.Coins } -// PortKeeper defines the expected IBC port keeper -type PortKeeper interface { - BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability +// ParamSubspace defines the expected Subspace interface for parameters. +type ParamSubspace interface { + Get(context.Context, []byte, interface{}) + Set(context.Context, []byte, interface{}) } diff --git a/x/monitoringc/types/genesis.go b/x/monitoringc/types/genesis.go index 8867c46f..247ae80a 100644 --- a/x/monitoringc/types/genesis.go +++ b/x/monitoringc/types/genesis.go @@ -3,18 +3,18 @@ package types import ( "fmt" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" ) -// DefaultGenesis returns the default Capability genesis state +// DefaultGenesis returns the default genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ - PortId: PortID, - VerifiedClientIDs: []VerifiedClientID{}, - ProviderClientIDs: []ProviderClientID{}, - LaunchIDsFromVerifiedClientID: []LaunchIDFromVerifiedClientID{}, - LaunchIDsFromChannelID: []LaunchIDFromChannelID{}, - MonitoringHistories: []MonitoringHistory{}, + PortID: PortID, + LaunchIDFromChannelIDList: []LaunchIDFromChannelID{}, + LaunchIDFromVerifiedClientIDList: []LaunchIDFromVerifiedClientID{}, + MonitoringHistoryList: []MonitoringHistory{}, + VerifiedClientIDList: []VerifiedClientID{}, + ProviderClientIDList: []ProviderClientID{}, // this line is used by starport scaffolding # genesis/types/default Params: DefaultParams(), } @@ -23,85 +23,61 @@ func DefaultGenesis() *GenesisState { // Validate performs basic genesis state validation returning an error upon any // failure. func (gs GenesisState) Validate() error { - if err := host.PortIdentifierValidator(gs.PortId); err != nil { + if err := host.PortIdentifierValidator(gs.PortID); err != nil { return err } + // Check for duplicated index in launchIDFromChannelID + launchIDFromChannelIDIndexMap := make(map[string]struct{}) - // Check for duplicated index in verifiedClientID - verifiedClientIDIndexMap := make(map[string]struct{}) - clientIDMap := make(map[string]struct{}) - for _, elem := range gs.VerifiedClientIDs { - index := string(VerifiedClientIDKey(elem.LaunchID)) - if _, ok := verifiedClientIDIndexMap[index]; ok { - return fmt.Errorf("duplicated index for verifiedClientID") - } - verifiedClientIDIndexMap[index] = struct{}{} - - // Check for duplicated client id - for _, clientID := range elem.ClientIDs { - key := clientIDKey(elem.LaunchID, clientID) - if _, ok := clientIDMap[key]; ok { - return fmt.Errorf("duplicated client id") - } - clientIDMap[key] = struct{}{} - } - } - - // Check for duplicated index in providerClientID - providerClientIDIndexMap := make(map[string]struct{}) - for _, elem := range gs.ProviderClientIDs { - index := string(ProviderClientIDKey(elem.LaunchID)) - if _, ok := providerClientIDIndexMap[index]; ok { - return fmt.Errorf("duplicated index for providerClientID") - } - // Check if the client id exist - key := clientIDKey(elem.LaunchID, elem.ClientID) - if _, ok := clientIDMap[key]; !ok { - return fmt.Errorf("client id from providerClientID list not found") + for _, elem := range gs.LaunchIDFromChannelIDList { + index := fmt.Sprint(elem.ChannelID) + if _, ok := launchIDFromChannelIDIndexMap[index]; ok { + return fmt.Errorf("duplicated index for launchIDFromChannelID") } - providerClientIDIndexMap[index] = struct{}{} + launchIDFromChannelIDIndexMap[index] = struct{}{} } - // Check for duplicated index in launchIDFromVerifiedClientID launchIDFromVerifiedClientIDIndexMap := make(map[string]struct{}) - for _, elem := range gs.LaunchIDsFromVerifiedClientID { - index := string(LaunchIDFromVerifiedClientIDKey(elem.ClientID)) + + for _, elem := range gs.LaunchIDFromVerifiedClientIDList { + index := fmt.Sprint(elem.ClientID) if _, ok := launchIDFromVerifiedClientIDIndexMap[index]; ok { return fmt.Errorf("duplicated index for launchIDFromVerifiedClientID") } - // Check if the client id exist - key := clientIDKey(elem.LaunchID, elem.ClientID) - if _, ok := clientIDMap[key]; !ok { - return fmt.Errorf("client id from launchIDFromVerifiedClientID list not found") - } launchIDFromVerifiedClientIDIndexMap[index] = struct{}{} } - - // Check for duplicated index in launchIDFromChannelID - launchIDFromChannelIDIndexMap := make(map[string]struct{}) - for _, elem := range gs.LaunchIDsFromChannelID { - index := string(LaunchIDFromChannelIDKey(elem.ChannelID)) - if _, ok := launchIDFromChannelIDIndexMap[index]; ok { - return fmt.Errorf("duplicated index for launchIDFromChannelID") - } - launchIDFromChannelIDIndexMap[index] = struct{}{} - } - // Check for duplicated index in monitoringHistory monitoringHistoryIndexMap := make(map[string]struct{}) - for _, elem := range gs.MonitoringHistories { - index := string(MonitoringHistoryKey(elem.LaunchID)) + + for _, elem := range gs.MonitoringHistoryList { + index := fmt.Sprint(elem.LaunchID) if _, ok := monitoringHistoryIndexMap[index]; ok { return fmt.Errorf("duplicated index for monitoringHistory") } monitoringHistoryIndexMap[index] = struct{}{} } + + // Check for duplicated index in verifiedClientID + verifiedClientIDIndexMap := make(map[string]struct{}) + + for _, elem := range gs.VerifiedClientIDList { + index := fmt.Sprint(elem.LaunchID) + if _, ok := verifiedClientIDIndexMap[index]; ok { + return fmt.Errorf("duplicated index for verifiedClientID") + } + verifiedClientIDIndexMap[index] = struct{}{} + } + // Check for duplicated index in providerClientID + providerClientIDIndexMap := make(map[string]struct{}) + + for _, elem := range gs.ProviderClientIDList { + index := fmt.Sprint(elem.LaunchID) + if _, ok := providerClientIDIndexMap[index]; ok { + return fmt.Errorf("duplicated index for providerClientID") + } + providerClientIDIndexMap[index] = struct{}{} + } // this line is used by starport scaffolding # genesis/types/validate return gs.Params.Validate() } - -// clientIDKey creates a string key for launch id and client id -func clientIDKey(launchID uint64, clientID string) string { - return fmt.Sprintf("%d-%s", launchID, clientID) -} diff --git a/x/monitoringc/types/genesis.pb.go b/x/monitoringc/types/genesis.pb.go index bd706813..0c56851e 100644 --- a/x/monitoringc/types/genesis.pb.go +++ b/x/monitoringc/types/genesis.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/genesis.proto +// source: network/monitoringc/v1/genesis.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,20 +26,21 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the monitoringc module's genesis state. type GenesisState struct { - PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` - VerifiedClientIDs []VerifiedClientID `protobuf:"bytes,2,rep,name=verifiedClientIDs,proto3" json:"verifiedClientIDs"` - ProviderClientIDs []ProviderClientID `protobuf:"bytes,3,rep,name=providerClientIDs,proto3" json:"providerClientIDs"` - LaunchIDsFromVerifiedClientID []LaunchIDFromVerifiedClientID `protobuf:"bytes,4,rep,name=launchIDsFromVerifiedClientID,proto3" json:"launchIDsFromVerifiedClientID"` - LaunchIDsFromChannelID []LaunchIDFromChannelID `protobuf:"bytes,5,rep,name=launchIDsFromChannelID,proto3" json:"launchIDsFromChannelID"` - MonitoringHistories []MonitoringHistory `protobuf:"bytes,6,rep,name=monitoringHistories,proto3" json:"monitoringHistories"` - Params Params `protobuf:"bytes,7,opt,name=params,proto3" json:"params"` + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + PortID string `protobuf:"bytes,2,opt,name=portID,proto3" json:"portID,omitempty"` + LaunchIDFromChannelIDList []LaunchIDFromChannelID `protobuf:"bytes,3,rep,name=launchIDFromChannelIDList,proto3" json:"launchIDFromChannelIDList"` + LaunchIDFromVerifiedClientIDList []LaunchIDFromVerifiedClientID `protobuf:"bytes,4,rep,name=launchIDFromVerifiedClientIDList,proto3" json:"launchIDFromVerifiedClientIDList"` + MonitoringHistoryList []MonitoringHistory `protobuf:"bytes,5,rep,name=monitoringHistoryList,proto3" json:"monitoringHistoryList"` + VerifiedClientIDList []VerifiedClientID `protobuf:"bytes,6,rep,name=verifiedClientIDList,proto3" json:"verifiedClientIDList"` + ProviderClientIDList []ProviderClientID `protobuf:"bytes,7,rep,name=providerClientIDList,proto3" json:"providerClientIDList"` } func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_52d090ea36f3cb90, []int{0} + return fileDescriptor_ab576c05c1adbe3d, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -67,90 +69,93 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetPortId() string { +func (m *GenesisState) GetParams() Params { if m != nil { - return m.PortId + return m.Params } - return "" + return Params{} } -func (m *GenesisState) GetVerifiedClientIDs() []VerifiedClientID { +func (m *GenesisState) GetPortID() string { if m != nil { - return m.VerifiedClientIDs + return m.PortID } - return nil + return "" } -func (m *GenesisState) GetProviderClientIDs() []ProviderClientID { +func (m *GenesisState) GetLaunchIDFromChannelIDList() []LaunchIDFromChannelID { if m != nil { - return m.ProviderClientIDs + return m.LaunchIDFromChannelIDList } return nil } -func (m *GenesisState) GetLaunchIDsFromVerifiedClientID() []LaunchIDFromVerifiedClientID { +func (m *GenesisState) GetLaunchIDFromVerifiedClientIDList() []LaunchIDFromVerifiedClientID { if m != nil { - return m.LaunchIDsFromVerifiedClientID + return m.LaunchIDFromVerifiedClientIDList } return nil } -func (m *GenesisState) GetLaunchIDsFromChannelID() []LaunchIDFromChannelID { +func (m *GenesisState) GetMonitoringHistoryList() []MonitoringHistory { if m != nil { - return m.LaunchIDsFromChannelID + return m.MonitoringHistoryList } return nil } -func (m *GenesisState) GetMonitoringHistories() []MonitoringHistory { +func (m *GenesisState) GetVerifiedClientIDList() []VerifiedClientID { if m != nil { - return m.MonitoringHistories + return m.VerifiedClientIDList } return nil } -func (m *GenesisState) GetParams() Params { +func (m *GenesisState) GetProviderClientIDList() []ProviderClientID { if m != nil { - return m.Params + return m.ProviderClientIDList } - return Params{} + return nil } func init() { - proto.RegisterType((*GenesisState)(nil), "spn.monitoringc.GenesisState") + proto.RegisterType((*GenesisState)(nil), "network.monitoringc.v1.GenesisState") } -func init() { proto.RegisterFile("spn/monitoringc/genesis.proto", fileDescriptor_52d090ea36f3cb90) } +func init() { + proto.RegisterFile("network/monitoringc/v1/genesis.proto", fileDescriptor_ab576c05c1adbe3d) +} -var fileDescriptor_52d090ea36f3cb90 = []byte{ - // 419 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0x41, 0xcf, 0xd2, 0x30, - 0x18, 0xc7, 0x37, 0xc1, 0x11, 0x8b, 0x89, 0x71, 0x1a, 0x59, 0x88, 0x4c, 0xe4, 0x60, 0x76, 0x61, - 0x4b, 0x30, 0xc6, 0x3b, 0x10, 0x71, 0x89, 0x26, 0x06, 0xa3, 0x07, 0x2e, 0xcb, 0xd8, 0xca, 0xd6, - 0x84, 0xb5, 0x4b, 0x5b, 0x88, 0xfb, 0x16, 0x7e, 0x2c, 0xbc, 0x71, 0xf4, 0x64, 0x0c, 0x7c, 0x11, - 0xb3, 0x6e, 0xc8, 0x4b, 0xc7, 0x78, 0x6f, 0x5d, 0x9e, 0x5f, 0x7f, 0xff, 0x27, 0x4f, 0x9f, 0x81, - 0x1e, 0x4b, 0xb1, 0x93, 0x10, 0x8c, 0x38, 0xa1, 0x08, 0x47, 0x81, 0x13, 0x41, 0x0c, 0x19, 0x62, - 0x76, 0x4a, 0x09, 0x27, 0xfa, 0x13, 0x96, 0x62, 0xfb, 0x4e, 0xb9, 0xfb, 0x3c, 0x22, 0x11, 0x11, - 0x35, 0x27, 0x3f, 0x15, 0x58, 0xf7, 0xa5, 0x6c, 0x49, 0x7d, 0xea, 0x27, 0xa5, 0xa4, 0x6b, 0xc9, - 0xd5, 0x2d, 0xa4, 0x68, 0x85, 0x60, 0xe8, 0x05, 0x6b, 0x04, 0x31, 0xf7, 0x50, 0x58, 0x47, 0xa6, - 0x94, 0x6c, 0x51, 0x08, 0x69, 0x85, 0x7c, 0x2f, 0x93, 0x6b, 0x7f, 0x83, 0x83, 0xd8, 0x43, 0xa1, - 0xb7, 0xa2, 0x24, 0xf1, 0x6a, 0x23, 0x9c, 0x7b, 0x2e, 0x06, 0xb1, 0x8f, 0x31, 0x5c, 0xdf, 0xe8, - 0xe9, 0x7c, 0xf6, 0x62, 0xc4, 0x38, 0xa1, 0x59, 0x41, 0x0e, 0x7e, 0x35, 0xc1, 0xe3, 0x59, 0x31, - 0xbe, 0xaf, 0xdc, 0xe7, 0x50, 0xef, 0x80, 0x56, 0x4a, 0x68, 0x1e, 0x6e, 0xa8, 0x7d, 0xd5, 0x7a, - 0x34, 0xd7, 0xf2, 0x4f, 0x37, 0xd4, 0xbf, 0x81, 0xa7, 0xa7, 0x06, 0x27, 0xa2, 0x3f, 0x77, 0xca, - 0x8c, 0x07, 0xfd, 0x86, 0xd5, 0x1e, 0xbd, 0xb6, 0xa5, 0x91, 0xdb, 0xdf, 0x25, 0x72, 0xdc, 0xdc, - 0xfd, 0x79, 0xa5, 0xcc, 0xab, 0x86, 0x5c, 0x7b, 0x1a, 0xd8, 0x59, 0xdb, 0xa8, 0xd1, 0x7e, 0x91, - 0xc8, 0x93, 0xb6, 0x62, 0xd0, 0x33, 0xd0, 0x2b, 0x86, 0xe4, 0x4e, 0xd9, 0x07, 0x4a, 0x12, 0xb9, - 0x21, 0xa3, 0x29, 0x22, 0x86, 0x95, 0x88, 0x4f, 0xe5, 0xad, 0x6b, 0x97, 0xca, 0xb8, 0xdb, 0x66, - 0x3d, 0x04, 0x2f, 0x2e, 0x80, 0x49, 0xf1, 0x3a, 0xee, 0xd4, 0x78, 0x28, 0x32, 0xdf, 0xdc, 0xcc, - 0xfc, 0x4f, 0x97, 0x61, 0x35, 0x2e, 0x7d, 0x01, 0x9e, 0x9d, 0x15, 0x1f, 0xc5, 0x9b, 0x22, 0xc8, - 0x0c, 0x4d, 0x44, 0x0c, 0x2a, 0x11, 0x9f, 0x25, 0x36, 0x2b, 0xf5, 0xd7, 0x24, 0xfa, 0x3b, 0xa0, - 0x15, 0x3f, 0x83, 0xd1, 0xea, 0xab, 0x56, 0x7b, 0xd4, 0xa9, 0x3e, 0x84, 0x28, 0x97, 0x8e, 0x12, - 0x1e, 0xcf, 0x76, 0x07, 0x53, 0xdd, 0x1f, 0x4c, 0xf5, 0xef, 0xc1, 0x54, 0x7f, 0x1e, 0x4d, 0x65, - 0x7f, 0x34, 0x95, 0xdf, 0x47, 0x53, 0x59, 0x0c, 0x23, 0xc4, 0xe3, 0xcd, 0xd2, 0x0e, 0x48, 0xe2, - 0x70, 0x88, 0x43, 0x48, 0x13, 0x84, 0xb9, 0x58, 0xeb, 0x1f, 0x17, 0x7b, 0xca, 0xb3, 0x14, 0xb2, - 0xa5, 0x26, 0x76, 0xf3, 0xed, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x65, 0x8b, 0x20, 0x5a, 0xe9, - 0x03, 0x00, 0x00, +var fileDescriptor_ab576c05c1adbe3d = []byte{ + // 448 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x8f, 0xd2, 0x40, + 0x18, 0x87, 0x3b, 0xee, 0x6e, 0xcd, 0xce, 0x7a, 0xb1, 0x59, 0x09, 0x72, 0xa8, 0x8d, 0x7a, 0xa8, + 0x26, 0xb4, 0x01, 0x8d, 0x47, 0x13, 0x81, 0x88, 0x24, 0x98, 0x10, 0x4c, 0x3c, 0x78, 0x69, 0x4a, + 0x3b, 0xb4, 0x13, 0xe9, 0x4c, 0x9d, 0x0e, 0x55, 0xbe, 0x80, 0x67, 0x0f, 0x7e, 0x08, 0x8f, 0x7e, + 0x0c, 0x8e, 0x1c, 0x3d, 0x19, 0x03, 0x07, 0xbf, 0x86, 0x61, 0x3a, 0xc8, 0x9f, 0x74, 0x16, 0x2e, + 0x64, 0x86, 0xbe, 0xcf, 0xef, 0x79, 0x67, 0xe6, 0x85, 0x8f, 0x09, 0xe2, 0x9f, 0x29, 0xfb, 0xe8, + 0x26, 0x94, 0x60, 0x4e, 0x19, 0x26, 0x51, 0xe0, 0xe6, 0x0d, 0x37, 0x42, 0x04, 0x65, 0x38, 0x73, + 0x52, 0x46, 0x39, 0x35, 0x2a, 0xb2, 0xca, 0xd9, 0xa9, 0x72, 0xf2, 0x46, 0xed, 0xae, 0x9f, 0x60, + 0x42, 0x5d, 0xf1, 0x5b, 0x94, 0xd6, 0xae, 0x23, 0x1a, 0x51, 0xb1, 0x74, 0xd7, 0x2b, 0xf9, 0xef, + 0x0b, 0x85, 0x66, 0xe2, 0x4f, 0x49, 0x10, 0x7b, 0x38, 0xf4, 0xc6, 0x8c, 0x26, 0x5e, 0x10, 0xfb, + 0x84, 0xa0, 0x89, 0x87, 0x43, 0xc9, 0xbd, 0x3c, 0x8d, 0xcb, 0x11, 0xc3, 0x63, 0x8c, 0x42, 0x2f, + 0x98, 0x60, 0x44, 0xf8, 0x96, 0x77, 0x15, 0xfc, 0x76, 0xeb, 0xc5, 0x38, 0xe3, 0x94, 0xcd, 0x24, + 0xf0, 0x48, 0x01, 0xa4, 0x3e, 0xf3, 0x93, 0xec, 0x48, 0x6a, 0xca, 0x68, 0x8e, 0x43, 0xc4, 0x4e, + 0x6e, 0x43, 0xd5, 0xf7, 0xc3, 0xef, 0x17, 0xf0, 0x4e, 0xb7, 0x78, 0x82, 0x77, 0xdc, 0xe7, 0xc8, + 0x78, 0x05, 0xf5, 0xa2, 0x85, 0x2a, 0xb0, 0x80, 0x7d, 0xd5, 0x34, 0x9d, 0xf2, 0x27, 0x71, 0x06, + 0xa2, 0xaa, 0x75, 0x39, 0xff, 0xfd, 0x40, 0xfb, 0xf1, 0xf7, 0xe7, 0x53, 0x30, 0x94, 0xa0, 0x51, + 0x81, 0x7a, 0x4a, 0x19, 0xef, 0x75, 0xaa, 0xb7, 0x2c, 0x60, 0x5f, 0x0e, 0xe5, 0xce, 0xf8, 0x04, + 0xef, 0x17, 0xd7, 0xd9, 0xeb, 0xbc, 0x66, 0x34, 0x69, 0x17, 0x6f, 0xd0, 0xeb, 0xf4, 0x71, 0xc6, + 0xab, 0x67, 0xd6, 0x99, 0x7d, 0xd5, 0xac, 0xab, 0x6c, 0xfd, 0x32, 0xb0, 0x75, 0xbe, 0x96, 0x0f, + 0xd5, 0xa9, 0xc6, 0x57, 0x00, 0xad, 0xdd, 0xaf, 0xef, 0xe5, 0x3d, 0xb4, 0xc5, 0x35, 0x48, 0xf5, + 0xb9, 0x50, 0x3f, 0x3f, 0x45, 0x7d, 0xc8, 0xcb, 0x0e, 0x8e, 0x3a, 0x0c, 0x04, 0xef, 0x6d, 0x63, + 0xdf, 0x14, 0x93, 0x20, 0xe4, 0x17, 0x42, 0xfe, 0x44, 0x25, 0x7f, 0x7b, 0x08, 0x49, 0x63, 0x79, + 0x9a, 0x31, 0x82, 0xd7, 0x79, 0xd9, 0x11, 0x75, 0x61, 0xb1, 0x55, 0x16, 0xc5, 0xb1, 0x4a, 0xb3, + 0xd6, 0x8e, 0xcd, 0xfc, 0xed, 0x39, 0x6e, 0xdf, 0xec, 0x18, 0x1c, 0x30, 0x1b, 0x47, 0x59, 0x56, + 0xab, 0x3b, 0x5f, 0x9a, 0x60, 0xb1, 0x34, 0xc1, 0x9f, 0xa5, 0x09, 0xbe, 0xad, 0x4c, 0x6d, 0xb1, + 0x32, 0xb5, 0x5f, 0x2b, 0x53, 0xfb, 0x50, 0x8f, 0x30, 0x8f, 0xa7, 0x23, 0x27, 0xa0, 0x89, 0x8b, + 0x23, 0x82, 0x39, 0xfa, 0x3f, 0xf3, 0x5f, 0xf6, 0xa6, 0x9e, 0xcf, 0x52, 0x94, 0x8d, 0x74, 0x31, + 0xe6, 0xcf, 0xfe, 0x05, 0x00, 0x00, 0xff, 0xff, 0x85, 0x95, 0x19, 0x8f, 0x7f, 0x04, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -173,20 +178,10 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - if len(m.MonitoringHistories) > 0 { - for iNdEx := len(m.MonitoringHistories) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ProviderClientIDList) > 0 { + for iNdEx := len(m.ProviderClientIDList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.MonitoringHistories[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ProviderClientIDList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -194,13 +189,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 + dAtA[i] = 0x3a } } - if len(m.LaunchIDsFromChannelID) > 0 { - for iNdEx := len(m.LaunchIDsFromChannelID) - 1; iNdEx >= 0; iNdEx-- { + if len(m.VerifiedClientIDList) > 0 { + for iNdEx := len(m.VerifiedClientIDList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.LaunchIDsFromChannelID[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.VerifiedClientIDList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -208,13 +203,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x32 } } - if len(m.LaunchIDsFromVerifiedClientID) > 0 { - for iNdEx := len(m.LaunchIDsFromVerifiedClientID) - 1; iNdEx >= 0; iNdEx-- { + if len(m.MonitoringHistoryList) > 0 { + for iNdEx := len(m.MonitoringHistoryList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.LaunchIDsFromVerifiedClientID[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.MonitoringHistoryList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -222,13 +217,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x2a } } - if len(m.ProviderClientIDs) > 0 { - for iNdEx := len(m.ProviderClientIDs) - 1; iNdEx >= 0; iNdEx-- { + if len(m.LaunchIDFromVerifiedClientIDList) > 0 { + for iNdEx := len(m.LaunchIDFromVerifiedClientIDList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.ProviderClientIDs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LaunchIDFromVerifiedClientIDList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -236,13 +231,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x22 } } - if len(m.VerifiedClientIDs) > 0 { - for iNdEx := len(m.VerifiedClientIDs) - 1; iNdEx >= 0; iNdEx-- { + if len(m.LaunchIDFromChannelIDList) > 0 { + for iNdEx := len(m.LaunchIDFromChannelIDList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.VerifiedClientIDs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LaunchIDFromChannelIDList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -250,16 +245,26 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a } } - if len(m.PortId) > 0 { - i -= len(m.PortId) - copy(dAtA[i:], m.PortId) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortId))) + if len(m.PortID) > 0 { + i -= len(m.PortID) + copy(dAtA[i:], m.PortID) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortID))) i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -280,42 +285,42 @@ func (m *GenesisState) Size() (n int) { } var l int _ = l - l = len(m.PortId) + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = len(m.PortID) if l > 0 { n += 1 + l + sovGenesis(uint64(l)) } - if len(m.VerifiedClientIDs) > 0 { - for _, e := range m.VerifiedClientIDs { + if len(m.LaunchIDFromChannelIDList) > 0 { + for _, e := range m.LaunchIDFromChannelIDList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.ProviderClientIDs) > 0 { - for _, e := range m.ProviderClientIDs { + if len(m.LaunchIDFromVerifiedClientIDList) > 0 { + for _, e := range m.LaunchIDFromVerifiedClientIDList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.LaunchIDsFromVerifiedClientID) > 0 { - for _, e := range m.LaunchIDsFromVerifiedClientID { + if len(m.MonitoringHistoryList) > 0 { + for _, e := range m.MonitoringHistoryList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.LaunchIDsFromChannelID) > 0 { - for _, e := range m.LaunchIDsFromChannelID { + if len(m.VerifiedClientIDList) > 0 { + for _, e := range m.VerifiedClientIDList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.MonitoringHistories) > 0 { - for _, e := range m.MonitoringHistories { + if len(m.ProviderClientIDList) > 0 { + for _, e := range m.ProviderClientIDList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) return n } @@ -356,9 +361,9 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -368,29 +373,30 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - m.PortId = string(dAtA[iNdEx:postIndex]) + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VerifiedClientIDs", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PortID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -400,29 +406,27 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - m.VerifiedClientIDs = append(m.VerifiedClientIDs, VerifiedClientID{}) - if err := m.VerifiedClientIDs[len(m.VerifiedClientIDs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.PortID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProviderClientIDs", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromChannelIDList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -449,14 +453,14 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ProviderClientIDs = append(m.ProviderClientIDs, ProviderClientID{}) - if err := m.ProviderClientIDs[len(m.ProviderClientIDs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.LaunchIDFromChannelIDList = append(m.LaunchIDFromChannelIDList, LaunchIDFromChannelID{}) + if err := m.LaunchIDFromChannelIDList[len(m.LaunchIDFromChannelIDList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LaunchIDsFromVerifiedClientID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromVerifiedClientIDList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -483,14 +487,14 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.LaunchIDsFromVerifiedClientID = append(m.LaunchIDsFromVerifiedClientID, LaunchIDFromVerifiedClientID{}) - if err := m.LaunchIDsFromVerifiedClientID[len(m.LaunchIDsFromVerifiedClientID)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.LaunchIDFromVerifiedClientIDList = append(m.LaunchIDFromVerifiedClientIDList, LaunchIDFromVerifiedClientID{}) + if err := m.LaunchIDFromVerifiedClientIDList[len(m.LaunchIDFromVerifiedClientIDList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LaunchIDsFromChannelID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MonitoringHistoryList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -517,14 +521,14 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.LaunchIDsFromChannelID = append(m.LaunchIDsFromChannelID, LaunchIDFromChannelID{}) - if err := m.LaunchIDsFromChannelID[len(m.LaunchIDsFromChannelID)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.MonitoringHistoryList = append(m.MonitoringHistoryList, MonitoringHistory{}) + if err := m.MonitoringHistoryList[len(m.MonitoringHistoryList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MonitoringHistories", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VerifiedClientIDList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -551,14 +555,14 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.MonitoringHistories = append(m.MonitoringHistories, MonitoringHistory{}) - if err := m.MonitoringHistories[len(m.MonitoringHistories)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.VerifiedClientIDList = append(m.VerifiedClientIDList, VerifiedClientID{}) + if err := m.VerifiedClientIDList[len(m.VerifiedClientIDList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProviderClientIDList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -585,7 +589,8 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ProviderClientIDList = append(m.ProviderClientIDList, ProviderClientID{}) + if err := m.ProviderClientIDList[len(m.ProviderClientIDList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/monitoringc/types/genesis_test.go b/x/monitoringc/types/genesis_test.go index bef9ffd5..89f24294 100644 --- a/x/monitoringc/types/genesis_test.go +++ b/x/monitoringc/types/genesis_test.go @@ -5,41 +5,50 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/x/monitoringc/types" + "github.com/ignite/network/x/monitoringc/types" ) func TestGenesisState_Validate(t *testing.T) { - for _, tc := range []struct { - name string + tests := []struct { + desc string genState *types.GenesisState valid bool }{ { - name: "should allow valid default genesis", + desc: "default is valid", genState: types.DefaultGenesis(), valid: true, }, { - name: "should allow valid genesis state", + desc: "valid genesis state", genState: &types.GenesisState{ - PortId: types.PortID, - VerifiedClientIDs: []types.VerifiedClientID{ - {LaunchID: 0, ClientIDs: []string{"0"}}, - {LaunchID: 1, ClientIDs: []string{"1", "2"}}, - }, - ProviderClientIDs: []types.ProviderClientID{ - {LaunchID: 0, ClientID: "0"}, - {LaunchID: 1, ClientID: "2"}, + PortID: types.PortID, + LaunchIDFromChannelIDList: []types.LaunchIDFromChannelID{ + { + ChannelID: "0", + }, + { + ChannelID: "1", + }, }, - LaunchIDsFromVerifiedClientID: []types.LaunchIDFromVerifiedClientID{ - {LaunchID: 0, ClientID: "0"}, - {LaunchID: 1, ClientID: "1"}, + LaunchIDFromVerifiedClientIDList: []types.LaunchIDFromVerifiedClientID{ + { + ClientID: "0", + }, + { + ClientID: "1", + }, }, - LaunchIDsFromChannelID: []types.LaunchIDFromChannelID{ - {LaunchID: 0, ChannelID: "0"}, - {LaunchID: 1, ChannelID: "1"}, + MonitoringHistoryList: []types.MonitoringHistory{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, }, - MonitoringHistories: []types.MonitoringHistory{ + + VerifiedClientIDList: []types.VerifiedClientID{ { LaunchID: 0, }, @@ -47,64 +56,40 @@ func TestGenesisState_Validate(t *testing.T) { LaunchID: 1, }, }, - // this line is used by starport scaffolding # types/genesis/validField - }, - valid: true, - }, - { - name: "should prevent invalid portID", - genState: &types.GenesisState{ - PortId: "", - }, - valid: false, - }, - { - name: "should prevent duplicated verifiedClientID", - genState: &types.GenesisState{ - PortId: types.PortID, - VerifiedClientIDs: []types.VerifiedClientID{ + ProviderClientIDList: []types.ProviderClientID{ { - LaunchID: 0, - ClientIDs: []string{"0"}, + LaunchID: 0, }, { - LaunchID: 0, - ClientIDs: []string{"1", "2"}, + LaunchID: 1, }, }, + // this line is used by starport scaffolding # types/genesis/validField }, - valid: false, + valid: true, }, { - name: "should prevent duplicated clientID", + desc: "duplicated launchIDFromChannelID", genState: &types.GenesisState{ - PortId: types.PortID, - VerifiedClientIDs: []types.VerifiedClientID{ + LaunchIDFromChannelIDList: []types.LaunchIDFromChannelID{ { - LaunchID: 0, - ClientIDs: []string{"0", "0"}, + ChannelID: "0", + }, + { + ChannelID: "0", }, }, }, valid: false, }, { - name: "should prevent duplicated providerClientID", + desc: "duplicated launchIDFromVerifiedClientID", genState: &types.GenesisState{ - PortId: types.PortID, - VerifiedClientIDs: []types.VerifiedClientID{ - { - LaunchID: 0, - ClientIDs: []string{"0"}, - }, - }, - ProviderClientIDs: []types.ProviderClientID{ + LaunchIDFromVerifiedClientIDList: []types.LaunchIDFromVerifiedClientID{ { - LaunchID: 0, ClientID: "0", }, { - LaunchID: 0, ClientID: "0", }, }, @@ -112,22 +97,13 @@ func TestGenesisState_Validate(t *testing.T) { valid: false, }, { - name: "should prevent duplicated launchIDFromVerifiedClientID", + desc: "duplicated monitoringHistory", genState: &types.GenesisState{ - PortId: types.PortID, - VerifiedClientIDs: []types.VerifiedClientID{ - { - LaunchID: 0, - ClientIDs: []string{"0"}, - }, - }, - LaunchIDsFromVerifiedClientID: []types.LaunchIDFromVerifiedClientID{ + MonitoringHistoryList: []types.MonitoringHistory{ { - ClientID: "0", LaunchID: 0, }, { - ClientID: "0", LaunchID: 0, }, }, @@ -135,65 +111,23 @@ func TestGenesisState_Validate(t *testing.T) { valid: false, }, { - name: "should prevent provider client id without valid client id", + desc: "duplicated verifiedClientID", genState: &types.GenesisState{ - PortId: types.PortID, - VerifiedClientIDs: []types.VerifiedClientID{ - {LaunchID: 0, ClientIDs: []string{"0"}}, - {LaunchID: 1, ClientIDs: []string{"1", "2"}}, - }, - ProviderClientIDs: []types.ProviderClientID{ - {LaunchID: 0, ClientID: "0"}, - {LaunchID: 1, ClientID: "3"}, - }, - LaunchIDsFromVerifiedClientID: []types.LaunchIDFromVerifiedClientID{ - {LaunchID: 0, ClientID: "0"}, - {LaunchID: 1, ClientID: "2"}, - }, - // this line is used by starport scaffolding # types/genesis/validField - }, - valid: false, - }, - { - name: "should prevent launch id from verified client id without valid client id", - genState: &types.GenesisState{ - PortId: types.PortID, - VerifiedClientIDs: []types.VerifiedClientID{ - {LaunchID: 0, ClientIDs: []string{"0"}}, - {LaunchID: 1, ClientIDs: []string{"1", "2"}}, - }, - ProviderClientIDs: []types.ProviderClientID{ - {LaunchID: 0, ClientID: "0"}, - {LaunchID: 1, ClientID: "2"}, - }, - LaunchIDsFromVerifiedClientID: []types.LaunchIDFromVerifiedClientID{ - {LaunchID: 0, ClientID: "1"}, - {LaunchID: 1, ClientID: "1"}, - }, - // this line is used by starport scaffolding # types/genesis/validField - }, - valid: false, - }, - { - name: "should prevent duplicated launchIDFromChannelID", - genState: &types.GenesisState{ - PortId: types.PortID, - LaunchIDsFromChannelID: []types.LaunchIDFromChannelID{ + VerifiedClientIDList: []types.VerifiedClientID{ { - ChannelID: "0", + LaunchID: 0, }, { - ChannelID: "0", + LaunchID: 0, }, }, }, valid: false, }, { - name: "should prevent duplicated monitoringHistory", + desc: "duplicated providerClientID", genState: &types.GenesisState{ - PortId: types.PortID, - MonitoringHistories: []types.MonitoringHistory{ + ProviderClientIDList: []types.ProviderClientID{ { LaunchID: 0, }, @@ -205,8 +139,9 @@ func TestGenesisState_Validate(t *testing.T) { valid: false, }, // this line is used by starport scaffolding # types/genesis/testcase - } { - t.Run(tc.name, func(t *testing.T) { + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { err := tc.genState.Validate() if tc.valid { require.NoError(t, err) diff --git a/x/monitoringc/types/keys.go b/x/monitoringc/types/keys.go index 60b9569e..b1e56d32 100644 --- a/x/monitoringc/types/keys.go +++ b/x/monitoringc/types/keys.go @@ -1,76 +1,42 @@ package types -import spntypes "github.com/tendermint/spn/pkg/types" +import "cosmossdk.io/collections" const ( // ModuleName defines the module name ModuleName = "monitoringc" - // FullModuleName defines the full module name used in interface like CLI to make it more explanatory - FullModuleName = "monitoring-consumer" - // StoreKey defines the primary module store key StoreKey = ModuleName - // RouterKey is the message route for slashing - RouterKey = ModuleName - - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - // MemStoreKey defines the in-memory store key MemStoreKey = "mem_monitoringc" // Version defines the current version the IBC module supports - Version = "monitoring-1" + Version = "monitoringc-1" // PortID is the default port id that module binds to PortID = "monitoringc" - - // VerifiedClientIDKeyPrefix is the prefix to retrieve all VerifiedClientID - VerifiedClientIDKeyPrefix = "VerifiedClientID/value/" - - // ProviderClientIDKeyPrefix is the prefix to retrieve all ProviderClientID - ProviderClientIDKeyPrefix = "ProviderClientID/value/" - - // LaunchIDFromVerifiedClientIDKeyPrefix is the prefix to retrieve all LaunchIDFromVerifiedClientID - LaunchIDFromVerifiedClientIDKeyPrefix = "LaunchIDFromVerifiedClientID/value/" - - // LaunchIDFromChannelIDKeyPrefix is the prefix to retrieve all LaunchIDFromChannelID - LaunchIDFromChannelIDKeyPrefix = "LaunchIDFromChannelID/value/" - - // MonitoringHistoryKeyPrefix is the prefix to retrieve all MonitoringHistory - MonitoringHistoryKeyPrefix = "MonitoringHistory/value/" ) -// PortKey defines the key to store the port ID in store -var PortKey = KeyPrefix("monitoringc-port-") +var ( + ParamsKey = collections.NewPrefix("p_monitoringc") -func KeyPrefix(p string) []byte { - return []byte(p) -} + // PortKey defines the key to store the port ID in store + PortKey = collections.NewPrefix("monitoringc-port-") -// VerifiedClientIDKey returns the store key to retrieve a VerifiedClientID from the index fields -func VerifiedClientIDKey(launchID uint64) []byte { - return append(spntypes.UintBytes(launchID), byte('/')) -} + // LaunchIDFromChannelIDKey is the prefix to retrieve all LaunchIDFromChannelID + LaunchIDFromChannelIDKey = collections.NewPrefix("LaunchIDFromChannelID/value/") -// ProviderClientIDKey returns the store key to retrieve a ProviderClientID from the index fields -func ProviderClientIDKey(launchID uint64) []byte { - return append(spntypes.UintBytes(launchID), byte('/')) -} + // LaunchIDFromVerifiedClientIDKey is the prefix to retrieve all LaunchIDFromVerifiedClientID + LaunchIDFromVerifiedClientIDKey = collections.NewPrefix("LaunchIDFromVerifiedClientID/value/") -// LaunchIDFromVerifiedClientIDKey returns the store key to retrieve a LaunchIDFromVerifiedClientID from the index fields -func LaunchIDFromVerifiedClientIDKey(clientID string) []byte { - return []byte(clientID + "/") -} + // MonitoringHistoryKey is the prefix to retrieve all MonitoringHistory + MonitoringHistoryKey = collections.NewPrefix("MonitoringHistory/value/") -// LaunchIDFromChannelIDKey returns the store key to retrieve a LaunchIDFromChannelID from the index fields -func LaunchIDFromChannelIDKey(channelID string) []byte { - return []byte(channelID + "/") -} + // VerifiedClientIDKey is the prefix to retrieve all VerifiedClientID + VerifiedClientIDKey = collections.NewPrefix("VerifiedClientID/value/") -// MonitoringHistoryKey returns the store key to retrieve a MonitoringHistory from the index fields -func MonitoringHistoryKey(launchID uint64) []byte { - return append(spntypes.UintBytes(launchID), byte('/')) -} + // ProviderClientIDKey is the prefix to retrieve all ProviderClientID + ProviderClientIDKey = collections.NewPrefix("ProviderClientID/value/") +) diff --git a/x/monitoringc/types/launch_id_from_channel_id.pb.go b/x/monitoringc/types/launch_id_from_channel_id.pb.go index 0153f581..51294f8e 100644 --- a/x/monitoringc/types/launch_id_from_channel_id.pb.go +++ b/x/monitoringc/types/launch_id_from_channel_id.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/launch_id_from_channel_id.proto +// source: network/monitoringc/v1/launch_id_from_channel_id.proto package types @@ -31,7 +31,7 @@ func (m *LaunchIDFromChannelID) Reset() { *m = LaunchIDFromChannelID{} } func (m *LaunchIDFromChannelID) String() string { return proto.CompactTextString(m) } func (*LaunchIDFromChannelID) ProtoMessage() {} func (*LaunchIDFromChannelID) Descriptor() ([]byte, []int) { - return fileDescriptor_a03e8149f64ce63c, []int{0} + return fileDescriptor_34fd6e8479ba5a91, []int{0} } func (m *LaunchIDFromChannelID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -75,28 +75,28 @@ func (m *LaunchIDFromChannelID) GetLaunchID() uint64 { } func init() { - proto.RegisterType((*LaunchIDFromChannelID)(nil), "spn.monitoringc.LaunchIDFromChannelID") + proto.RegisterType((*LaunchIDFromChannelID)(nil), "network.monitoringc.v1.LaunchIDFromChannelID") } func init() { - proto.RegisterFile("spn/monitoringc/launch_id_from_channel_id.proto", fileDescriptor_a03e8149f64ce63c) + proto.RegisterFile("network/monitoringc/v1/launch_id_from_channel_id.proto", fileDescriptor_34fd6e8479ba5a91) } -var fileDescriptor_a03e8149f64ce63c = []byte{ - // 197 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x2f, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, 0xcf, 0x49, 0x2c, 0xcd, - 0x4b, 0xce, 0x88, 0xcf, 0x4c, 0x89, 0x4f, 0x2b, 0xca, 0xcf, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcb, - 0x4b, 0xcd, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2f, 0x2e, 0xc8, - 0xd3, 0x43, 0xd2, 0xa0, 0x14, 0xc8, 0x25, 0xea, 0x03, 0xd6, 0xe3, 0xe9, 0xe2, 0x56, 0x94, 0x9f, - 0xeb, 0x0c, 0xd1, 0xe0, 0xe9, 0x22, 0x24, 0xc3, 0xc5, 0x99, 0x0c, 0xe3, 0x48, 0x30, 0x2a, 0x30, - 0x6a, 0x70, 0x06, 0x21, 0x04, 0x84, 0xa4, 0xb8, 0x38, 0x72, 0xa0, 0xda, 0x24, 0x98, 0x14, 0x18, - 0x35, 0x58, 0x82, 0xe0, 0x7c, 0x27, 0xf7, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, - 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, - 0x88, 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x2f, 0x49, 0xcd, - 0x4b, 0x49, 0x2d, 0xca, 0xcd, 0xcc, 0x2b, 0x01, 0x7b, 0xa2, 0x02, 0xc5, 0x1b, 0x25, 0x95, 0x05, - 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x37, 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x30, 0xd3, 0x09, - 0xf0, 0xe6, 0x00, 0x00, 0x00, +var fileDescriptor_34fd6e8479ba5a91 = []byte{ + // 203 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0xcb, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, + 0x2f, 0x33, 0xd4, 0xcf, 0x49, 0x2c, 0xcd, 0x4b, 0xce, 0x88, 0xcf, 0x4c, 0x89, 0x4f, 0x2b, 0xca, + 0xcf, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcb, 0x4b, 0xcd, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0x12, 0x83, 0xea, 0xd3, 0x43, 0xd2, 0xa7, 0x57, 0x66, 0xa8, 0x14, 0xc8, 0x25, + 0xea, 0x03, 0xd6, 0xea, 0xe9, 0xe2, 0x56, 0x94, 0x9f, 0xeb, 0x0c, 0xd1, 0xe7, 0xe9, 0x22, 0x24, + 0xc3, 0xc5, 0x99, 0x0c, 0xe3, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x21, 0x04, 0x84, 0xa4, + 0xb8, 0x38, 0x72, 0xa0, 0xda, 0x24, 0x98, 0x14, 0x18, 0x35, 0x58, 0x82, 0xe0, 0x7c, 0x27, 0xf7, + 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, + 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, + 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x4c, 0xcf, 0xcb, 0x2c, 0x49, 0xd5, 0x87, 0x79, 0xa7, + 0x02, 0xc5, 0x43, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0xa7, 0x1b, 0x03, 0x02, 0x00, + 0x00, 0xff, 0xff, 0x3c, 0x5a, 0x93, 0x25, 0xf4, 0x00, 0x00, 0x00, } func (m *LaunchIDFromChannelID) Marshal() (dAtA []byte, err error) { diff --git a/x/monitoringc/types/launch_id_from_verified_client_id.pb.go b/x/monitoringc/types/launch_id_from_verified_client_id.pb.go index de4123ca..bf5f5920 100644 --- a/x/monitoringc/types/launch_id_from_verified_client_id.pb.go +++ b/x/monitoringc/types/launch_id_from_verified_client_id.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/launch_id_from_verified_client_id.proto +// source: network/monitoringc/v1/launch_id_from_verified_client_id.proto package types @@ -31,7 +31,7 @@ func (m *LaunchIDFromVerifiedClientID) Reset() { *m = LaunchIDFromVerifi func (m *LaunchIDFromVerifiedClientID) String() string { return proto.CompactTextString(m) } func (*LaunchIDFromVerifiedClientID) ProtoMessage() {} func (*LaunchIDFromVerifiedClientID) Descriptor() ([]byte, []int) { - return fileDescriptor_11a900beb38434ce, []int{0} + return fileDescriptor_bd19966539aed142, []int{0} } func (m *LaunchIDFromVerifiedClientID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -75,28 +75,29 @@ func (m *LaunchIDFromVerifiedClientID) GetLaunchID() uint64 { } func init() { - proto.RegisterType((*LaunchIDFromVerifiedClientID)(nil), "spn.monitoringc.LaunchIDFromVerifiedClientID") + proto.RegisterType((*LaunchIDFromVerifiedClientID)(nil), "network.monitoringc.v1.LaunchIDFromVerifiedClientID") } func init() { - proto.RegisterFile("spn/monitoringc/launch_id_from_verified_client_id.proto", fileDescriptor_11a900beb38434ce) + proto.RegisterFile("network/monitoringc/v1/launch_id_from_verified_client_id.proto", fileDescriptor_bd19966539aed142) } -var fileDescriptor_11a900beb38434ce = []byte{ - // 207 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x2f, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, 0xcf, 0x49, 0x2c, 0xcd, - 0x4b, 0xce, 0x88, 0xcf, 0x4c, 0x89, 0x4f, 0x2b, 0xca, 0xcf, 0x8d, 0x2f, 0x4b, 0x2d, 0xca, 0x4c, - 0xcb, 0x4c, 0x4d, 0x89, 0x4f, 0xce, 0xc9, 0x4c, 0xcd, 0x2b, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, 0x28, - 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2f, 0x2e, 0xc8, 0xd3, 0x43, 0xd2, 0xa8, 0x14, 0xc6, 0x25, 0xe3, - 0x03, 0xd6, 0xeb, 0xe9, 0xe2, 0x56, 0x94, 0x9f, 0x1b, 0x06, 0xd5, 0xe8, 0x0c, 0xd6, 0xe7, 0xe9, - 0x22, 0x24, 0xc5, 0xc5, 0x91, 0x0c, 0x65, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0xc1, 0xf9, - 0x20, 0xb9, 0x1c, 0xa8, 0x5e, 0x09, 0x26, 0x05, 0x46, 0x0d, 0x96, 0x20, 0x38, 0xdf, 0xc9, 0xfd, - 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, - 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x74, 0xd3, 0x33, 0x4b, 0x32, 0x4a, - 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x4b, 0x52, 0xf3, 0x52, 0x52, 0x8b, 0x72, 0x33, 0xf3, 0x4a, - 0xf4, 0x41, 0x3e, 0xaa, 0x40, 0xf1, 0x53, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0xe1, - 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0xed, 0x48, 0x0a, 0xf3, 0x00, 0x00, 0x00, +var fileDescriptor_bd19966539aed142 = []byte{ + // 212 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0xcb, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, + 0x2f, 0x33, 0xd4, 0xcf, 0x49, 0x2c, 0xcd, 0x4b, 0xce, 0x88, 0xcf, 0x4c, 0x89, 0x4f, 0x2b, 0xca, + 0xcf, 0x8d, 0x2f, 0x4b, 0x2d, 0xca, 0x4c, 0xcb, 0x4c, 0x4d, 0x89, 0x4f, 0xce, 0xc9, 0x4c, 0xcd, + 0x2b, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x83, 0xea, 0xd7, 0x43, + 0xd2, 0xaf, 0x57, 0x66, 0xa8, 0x14, 0xc6, 0x25, 0xe3, 0x03, 0x36, 0xc2, 0xd3, 0xc5, 0xad, 0x28, + 0x3f, 0x37, 0x0c, 0xaa, 0xdf, 0x19, 0xac, 0xdd, 0xd3, 0x45, 0x48, 0x8a, 0x8b, 0x23, 0x19, 0xca, + 0x96, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0x82, 0xf3, 0x41, 0x72, 0x39, 0x50, 0xbd, 0x12, 0x4c, + 0x0a, 0x8c, 0x1a, 0x2c, 0x41, 0x70, 0xbe, 0x93, 0xfb, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, + 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, + 0xcb, 0x31, 0x44, 0xe9, 0xa6, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0x67, + 0xa6, 0xe7, 0x65, 0x96, 0xa4, 0xea, 0xc3, 0xfc, 0x56, 0x81, 0xe2, 0xbb, 0x92, 0xca, 0x82, 0xd4, + 0xe2, 0x24, 0x36, 0xb0, 0xfb, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x56, 0x68, 0xfc, 0xe8, + 0x01, 0x01, 0x00, 0x00, } func (m *LaunchIDFromVerifiedClientID) Marshal() (dAtA []byte, err error) { diff --git a/x/monitoringc/types/monitoring_history.pb.go b/x/monitoringc/types/monitoring_history.pb.go index 791ee185..ee6ab264 100644 --- a/x/monitoringc/types/monitoring_history.pb.go +++ b/x/monitoringc/types/monitoring_history.pb.go @@ -1,13 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/monitoring_history.proto +// source: network/monitoringc/v1/monitoring_history.proto package types import ( fmt "fmt" - _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - types "github.com/tendermint/spn/pkg/types" io "io" math "math" math_bits "math/bits" @@ -25,15 +23,15 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type MonitoringHistory struct { - LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` - LatestMonitoringPacket types.MonitoringPacket `protobuf:"bytes,2,opt,name=latestMonitoringPacket,proto3" json:"latestMonitoringPacket"` + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` + LatestMonitoringPacket string `protobuf:"bytes,2,opt,name=latestMonitoringPacket,proto3" json:"latestMonitoringPacket,omitempty"` } func (m *MonitoringHistory) Reset() { *m = MonitoringHistory{} } func (m *MonitoringHistory) String() string { return proto.CompactTextString(m) } func (*MonitoringHistory) ProtoMessage() {} func (*MonitoringHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_92d31d6b61e1c48c, []int{0} + return fileDescriptor_62b7e761a38ba1f8, []int{0} } func (m *MonitoringHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -69,38 +67,36 @@ func (m *MonitoringHistory) GetLaunchID() uint64 { return 0 } -func (m *MonitoringHistory) GetLatestMonitoringPacket() types.MonitoringPacket { +func (m *MonitoringHistory) GetLatestMonitoringPacket() string { if m != nil { return m.LatestMonitoringPacket } - return types.MonitoringPacket{} + return "" } func init() { - proto.RegisterType((*MonitoringHistory)(nil), "spn.monitoringc.MonitoringHistory") + proto.RegisterType((*MonitoringHistory)(nil), "network.monitoringc.v1.MonitoringHistory") } func init() { - proto.RegisterFile("spn/monitoringc/monitoring_history.proto", fileDescriptor_92d31d6b61e1c48c) + proto.RegisterFile("network/monitoringc/v1/monitoring_history.proto", fileDescriptor_62b7e761a38ba1f8) } -var fileDescriptor_92d31d6b61e1c48c = []byte{ - // 231 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x28, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0x46, 0x62, 0xc7, 0x67, 0x64, - 0x16, 0x97, 0xe4, 0x17, 0x55, 0xea, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0xf1, 0x17, 0x17, 0xe4, - 0xe9, 0x21, 0xa9, 0x94, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xe9, 0x83, 0x58, 0x10, 0x65, - 0x52, 0x52, 0x20, 0x03, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x91, 0x8c, 0x82, 0xc8, 0x29, 0x75, 0x31, - 0x72, 0x09, 0xfa, 0xc2, 0x05, 0x3d, 0x20, 0xc6, 0x0b, 0x49, 0x71, 0x71, 0xe4, 0x24, 0x96, 0xe6, - 0x25, 0x67, 0x78, 0xba, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0xb0, 0x04, 0xc1, 0xf9, 0x42, 0x91, 0x5c, - 0x62, 0x39, 0x89, 0x25, 0xa9, 0xc5, 0x25, 0x08, 0x6d, 0x01, 0x89, 0xc9, 0xd9, 0xa9, 0x25, 0x12, - 0x4c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0xd2, 0x7a, 0x20, 0x57, 0x81, 0xad, 0xd3, 0x43, 0x57, 0xe2, - 0xc4, 0x72, 0xe2, 0x9e, 0x3c, 0x43, 0x10, 0x0e, 0x03, 0x9c, 0xdc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, - 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, - 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x37, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, - 0x57, 0xbf, 0x24, 0x35, 0x2f, 0x25, 0xb5, 0x28, 0x37, 0x33, 0xaf, 0x44, 0x1f, 0xe4, 0xb1, 0x0a, - 0x94, 0xb0, 0x02, 0xdb, 0x9b, 0xc4, 0x06, 0xf6, 0x9c, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x37, - 0x80, 0x4a, 0xe7, 0x4b, 0x01, 0x00, 0x00, +var fileDescriptor_62b7e761a38ba1f8 = []byte{ + // 194 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, + 0x2f, 0x33, 0x44, 0xe2, 0xc6, 0x67, 0x64, 0x16, 0x97, 0xe4, 0x17, 0x55, 0xea, 0x15, 0x14, 0xe5, + 0x97, 0xe4, 0x0b, 0x89, 0x41, 0x35, 0xe8, 0x21, 0x69, 0xd0, 0x2b, 0x33, 0x54, 0x4a, 0xe7, 0x12, + 0xf4, 0x85, 0x8b, 0x78, 0x40, 0xb4, 0x08, 0x49, 0x71, 0x71, 0xe4, 0x24, 0x96, 0xe6, 0x25, 0x67, + 0x78, 0xba, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0xb0, 0x04, 0xc1, 0xf9, 0x42, 0x66, 0x5c, 0x62, 0x39, + 0x89, 0x25, 0xa9, 0xc5, 0x25, 0x08, 0x6d, 0x01, 0x89, 0xc9, 0xd9, 0xa9, 0x25, 0x12, 0x4c, 0x0a, + 0x8c, 0x1a, 0x9c, 0x41, 0x38, 0x64, 0x9d, 0xdc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, + 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, + 0x8e, 0x21, 0x4a, 0x37, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x33, + 0x3d, 0x2f, 0xb3, 0x24, 0x15, 0xee, 0xbb, 0x0a, 0x14, 0xff, 0x95, 0x54, 0x16, 0xa4, 0x16, 0x27, + 0xb1, 0x81, 0x3d, 0x64, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x71, 0x71, 0x53, 0xd6, 0x03, 0x01, + 0x00, 0x00, } func (m *MonitoringHistory) Marshal() (dAtA []byte, err error) { @@ -123,16 +119,13 @@ func (m *MonitoringHistory) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.LatestMonitoringPacket.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintMonitoringHistory(dAtA, i, uint64(size)) + if len(m.LatestMonitoringPacket) > 0 { + i -= len(m.LatestMonitoringPacket) + copy(dAtA[i:], m.LatestMonitoringPacket) + i = encodeVarintMonitoringHistory(dAtA, i, uint64(len(m.LatestMonitoringPacket))) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 if m.LaunchID != 0 { i = encodeVarintMonitoringHistory(dAtA, i, uint64(m.LaunchID)) i-- @@ -161,8 +154,10 @@ func (m *MonitoringHistory) Size() (n int) { if m.LaunchID != 0 { n += 1 + sovMonitoringHistory(uint64(m.LaunchID)) } - l = m.LatestMonitoringPacket.Size() - n += 1 + l + sovMonitoringHistory(uint64(l)) + l = len(m.LatestMonitoringPacket) + if l > 0 { + n += 1 + l + sovMonitoringHistory(uint64(l)) + } return n } @@ -224,7 +219,7 @@ func (m *MonitoringHistory) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field LatestMonitoringPacket", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowMonitoringHistory @@ -234,24 +229,23 @@ func (m *MonitoringHistory) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthMonitoringHistory } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthMonitoringHistory } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.LatestMonitoringPacket.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.LatestMonitoringPacket = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/monitoringc/types/msg_create_client_test.go b/x/monitoringc/types/msg_create_client_test.go deleted file mode 100644 index 98db27a8..00000000 --- a/x/monitoringc/types/msg_create_client_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/monitoringc/types" -) - -func TestMsgCreateClient_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg types.MsgCreateClient - err error - }{ - { - name: "should validate valid message", - msg: types.MsgCreateClient{ - Creator: sample.Address(r), - LaunchID: 0, - ConsensusState: sample.ConsensusState(0), - ValidatorSet: sample.ValidatorSet(0), - UnbondingPeriod: spntypes.DefaultUnbondingPeriod, - RevisionHeight: spntypes.DefaultRevisionHeight, - }, - }, - { - name: "should prevent invalid address", - msg: types.MsgCreateClient{ - Creator: "invalid_address", - LaunchID: 0, - ConsensusState: sample.ConsensusState(0), - ValidatorSet: sample.ValidatorSet(0), - UnbondingPeriod: spntypes.DefaultUnbondingPeriod, - RevisionHeight: spntypes.DefaultRevisionHeight, - }, - err: types.ErrInvalidClientCreatorAddress, - }, - { - name: "should prevent invalid consensus state", - msg: types.MsgCreateClient{ - Creator: sample.Address(r), - LaunchID: 0, - ConsensusState: spntypes.NewConsensusState( - "2022-01-12T07:56:35.394367Z", - "foo", - "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", - ), - ValidatorSet: sample.ValidatorSet(1), - UnbondingPeriod: spntypes.DefaultUnbondingPeriod, - RevisionHeight: spntypes.DefaultRevisionHeight, - }, - err: types.ErrInvalidConsensusState, - }, - { - name: "should prevent invalid validator set", - msg: types.MsgCreateClient{ - Creator: sample.Address(r), - LaunchID: 0, - ConsensusState: sample.ConsensusState(0), - ValidatorSet: spntypes.NewValidatorSet( - spntypes.NewValidator( - "foo", - 0, - 100, - ), - ), - UnbondingPeriod: spntypes.DefaultUnbondingPeriod, - RevisionHeight: spntypes.DefaultRevisionHeight, - }, - err: types.ErrInvalidValidatorSet, - }, - { - name: "should prevent validator set not matching consensus state", - msg: types.MsgCreateClient{ - Creator: sample.Address(r), - LaunchID: 0, - ConsensusState: sample.ConsensusState(0), - ValidatorSet: sample.ValidatorSet(1), - UnbondingPeriod: spntypes.DefaultUnbondingPeriod, - RevisionHeight: spntypes.DefaultRevisionHeight, - }, - err: types.ErrInvalidValidatorSetHash, - }, - { - name: "should prevent unbonding period lower than minimal", - msg: types.MsgCreateClient{ - Creator: sample.Address(r), - LaunchID: 0, - ConsensusState: sample.ConsensusState(0), - ValidatorSet: sample.ValidatorSet(0), - UnbondingPeriod: spntypes.MinimalUnbondingPeriod - 1, - RevisionHeight: spntypes.DefaultRevisionHeight, - }, - err: types.ErrInvalidUnbondingPeriod, - }, - { - name: "should prevent zero revision height", - msg: types.MsgCreateClient{ - Creator: sample.Address(r), - LaunchID: 0, - ConsensusState: sample.ConsensusState(0), - ValidatorSet: sample.ValidatorSet(0), - UnbondingPeriod: spntypes.MinimalUnbondingPeriod, - RevisionHeight: 0, - }, - err: types.ErrInvalidRevisionHeight, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/monitoringc/types/msg_create_client.go b/x/monitoringc/types/msgs.go similarity index 64% rename from x/monitoringc/types/msg_create_client.go rename to x/monitoringc/types/msgs.go index 778aa82b..c0b45ab2 100644 --- a/x/monitoringc/types/msg_create_client.go +++ b/x/monitoringc/types/msgs.go @@ -4,18 +4,14 @@ import ( sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - spntypes "github.com/tendermint/spn/pkg/types" + networktypes "github.com/ignite/network/pkg/types" ) -const TypeMsgCreateClient = "create_client" - -var _ sdk.Msg = &MsgCreateClient{} - func NewMsgCreateClient( creator string, launchID uint64, - consensusState spntypes.ConsensusState, - validatorSet spntypes.ValidatorSet, + consensusState networktypes.ConsensusState, + validatorSet networktypes.ValidatorSet, unbondingPeriod int64, revisionHeight uint64, ) *MsgCreateClient { @@ -29,33 +25,11 @@ func NewMsgCreateClient( } } -func (msg *MsgCreateClient) Route() string { - return RouterKey -} - -func (msg *MsgCreateClient) Type() string { - return TypeMsgCreateClient -} - -func (msg *MsgCreateClient) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgCreateClient) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) +func (msg MsgCreateClient) Type() string { + return sdk.MsgTypeURL(&MsgCreateClient{}) } func (msg *MsgCreateClient) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - return sdkerrors.Wrap(ErrInvalidClientCreatorAddress, err.Error()) - } - // validate consensus state tmConsensusState, err := msg.ConsensusState.ToTendermintConsensusState() if err != nil { @@ -75,13 +49,13 @@ func (msg *MsgCreateClient) ValidateBasic() error { } // check validator set hash matches consensus state - if !spntypes.CheckValidatorSetHash(tmValidatorSet, tmConsensusState) { + if !networktypes.CheckValidatorSetHash(tmValidatorSet, tmConsensusState) { return sdkerrors.Wrapf(ErrInvalidValidatorSetHash, "validator set hash doesn't match the consensus state") } // unbonding period must greater than 1 because trusting period for the IBC client is unbonding period - 1 // and trusting period can't be 0 - if msg.UnbondingPeriod < spntypes.MinimalUnbondingPeriod { + if msg.UnbondingPeriod < networktypes.MinimalUnbondingPeriod { return sdkerrors.Wrapf(ErrInvalidUnbondingPeriod, "unbonding period must be greater than 1") } diff --git a/x/monitoringc/types/packet.pb.go b/x/monitoringc/types/packet.pb.go new file mode 100644 index 00000000..abf10dd6 --- /dev/null +++ b/x/monitoringc/types/packet.pb.go @@ -0,0 +1,502 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: network/monitoringc/v1/packet.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type MonitoringcPacketData struct { + // Types that are valid to be assigned to Packet: + // *MonitoringcPacketData_NoData + Packet isMonitoringcPacketData_Packet `protobuf_oneof:"packet"` +} + +func (m *MonitoringcPacketData) Reset() { *m = MonitoringcPacketData{} } +func (m *MonitoringcPacketData) String() string { return proto.CompactTextString(m) } +func (*MonitoringcPacketData) ProtoMessage() {} +func (*MonitoringcPacketData) Descriptor() ([]byte, []int) { + return fileDescriptor_6470c5bfb245f643, []int{0} +} +func (m *MonitoringcPacketData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MonitoringcPacketData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MonitoringcPacketData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MonitoringcPacketData) XXX_Merge(src proto.Message) { + xxx_messageInfo_MonitoringcPacketData.Merge(m, src) +} +func (m *MonitoringcPacketData) XXX_Size() int { + return m.Size() +} +func (m *MonitoringcPacketData) XXX_DiscardUnknown() { + xxx_messageInfo_MonitoringcPacketData.DiscardUnknown(m) +} + +var xxx_messageInfo_MonitoringcPacketData proto.InternalMessageInfo + +type isMonitoringcPacketData_Packet interface { + isMonitoringcPacketData_Packet() + MarshalTo([]byte) (int, error) + Size() int +} + +type MonitoringcPacketData_NoData struct { + NoData *NoData `protobuf:"bytes,1,opt,name=noData,proto3,oneof" json:"noData,omitempty"` +} + +func (*MonitoringcPacketData_NoData) isMonitoringcPacketData_Packet() {} + +func (m *MonitoringcPacketData) GetPacket() isMonitoringcPacketData_Packet { + if m != nil { + return m.Packet + } + return nil +} + +func (m *MonitoringcPacketData) GetNoData() *NoData { + if x, ok := m.GetPacket().(*MonitoringcPacketData_NoData); ok { + return x.NoData + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*MonitoringcPacketData) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*MonitoringcPacketData_NoData)(nil), + } +} + +type NoData struct { +} + +func (m *NoData) Reset() { *m = NoData{} } +func (m *NoData) String() string { return proto.CompactTextString(m) } +func (*NoData) ProtoMessage() {} +func (*NoData) Descriptor() ([]byte, []int) { + return fileDescriptor_6470c5bfb245f643, []int{1} +} +func (m *NoData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NoData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_NoData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *NoData) XXX_Merge(src proto.Message) { + xxx_messageInfo_NoData.Merge(m, src) +} +func (m *NoData) XXX_Size() int { + return m.Size() +} +func (m *NoData) XXX_DiscardUnknown() { + xxx_messageInfo_NoData.DiscardUnknown(m) +} + +var xxx_messageInfo_NoData proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MonitoringcPacketData)(nil), "network.monitoringc.v1.MonitoringcPacketData") + proto.RegisterType((*NoData)(nil), "network.monitoringc.v1.NoData") +} + +func init() { + proto.RegisterFile("network/monitoringc/v1/packet.proto", fileDescriptor_6470c5bfb245f643) +} + +var fileDescriptor_6470c5bfb245f643 = []byte{ + // 189 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xce, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, + 0x2f, 0x33, 0xd4, 0x2f, 0x48, 0x4c, 0xce, 0x4e, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x12, 0x83, 0x2a, 0xd2, 0x43, 0x52, 0xa4, 0x57, 0x66, 0xa8, 0x14, 0xcd, 0x25, 0xea, 0x8b, 0x10, + 0x09, 0x00, 0x6b, 0x71, 0x49, 0x2c, 0x49, 0x14, 0xb2, 0xe0, 0x62, 0xcb, 0xcb, 0x07, 0xb1, 0x24, + 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0xe4, 0xf4, 0xb0, 0x9b, 0xa0, 0xe7, 0x07, 0x56, 0xe5, 0xc1, + 0x10, 0x04, 0x55, 0xef, 0xc4, 0xc1, 0xc5, 0x06, 0xb1, 0x5a, 0x89, 0x83, 0x8b, 0x0d, 0x22, 0xeb, + 0xe4, 0x7e, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, + 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0xba, 0xe9, 0x99, 0x25, + 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x99, 0xe9, 0x79, 0x99, 0x25, 0xa9, 0xfa, 0x30, + 0xff, 0x54, 0xa0, 0xf8, 0xa8, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0xec, 0x1d, 0x63, 0x40, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x3a, 0x50, 0x64, 0xf5, 0x00, 0x00, 0x00, +} + +func (m *MonitoringcPacketData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MonitoringcPacketData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MonitoringcPacketData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Packet != nil { + { + size := m.Packet.Size() + i -= size + if _, err := m.Packet.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + return len(dAtA) - i, nil +} + +func (m *MonitoringcPacketData_NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MonitoringcPacketData_NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.NoData != nil { + { + size, err := m.NoData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPacket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} +func (m *NoData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintPacket(dAtA []byte, offset int, v uint64) int { + offset -= sovPacket(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MonitoringcPacketData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Packet != nil { + n += m.Packet.Size() + } + return n +} + +func (m *MonitoringcPacketData_NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NoData != nil { + l = m.NoData.Size() + n += 1 + l + sovPacket(uint64(l)) + } + return n +} +func (m *NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovPacket(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozPacket(x uint64) (n int) { + return sovPacket(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MonitoringcPacketData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MonitoringcPacketData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MonitoringcPacketData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NoData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPacket + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPacket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &NoData{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Packet = &MonitoringcPacketData_NoData{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipPacket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPacket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NoData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NoData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NoData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipPacket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPacket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipPacket(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthPacket + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupPacket + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthPacket + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthPacket = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowPacket = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupPacket = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/monitoringc/types/params.go b/x/monitoringc/types/params.go index 357196ad..c81359ea 100644 --- a/x/monitoringc/types/params.go +++ b/x/monitoringc/types/params.go @@ -1,39 +1,16 @@ package types -import ( - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "gopkg.in/yaml.v2" -) - -var _ paramtypes.ParamSet = (*Params)(nil) - -// ParamKeyTable the param key table for launch module -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - -// NewParams creates a new Params instance +// NewParams creates a new Params instance. func NewParams() Params { return Params{} } -// DefaultParams returns a default set of parameters +// DefaultParams returns a default set of parameters. func DefaultParams() Params { return NewParams() } -// ParamSetPairs get the params.ParamSet -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{} -} - -// Validate validates the set of params +// Validate validates the set of params. func (p Params) Validate() error { return nil } - -// String implements the Stringer interface. -func (p Params) String() string { - out, _ := yaml.Marshal(p) - return string(out) -} diff --git a/x/monitoringc/types/params.pb.go b/x/monitoringc/types/params.pb.go index 9f98d641..8ac1a0dc 100644 --- a/x/monitoringc/types/params.pb.go +++ b/x/monitoringc/types/params.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/params.proto +// source: network/monitoringc/v1/params.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -27,10 +28,11 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type Params struct { } -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_55151a425c39e3af, []int{0} + return fileDescriptor_bdb7766fb93b1c00, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -60,25 +62,50 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo func init() { - proto.RegisterType((*Params)(nil), "spn.monitoringc.Params") + proto.RegisterType((*Params)(nil), "network.monitoringc.v1.Params") } -func init() { proto.RegisterFile("spn/monitoringc/params.proto", fileDescriptor_55151a425c39e3af) } +func init() { + proto.RegisterFile("network/monitoringc/v1/params.proto", fileDescriptor_bdb7766fb93b1c00) +} -var fileDescriptor_55151a425c39e3af = []byte{ - // 155 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x29, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, 0x2f, 0x48, 0x2c, 0x4a, - 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2f, 0x2e, 0xc8, 0xd3, 0x43, 0x92, - 0x95, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xe9, 0x83, 0x58, 0x10, 0x65, 0x4a, 0x7c, 0x5c, - 0x6c, 0x01, 0x60, 0x6d, 0x56, 0x2c, 0x33, 0x16, 0xc8, 0x33, 0x38, 0xb9, 0x9f, 0x78, 0x24, 0xc7, - 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, - 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x6e, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, - 0x7e, 0xae, 0x7e, 0x49, 0x6a, 0x5e, 0x4a, 0x6a, 0x51, 0x6e, 0x66, 0x5e, 0x89, 0x3e, 0xc8, 0x11, - 0x15, 0x28, 0xce, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x9b, 0x6f, 0x0c, 0x08, 0x00, - 0x00, 0xff, 0xff, 0xfa, 0x4b, 0xd7, 0x30, 0xa6, 0x00, 0x00, 0x00, +var fileDescriptor_bdb7766fb93b1c00 = []byte{ + // 181 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xce, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, + 0x2f, 0x33, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x12, 0x83, 0x2a, 0xd2, 0x43, 0x52, 0xa4, 0x57, 0x66, 0x28, 0x25, 0x98, 0x98, 0x9b, 0x99, 0x97, + 0xaf, 0x0f, 0x26, 0x21, 0x4a, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x4c, 0x7d, 0x10, 0x0b, + 0x22, 0xaa, 0xa4, 0xcf, 0xc5, 0x16, 0x00, 0x36, 0xd0, 0x4a, 0xf5, 0xc5, 0x02, 0x79, 0xc6, 0xae, + 0xe7, 0x1b, 0xb4, 0x64, 0x60, 0x16, 0x57, 0xa0, 0x58, 0x0d, 0x51, 0xe6, 0xe4, 0x7e, 0xe2, 0x91, + 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, + 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0xba, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, + 0xc9, 0xf9, 0xb9, 0xfa, 0x99, 0xe9, 0x79, 0x99, 0x25, 0xa9, 0xfa, 0xd8, 0x4d, 0x2a, 0xa9, 0x2c, + 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x3b, 0xc0, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x3d, 0x76, + 0x09, 0xe8, 0x00, 0x00, 0x00, } +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + return true +} func (m *Params) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) diff --git a/x/monitoringc/types/provider_client_id.pb.go b/x/monitoringc/types/provider_client_id.pb.go index c6868907..7855b519 100644 --- a/x/monitoringc/types/provider_client_id.pb.go +++ b/x/monitoringc/types/provider_client_id.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/provider_client_id.proto +// source: network/monitoringc/v1/provider_client_id.proto package types @@ -31,7 +31,7 @@ func (m *ProviderClientID) Reset() { *m = ProviderClientID{} } func (m *ProviderClientID) String() string { return proto.CompactTextString(m) } func (*ProviderClientID) ProtoMessage() {} func (*ProviderClientID) Descriptor() ([]byte, []int) { - return fileDescriptor_6c123fa021955fe4, []int{0} + return fileDescriptor_20cbe9ae26cd49bf, []int{0} } func (m *ProviderClientID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -75,27 +75,27 @@ func (m *ProviderClientID) GetClientID() string { } func init() { - proto.RegisterType((*ProviderClientID)(nil), "spn.monitoringc.ProviderClientID") + proto.RegisterType((*ProviderClientID)(nil), "network.monitoringc.v1.ProviderClientID") } func init() { - proto.RegisterFile("spn/monitoringc/provider_client_id.proto", fileDescriptor_6c123fa021955fe4) + proto.RegisterFile("network/monitoringc/v1/provider_client_id.proto", fileDescriptor_20cbe9ae26cd49bf) } -var fileDescriptor_6c123fa021955fe4 = []byte{ - // 188 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x28, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, 0x2f, 0x28, 0xca, 0x2f, - 0xcb, 0x4c, 0x49, 0x2d, 0x8a, 0x4f, 0xce, 0xc9, 0x4c, 0xcd, 0x2b, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2f, 0x2e, 0xc8, 0xd3, 0x43, 0x52, 0xa9, 0xe4, 0xc5, 0x25, - 0x10, 0x00, 0x55, 0xec, 0x0c, 0x56, 0xeb, 0xe9, 0x22, 0x24, 0xc5, 0xc5, 0x91, 0x93, 0x58, 0x9a, - 0x97, 0x9c, 0xe1, 0xe9, 0x22, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x12, 0x04, 0xe7, 0x83, 0xe4, 0x92, - 0xa1, 0xea, 0x24, 0x98, 0x14, 0x18, 0x35, 0x38, 0x83, 0xe0, 0x7c, 0x27, 0xf7, 0x13, 0x8f, 0xe4, - 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, - 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, - 0xce, 0xcf, 0xd5, 0x2f, 0x49, 0xcd, 0x4b, 0x49, 0x2d, 0xca, 0xcd, 0xcc, 0x2b, 0xd1, 0x07, 0x39, - 0xbb, 0x02, 0xc5, 0xe1, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0xc7, 0x1a, 0x03, 0x02, - 0x00, 0x00, 0xff, 0xff, 0xe5, 0xf1, 0x3b, 0x11, 0xd8, 0x00, 0x00, 0x00, +var fileDescriptor_20cbe9ae26cd49bf = []byte{ + // 192 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, + 0x2f, 0x33, 0xd4, 0x2f, 0x28, 0xca, 0x2f, 0xcb, 0x4c, 0x49, 0x2d, 0x8a, 0x4f, 0xce, 0xc9, 0x4c, + 0xcd, 0x2b, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x83, 0x6a, 0xd0, + 0x43, 0xd2, 0xa0, 0x57, 0x66, 0xa8, 0xe4, 0xc5, 0x25, 0x10, 0x00, 0xd5, 0xe3, 0x0c, 0xd6, 0xe2, + 0xe9, 0x22, 0x24, 0xc5, 0xc5, 0x91, 0x93, 0x58, 0x9a, 0x97, 0x9c, 0xe1, 0xe9, 0x22, 0xc1, 0xa8, + 0xc0, 0xa8, 0xc1, 0x12, 0x04, 0xe7, 0x83, 0xe4, 0x92, 0xa1, 0xea, 0x24, 0x98, 0x14, 0x18, 0x35, + 0x38, 0x83, 0xe0, 0x7c, 0x27, 0xf7, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, + 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, + 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x4c, 0xcf, 0xcb, + 0x2c, 0x49, 0x85, 0x7b, 0xa0, 0x02, 0xc5, 0x0b, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, + 0x37, 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xda, 0xa9, 0x23, 0x65, 0xe6, 0x00, 0x00, 0x00, } func (m *ProviderClientID) Marshal() (dAtA []byte, err error) { diff --git a/x/monitoringc/types/query.pb.go b/x/monitoringc/types/query.pb.go index 08517a0d..caf5548b 100644 --- a/x/monitoringc/types/query.pb.go +++ b/x/monitoringc/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/query.proto +// source: network/monitoringc/v1/query.proto package types @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -30,22 +31,22 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type QueryGetVerifiedClientIdsRequest struct { - LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { } -func (m *QueryGetVerifiedClientIdsRequest) Reset() { *m = QueryGetVerifiedClientIdsRequest{} } -func (m *QueryGetVerifiedClientIdsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetVerifiedClientIdsRequest) ProtoMessage() {} -func (*QueryGetVerifiedClientIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{0} +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{0} } -func (m *QueryGetVerifiedClientIdsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetVerifiedClientIdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetVerifiedClientIdsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -55,41 +56,36 @@ func (m *QueryGetVerifiedClientIdsRequest) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *QueryGetVerifiedClientIdsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetVerifiedClientIdsRequest.Merge(m, src) +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) } -func (m *QueryGetVerifiedClientIdsRequest) XXX_Size() int { +func (m *QueryParamsRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetVerifiedClientIdsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetVerifiedClientIdsRequest.DiscardUnknown(m) +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetVerifiedClientIdsRequest proto.InternalMessageInfo - -func (m *QueryGetVerifiedClientIdsRequest) GetLaunchID() uint64 { - if m != nil { - return m.LaunchID - } - return 0 -} +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo -type QueryGetVerifiedClientIdsResponse struct { - ClientIds []string `protobuf:"bytes,1,rep,name=clientIds,proto3" json:"clientIds,omitempty"` +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` } -func (m *QueryGetVerifiedClientIdsResponse) Reset() { *m = QueryGetVerifiedClientIdsResponse{} } -func (m *QueryGetVerifiedClientIdsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetVerifiedClientIdsResponse) ProtoMessage() {} -func (*QueryGetVerifiedClientIdsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{1} +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{1} } -func (m *QueryGetVerifiedClientIdsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetVerifiedClientIdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetVerifiedClientIdsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -99,41 +95,41 @@ func (m *QueryGetVerifiedClientIdsResponse) XXX_Marshal(b []byte, deterministic return b[:n], nil } } -func (m *QueryGetVerifiedClientIdsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetVerifiedClientIdsResponse.Merge(m, src) +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) } -func (m *QueryGetVerifiedClientIdsResponse) XXX_Size() int { +func (m *QueryParamsResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetVerifiedClientIdsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetVerifiedClientIdsResponse.DiscardUnknown(m) +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetVerifiedClientIdsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo -func (m *QueryGetVerifiedClientIdsResponse) GetClientIds() []string { +func (m *QueryParamsResponse) GetParams() Params { if m != nil { - return m.ClientIds + return m.Params } - return nil + return Params{} } -type QueryGetProviderClientIDRequest struct { - LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` +type QueryGetLaunchIDFromChannelIDRequest struct { + ChannelID string `protobuf:"bytes,1,opt,name=channelID,proto3" json:"channelID,omitempty"` } -func (m *QueryGetProviderClientIDRequest) Reset() { *m = QueryGetProviderClientIDRequest{} } -func (m *QueryGetProviderClientIDRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetProviderClientIDRequest) ProtoMessage() {} -func (*QueryGetProviderClientIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{2} +func (m *QueryGetLaunchIDFromChannelIDRequest) Reset() { *m = QueryGetLaunchIDFromChannelIDRequest{} } +func (m *QueryGetLaunchIDFromChannelIDRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetLaunchIDFromChannelIDRequest) ProtoMessage() {} +func (*QueryGetLaunchIDFromChannelIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{2} } -func (m *QueryGetProviderClientIDRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetProviderClientIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetProviderClientIDRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetLaunchIDFromChannelIDRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -143,41 +139,41 @@ func (m *QueryGetProviderClientIDRequest) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (m *QueryGetProviderClientIDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetProviderClientIDRequest.Merge(m, src) +func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetLaunchIDFromChannelIDRequest.Merge(m, src) } -func (m *QueryGetProviderClientIDRequest) XXX_Size() int { +func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetProviderClientIDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetProviderClientIDRequest.DiscardUnknown(m) +func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetLaunchIDFromChannelIDRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetProviderClientIDRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetLaunchIDFromChannelIDRequest proto.InternalMessageInfo -func (m *QueryGetProviderClientIDRequest) GetLaunchID() uint64 { +func (m *QueryGetLaunchIDFromChannelIDRequest) GetChannelID() string { if m != nil { - return m.LaunchID + return m.ChannelID } - return 0 + return "" } -type QueryGetProviderClientIDResponse struct { - ProviderClientID ProviderClientID `protobuf:"bytes,1,opt,name=providerClientID,proto3" json:"providerClientID"` +type QueryGetLaunchIDFromChannelIDResponse struct { + LaunchIDFromChannelID LaunchIDFromChannelID `protobuf:"bytes,1,opt,name=launchIDFromChannelID,proto3" json:"launchIDFromChannelID"` } -func (m *QueryGetProviderClientIDResponse) Reset() { *m = QueryGetProviderClientIDResponse{} } -func (m *QueryGetProviderClientIDResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetProviderClientIDResponse) ProtoMessage() {} -func (*QueryGetProviderClientIDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{3} +func (m *QueryGetLaunchIDFromChannelIDResponse) Reset() { *m = QueryGetLaunchIDFromChannelIDResponse{} } +func (m *QueryGetLaunchIDFromChannelIDResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetLaunchIDFromChannelIDResponse) ProtoMessage() {} +func (*QueryGetLaunchIDFromChannelIDResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{3} } -func (m *QueryGetProviderClientIDResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetProviderClientIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetProviderClientIDResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetLaunchIDFromChannelIDResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -187,41 +183,41 @@ func (m *QueryGetProviderClientIDResponse) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *QueryGetProviderClientIDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetProviderClientIDResponse.Merge(m, src) +func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetLaunchIDFromChannelIDResponse.Merge(m, src) } -func (m *QueryGetProviderClientIDResponse) XXX_Size() int { +func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetProviderClientIDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetProviderClientIDResponse.DiscardUnknown(m) +func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetLaunchIDFromChannelIDResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetProviderClientIDResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetLaunchIDFromChannelIDResponse proto.InternalMessageInfo -func (m *QueryGetProviderClientIDResponse) GetProviderClientID() ProviderClientID { +func (m *QueryGetLaunchIDFromChannelIDResponse) GetLaunchIDFromChannelID() LaunchIDFromChannelID { if m != nil { - return m.ProviderClientID + return m.LaunchIDFromChannelID } - return ProviderClientID{} + return LaunchIDFromChannelID{} } -type QueryAllProviderClientIDRequest struct { +type QueryAllLaunchIDFromChannelIDRequest struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllProviderClientIDRequest) Reset() { *m = QueryAllProviderClientIDRequest{} } -func (m *QueryAllProviderClientIDRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllProviderClientIDRequest) ProtoMessage() {} -func (*QueryAllProviderClientIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{4} +func (m *QueryAllLaunchIDFromChannelIDRequest) Reset() { *m = QueryAllLaunchIDFromChannelIDRequest{} } +func (m *QueryAllLaunchIDFromChannelIDRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllLaunchIDFromChannelIDRequest) ProtoMessage() {} +func (*QueryAllLaunchIDFromChannelIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{4} } -func (m *QueryAllProviderClientIDRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllProviderClientIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllProviderClientIDRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllLaunchIDFromChannelIDRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -231,42 +227,42 @@ func (m *QueryAllProviderClientIDRequest) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (m *QueryAllProviderClientIDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllProviderClientIDRequest.Merge(m, src) +func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllLaunchIDFromChannelIDRequest.Merge(m, src) } -func (m *QueryAllProviderClientIDRequest) XXX_Size() int { +func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllProviderClientIDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllProviderClientIDRequest.DiscardUnknown(m) +func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllLaunchIDFromChannelIDRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllProviderClientIDRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllLaunchIDFromChannelIDRequest proto.InternalMessageInfo -func (m *QueryAllProviderClientIDRequest) GetPagination() *query.PageRequest { +func (m *QueryAllLaunchIDFromChannelIDRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllProviderClientIDResponse struct { - ProviderClientID []ProviderClientID `protobuf:"bytes,1,rep,name=providerClientID,proto3" json:"providerClientID"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryAllLaunchIDFromChannelIDResponse struct { + LaunchIDFromChannelID []LaunchIDFromChannelID `protobuf:"bytes,1,rep,name=launchIDFromChannelID,proto3" json:"launchIDFromChannelID"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllProviderClientIDResponse) Reset() { *m = QueryAllProviderClientIDResponse{} } -func (m *QueryAllProviderClientIDResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllProviderClientIDResponse) ProtoMessage() {} -func (*QueryAllProviderClientIDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{5} +func (m *QueryAllLaunchIDFromChannelIDResponse) Reset() { *m = QueryAllLaunchIDFromChannelIDResponse{} } +func (m *QueryAllLaunchIDFromChannelIDResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllLaunchIDFromChannelIDResponse) ProtoMessage() {} +func (*QueryAllLaunchIDFromChannelIDResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{5} } -func (m *QueryAllProviderClientIDResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllProviderClientIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllProviderClientIDResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllLaunchIDFromChannelIDResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -276,48 +272,48 @@ func (m *QueryAllProviderClientIDResponse) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *QueryAllProviderClientIDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllProviderClientIDResponse.Merge(m, src) +func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllLaunchIDFromChannelIDResponse.Merge(m, src) } -func (m *QueryAllProviderClientIDResponse) XXX_Size() int { +func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllProviderClientIDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllProviderClientIDResponse.DiscardUnknown(m) +func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllLaunchIDFromChannelIDResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllProviderClientIDResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllLaunchIDFromChannelIDResponse proto.InternalMessageInfo -func (m *QueryAllProviderClientIDResponse) GetProviderClientID() []ProviderClientID { +func (m *QueryAllLaunchIDFromChannelIDResponse) GetLaunchIDFromChannelID() []LaunchIDFromChannelID { if m != nil { - return m.ProviderClientID + return m.LaunchIDFromChannelID } return nil } -func (m *QueryAllProviderClientIDResponse) GetPagination() *query.PageResponse { +func (m *QueryAllLaunchIDFromChannelIDResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } return nil } -type QueryGetLaunchIDFromChannelIDRequest struct { - ChannelID string `protobuf:"bytes,1,opt,name=channelID,proto3" json:"channelID,omitempty"` +type QueryGetMonitoringHistoryRequest struct { + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` } -func (m *QueryGetLaunchIDFromChannelIDRequest) Reset() { *m = QueryGetLaunchIDFromChannelIDRequest{} } -func (m *QueryGetLaunchIDFromChannelIDRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetLaunchIDFromChannelIDRequest) ProtoMessage() {} -func (*QueryGetLaunchIDFromChannelIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{6} +func (m *QueryGetMonitoringHistoryRequest) Reset() { *m = QueryGetMonitoringHistoryRequest{} } +func (m *QueryGetMonitoringHistoryRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetMonitoringHistoryRequest) ProtoMessage() {} +func (*QueryGetMonitoringHistoryRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{6} } -func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetMonitoringHistoryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetMonitoringHistoryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetLaunchIDFromChannelIDRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetMonitoringHistoryRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -327,41 +323,41 @@ func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Marshal(b []byte, determinist return b[:n], nil } } -func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetLaunchIDFromChannelIDRequest.Merge(m, src) +func (m *QueryGetMonitoringHistoryRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetMonitoringHistoryRequest.Merge(m, src) } -func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_Size() int { +func (m *QueryGetMonitoringHistoryRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetLaunchIDFromChannelIDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetLaunchIDFromChannelIDRequest.DiscardUnknown(m) +func (m *QueryGetMonitoringHistoryRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetMonitoringHistoryRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetLaunchIDFromChannelIDRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetMonitoringHistoryRequest proto.InternalMessageInfo -func (m *QueryGetLaunchIDFromChannelIDRequest) GetChannelID() string { +func (m *QueryGetMonitoringHistoryRequest) GetLaunchID() uint64 { if m != nil { - return m.ChannelID + return m.LaunchID } - return "" + return 0 } -type QueryGetLaunchIDFromChannelIDResponse struct { - LaunchIDFromChannelID LaunchIDFromChannelID `protobuf:"bytes,1,opt,name=launchIDFromChannelID,proto3" json:"launchIDFromChannelID"` +type QueryGetMonitoringHistoryResponse struct { + MonitoringHistory MonitoringHistory `protobuf:"bytes,1,opt,name=monitoringHistory,proto3" json:"monitoringHistory"` } -func (m *QueryGetLaunchIDFromChannelIDResponse) Reset() { *m = QueryGetLaunchIDFromChannelIDResponse{} } -func (m *QueryGetLaunchIDFromChannelIDResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetLaunchIDFromChannelIDResponse) ProtoMessage() {} -func (*QueryGetLaunchIDFromChannelIDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{7} +func (m *QueryGetMonitoringHistoryResponse) Reset() { *m = QueryGetMonitoringHistoryResponse{} } +func (m *QueryGetMonitoringHistoryResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetMonitoringHistoryResponse) ProtoMessage() {} +func (*QueryGetMonitoringHistoryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{7} } -func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetMonitoringHistoryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetMonitoringHistoryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetLaunchIDFromChannelIDResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetMonitoringHistoryResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -371,41 +367,41 @@ func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Marshal(b []byte, determinis return b[:n], nil } } -func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetLaunchIDFromChannelIDResponse.Merge(m, src) +func (m *QueryGetMonitoringHistoryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetMonitoringHistoryResponse.Merge(m, src) } -func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_Size() int { +func (m *QueryGetMonitoringHistoryResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetLaunchIDFromChannelIDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetLaunchIDFromChannelIDResponse.DiscardUnknown(m) +func (m *QueryGetMonitoringHistoryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetMonitoringHistoryResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetLaunchIDFromChannelIDResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetMonitoringHistoryResponse proto.InternalMessageInfo -func (m *QueryGetLaunchIDFromChannelIDResponse) GetLaunchIDFromChannelID() LaunchIDFromChannelID { +func (m *QueryGetMonitoringHistoryResponse) GetMonitoringHistory() MonitoringHistory { if m != nil { - return m.LaunchIDFromChannelID + return m.MonitoringHistory } - return LaunchIDFromChannelID{} + return MonitoringHistory{} } -type QueryAllLaunchIDFromChannelIDRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryGetVerifiedClientIDRequest struct { + LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` } -func (m *QueryAllLaunchIDFromChannelIDRequest) Reset() { *m = QueryAllLaunchIDFromChannelIDRequest{} } -func (m *QueryAllLaunchIDFromChannelIDRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllLaunchIDFromChannelIDRequest) ProtoMessage() {} -func (*QueryAllLaunchIDFromChannelIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{8} +func (m *QueryGetVerifiedClientIDRequest) Reset() { *m = QueryGetVerifiedClientIDRequest{} } +func (m *QueryGetVerifiedClientIDRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetVerifiedClientIDRequest) ProtoMessage() {} +func (*QueryGetVerifiedClientIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{8} } -func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetVerifiedClientIDRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetVerifiedClientIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllLaunchIDFromChannelIDRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetVerifiedClientIDRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -415,42 +411,41 @@ func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Marshal(b []byte, determinist return b[:n], nil } } -func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllLaunchIDFromChannelIDRequest.Merge(m, src) +func (m *QueryGetVerifiedClientIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetVerifiedClientIDRequest.Merge(m, src) } -func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_Size() int { +func (m *QueryGetVerifiedClientIDRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllLaunchIDFromChannelIDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllLaunchIDFromChannelIDRequest.DiscardUnknown(m) +func (m *QueryGetVerifiedClientIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetVerifiedClientIDRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllLaunchIDFromChannelIDRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetVerifiedClientIDRequest proto.InternalMessageInfo -func (m *QueryAllLaunchIDFromChannelIDRequest) GetPagination() *query.PageRequest { +func (m *QueryGetVerifiedClientIDRequest) GetLaunchID() uint64 { if m != nil { - return m.Pagination + return m.LaunchID } - return nil + return 0 } -type QueryAllLaunchIDFromChannelIDResponse struct { - LaunchIDFromChannelID []LaunchIDFromChannelID `protobuf:"bytes,1,rep,name=launchIDFromChannelID,proto3" json:"launchIDFromChannelID"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryGetVerifiedClientIDResponse struct { + VerifiedClientID VerifiedClientID `protobuf:"bytes,1,opt,name=verifiedClientID,proto3" json:"verifiedClientID"` } -func (m *QueryAllLaunchIDFromChannelIDResponse) Reset() { *m = QueryAllLaunchIDFromChannelIDResponse{} } -func (m *QueryAllLaunchIDFromChannelIDResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllLaunchIDFromChannelIDResponse) ProtoMessage() {} -func (*QueryAllLaunchIDFromChannelIDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{9} +func (m *QueryGetVerifiedClientIDResponse) Reset() { *m = QueryGetVerifiedClientIDResponse{} } +func (m *QueryGetVerifiedClientIDResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetVerifiedClientIDResponse) ProtoMessage() {} +func (*QueryGetVerifiedClientIDResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{9} } -func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetVerifiedClientIDResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetVerifiedClientIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllLaunchIDFromChannelIDResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetVerifiedClientIDResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -460,48 +455,41 @@ func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Marshal(b []byte, determinis return b[:n], nil } } -func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllLaunchIDFromChannelIDResponse.Merge(m, src) +func (m *QueryGetVerifiedClientIDResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetVerifiedClientIDResponse.Merge(m, src) } -func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_Size() int { +func (m *QueryGetVerifiedClientIDResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllLaunchIDFromChannelIDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllLaunchIDFromChannelIDResponse.DiscardUnknown(m) +func (m *QueryGetVerifiedClientIDResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetVerifiedClientIDResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllLaunchIDFromChannelIDResponse proto.InternalMessageInfo - -func (m *QueryAllLaunchIDFromChannelIDResponse) GetLaunchIDFromChannelID() []LaunchIDFromChannelID { - if m != nil { - return m.LaunchIDFromChannelID - } - return nil -} +var xxx_messageInfo_QueryGetVerifiedClientIDResponse proto.InternalMessageInfo -func (m *QueryAllLaunchIDFromChannelIDResponse) GetPagination() *query.PageResponse { +func (m *QueryGetVerifiedClientIDResponse) GetVerifiedClientID() VerifiedClientID { if m != nil { - return m.Pagination + return m.VerifiedClientID } - return nil + return VerifiedClientID{} } -type QueryGetMonitoringHistoryRequest struct { +type QueryGetProviderClientIDRequest struct { LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` } -func (m *QueryGetMonitoringHistoryRequest) Reset() { *m = QueryGetMonitoringHistoryRequest{} } -func (m *QueryGetMonitoringHistoryRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetMonitoringHistoryRequest) ProtoMessage() {} -func (*QueryGetMonitoringHistoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{10} +func (m *QueryGetProviderClientIDRequest) Reset() { *m = QueryGetProviderClientIDRequest{} } +func (m *QueryGetProviderClientIDRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetProviderClientIDRequest) ProtoMessage() {} +func (*QueryGetProviderClientIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{10} } -func (m *QueryGetMonitoringHistoryRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetProviderClientIDRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetMonitoringHistoryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetProviderClientIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetMonitoringHistoryRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetProviderClientIDRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -511,41 +499,41 @@ func (m *QueryGetMonitoringHistoryRequest) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *QueryGetMonitoringHistoryRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetMonitoringHistoryRequest.Merge(m, src) +func (m *QueryGetProviderClientIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetProviderClientIDRequest.Merge(m, src) } -func (m *QueryGetMonitoringHistoryRequest) XXX_Size() int { +func (m *QueryGetProviderClientIDRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetMonitoringHistoryRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetMonitoringHistoryRequest.DiscardUnknown(m) -} +func (m *QueryGetProviderClientIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetProviderClientIDRequest.DiscardUnknown(m) +} -var xxx_messageInfo_QueryGetMonitoringHistoryRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetProviderClientIDRequest proto.InternalMessageInfo -func (m *QueryGetMonitoringHistoryRequest) GetLaunchID() uint64 { +func (m *QueryGetProviderClientIDRequest) GetLaunchID() uint64 { if m != nil { return m.LaunchID } return 0 } -type QueryGetMonitoringHistoryResponse struct { - MonitoringHistory MonitoringHistory `protobuf:"bytes,1,opt,name=monitoringHistory,proto3" json:"monitoringHistory"` +type QueryGetProviderClientIDResponse struct { + ProviderClientID ProviderClientID `protobuf:"bytes,1,opt,name=providerClientID,proto3" json:"providerClientID"` } -func (m *QueryGetMonitoringHistoryResponse) Reset() { *m = QueryGetMonitoringHistoryResponse{} } -func (m *QueryGetMonitoringHistoryResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetMonitoringHistoryResponse) ProtoMessage() {} -func (*QueryGetMonitoringHistoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{11} +func (m *QueryGetProviderClientIDResponse) Reset() { *m = QueryGetProviderClientIDResponse{} } +func (m *QueryGetProviderClientIDResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetProviderClientIDResponse) ProtoMessage() {} +func (*QueryGetProviderClientIDResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{11} } -func (m *QueryGetMonitoringHistoryResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetProviderClientIDResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetMonitoringHistoryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetProviderClientIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetMonitoringHistoryResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetProviderClientIDResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -555,41 +543,41 @@ func (m *QueryGetMonitoringHistoryResponse) XXX_Marshal(b []byte, deterministic return b[:n], nil } } -func (m *QueryGetMonitoringHistoryResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetMonitoringHistoryResponse.Merge(m, src) +func (m *QueryGetProviderClientIDResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetProviderClientIDResponse.Merge(m, src) } -func (m *QueryGetMonitoringHistoryResponse) XXX_Size() int { +func (m *QueryGetProviderClientIDResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetMonitoringHistoryResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetMonitoringHistoryResponse.DiscardUnknown(m) +func (m *QueryGetProviderClientIDResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetProviderClientIDResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetMonitoringHistoryResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetProviderClientIDResponse proto.InternalMessageInfo -func (m *QueryGetMonitoringHistoryResponse) GetMonitoringHistory() MonitoringHistory { +func (m *QueryGetProviderClientIDResponse) GetProviderClientID() ProviderClientID { if m != nil { - return m.MonitoringHistory + return m.ProviderClientID } - return MonitoringHistory{} + return ProviderClientID{} } -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +type QueryAllProviderClientIDRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{12} +func (m *QueryAllProviderClientIDRequest) Reset() { *m = QueryAllProviderClientIDRequest{} } +func (m *QueryAllProviderClientIDRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllProviderClientIDRequest) ProtoMessage() {} +func (*QueryAllProviderClientIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{12} } -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllProviderClientIDRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllProviderClientIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllProviderClientIDRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -599,35 +587,42 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) +func (m *QueryAllProviderClientIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllProviderClientIDRequest.Merge(m, src) } -func (m *QueryParamsRequest) XXX_Size() int { +func (m *QueryAllProviderClientIDRequest) XXX_Size() int { return m.Size() } -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +func (m *QueryAllProviderClientIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllProviderClientIDRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllProviderClientIDRequest proto.InternalMessageInfo -// QueryParamsResponse is response type for the Query/Params RPC method. -type QueryParamsResponse struct { - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +func (m *QueryAllProviderClientIDRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil } -func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } -func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryParamsResponse) ProtoMessage() {} -func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8cc736e778fdcde2, []int{13} +type QueryAllProviderClientIDResponse struct { + ProviderClientID []ProviderClientID `protobuf:"bytes,1,rep,name=providerClientID,proto3" json:"providerClientID"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + +func (m *QueryAllProviderClientIDResponse) Reset() { *m = QueryAllProviderClientIDResponse{} } +func (m *QueryAllProviderClientIDResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllProviderClientIDResponse) ProtoMessage() {} +func (*QueryAllProviderClientIDResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_82561013049aca62, []int{13} +} +func (m *QueryAllProviderClientIDResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllProviderClientIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllProviderClientIDResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -637,99 +632,108 @@ func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsResponse.Merge(m, src) +func (m *QueryAllProviderClientIDResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllProviderClientIDResponse.Merge(m, src) } -func (m *QueryParamsResponse) XXX_Size() int { +func (m *QueryAllProviderClientIDResponse) XXX_Size() int { return m.Size() } -func (m *QueryParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +func (m *QueryAllProviderClientIDResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllProviderClientIDResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllProviderClientIDResponse proto.InternalMessageInfo -func (m *QueryParamsResponse) GetParams() Params { +func (m *QueryAllProviderClientIDResponse) GetProviderClientID() []ProviderClientID { if m != nil { - return m.Params + return m.ProviderClientID } - return Params{} + return nil +} + +func (m *QueryAllProviderClientIDResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "network.monitoringc.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "network.monitoringc.v1.QueryParamsResponse") + proto.RegisterType((*QueryGetLaunchIDFromChannelIDRequest)(nil), "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDRequest") + proto.RegisterType((*QueryGetLaunchIDFromChannelIDResponse)(nil), "network.monitoringc.v1.QueryGetLaunchIDFromChannelIDResponse") + proto.RegisterType((*QueryAllLaunchIDFromChannelIDRequest)(nil), "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDRequest") + proto.RegisterType((*QueryAllLaunchIDFromChannelIDResponse)(nil), "network.monitoringc.v1.QueryAllLaunchIDFromChannelIDResponse") + proto.RegisterType((*QueryGetMonitoringHistoryRequest)(nil), "network.monitoringc.v1.QueryGetMonitoringHistoryRequest") + proto.RegisterType((*QueryGetMonitoringHistoryResponse)(nil), "network.monitoringc.v1.QueryGetMonitoringHistoryResponse") + proto.RegisterType((*QueryGetVerifiedClientIDRequest)(nil), "network.monitoringc.v1.QueryGetVerifiedClientIDRequest") + proto.RegisterType((*QueryGetVerifiedClientIDResponse)(nil), "network.monitoringc.v1.QueryGetVerifiedClientIDResponse") + proto.RegisterType((*QueryGetProviderClientIDRequest)(nil), "network.monitoringc.v1.QueryGetProviderClientIDRequest") + proto.RegisterType((*QueryGetProviderClientIDResponse)(nil), "network.monitoringc.v1.QueryGetProviderClientIDResponse") + proto.RegisterType((*QueryAllProviderClientIDRequest)(nil), "network.monitoringc.v1.QueryAllProviderClientIDRequest") + proto.RegisterType((*QueryAllProviderClientIDResponse)(nil), "network.monitoringc.v1.QueryAllProviderClientIDResponse") } func init() { - proto.RegisterType((*QueryGetVerifiedClientIdsRequest)(nil), "spn.monitoringc.QueryGetVerifiedClientIdsRequest") - proto.RegisterType((*QueryGetVerifiedClientIdsResponse)(nil), "spn.monitoringc.QueryGetVerifiedClientIdsResponse") - proto.RegisterType((*QueryGetProviderClientIDRequest)(nil), "spn.monitoringc.QueryGetProviderClientIDRequest") - proto.RegisterType((*QueryGetProviderClientIDResponse)(nil), "spn.monitoringc.QueryGetProviderClientIDResponse") - proto.RegisterType((*QueryAllProviderClientIDRequest)(nil), "spn.monitoringc.QueryAllProviderClientIDRequest") - proto.RegisterType((*QueryAllProviderClientIDResponse)(nil), "spn.monitoringc.QueryAllProviderClientIDResponse") - proto.RegisterType((*QueryGetLaunchIDFromChannelIDRequest)(nil), "spn.monitoringc.QueryGetLaunchIDFromChannelIDRequest") - proto.RegisterType((*QueryGetLaunchIDFromChannelIDResponse)(nil), "spn.monitoringc.QueryGetLaunchIDFromChannelIDResponse") - proto.RegisterType((*QueryAllLaunchIDFromChannelIDRequest)(nil), "spn.monitoringc.QueryAllLaunchIDFromChannelIDRequest") - proto.RegisterType((*QueryAllLaunchIDFromChannelIDResponse)(nil), "spn.monitoringc.QueryAllLaunchIDFromChannelIDResponse") - proto.RegisterType((*QueryGetMonitoringHistoryRequest)(nil), "spn.monitoringc.QueryGetMonitoringHistoryRequest") - proto.RegisterType((*QueryGetMonitoringHistoryResponse)(nil), "spn.monitoringc.QueryGetMonitoringHistoryResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "spn.monitoringc.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "spn.monitoringc.QueryParamsResponse") -} - -func init() { proto.RegisterFile("spn/monitoringc/query.proto", fileDescriptor_8cc736e778fdcde2) } - -var fileDescriptor_8cc736e778fdcde2 = []byte{ - // 842 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcf, 0x4f, 0x13, 0x4d, - 0x18, 0xee, 0x02, 0x1f, 0xf9, 0x98, 0xef, 0xf0, 0xc1, 0x00, 0x91, 0x54, 0x52, 0x60, 0x44, 0x25, - 0x24, 0xee, 0x52, 0x4c, 0x21, 0xfe, 0xc0, 0xa4, 0x40, 0x40, 0x12, 0x4c, 0xb0, 0x26, 0x1c, 0xbc, - 0x34, 0xdb, 0x76, 0xd8, 0x4e, 0xb2, 0x3b, 0xb3, 0xec, 0x6e, 0x51, 0x42, 0x88, 0x89, 0x57, 0x2f, - 0x26, 0xde, 0xfc, 0x33, 0x3c, 0x9a, 0x68, 0x3c, 0x72, 0xc4, 0xe8, 0xc1, 0x93, 0x31, 0xe0, 0x1f, - 0x62, 0x3a, 0x3b, 0xdb, 0x6d, 0x77, 0x76, 0xb7, 0x14, 0xb9, 0xb5, 0x33, 0xf3, 0x3e, 0xef, 0xf3, - 0xbc, 0xf3, 0xce, 0xf3, 0x2e, 0xb8, 0xee, 0xda, 0x54, 0xb3, 0x18, 0x25, 0x1e, 0x73, 0x08, 0x35, - 0xaa, 0xda, 0x7e, 0x03, 0x3b, 0x87, 0xaa, 0xed, 0x30, 0x8f, 0xc1, 0xff, 0x5d, 0x9b, 0xaa, 0x6d, - 0x9b, 0xd9, 0x31, 0x83, 0x19, 0x8c, 0xef, 0x69, 0xcd, 0x5f, 0xfe, 0xb1, 0xec, 0xa4, 0xc1, 0x98, - 0x61, 0x62, 0x4d, 0xb7, 0x89, 0xa6, 0x53, 0xca, 0x3c, 0xdd, 0x23, 0x8c, 0xba, 0x62, 0x77, 0xbe, - 0xca, 0x5c, 0x8b, 0xb9, 0x5a, 0x45, 0x77, 0xb1, 0x8f, 0xae, 0x1d, 0xe4, 0x2b, 0xd8, 0xd3, 0xf3, - 0x9a, 0xad, 0x1b, 0x84, 0xf2, 0xc3, 0x01, 0x52, 0x94, 0x8d, 0xad, 0x3b, 0xba, 0x15, 0x20, 0xcd, - 0x49, 0xbb, 0x0e, 0x3b, 0x20, 0x35, 0xec, 0x94, 0xab, 0x26, 0xc1, 0xd4, 0x2b, 0x93, 0x9a, 0x38, - 0xb9, 0x1c, 0x3d, 0x69, 0xea, 0x0d, 0x5a, 0xad, 0x97, 0x49, 0xad, 0xbc, 0xe7, 0x30, 0xab, 0x7c, - 0x80, 0x1d, 0xb2, 0x47, 0x70, 0x4d, 0x0a, 0xd4, 0xba, 0x04, 0x56, 0xeb, 0x3a, 0xa5, 0xd8, 0x0c, - 0x03, 0x24, 0x4e, 0xe1, 0xef, 0x72, 0x9d, 0xb8, 0x1e, 0x0b, 0x8a, 0x89, 0x1e, 0x81, 0xe9, 0xa7, - 0x4d, 0xf5, 0x9b, 0xd8, 0xdb, 0x15, 0xe9, 0xd7, 0x78, 0xf6, 0xad, 0x9a, 0x5b, 0xc2, 0xfb, 0x0d, - 0xec, 0x7a, 0x30, 0x0b, 0xfe, 0xf5, 0x13, 0x6e, 0xad, 0x4f, 0x28, 0xd3, 0xca, 0xdc, 0x40, 0xa9, - 0xf5, 0x1f, 0x15, 0xc1, 0x4c, 0x4a, 0xbc, 0x6b, 0x33, 0xea, 0x62, 0x38, 0x09, 0x86, 0xaa, 0xc1, - 0xe2, 0x84, 0x32, 0xdd, 0x3f, 0x37, 0x54, 0x0a, 0x17, 0xd0, 0x0a, 0x98, 0x0a, 0x20, 0x76, 0x44, - 0xe9, 0x04, 0xc4, 0xfa, 0x45, 0x18, 0xbc, 0x08, 0x15, 0xc8, 0xe1, 0x82, 0xc0, 0x33, 0x30, 0x6c, - 0x47, 0xf6, 0x38, 0xce, 0x7f, 0x8b, 0x33, 0x6a, 0xa4, 0x9b, 0xd4, 0x28, 0xc8, 0xea, 0xc0, 0xc9, - 0xcf, 0xa9, 0x4c, 0x49, 0x02, 0x40, 0x44, 0xf0, 0x2e, 0x9a, 0x66, 0x12, 0xef, 0x0d, 0x00, 0xc2, - 0x6e, 0x12, 0x19, 0x6f, 0xa9, 0x7e, 0xeb, 0xa9, 0xcd, 0xd6, 0x53, 0xfd, 0xc6, 0x16, 0xad, 0xa7, - 0xee, 0xe8, 0x06, 0x16, 0xb1, 0xa5, 0xb6, 0x48, 0xf4, 0x45, 0x11, 0x22, 0x63, 0x73, 0xa5, 0x8a, - 0xec, 0xff, 0x2b, 0x91, 0x70, 0xb3, 0x43, 0x41, 0x1f, 0x57, 0x70, 0xbb, 0xab, 0x02, 0x9f, 0x51, - 0x87, 0x84, 0x75, 0x30, 0x1b, 0x5c, 0xd3, 0xb6, 0xb8, 0xba, 0x0d, 0x87, 0x59, 0x6b, 0x7e, 0xeb, - 0x86, 0x25, 0x6b, 0xf6, 0x4a, 0xb0, 0xc6, 0x2b, 0xd6, 0xec, 0x95, 0x60, 0x01, 0xbd, 0x51, 0xc0, - 0xcd, 0x2e, 0x30, 0xa2, 0x1a, 0x15, 0x30, 0x6e, 0xc6, 0x1d, 0x68, 0xdd, 0x42, 0xb4, 0x24, 0xb1, - 0x70, 0xa2, 0x2e, 0xf1, 0x50, 0x88, 0x0a, 0x4d, 0x45, 0xd3, 0x4c, 0xd5, 0x74, 0x55, 0x6d, 0xf0, - 0x3d, 0x50, 0x9f, 0x9c, 0xb0, 0xbb, 0xfa, 0xfe, 0x2b, 0x52, 0x7f, 0x75, 0xad, 0xd1, 0xe6, 0x41, - 0x4f, 0x5a, 0x94, 0x1e, 0xfb, 0x36, 0x75, 0x11, 0x07, 0x38, 0x0a, 0x3d, 0x28, 0x26, 0x5e, 0x54, - 0x64, 0x17, 0x8c, 0x58, 0xd1, 0x4d, 0x71, 0x15, 0x48, 0xaa, 0x86, 0x04, 0x23, 0x2a, 0x21, 0x43, - 0xa0, 0x31, 0x00, 0x79, 0xf2, 0x1d, 0x3e, 0x13, 0x04, 0x5d, 0xb4, 0x0d, 0x46, 0x3b, 0x56, 0x05, - 0x89, 0x02, 0x18, 0xf4, 0x67, 0x87, 0xc8, 0x7c, 0x4d, 0x7e, 0x98, 0x7c, 0x5b, 0xa4, 0x13, 0x87, - 0x17, 0xdf, 0x03, 0xf0, 0x0f, 0x87, 0x83, 0x9f, 0x15, 0x30, 0x22, 0xf9, 0x2c, 0xcc, 0x4b, 0x30, - 0xdd, 0x3c, 0x3d, 0xbb, 0xd8, 0x4b, 0x88, 0xcf, 0x1e, 0xad, 0xbe, 0xfe, 0xf6, 0xfb, 0x5d, 0xdf, - 0x43, 0x78, 0x5f, 0xf3, 0x30, 0xad, 0x61, 0xc7, 0x22, 0xd4, 0x93, 0x46, 0x93, 0x3c, 0xc4, 0x5c, - 0xed, 0x28, 0xb8, 0xaa, 0x63, 0xf8, 0x51, 0x01, 0xc3, 0x51, 0xf3, 0x81, 0x0b, 0x89, 0x64, 0x12, - 0x8c, 0x35, 0x9b, 0xef, 0x21, 0x42, 0xb0, 0x2f, 0x72, 0xf6, 0x0f, 0xe0, 0xbd, 0x34, 0xf6, 0xf2, - 0xec, 0x6e, 0x27, 0xff, 0x41, 0x01, 0xa3, 0x51, 0xfc, 0xa2, 0x69, 0x26, 0xf1, 0x4f, 0x1e, 0x0c, - 0x49, 0xfc, 0x53, 0xec, 0x1d, 0x2d, 0x71, 0xfe, 0x0b, 0x50, 0xed, 0x8d, 0x3f, 0xfc, 0xaa, 0x80, - 0xf1, 0xd8, 0xd7, 0x0d, 0x0b, 0x89, 0x45, 0x4c, 0x73, 0xb3, 0xec, 0x52, 0xaf, 0x61, 0x42, 0xc0, - 0x16, 0x17, 0xb0, 0x06, 0x8b, 0x69, 0x02, 0x12, 0xbf, 0x6c, 0xb4, 0xa3, 0xd6, 0x14, 0x38, 0x86, - 0x27, 0x0a, 0x98, 0x88, 0x4d, 0xd6, 0xbc, 0x8d, 0x42, 0x62, 0x6d, 0x2f, 0x23, 0xab, 0x9b, 0xd5, - 0xa2, 0x15, 0x2e, 0x6b, 0x19, 0x16, 0x2e, 0x25, 0x0b, 0x7e, 0x52, 0xc0, 0x88, 0x64, 0x37, 0x29, - 0x2f, 0x3a, 0xc9, 0x21, 0x53, 0x5e, 0x74, 0xa2, 0x29, 0x5e, 0xec, 0x4d, 0xc8, 0xdf, 0x8e, 0xed, - 0x6f, 0xe2, 0x15, 0x18, 0xf4, 0x3d, 0x0b, 0xde, 0x88, 0x27, 0xd0, 0x61, 0x8c, 0xd9, 0xd9, 0xf4, - 0x43, 0x82, 0xd7, 0x3c, 0xe7, 0x35, 0x0b, 0x51, 0x6a, 0xaf, 0xfb, 0x56, 0xb9, 0x79, 0x72, 0x96, - 0x53, 0x4e, 0xcf, 0x72, 0xca, 0xaf, 0xb3, 0x9c, 0xf2, 0xf6, 0x3c, 0x97, 0x39, 0x3d, 0xcf, 0x65, - 0x7e, 0x9c, 0xe7, 0x32, 0xcf, 0xef, 0x18, 0xc4, 0xab, 0x37, 0x2a, 0x6a, 0x95, 0x59, 0x51, 0x9c, - 0x97, 0x1d, 0x48, 0xde, 0xa1, 0x8d, 0xdd, 0xca, 0x20, 0xff, 0x22, 0xbe, 0xfb, 0x27, 0x00, 0x00, - 0xff, 0xff, 0x56, 0xa8, 0x0c, 0x32, 0x7d, 0x0c, 0x00, 0x00, + proto.RegisterFile("network/monitoringc/v1/query.proto", fileDescriptor_82561013049aca62) +} + +var fileDescriptor_82561013049aca62 = []byte{ + // 848 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdf, 0x6b, 0xd3, 0x5c, + 0x18, 0xc7, 0x9b, 0x6d, 0xef, 0x78, 0x77, 0x76, 0xf3, 0xee, 0xac, 0xaf, 0xcc, 0x30, 0xba, 0x19, + 0x9d, 0x9b, 0x93, 0x25, 0x76, 0xe2, 0x7e, 0xa0, 0x13, 0xba, 0x8d, 0xcd, 0xc1, 0x84, 0xd9, 0x0b, + 0x91, 0x81, 0x94, 0xb4, 0x3d, 0x4b, 0x0f, 0x26, 0x39, 0x59, 0x92, 0x56, 0xc7, 0x98, 0x17, 0xbb, + 0xf4, 0x6a, 0xe8, 0x3f, 0xe1, 0xa5, 0xff, 0x82, 0x57, 0x0e, 0x04, 0x19, 0x78, 0xa1, 0x20, 0x88, + 0x74, 0x82, 0xff, 0x86, 0xf4, 0xe4, 0x64, 0x6d, 0x93, 0x9c, 0x64, 0x2d, 0xbd, 0x29, 0x4d, 0xce, + 0x79, 0xbe, 0xe7, 0xfb, 0x79, 0x72, 0xce, 0xf3, 0x1c, 0x20, 0x99, 0xc8, 0x7d, 0x49, 0xec, 0x17, + 0x8a, 0x41, 0x4c, 0xec, 0x12, 0x1b, 0x9b, 0x5a, 0x49, 0xa9, 0x65, 0x95, 0xfd, 0x2a, 0xb2, 0x0f, + 0x64, 0xcb, 0x26, 0x2e, 0x81, 0x57, 0xd8, 0x1c, 0xb9, 0x65, 0x8e, 0x5c, 0xcb, 0x8a, 0x23, 0xaa, + 0x81, 0x4d, 0xa2, 0xd0, 0x5f, 0x6f, 0xaa, 0x38, 0x5b, 0x22, 0x8e, 0x41, 0x1c, 0xa5, 0xa8, 0x3a, + 0xc8, 0xd3, 0x50, 0x6a, 0xd9, 0x22, 0x72, 0xd5, 0xac, 0x62, 0xa9, 0x1a, 0x36, 0x55, 0x17, 0x13, + 0x93, 0xcd, 0x4d, 0x6b, 0x44, 0x23, 0xf4, 0xaf, 0xd2, 0xf8, 0xc7, 0xde, 0x8e, 0x6b, 0x84, 0x68, + 0x3a, 0x52, 0x54, 0x0b, 0x2b, 0xaa, 0x69, 0x12, 0x97, 0x86, 0x38, 0x6c, 0x74, 0x81, 0x63, 0x57, + 0x57, 0xab, 0x66, 0xa9, 0x52, 0xc0, 0xe5, 0xc2, 0x9e, 0x4d, 0x8c, 0x42, 0xa9, 0xa2, 0x9a, 0x26, + 0xd2, 0x0b, 0xb8, 0xcc, 0xe2, 0x14, 0x4e, 0x5c, 0xf3, 0xb1, 0x50, 0xc1, 0x8e, 0x4b, 0x7c, 0x66, + 0xf1, 0x3a, 0x27, 0xc0, 0x52, 0x6d, 0xd5, 0x70, 0x12, 0x54, 0x2d, 0x9b, 0xd4, 0x70, 0x19, 0xd9, + 0x85, 0x92, 0x8e, 0x91, 0xe9, 0x26, 0xdb, 0xa8, 0x21, 0x1b, 0xef, 0x61, 0x54, 0x0e, 0x06, 0x48, + 0x69, 0x00, 0x9f, 0x34, 0xb2, 0xb8, 0x43, 0x97, 0xcd, 0xa3, 0xfd, 0x2a, 0x72, 0x5c, 0xe9, 0x19, + 0x18, 0x6d, 0x7b, 0xeb, 0x58, 0xc4, 0x74, 0x10, 0xcc, 0x81, 0x41, 0xcf, 0xde, 0x98, 0x30, 0x29, + 0xcc, 0x0c, 0xcf, 0x67, 0xe4, 0xe8, 0x0f, 0x27, 0x7b, 0x71, 0xab, 0x43, 0xa7, 0x3f, 0x27, 0x52, + 0xef, 0xff, 0x7c, 0x98, 0x15, 0xf2, 0x2c, 0x50, 0x5a, 0x07, 0x37, 0xa8, 0xf2, 0x26, 0x72, 0xb7, + 0x69, 0x4a, 0xb7, 0xd6, 0x37, 0x6c, 0x62, 0xac, 0x79, 0xf9, 0xdc, 0x5a, 0x67, 0x0e, 0xe0, 0x38, + 0x18, 0x2a, 0xf9, 0xef, 0xe8, 0x6a, 0x43, 0xf9, 0xe6, 0x0b, 0xe9, 0xad, 0x00, 0xa6, 0x12, 0x64, + 0x98, 0x65, 0x0c, 0xfe, 0xd7, 0xa3, 0x26, 0x30, 0x82, 0x39, 0x1e, 0x41, 0xa4, 0xea, 0xea, 0x40, + 0x03, 0x28, 0x1f, 0xad, 0x28, 0x99, 0x0c, 0x2d, 0xa7, 0xeb, 0xb1, 0x68, 0x1b, 0x00, 0x34, 0xb7, + 0x2a, 0xf3, 0x71, 0x53, 0xf6, 0xf6, 0xb5, 0xdc, 0xd8, 0xd7, 0xb2, 0x77, 0x36, 0xd8, 0xbe, 0x96, + 0x77, 0x54, 0x0d, 0xb1, 0xd8, 0x7c, 0x4b, 0xa4, 0xf4, 0xc3, 0x4f, 0x02, 0x7f, 0xc1, 0xe4, 0x24, + 0xf4, 0xf7, 0x36, 0x09, 0x70, 0xb3, 0x0d, 0xae, 0x8f, 0xc2, 0x4d, 0x27, 0xc2, 0x79, 0x3e, 0xdb, + 0xe8, 0x1e, 0x82, 0x49, 0xff, 0x0b, 0x3f, 0xbe, 0x70, 0xf5, 0xc8, 0x3b, 0x42, 0x7e, 0x26, 0x45, + 0xf0, 0xaf, 0xef, 0x82, 0xe6, 0x71, 0x20, 0x7f, 0xf1, 0x2c, 0x1d, 0x0b, 0xe0, 0x5a, 0x8c, 0x00, + 0xcb, 0xcc, 0x73, 0x30, 0x62, 0x04, 0x07, 0xd9, 0x27, 0xb9, 0xc5, 0xcb, 0x4a, 0x48, 0x8d, 0x65, + 0x24, 0xac, 0x24, 0xad, 0x80, 0x09, 0xdf, 0xc3, 0x53, 0x76, 0x02, 0xd7, 0xe8, 0x01, 0x6c, 0xee, + 0x86, 0x38, 0x86, 0xd7, 0xcd, 0x1c, 0x84, 0xc3, 0x19, 0xc1, 0x2e, 0xf8, 0xaf, 0x16, 0x18, 0x63, + 0x00, 0x33, 0x3c, 0x80, 0xa0, 0x16, 0xf3, 0x1f, 0xd2, 0x69, 0xb5, 0xbf, 0xc3, 0x2a, 0x4e, 0x97, + 0xf6, 0xc3, 0xe1, 0x4d, 0xfb, 0x56, 0x60, 0x2c, 0xc9, 0x7e, 0x50, 0xcb, 0xb7, 0x1f, 0xd4, 0x91, + 0x30, 0xb3, 0x9f, 0xd3, 0x75, 0x9e, 0xfd, 0x5e, 0x9d, 0xc5, 0x4f, 0x02, 0x63, 0x8d, 0x5c, 0x2b, + 0x96, 0xb5, 0xbf, 0x17, 0xac, 0x3d, 0x3b, 0x77, 0xf3, 0x6f, 0x86, 0xc1, 0x3f, 0x94, 0x04, 0x9e, + 0x08, 0x60, 0xd0, 0x2b, 0xe4, 0x70, 0x96, 0xe7, 0x2f, 0xdc, 0x3b, 0xc4, 0xdb, 0x97, 0x9a, 0xeb, + 0xad, 0x2c, 0xcd, 0x1d, 0x7f, 0xfd, 0xfd, 0xae, 0x6f, 0x1a, 0x4e, 0x29, 0x58, 0x33, 0xb1, 0x8b, + 0x94, 0xd8, 0xae, 0x08, 0xeb, 0x02, 0x18, 0xe3, 0x95, 0x7c, 0xf8, 0x20, 0x76, 0xe1, 0x84, 0x86, + 0x23, 0xae, 0x74, 0x19, 0xcd, 0x40, 0xb6, 0x28, 0xc8, 0x1a, 0xcc, 0xc5, 0x81, 0x70, 0x2f, 0x11, + 0xca, 0xe1, 0x45, 0x6f, 0x3b, 0x82, 0xdf, 0x04, 0x70, 0x75, 0x1b, 0x3b, 0x5d, 0x51, 0x26, 0xf4, + 0x9e, 0x04, 0xca, 0xa4, 0x46, 0x22, 0xad, 0x50, 0xca, 0x45, 0x78, 0xaf, 0x2b, 0x4a, 0xf8, 0x45, + 0x00, 0xe9, 0xa8, 0x72, 0x0c, 0x97, 0x92, 0x92, 0xcf, 0x6b, 0x01, 0xe2, 0x72, 0x17, 0x91, 0x0c, + 0x26, 0x47, 0x61, 0xee, 0xc3, 0xe5, 0x38, 0x98, 0xf0, 0xfd, 0x4d, 0x39, 0xf4, 0x0b, 0xdc, 0x11, + 0xfc, 0x2c, 0x80, 0xd1, 0x88, 0xe2, 0x0c, 0x17, 0x93, 0x5c, 0x71, 0xba, 0x81, 0xb8, 0xd4, 0x79, + 0x60, 0x27, 0x34, 0xe1, 0x6b, 0x60, 0x04, 0x4d, 0xb0, 0xe6, 0x24, 0xd3, 0x70, 0xaa, 0x6b, 0x32, + 0x0d, 0xaf, 0x54, 0x5e, 0x8e, 0x26, 0x7c, 0x0b, 0x6e, 0xa5, 0xf9, 0x28, 0x80, 0x74, 0xe3, 0x18, + 0x75, 0x88, 0xc3, 0x6f, 0x16, 0x09, 0x38, 0x31, 0x95, 0x5f, 0x5a, 0xa0, 0x38, 0x77, 0xa0, 0xdc, + 0x19, 0xce, 0xea, 0xe6, 0x69, 0x3d, 0x23, 0x9c, 0xd5, 0x33, 0xc2, 0xaf, 0x7a, 0x46, 0x38, 0x39, + 0xcf, 0xa4, 0xce, 0xce, 0x33, 0xa9, 0xef, 0xe7, 0x99, 0xd4, 0xee, 0x9c, 0x86, 0xdd, 0x4a, 0xb5, + 0x28, 0x97, 0x88, 0x11, 0xd4, 0x7c, 0xd5, 0xa6, 0xea, 0x1e, 0x58, 0xc8, 0x29, 0x0e, 0xd2, 0xdb, + 0xfe, 0xdd, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x25, 0xf8, 0xaa, 0x0c, 0x8e, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -744,20 +748,18 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { - // Queries a list of VerifiedClientIds items. - VerifiedClientIds(ctx context.Context, in *QueryGetVerifiedClientIdsRequest, opts ...grpc.CallOption) (*QueryGetVerifiedClientIdsResponse, error) - // Queries a ProviderClientID by index. - ProviderClientID(ctx context.Context, in *QueryGetProviderClientIDRequest, opts ...grpc.CallOption) (*QueryGetProviderClientIDResponse, error) - // Queries a list of ProviderClientID items. - ProviderClientIDAll(ctx context.Context, in *QueryAllProviderClientIDRequest, opts ...grpc.CallOption) (*QueryAllProviderClientIDResponse, error) - // Queries a LaunchIDFromChannelID by index. - LaunchIDFromChannelID(ctx context.Context, in *QueryGetLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryGetLaunchIDFromChannelIDResponse, error) - // Queries a list of LaunchIDFromChannelID items. - LaunchIDFromChannelIDAll(ctx context.Context, in *QueryAllLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryAllLaunchIDFromChannelIDResponse, error) - // Queries a MonitoringHistory by launch id. - MonitoringHistory(ctx context.Context, in *QueryGetMonitoringHistoryRequest, opts ...grpc.CallOption) (*QueryGetMonitoringHistoryResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of LaunchIDFromChannelID items. + GetLaunchIDFromChannelID(ctx context.Context, in *QueryGetLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryGetLaunchIDFromChannelIDResponse, error) + ListLaunchIDFromChannelID(ctx context.Context, in *QueryAllLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryAllLaunchIDFromChannelIDResponse, error) + // Queries a list of MonitoringHistory items. + GetMonitoringHistory(ctx context.Context, in *QueryGetMonitoringHistoryRequest, opts ...grpc.CallOption) (*QueryGetMonitoringHistoryResponse, error) + // Queries a list of VerifiedClientID items. + GetVerifiedClientID(ctx context.Context, in *QueryGetVerifiedClientIDRequest, opts ...grpc.CallOption) (*QueryGetVerifiedClientIDResponse, error) + // Queries a list of ProviderClientID items. + GetProviderClientID(ctx context.Context, in *QueryGetProviderClientIDRequest, opts ...grpc.CallOption) (*QueryGetProviderClientIDResponse, error) + ListProviderClientID(ctx context.Context, in *QueryAllProviderClientIDRequest, opts ...grpc.CallOption) (*QueryAllProviderClientIDResponse, error) } type queryClient struct { @@ -768,63 +770,63 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) VerifiedClientIds(ctx context.Context, in *QueryGetVerifiedClientIdsRequest, opts ...grpc.CallOption) (*QueryGetVerifiedClientIdsResponse, error) { - out := new(QueryGetVerifiedClientIdsResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringc.Query/VerifiedClientIds", in, out, opts...) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ProviderClientID(ctx context.Context, in *QueryGetProviderClientIDRequest, opts ...grpc.CallOption) (*QueryGetProviderClientIDResponse, error) { - out := new(QueryGetProviderClientIDResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringc.Query/ProviderClientID", in, out, opts...) +func (c *queryClient) GetLaunchIDFromChannelID(ctx context.Context, in *QueryGetLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryGetLaunchIDFromChannelIDResponse, error) { + out := new(QueryGetLaunchIDFromChannelIDResponse) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Query/GetLaunchIDFromChannelID", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ProviderClientIDAll(ctx context.Context, in *QueryAllProviderClientIDRequest, opts ...grpc.CallOption) (*QueryAllProviderClientIDResponse, error) { - out := new(QueryAllProviderClientIDResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringc.Query/ProviderClientIDAll", in, out, opts...) +func (c *queryClient) ListLaunchIDFromChannelID(ctx context.Context, in *QueryAllLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryAllLaunchIDFromChannelIDResponse, error) { + out := new(QueryAllLaunchIDFromChannelIDResponse) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Query/ListLaunchIDFromChannelID", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) LaunchIDFromChannelID(ctx context.Context, in *QueryGetLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryGetLaunchIDFromChannelIDResponse, error) { - out := new(QueryGetLaunchIDFromChannelIDResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringc.Query/LaunchIDFromChannelID", in, out, opts...) +func (c *queryClient) GetMonitoringHistory(ctx context.Context, in *QueryGetMonitoringHistoryRequest, opts ...grpc.CallOption) (*QueryGetMonitoringHistoryResponse, error) { + out := new(QueryGetMonitoringHistoryResponse) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Query/GetMonitoringHistory", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) LaunchIDFromChannelIDAll(ctx context.Context, in *QueryAllLaunchIDFromChannelIDRequest, opts ...grpc.CallOption) (*QueryAllLaunchIDFromChannelIDResponse, error) { - out := new(QueryAllLaunchIDFromChannelIDResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringc.Query/LaunchIDFromChannelIDAll", in, out, opts...) +func (c *queryClient) GetVerifiedClientID(ctx context.Context, in *QueryGetVerifiedClientIDRequest, opts ...grpc.CallOption) (*QueryGetVerifiedClientIDResponse, error) { + out := new(QueryGetVerifiedClientIDResponse) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Query/GetVerifiedClientID", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) MonitoringHistory(ctx context.Context, in *QueryGetMonitoringHistoryRequest, opts ...grpc.CallOption) (*QueryGetMonitoringHistoryResponse, error) { - out := new(QueryGetMonitoringHistoryResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringc.Query/MonitoringHistory", in, out, opts...) +func (c *queryClient) GetProviderClientID(ctx context.Context, in *QueryGetProviderClientIDRequest, opts ...grpc.CallOption) (*QueryGetProviderClientIDResponse, error) { + out := new(QueryGetProviderClientIDResponse) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Query/GetProviderClientID", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringc.Query/Params", in, out, opts...) +func (c *queryClient) ListProviderClientID(ctx context.Context, in *QueryAllProviderClientIDRequest, opts ...grpc.CallOption) (*QueryAllProviderClientIDResponse, error) { + out := new(QueryAllProviderClientIDResponse) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Query/ListProviderClientID", in, out, opts...) if err != nil { return nil, err } @@ -833,216 +835,214 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . // QueryServer is the server API for Query service. type QueryServer interface { - // Queries a list of VerifiedClientIds items. - VerifiedClientIds(context.Context, *QueryGetVerifiedClientIdsRequest) (*QueryGetVerifiedClientIdsResponse, error) - // Queries a ProviderClientID by index. - ProviderClientID(context.Context, *QueryGetProviderClientIDRequest) (*QueryGetProviderClientIDResponse, error) - // Queries a list of ProviderClientID items. - ProviderClientIDAll(context.Context, *QueryAllProviderClientIDRequest) (*QueryAllProviderClientIDResponse, error) - // Queries a LaunchIDFromChannelID by index. - LaunchIDFromChannelID(context.Context, *QueryGetLaunchIDFromChannelIDRequest) (*QueryGetLaunchIDFromChannelIDResponse, error) - // Queries a list of LaunchIDFromChannelID items. - LaunchIDFromChannelIDAll(context.Context, *QueryAllLaunchIDFromChannelIDRequest) (*QueryAllLaunchIDFromChannelIDResponse, error) - // Queries a MonitoringHistory by launch id. - MonitoringHistory(context.Context, *QueryGetMonitoringHistoryRequest) (*QueryGetMonitoringHistoryResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of LaunchIDFromChannelID items. + GetLaunchIDFromChannelID(context.Context, *QueryGetLaunchIDFromChannelIDRequest) (*QueryGetLaunchIDFromChannelIDResponse, error) + ListLaunchIDFromChannelID(context.Context, *QueryAllLaunchIDFromChannelIDRequest) (*QueryAllLaunchIDFromChannelIDResponse, error) + // Queries a list of MonitoringHistory items. + GetMonitoringHistory(context.Context, *QueryGetMonitoringHistoryRequest) (*QueryGetMonitoringHistoryResponse, error) + // Queries a list of VerifiedClientID items. + GetVerifiedClientID(context.Context, *QueryGetVerifiedClientIDRequest) (*QueryGetVerifiedClientIDResponse, error) + // Queries a list of ProviderClientID items. + GetProviderClientID(context.Context, *QueryGetProviderClientIDRequest) (*QueryGetProviderClientIDResponse, error) + ListProviderClientID(context.Context, *QueryAllProviderClientIDRequest) (*QueryAllProviderClientIDResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) VerifiedClientIds(ctx context.Context, req *QueryGetVerifiedClientIdsRequest) (*QueryGetVerifiedClientIdsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VerifiedClientIds not implemented") +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) ProviderClientID(ctx context.Context, req *QueryGetProviderClientIDRequest) (*QueryGetProviderClientIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProviderClientID not implemented") +func (*UnimplementedQueryServer) GetLaunchIDFromChannelID(ctx context.Context, req *QueryGetLaunchIDFromChannelIDRequest) (*QueryGetLaunchIDFromChannelIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetLaunchIDFromChannelID not implemented") } -func (*UnimplementedQueryServer) ProviderClientIDAll(ctx context.Context, req *QueryAllProviderClientIDRequest) (*QueryAllProviderClientIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProviderClientIDAll not implemented") +func (*UnimplementedQueryServer) ListLaunchIDFromChannelID(ctx context.Context, req *QueryAllLaunchIDFromChannelIDRequest) (*QueryAllLaunchIDFromChannelIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListLaunchIDFromChannelID not implemented") } -func (*UnimplementedQueryServer) LaunchIDFromChannelID(ctx context.Context, req *QueryGetLaunchIDFromChannelIDRequest) (*QueryGetLaunchIDFromChannelIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LaunchIDFromChannelID not implemented") +func (*UnimplementedQueryServer) GetMonitoringHistory(ctx context.Context, req *QueryGetMonitoringHistoryRequest) (*QueryGetMonitoringHistoryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMonitoringHistory not implemented") } -func (*UnimplementedQueryServer) LaunchIDFromChannelIDAll(ctx context.Context, req *QueryAllLaunchIDFromChannelIDRequest) (*QueryAllLaunchIDFromChannelIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LaunchIDFromChannelIDAll not implemented") +func (*UnimplementedQueryServer) GetVerifiedClientID(ctx context.Context, req *QueryGetVerifiedClientIDRequest) (*QueryGetVerifiedClientIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetVerifiedClientID not implemented") } -func (*UnimplementedQueryServer) MonitoringHistory(ctx context.Context, req *QueryGetMonitoringHistoryRequest) (*QueryGetMonitoringHistoryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MonitoringHistory not implemented") +func (*UnimplementedQueryServer) GetProviderClientID(ctx context.Context, req *QueryGetProviderClientIDRequest) (*QueryGetProviderClientIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProviderClientID not implemented") } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +func (*UnimplementedQueryServer) ListProviderClientID(ctx context.Context, req *QueryAllProviderClientIDRequest) (*QueryAllProviderClientIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListProviderClientID not implemented") } func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } -func _Query_VerifiedClientIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetVerifiedClientIdsRequest) +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).VerifiedClientIds(ctx, in) + return srv.(QueryServer).Params(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringc.Query/VerifiedClientIds", + FullMethod: "/network.monitoringc.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).VerifiedClientIds(ctx, req.(*QueryGetVerifiedClientIdsRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ProviderClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetProviderClientIDRequest) +func _Query_GetLaunchIDFromChannelID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetLaunchIDFromChannelIDRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ProviderClientID(ctx, in) + return srv.(QueryServer).GetLaunchIDFromChannelID(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringc.Query/ProviderClientID", + FullMethod: "/network.monitoringc.v1.Query/GetLaunchIDFromChannelID", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ProviderClientID(ctx, req.(*QueryGetProviderClientIDRequest)) + return srv.(QueryServer).GetLaunchIDFromChannelID(ctx, req.(*QueryGetLaunchIDFromChannelIDRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ProviderClientIDAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllProviderClientIDRequest) +func _Query_ListLaunchIDFromChannelID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllLaunchIDFromChannelIDRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ProviderClientIDAll(ctx, in) + return srv.(QueryServer).ListLaunchIDFromChannelID(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringc.Query/ProviderClientIDAll", + FullMethod: "/network.monitoringc.v1.Query/ListLaunchIDFromChannelID", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ProviderClientIDAll(ctx, req.(*QueryAllProviderClientIDRequest)) + return srv.(QueryServer).ListLaunchIDFromChannelID(ctx, req.(*QueryAllLaunchIDFromChannelIDRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_LaunchIDFromChannelID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetLaunchIDFromChannelIDRequest) +func _Query_GetMonitoringHistory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetMonitoringHistoryRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).LaunchIDFromChannelID(ctx, in) + return srv.(QueryServer).GetMonitoringHistory(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringc.Query/LaunchIDFromChannelID", + FullMethod: "/network.monitoringc.v1.Query/GetMonitoringHistory", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).LaunchIDFromChannelID(ctx, req.(*QueryGetLaunchIDFromChannelIDRequest)) + return srv.(QueryServer).GetMonitoringHistory(ctx, req.(*QueryGetMonitoringHistoryRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_LaunchIDFromChannelIDAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllLaunchIDFromChannelIDRequest) +func _Query_GetVerifiedClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetVerifiedClientIDRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).LaunchIDFromChannelIDAll(ctx, in) + return srv.(QueryServer).GetVerifiedClientID(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringc.Query/LaunchIDFromChannelIDAll", + FullMethod: "/network.monitoringc.v1.Query/GetVerifiedClientID", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).LaunchIDFromChannelIDAll(ctx, req.(*QueryAllLaunchIDFromChannelIDRequest)) + return srv.(QueryServer).GetVerifiedClientID(ctx, req.(*QueryGetVerifiedClientIDRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_MonitoringHistory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetMonitoringHistoryRequest) +func _Query_GetProviderClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetProviderClientIDRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).MonitoringHistory(ctx, in) + return srv.(QueryServer).GetProviderClientID(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringc.Query/MonitoringHistory", + FullMethod: "/network.monitoringc.v1.Query/GetProviderClientID", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).MonitoringHistory(ctx, req.(*QueryGetMonitoringHistoryRequest)) + return srv.(QueryServer).GetProviderClientID(ctx, req.(*QueryGetProviderClientIDRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) +func _Query_ListProviderClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllProviderClientIDRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) + return srv.(QueryServer).ListProviderClientID(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringc.Query/Params", + FullMethod: "/network.monitoringc.v1.Query/ListProviderClientID", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).ListProviderClientID(ctx, req.(*QueryAllProviderClientIDRequest)) } return interceptor(ctx, in, info, handler) } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.monitoringc.Query", + ServiceName: "network.monitoringc.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "VerifiedClientIds", - Handler: _Query_VerifiedClientIds_Handler, + MethodName: "Params", + Handler: _Query_Params_Handler, }, { - MethodName: "ProviderClientID", - Handler: _Query_ProviderClientID_Handler, + MethodName: "GetLaunchIDFromChannelID", + Handler: _Query_GetLaunchIDFromChannelID_Handler, }, { - MethodName: "ProviderClientIDAll", - Handler: _Query_ProviderClientIDAll_Handler, + MethodName: "ListLaunchIDFromChannelID", + Handler: _Query_ListLaunchIDFromChannelID_Handler, }, { - MethodName: "LaunchIDFromChannelID", - Handler: _Query_LaunchIDFromChannelID_Handler, + MethodName: "GetMonitoringHistory", + Handler: _Query_GetMonitoringHistory_Handler, }, { - MethodName: "LaunchIDFromChannelIDAll", - Handler: _Query_LaunchIDFromChannelIDAll_Handler, + MethodName: "GetVerifiedClientID", + Handler: _Query_GetVerifiedClientID_Handler, }, { - MethodName: "MonitoringHistory", - Handler: _Query_MonitoringHistory_Handler, + MethodName: "GetProviderClientID", + Handler: _Query_GetProviderClientID_Handler, }, { - MethodName: "Params", - Handler: _Query_Params_Handler, + MethodName: "ListProviderClientID", + Handler: _Query_ListProviderClientID_Handler, }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/monitoringc/query.proto", + Metadata: "network/monitoringc/v1/query.proto", } -func (m *QueryGetVerifiedClientIdsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1052,25 +1052,20 @@ func (m *QueryGetVerifiedClientIdsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetVerifiedClientIdsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetVerifiedClientIdsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.LaunchID != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.LaunchID)) - i-- - dAtA[i] = 0x8 - } return len(dAtA) - i, nil } -func (m *QueryGetVerifiedClientIdsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1080,29 +1075,30 @@ func (m *QueryGetVerifiedClientIdsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetVerifiedClientIdsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetVerifiedClientIdsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.ClientIds) > 0 { - for iNdEx := len(m.ClientIds) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.ClientIds[iNdEx]) - copy(dAtA[i:], m.ClientIds[iNdEx]) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ClientIds[iNdEx]))) - i-- - dAtA[i] = 0xa + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryGetProviderClientIDRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetLaunchIDFromChannelIDRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1112,25 +1108,27 @@ func (m *QueryGetProviderClientIDRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetProviderClientIDRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetLaunchIDFromChannelIDRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetProviderClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetLaunchIDFromChannelIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.LaunchID != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.LaunchID)) + if len(m.ChannelID) > 0 { + i -= len(m.ChannelID) + copy(dAtA[i:], m.ChannelID) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChannelID))) i-- - dAtA[i] = 0x8 + dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryGetProviderClientIDResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetLaunchIDFromChannelIDResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1140,18 +1138,18 @@ func (m *QueryGetProviderClientIDResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetProviderClientIDResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetLaunchIDFromChannelIDResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetProviderClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetLaunchIDFromChannelIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.ProviderClientID.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LaunchIDFromChannelID.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1163,7 +1161,7 @@ func (m *QueryGetProviderClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } -func (m *QueryAllProviderClientIDRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllLaunchIDFromChannelIDRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1173,12 +1171,12 @@ func (m *QueryAllProviderClientIDRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllProviderClientIDRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllLaunchIDFromChannelIDRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllProviderClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllLaunchIDFromChannelIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1198,7 +1196,7 @@ func (m *QueryAllProviderClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *QueryAllProviderClientIDResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllLaunchIDFromChannelIDResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1208,12 +1206,12 @@ func (m *QueryAllProviderClientIDResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllProviderClientIDResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllLaunchIDFromChannelIDResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllProviderClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllLaunchIDFromChannelIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1230,10 +1228,10 @@ func (m *QueryAllProviderClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (in i-- dAtA[i] = 0x12 } - if len(m.ProviderClientID) > 0 { - for iNdEx := len(m.ProviderClientID) - 1; iNdEx >= 0; iNdEx-- { + if len(m.LaunchIDFromChannelID) > 0 { + for iNdEx := len(m.LaunchIDFromChannelID) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.ProviderClientID[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LaunchIDFromChannelID[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1247,7 +1245,7 @@ func (m *QueryAllProviderClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } -func (m *QueryGetLaunchIDFromChannelIDRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetMonitoringHistoryRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1257,27 +1255,25 @@ func (m *QueryGetLaunchIDFromChannelIDRequest) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *QueryGetLaunchIDFromChannelIDRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetMonitoringHistoryRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetLaunchIDFromChannelIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetMonitoringHistoryRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.ChannelID) > 0 { - i -= len(m.ChannelID) - copy(dAtA[i:], m.ChannelID) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ChannelID))) + if m.LaunchID != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.LaunchID)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryGetLaunchIDFromChannelIDResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetMonitoringHistoryResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1287,18 +1283,18 @@ func (m *QueryGetLaunchIDFromChannelIDResponse) Marshal() (dAtA []byte, err erro return dAtA[:n], nil } -func (m *QueryGetLaunchIDFromChannelIDResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetMonitoringHistoryResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetLaunchIDFromChannelIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetMonitoringHistoryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.LaunchIDFromChannelID.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.MonitoringHistory.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1310,7 +1306,7 @@ func (m *QueryGetLaunchIDFromChannelIDResponse) MarshalToSizedBuffer(dAtA []byte return len(dAtA) - i, nil } -func (m *QueryAllLaunchIDFromChannelIDRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetVerifiedClientIDRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1320,32 +1316,25 @@ func (m *QueryAllLaunchIDFromChannelIDRequest) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *QueryAllLaunchIDFromChannelIDRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetVerifiedClientIDRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllLaunchIDFromChannelIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetVerifiedClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + if m.LaunchID != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.LaunchID)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryAllLaunchIDFromChannelIDResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetVerifiedClientIDResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1355,46 +1344,30 @@ func (m *QueryAllLaunchIDFromChannelIDResponse) Marshal() (dAtA []byte, err erro return dAtA[:n], nil } -func (m *QueryAllLaunchIDFromChannelIDResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetVerifiedClientIDResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllLaunchIDFromChannelIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetVerifiedClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.LaunchIDFromChannelID) > 0 { - for iNdEx := len(m.LaunchIDFromChannelID) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.LaunchIDFromChannelID[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + { + size, err := m.VerifiedClientID.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryGetMonitoringHistoryRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetProviderClientIDRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1404,12 +1377,12 @@ func (m *QueryGetMonitoringHistoryRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetMonitoringHistoryRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetProviderClientIDRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetMonitoringHistoryRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetProviderClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1422,7 +1395,7 @@ func (m *QueryGetMonitoringHistoryRequest) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } -func (m *QueryGetMonitoringHistoryResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetProviderClientIDResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1432,18 +1405,18 @@ func (m *QueryGetMonitoringHistoryResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetMonitoringHistoryResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetProviderClientIDResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetMonitoringHistoryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetProviderClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.MonitoringHistory.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ProviderClientID.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1455,7 +1428,7 @@ func (m *QueryGetMonitoringHistoryResponse) MarshalToSizedBuffer(dAtA []byte) (i return len(dAtA) - i, nil } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllProviderClientIDRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1465,20 +1438,32 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllProviderClientIDRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllProviderClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllProviderClientIDResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1488,26 +1473,42 @@ func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllProviderClientIDResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllProviderClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.ProviderClientID) > 0 { + for iNdEx := len(m.ProviderClientID) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ProviderClientID[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -1522,57 +1523,51 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryGetVerifiedClientIdsRequest) Size() (n int) { +func (m *QueryParamsRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.LaunchID != 0 { - n += 1 + sovQuery(uint64(m.LaunchID)) - } return n } -func (m *QueryGetVerifiedClientIdsResponse) Size() (n int) { +func (m *QueryParamsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.ClientIds) > 0 { - for _, s := range m.ClientIds { - l = len(s) - n += 1 + l + sovQuery(uint64(l)) - } - } + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryGetProviderClientIDRequest) Size() (n int) { +func (m *QueryGetLaunchIDFromChannelIDRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.LaunchID != 0 { - n += 1 + sovQuery(uint64(m.LaunchID)) + l = len(m.ChannelID) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) } return n } -func (m *QueryGetProviderClientIDResponse) Size() (n int) { +func (m *QueryGetLaunchIDFromChannelIDResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.ProviderClientID.Size() + l = m.LaunchIDFromChannelID.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllProviderClientIDRequest) Size() (n int) { +func (m *QueryAllLaunchIDFromChannelIDRequest) Size() (n int) { if m == nil { return 0 } @@ -1585,14 +1580,14 @@ func (m *QueryAllProviderClientIDRequest) Size() (n int) { return n } -func (m *QueryAllProviderClientIDResponse) Size() (n int) { +func (m *QueryAllLaunchIDFromChannelIDResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.ProviderClientID) > 0 { - for _, e := range m.ProviderClientID { + if len(m.LaunchIDFromChannelID) > 0 { + for _, e := range m.LaunchIDFromChannelID { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -1604,63 +1599,53 @@ func (m *QueryAllProviderClientIDResponse) Size() (n int) { return n } -func (m *QueryGetLaunchIDFromChannelIDRequest) Size() (n int) { +func (m *QueryGetMonitoringHistoryRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.ChannelID) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if m.LaunchID != 0 { + n += 1 + sovQuery(uint64(m.LaunchID)) } return n } -func (m *QueryGetLaunchIDFromChannelIDResponse) Size() (n int) { +func (m *QueryGetMonitoringHistoryResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.LaunchIDFromChannelID.Size() + l = m.MonitoringHistory.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllLaunchIDFromChannelIDRequest) Size() (n int) { +func (m *QueryGetVerifiedClientIDRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if m.LaunchID != 0 { + n += 1 + sovQuery(uint64(m.LaunchID)) } return n } -func (m *QueryAllLaunchIDFromChannelIDResponse) Size() (n int) { +func (m *QueryGetVerifiedClientIDResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.LaunchIDFromChannelID) > 0 { - for _, e := range m.LaunchIDFromChannelID { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } + l = m.VerifiedClientID.Size() + n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryGetMonitoringHistoryRequest) Size() (n int) { +func (m *QueryGetProviderClientIDRequest) Size() (n int) { if m == nil { return 0 } @@ -1672,34 +1657,46 @@ func (m *QueryGetMonitoringHistoryRequest) Size() (n int) { return n } -func (m *QueryGetMonitoringHistoryResponse) Size() (n int) { +func (m *QueryGetProviderClientIDResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.MonitoringHistory.Size() + l = m.ProviderClientID.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryParamsRequest) Size() (n int) { +func (m *QueryAllProviderClientIDRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } return n } -func (m *QueryParamsResponse) Size() (n int) { +func (m *QueryAllProviderClientIDResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) + if len(m.ProviderClientID) > 0 { + for _, e := range m.ProviderClientID { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } return n } @@ -1709,7 +1706,7 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryGetVerifiedClientIdsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1732,31 +1729,12 @@ func (m *QueryGetVerifiedClientIdsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetVerifiedClientIdsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetVerifiedClientIdsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) - } - m.LaunchID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LaunchID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1778,7 +1756,7 @@ func (m *QueryGetVerifiedClientIdsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetVerifiedClientIdsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1801,17 +1779,17 @@ func (m *QueryGetVerifiedClientIdsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetVerifiedClientIdsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetVerifiedClientIdsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientIds", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -1821,23 +1799,24 @@ func (m *QueryGetVerifiedClientIdsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.ClientIds = append(m.ClientIds, string(dAtA[iNdEx:postIndex])) + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -1860,7 +1839,7 @@ func (m *QueryGetVerifiedClientIdsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetProviderClientIDRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1883,17 +1862,17 @@ func (m *QueryGetProviderClientIDRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetProviderClientIDRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetProviderClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelID", wireType) } - m.LaunchID = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -1903,11 +1882,24 @@ func (m *QueryGetProviderClientIDRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.LaunchID |= uint64(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1929,7 +1921,7 @@ func (m *QueryGetProviderClientIDRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetProviderClientIDResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1952,15 +1944,15 @@ func (m *QueryGetProviderClientIDResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetProviderClientIDResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetProviderClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProviderClientID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromChannelID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1987,7 +1979,7 @@ func (m *QueryGetProviderClientIDResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ProviderClientID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LaunchIDFromChannelID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2012,7 +2004,7 @@ func (m *QueryGetProviderClientIDResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllProviderClientIDRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2035,10 +2027,10 @@ func (m *QueryAllProviderClientIDRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllProviderClientIDRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllProviderClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2098,7 +2090,7 @@ func (m *QueryAllProviderClientIDRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllProviderClientIDResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2121,15 +2113,15 @@ func (m *QueryAllProviderClientIDResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllProviderClientIDResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllProviderClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProviderClientID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromChannelID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2156,8 +2148,8 @@ func (m *QueryAllProviderClientIDResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ProviderClientID = append(m.ProviderClientID, ProviderClientID{}) - if err := m.ProviderClientID[len(m.ProviderClientID)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.LaunchIDFromChannelID = append(m.LaunchIDFromChannelID, LaunchIDFromChannelID{}) + if err := m.LaunchIDFromChannelID[len(m.LaunchIDFromChannelID)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2218,7 +2210,7 @@ func (m *QueryAllProviderClientIDResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetMonitoringHistoryRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2241,17 +2233,17 @@ func (m *QueryGetLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetMonitoringHistoryRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetMonitoringHistoryRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChannelID", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) } - var stringLen uint64 + m.LaunchID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -2261,24 +2253,11 @@ func (m *QueryGetLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.LaunchID |= uint64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ChannelID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2300,7 +2279,7 @@ func (m *QueryGetLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetMonitoringHistoryResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2323,15 +2302,15 @@ func (m *QueryGetLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetMonitoringHistoryResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetLaunchIDFromChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetMonitoringHistoryResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromChannelID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MonitoringHistory", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2358,7 +2337,7 @@ func (m *QueryGetLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.LaunchIDFromChannelID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.MonitoringHistory.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2383,7 +2362,7 @@ func (m *QueryGetLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetVerifiedClientIDRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2406,17 +2385,17 @@ func (m *QueryAllLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetVerifiedClientIDRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetVerifiedClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) } - var msglen int + m.LaunchID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -2426,28 +2405,11 @@ func (m *QueryAllLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.LaunchID |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2469,7 +2431,7 @@ func (m *QueryAllLaunchIDFromChannelIDRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetVerifiedClientIDResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2492,49 +2454,15 @@ func (m *QueryAllLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetVerifiedClientIDResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllLaunchIDFromChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetVerifiedClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LaunchIDFromChannelID", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.LaunchIDFromChannelID = append(m.LaunchIDFromChannelID, LaunchIDFromChannelID{}) - if err := m.LaunchIDFromChannelID[len(m.LaunchIDFromChannelID)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VerifiedClientID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2561,10 +2489,7 @@ func (m *QueryAllLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.VerifiedClientID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2589,7 +2514,7 @@ func (m *QueryAllLaunchIDFromChannelIDResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetMonitoringHistoryRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetProviderClientIDRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2612,10 +2537,10 @@ func (m *QueryGetMonitoringHistoryRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetMonitoringHistoryRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetProviderClientIDRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetMonitoringHistoryRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetProviderClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2658,7 +2583,7 @@ func (m *QueryGetMonitoringHistoryRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetMonitoringHistoryResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetProviderClientIDResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2681,15 +2606,15 @@ func (m *QueryGetMonitoringHistoryResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetMonitoringHistoryResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetProviderClientIDResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetMonitoringHistoryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetProviderClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MonitoringHistory", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProviderClientID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2716,7 +2641,7 @@ func (m *QueryGetMonitoringHistoryResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.MonitoringHistory.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ProviderClientID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2741,7 +2666,7 @@ func (m *QueryGetMonitoringHistoryResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllProviderClientIDRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2764,12 +2689,48 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllProviderClientIDRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllProviderClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2791,7 +2752,7 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllProviderClientIDResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2814,15 +2775,15 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllProviderClientIDResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllProviderClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProviderClientID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2849,7 +2810,44 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ProviderClientID = append(m.ProviderClientID, ProviderClientID{}) + if err := m.ProviderClientID[len(m.ProviderClientID)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/monitoringc/types/query.pb.gw.go b/x/monitoringc/types/query.pb.gw.go index 9b1107de..7cfdd7c0 100644 --- a/x/monitoringc/types/query.pb.gw.go +++ b/x/monitoringc/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: spn/monitoringc/query.proto +// source: network/monitoringc/v1/query.proto /* Package types is a reverse proxy. @@ -33,62 +33,26 @@ var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage var _ = metadata.Join -func request_Query_VerifiedClientIds_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetVerifiedClientIdsRequest +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["launchID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") - } - - protoReq.LaunchID, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) - } - - msg, err := client.VerifiedClientIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_VerifiedClientIds_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetVerifiedClientIdsRequest +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["launchID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") - } - - protoReq.LaunchID, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) - } - - msg, err := server.VerifiedClientIds(ctx, &protoReq) + msg, err := server.Params(ctx, &protoReq) return msg, metadata, err } -func request_Query_ProviderClientID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetProviderClientIDRequest +func request_Query_GetLaunchIDFromChannelID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetLaunchIDFromChannelIDRequest var metadata runtime.ServerMetadata var ( @@ -98,24 +62,24 @@ func request_Query_ProviderClientID_0(ctx context.Context, marshaler runtime.Mar _ = err ) - val, ok = pathParams["launchID"] + val, ok = pathParams["channelID"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channelID") } - protoReq.LaunchID, err = runtime.Uint64(val) + protoReq.ChannelID, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channelID", err) } - msg, err := client.ProviderClientID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetLaunchIDFromChannelID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ProviderClientID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetProviderClientIDRequest +func local_request_Query_GetLaunchIDFromChannelID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetLaunchIDFromChannelIDRequest var metadata runtime.ServerMetadata var ( @@ -125,60 +89,60 @@ func local_request_Query_ProviderClientID_0(ctx context.Context, marshaler runti _ = err ) - val, ok = pathParams["launchID"] + val, ok = pathParams["channelID"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channelID") } - protoReq.LaunchID, err = runtime.Uint64(val) + protoReq.ChannelID, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channelID", err) } - msg, err := server.ProviderClientID(ctx, &protoReq) + msg, err := server.GetLaunchIDFromChannelID(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ProviderClientIDAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_ListLaunchIDFromChannelID_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_ProviderClientIDAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllProviderClientIDRequest +func request_Query_ListLaunchIDFromChannelID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllLaunchIDFromChannelIDRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ProviderClientIDAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListLaunchIDFromChannelID_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ProviderClientIDAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListLaunchIDFromChannelID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ProviderClientIDAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllProviderClientIDRequest +func local_request_Query_ListLaunchIDFromChannelID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllLaunchIDFromChannelIDRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ProviderClientIDAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListLaunchIDFromChannelID_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ProviderClientIDAll(ctx, &protoReq) + msg, err := server.ListLaunchIDFromChannelID(ctx, &protoReq) return msg, metadata, err } -func request_Query_LaunchIDFromChannelID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetLaunchIDFromChannelIDRequest +func request_Query_GetMonitoringHistory_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetMonitoringHistoryRequest var metadata runtime.ServerMetadata var ( @@ -188,24 +152,24 @@ func request_Query_LaunchIDFromChannelID_0(ctx context.Context, marshaler runtim _ = err ) - val, ok = pathParams["channelID"] + val, ok = pathParams["launchID"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channelID") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") } - protoReq.ChannelID, err = runtime.String(val) + protoReq.LaunchID, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channelID", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := client.LaunchIDFromChannelID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetMonitoringHistory(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_LaunchIDFromChannelID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetLaunchIDFromChannelIDRequest +func local_request_Query_GetMonitoringHistory_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetMonitoringHistoryRequest var metadata runtime.ServerMetadata var ( @@ -215,60 +179,78 @@ func local_request_Query_LaunchIDFromChannelID_0(ctx context.Context, marshaler _ = err ) - val, ok = pathParams["channelID"] + val, ok = pathParams["launchID"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channelID") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") } - protoReq.ChannelID, err = runtime.String(val) + protoReq.LaunchID, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channelID", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := server.LaunchIDFromChannelID(ctx, &protoReq) + msg, err := server.GetMonitoringHistory(ctx, &protoReq) return msg, metadata, err } -var ( - filter_Query_LaunchIDFromChannelIDAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Query_LaunchIDFromChannelIDAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllLaunchIDFromChannelIDRequest +func request_Query_GetVerifiedClientID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetVerifiedClientIDRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["launchID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LaunchIDFromChannelIDAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + + protoReq.LaunchID, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := client.LaunchIDFromChannelIDAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetVerifiedClientID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_LaunchIDFromChannelIDAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllLaunchIDFromChannelIDRequest +func local_request_Query_GetVerifiedClientID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetVerifiedClientIDRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["launchID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "launchID") } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LaunchIDFromChannelIDAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + + protoReq.LaunchID, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := server.LaunchIDFromChannelIDAll(ctx, &protoReq) + msg, err := server.GetVerifiedClientID(ctx, &protoReq) return msg, metadata, err } -func request_Query_MonitoringHistory_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetMonitoringHistoryRequest +func request_Query_GetProviderClientID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetProviderClientIDRequest var metadata runtime.ServerMetadata var ( @@ -289,13 +271,13 @@ func request_Query_MonitoringHistory_0(ctx context.Context, marshaler runtime.Ma return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := client.MonitoringHistory(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetProviderClientID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_MonitoringHistory_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetMonitoringHistoryRequest +func local_request_Query_GetProviderClientID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetProviderClientIDRequest var metadata runtime.ServerMetadata var ( @@ -316,25 +298,43 @@ func local_request_Query_MonitoringHistory_0(ctx context.Context, marshaler runt return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := server.MonitoringHistory(ctx, &protoReq) + msg, err := server.GetProviderClientID(ctx, &protoReq) return msg, metadata, err } -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest +var ( + filter_Query_ListProviderClientID_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_ListProviderClientID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllProviderClientIDRequest var metadata runtime.ServerMetadata - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListProviderClientID_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListProviderClientID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest +func local_request_Query_ListProviderClientID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllProviderClientIDRequest var metadata runtime.ServerMetadata - msg, err := server.Params(ctx, &protoReq) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListProviderClientID_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListProviderClientID(ctx, &protoReq) return msg, metadata, err } @@ -345,7 +345,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - mux.Handle("GET", pattern_Query_VerifiedClientIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -356,7 +356,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_VerifiedClientIds_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -364,11 +364,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_VerifiedClientIds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProviderClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetLaunchIDFromChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -379,7 +379,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ProviderClientID_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetLaunchIDFromChannelID_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -387,11 +387,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ProviderClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetLaunchIDFromChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProviderClientIDAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListLaunchIDFromChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -402,7 +402,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ProviderClientIDAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListLaunchIDFromChannelID_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -410,11 +410,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ProviderClientIDAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListLaunchIDFromChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_LaunchIDFromChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetMonitoringHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -425,7 +425,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_LaunchIDFromChannelID_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetMonitoringHistory_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -433,11 +433,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_LaunchIDFromChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetMonitoringHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_LaunchIDFromChannelIDAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetVerifiedClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -448,7 +448,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_LaunchIDFromChannelIDAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetVerifiedClientID_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -456,11 +456,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_LaunchIDFromChannelIDAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetVerifiedClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MonitoringHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetProviderClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -471,7 +471,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_MonitoringHistory_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetProviderClientID_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -479,11 +479,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_MonitoringHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetProviderClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListProviderClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -494,7 +494,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListProviderClientID_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -502,7 +502,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListProviderClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -547,7 +547,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - mux.Handle("GET", pattern_Query_VerifiedClientIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -556,18 +556,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_VerifiedClientIds_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_VerifiedClientIds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProviderClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetLaunchIDFromChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -576,18 +576,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ProviderClientID_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetLaunchIDFromChannelID_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ProviderClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetLaunchIDFromChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProviderClientIDAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListLaunchIDFromChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -596,18 +596,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ProviderClientIDAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListLaunchIDFromChannelID_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ProviderClientIDAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListLaunchIDFromChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_LaunchIDFromChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetMonitoringHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -616,18 +616,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_LaunchIDFromChannelID_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetMonitoringHistory_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_LaunchIDFromChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetMonitoringHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_LaunchIDFromChannelIDAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetVerifiedClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -636,18 +636,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_LaunchIDFromChannelIDAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetVerifiedClientID_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_LaunchIDFromChannelIDAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetVerifiedClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MonitoringHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetProviderClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -656,18 +656,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_MonitoringHistory_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetProviderClientID_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_MonitoringHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetProviderClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListProviderClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -676,14 +676,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListProviderClientID_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListProviderClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -691,33 +691,33 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_VerifiedClientIds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "monitoringc", "verified_client_ids", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ignite", "network", "monitoringc", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ProviderClientID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "monitoringc", "provider_client_id", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetLaunchIDFromChannelID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "monitoringc", "launch_id_from_channel_id", "channelID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ProviderClientIDAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "monitoringc", "provider_client_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListLaunchIDFromChannelID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "monitoringc", "launch_id_from_channel_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_LaunchIDFromChannelID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "monitoringc", "launch_id_from_channel_id", "channelID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetMonitoringHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "monitoringc", "monitoring_history", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_LaunchIDFromChannelIDAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "monitoringc", "launch_id_from_channel_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetVerifiedClientID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "monitoringc", "verified_client_id", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_MonitoringHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "monitoringc", "monitoring_history", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetProviderClientID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "monitoringc", "provider_client_id", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "monitoringc", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListProviderClientID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "monitoringc", "provider_client_id"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( - forward_Query_VerifiedClientIds_0 = runtime.ForwardResponseMessage + forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_ProviderClientID_0 = runtime.ForwardResponseMessage + forward_Query_GetLaunchIDFromChannelID_0 = runtime.ForwardResponseMessage - forward_Query_ProviderClientIDAll_0 = runtime.ForwardResponseMessage + forward_Query_ListLaunchIDFromChannelID_0 = runtime.ForwardResponseMessage - forward_Query_LaunchIDFromChannelID_0 = runtime.ForwardResponseMessage + forward_Query_GetMonitoringHistory_0 = runtime.ForwardResponseMessage - forward_Query_LaunchIDFromChannelIDAll_0 = runtime.ForwardResponseMessage + forward_Query_GetVerifiedClientID_0 = runtime.ForwardResponseMessage - forward_Query_MonitoringHistory_0 = runtime.ForwardResponseMessage + forward_Query_GetProviderClientID_0 = runtime.ForwardResponseMessage - forward_Query_Params_0 = runtime.ForwardResponseMessage + forward_Query_ListProviderClientID_0 = runtime.ForwardResponseMessage ) diff --git a/x/monitoringc/types/tx.pb.go b/x/monitoringc/types/tx.pb.go index fd140f30..23873225 100644 --- a/x/monitoringc/types/tx.pb.go +++ b/x/monitoringc/types/tx.pb.go @@ -1,16 +1,18 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/tx.proto +// source: network/monitoringc/v1/tx.proto package types import ( context "context" fmt "fmt" - _ "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - types "github.com/tendermint/spn/pkg/types" + types "github.com/ignite/network/pkg/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -30,6 +32,99 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_b1b45598fc825ff8, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b1b45598fc825ff8, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + type MsgCreateClient struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` @@ -43,7 +138,7 @@ func (m *MsgCreateClient) Reset() { *m = MsgCreateClient{} } func (m *MsgCreateClient) String() string { return proto.CompactTextString(m) } func (*MsgCreateClient) ProtoMessage() {} func (*MsgCreateClient) Descriptor() ([]byte, []int) { - return fileDescriptor_ee28c6f062e91bf1, []int{0} + return fileDescriptor_b1b45598fc825ff8, []int{2} } func (m *MsgCreateClient) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -122,7 +217,7 @@ func (m *MsgCreateClientResponse) Reset() { *m = MsgCreateClientResponse func (m *MsgCreateClientResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateClientResponse) ProtoMessage() {} func (*MsgCreateClientResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ee28c6f062e91bf1, []int{1} + return fileDescriptor_b1b45598fc825ff8, []int{3} } func (m *MsgCreateClientResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -159,40 +254,51 @@ func (m *MsgCreateClientResponse) GetClientID() string { } func init() { - proto.RegisterType((*MsgCreateClient)(nil), "spn.monitoringc.MsgCreateClient") - proto.RegisterType((*MsgCreateClientResponse)(nil), "spn.monitoringc.MsgCreateClientResponse") -} - -func init() { proto.RegisterFile("spn/monitoringc/tx.proto", fileDescriptor_ee28c6f062e91bf1) } - -var fileDescriptor_ee28c6f062e91bf1 = []byte{ - // 405 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x6a, 0x1b, 0x31, - 0x10, 0xb5, 0x62, 0x37, 0x6d, 0xd5, 0x10, 0x83, 0x5a, 0x88, 0xea, 0xc3, 0x76, 0xc9, 0xa1, 0x2c, - 0x85, 0xae, 0x48, 0x4a, 0x3f, 0xa0, 0x71, 0x20, 0xcd, 0x21, 0x50, 0x36, 0xd0, 0x43, 0x6e, 0x5a, - 0x79, 0x90, 0x05, 0xde, 0xd1, 0x56, 0xd2, 0x9a, 0xe4, 0x2f, 0xfa, 0x13, 0xfd, 0x97, 0x1c, 0x73, - 0xec, 0xa9, 0x14, 0xfb, 0x47, 0x8a, 0x36, 0x8e, 0xf1, 0xee, 0xa5, 0x37, 0xbd, 0x37, 0x33, 0xef, - 0xed, 0xbc, 0x1d, 0xca, 0x7d, 0x8d, 0xa2, 0xb2, 0x68, 0x82, 0x75, 0x06, 0xb5, 0x12, 0xe1, 0x36, - 0xaf, 0x9d, 0x0d, 0x96, 0x8d, 0x7d, 0x8d, 0xf9, 0x4e, 0x65, 0xf2, 0x41, 0x59, 0x5f, 0x59, 0x2f, - 0x4a, 0xe9, 0x41, 0xfc, 0x68, 0xc0, 0xdd, 0x89, 0xe5, 0x49, 0x09, 0x41, 0x9e, 0x88, 0x5a, 0x6a, - 0x83, 0x32, 0x18, 0x8b, 0x8f, 0xc3, 0x93, 0x37, 0xda, 0x6a, 0xdb, 0x3e, 0x45, 0x7c, 0x6d, 0xd8, - 0xd7, 0xd1, 0x2c, 0xdc, 0xd5, 0xe0, 0x85, 0x29, 0xd5, 0x23, 0x79, 0xfc, 0x6b, 0x8f, 0x8e, 0xaf, - 0xbc, 0x9e, 0x3a, 0x90, 0x01, 0xa6, 0x0b, 0x03, 0x18, 0x18, 0xa7, 0xcf, 0x55, 0xc4, 0xd6, 0x71, - 0x92, 0x92, 0xec, 0x65, 0xf1, 0x04, 0xd9, 0x84, 0xbe, 0x58, 0xc8, 0x06, 0xd5, 0xfc, 0xf2, 0x9c, - 0xef, 0xa5, 0x24, 0x1b, 0x15, 0x5b, 0xcc, 0x2e, 0xe8, 0xa1, 0xb2, 0xe8, 0x01, 0x7d, 0xe3, 0xaf, - 0x83, 0x0c, 0xc0, 0x87, 0x29, 0xc9, 0x5e, 0x9d, 0xbe, 0xcd, 0xe3, 0x2a, 0xad, 0x6f, 0x3e, 0xed, - 0x34, 0x9c, 0x8d, 0xee, 0xff, 0xbc, 0x1b, 0x14, 0xbd, 0x31, 0xf6, 0x85, 0x1e, 0x2c, 0xe5, 0xc2, - 0xcc, 0xa2, 0xe3, 0x35, 0x04, 0x3e, 0x6a, 0x65, 0x8e, 0x76, 0x64, 0xbe, 0xef, 0x94, 0x37, 0x22, - 0x9d, 0x11, 0x96, 0xd1, 0x71, 0x83, 0xa5, 0xc5, 0x99, 0x41, 0xfd, 0x0d, 0x9c, 0xb1, 0x33, 0xfe, - 0x2c, 0x25, 0xd9, 0xb0, 0xe8, 0xd3, 0xec, 0x3d, 0x3d, 0x74, 0xb0, 0x34, 0xde, 0x58, 0xfc, 0x0a, - 0x46, 0xcf, 0x03, 0xdf, 0x6f, 0xf7, 0xea, 0xb1, 0xc7, 0x9f, 0xe9, 0x51, 0x2f, 0xa6, 0x02, 0x7c, - 0x1d, 0x3f, 0x3c, 0x86, 0xa2, 0x5a, 0xe6, 0xf2, 0x7c, 0x93, 0xd7, 0x16, 0x9f, 0x4a, 0x3a, 0xbc, - 0xf2, 0x9a, 0xdd, 0xd0, 0x83, 0x4e, 0xc2, 0x69, 0xde, 0xfb, 0xbd, 0x79, 0x4f, 0x7c, 0x92, 0xfd, - 0xaf, 0xe3, 0xc9, 0xfe, 0xec, 0xe2, 0x7e, 0x95, 0x90, 0x87, 0x55, 0x42, 0xfe, 0xae, 0x12, 0xf2, - 0x73, 0x9d, 0x0c, 0x1e, 0xd6, 0xc9, 0xe0, 0xf7, 0x3a, 0x19, 0xdc, 0x7c, 0xd4, 0x26, 0xcc, 0x9b, - 0x32, 0x57, 0xb6, 0x12, 0x01, 0x70, 0x06, 0xae, 0x32, 0x18, 0x44, 0x3c, 0x83, 0xdb, 0xee, 0xd5, - 0xc5, 0x54, 0xcb, 0xfd, 0xf6, 0x22, 0x3e, 0xfd, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x2e, 0x00, - 0x88, 0x95, 0x02, 0x00, 0x00, + proto.RegisterType((*MsgUpdateParams)(nil), "network.monitoringc.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "network.monitoringc.v1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgCreateClient)(nil), "network.monitoringc.v1.MsgCreateClient") + proto.RegisterType((*MsgCreateClientResponse)(nil), "network.monitoringc.v1.MsgCreateClientResponse") +} + +func init() { proto.RegisterFile("network/monitoringc/v1/tx.proto", fileDescriptor_b1b45598fc825ff8) } + +var fileDescriptor_b1b45598fc825ff8 = []byte{ + // 559 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x41, 0x6b, 0x13, 0x4f, + 0x14, 0xcf, 0x36, 0x69, 0xfe, 0xff, 0x8c, 0xa1, 0xc5, 0xa5, 0x98, 0x6d, 0xc4, 0x6d, 0x88, 0xa8, + 0x21, 0xd0, 0x1d, 0x1a, 0x51, 0xa4, 0xb7, 0x26, 0x15, 0x2d, 0x52, 0x28, 0x1b, 0xf4, 0xe0, 0x45, + 0x36, 0xbb, 0xc3, 0xec, 0x60, 0x76, 0x26, 0xcc, 0x4c, 0x62, 0x7b, 0x13, 0x8f, 0x9e, 0xfc, 0x18, + 0x1e, 0x73, 0xf0, 0x33, 0x48, 0x8f, 0x45, 0x10, 0x3c, 0x49, 0x49, 0x0e, 0xf9, 0x1a, 0x32, 0xb3, + 0xbb, 0x69, 0xb2, 0xa4, 0xd5, 0xcb, 0xb2, 0xef, 0xbd, 0xdf, 0x7b, 0xbf, 0xf7, 0x7e, 0xef, 0x0d, + 0xd8, 0xa1, 0x48, 0x7e, 0x60, 0xfc, 0x3d, 0x8c, 0x18, 0x25, 0x92, 0x71, 0x42, 0xb1, 0x0f, 0x47, + 0x7b, 0x50, 0x9e, 0x3a, 0x03, 0xce, 0x24, 0x33, 0xef, 0x24, 0x00, 0x67, 0x01, 0xe0, 0x8c, 0xf6, + 0xaa, 0xb7, 0xbd, 0x88, 0x50, 0x06, 0xf5, 0x37, 0x86, 0x56, 0x2b, 0x3e, 0x13, 0x11, 0x13, 0x30, + 0x12, 0x58, 0x95, 0x88, 0x04, 0x4e, 0x02, 0xdb, 0x71, 0xe0, 0x9d, 0xb6, 0x60, 0x6c, 0x24, 0xa1, + 0x2d, 0xcc, 0x30, 0x8b, 0xfd, 0xea, 0x2f, 0xf1, 0xde, 0xbf, 0xa6, 0xab, 0x81, 0xc7, 0xbd, 0x28, + 0x4d, 0xad, 0xa4, 0x20, 0x79, 0x36, 0x40, 0x02, 0x92, 0x9e, 0x1f, 0x07, 0xea, 0xdf, 0x0d, 0xb0, + 0x79, 0x2c, 0xf0, 0xeb, 0x41, 0xe0, 0x49, 0x74, 0xa2, 0x53, 0xcc, 0xa7, 0xa0, 0xe4, 0x0d, 0x65, + 0xc8, 0x38, 0x91, 0x67, 0x96, 0x51, 0x33, 0x1a, 0xa5, 0xb6, 0xf5, 0xe3, 0xdb, 0xee, 0x56, 0xd2, + 0xcc, 0x41, 0x10, 0x70, 0x24, 0x44, 0x57, 0x2a, 0x2a, 0xf7, 0x0a, 0x6a, 0x1e, 0x80, 0x62, 0x4c, + 0x6a, 0xad, 0xd5, 0x8c, 0xc6, 0xad, 0x96, 0xed, 0xac, 0xd6, 0xc3, 0x89, 0x79, 0xda, 0xa5, 0xf3, + 0xdf, 0x3b, 0xb9, 0xaf, 0xb3, 0x71, 0xd3, 0x70, 0x93, 0xc4, 0xfd, 0x67, 0x9f, 0x66, 0xe3, 0xe6, + 0x55, 0xc9, 0xcf, 0xb3, 0x71, 0xf3, 0x41, 0xda, 0xfa, 0xe9, 0xd2, 0x84, 0x99, 0xa6, 0xeb, 0xdb, + 0xa0, 0x92, 0x71, 0xb9, 0x48, 0x0c, 0x18, 0x15, 0xa8, 0xfe, 0x73, 0x4d, 0xcf, 0xd8, 0xe1, 0xc8, + 0x93, 0xa8, 0xd3, 0x27, 0x88, 0x4a, 0xb3, 0x05, 0xfe, 0xf3, 0x95, 0xcd, 0xf8, 0x5f, 0x27, 0x4c, + 0x81, 0x66, 0x15, 0xfc, 0xdf, 0xf7, 0x86, 0xd4, 0x0f, 0x8f, 0x0e, 0xf5, 0x84, 0x05, 0x77, 0x6e, + 0x9b, 0xaf, 0xc0, 0x86, 0xaf, 0xc8, 0xa8, 0x18, 0x8a, 0xae, 0xf4, 0x24, 0xb2, 0xf2, 0x5a, 0x83, + 0x7b, 0x73, 0x0d, 0xb4, 0xf2, 0x4e, 0x67, 0x09, 0xd4, 0x2e, 0x28, 0x09, 0xdc, 0x4c, 0xaa, 0xf9, + 0x1c, 0x94, 0x47, 0x5e, 0x9f, 0x04, 0x8a, 0xb5, 0x8b, 0xa4, 0x55, 0xd0, 0xa5, 0xee, 0x66, 0x4a, + 0xbd, 0x59, 0x80, 0x24, 0x85, 0x96, 0xd2, 0xcc, 0x06, 0xd8, 0x1c, 0xd2, 0x1e, 0xa3, 0x01, 0xa1, + 0xf8, 0x04, 0x71, 0xc2, 0x02, 0x6b, 0xbd, 0x66, 0x34, 0xf2, 0x6e, 0xd6, 0x6d, 0x3e, 0x04, 0x1b, + 0x1c, 0x8d, 0x88, 0x20, 0x8c, 0xbe, 0x44, 0x04, 0x87, 0xd2, 0x2a, 0xea, 0xf9, 0x32, 0xde, 0xfd, + 0xb2, 0x5a, 0x4f, 0xaa, 0x47, 0xfd, 0x89, 0x96, 0x7c, 0x51, 0xd6, 0x54, 0x72, 0x25, 0x95, 0xaf, + 0x3d, 0x47, 0x87, 0xb1, 0xbe, 0xee, 0xdc, 0x6e, 0x5d, 0x1a, 0x20, 0x7f, 0x2c, 0xb0, 0x19, 0x82, + 0xf2, 0xd2, 0xd9, 0x3d, 0xba, 0xee, 0x5c, 0x32, 0x7b, 0xad, 0xc2, 0x7f, 0x04, 0xce, 0xbb, 0x09, + 0x41, 0x79, 0x69, 0xf9, 0x37, 0x31, 0x2d, 0x02, 0x6f, 0x64, 0x5a, 0x35, 0x77, 0x75, 0xfd, 0xa3, + 0x3a, 0xe7, 0xf6, 0x8b, 0xf3, 0x89, 0x6d, 0x5c, 0x4c, 0x6c, 0xe3, 0x72, 0x62, 0x1b, 0x5f, 0xa6, + 0x76, 0xee, 0x62, 0x6a, 0xe7, 0x7e, 0x4d, 0xed, 0xdc, 0xdb, 0x5d, 0x4c, 0x64, 0x38, 0xec, 0x39, + 0x3e, 0x8b, 0x20, 0xc1, 0x94, 0x48, 0x04, 0x57, 0xdf, 0xb7, 0xde, 0x71, 0xaf, 0xa8, 0x5f, 0xe9, + 0xe3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x93, 0x12, 0xa7, 0x74, 0x7b, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -207,6 +313,9 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) CreateClient(ctx context.Context, in *MsgCreateClient, opts ...grpc.CallOption) (*MsgCreateClientResponse, error) } @@ -218,9 +327,18 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) CreateClient(ctx context.Context, in *MsgCreateClient, opts ...grpc.CallOption) (*MsgCreateClientResponse, error) { out := new(MsgCreateClientResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringc.Msg/CreateClient", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.monitoringc.v1.Msg/CreateClient", in, out, opts...) if err != nil { return nil, err } @@ -229,6 +347,9 @@ func (c *msgClient) CreateClient(ctx context.Context, in *MsgCreateClient, opts // MsgServer is the server API for Msg service. type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) CreateClient(context.Context, *MsgCreateClient) (*MsgCreateClientResponse, error) } @@ -236,6 +357,9 @@ type MsgServer interface { type UnimplementedMsgServer struct { } +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} func (*UnimplementedMsgServer) CreateClient(ctx context.Context, req *MsgCreateClient) (*MsgCreateClientResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateClient not implemented") } @@ -244,6 +368,24 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/network.monitoringc.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_CreateClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgCreateClient) if err := dec(in); err != nil { @@ -254,7 +396,7 @@ func _Msg_CreateClient_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringc.Msg/CreateClient", + FullMethod: "/network.monitoringc.v1.Msg/CreateClient", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).CreateClient(ctx, req.(*MsgCreateClient)) @@ -263,16 +405,83 @@ func _Msg_CreateClient_Handler(srv interface{}, ctx context.Context, dec func(in } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.monitoringc.Msg", + ServiceName: "network.monitoringc.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, { MethodName: "CreateClient", Handler: _Msg_CreateClient_Handler, }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/monitoringc/tx.proto", + Metadata: "network/monitoringc/v1/tx.proto", +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil } func (m *MsgCreateClient) Marshal() (dAtA []byte, err error) { @@ -381,6 +590,30 @@ func encodeVarintTx(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgCreateClient) Size() (n int) { if m == nil { return 0 @@ -426,6 +659,171 @@ func sovTx(x uint64) (n int) { func sozTx(x uint64) (n int) { return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgCreateClient) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/monitoringc/types/types.go b/x/monitoringc/types/types.go new file mode 100644 index 00000000..ab1254f4 --- /dev/null +++ b/x/monitoringc/types/types.go @@ -0,0 +1 @@ +package types diff --git a/x/monitoringc/types/types_test.go b/x/monitoringc/types/types_test.go deleted file mode 100644 index a796ba8a..00000000 --- a/x/monitoringc/types/types_test.go +++ /dev/null @@ -1,11 +0,0 @@ -package types_test - -import "math/rand" - -var r *rand.Rand - -// initialize random generator -func init() { - s := rand.NewSource(1) - r = rand.New(s) -} diff --git a/x/monitoringc/types/verified_client_id.pb.go b/x/monitoringc/types/verified_client_id.pb.go index cce839a8..6d742845 100644 --- a/x/monitoringc/types/verified_client_id.pb.go +++ b/x/monitoringc/types/verified_client_id.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringc/verified_client_id.proto +// source: network/monitoringc/v1/verified_client_id.proto package types @@ -31,7 +31,7 @@ func (m *VerifiedClientID) Reset() { *m = VerifiedClientID{} } func (m *VerifiedClientID) String() string { return proto.CompactTextString(m) } func (*VerifiedClientID) ProtoMessage() {} func (*VerifiedClientID) Descriptor() ([]byte, []int) { - return fileDescriptor_1b3bc36922c4ca0b, []int{0} + return fileDescriptor_f590a6fd2362c575, []int{0} } func (m *VerifiedClientID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -75,27 +75,28 @@ func (m *VerifiedClientID) GetClientIDs() []string { } func init() { - proto.RegisterType((*VerifiedClientID)(nil), "spn.monitoringc.VerifiedClientID") + proto.RegisterType((*VerifiedClientID)(nil), "network.monitoringc.v1.VerifiedClientID") } func init() { - proto.RegisterFile("spn/monitoringc/verified_client_id.proto", fileDescriptor_1b3bc36922c4ca0b) + proto.RegisterFile("network/monitoringc/v1/verified_client_id.proto", fileDescriptor_f590a6fd2362c575) } -var fileDescriptor_1b3bc36922c4ca0b = []byte{ - // 191 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x28, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, 0x2f, 0x4b, 0x2d, 0xca, - 0x4c, 0xcb, 0x4c, 0x4d, 0x89, 0x4f, 0xce, 0xc9, 0x4c, 0xcd, 0x2b, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2f, 0x2e, 0xc8, 0xd3, 0x43, 0x52, 0xa9, 0xe4, 0xc3, 0x25, - 0x10, 0x06, 0x55, 0xec, 0x0c, 0x56, 0xeb, 0xe9, 0x22, 0x24, 0xc5, 0xc5, 0x91, 0x93, 0x58, 0x9a, - 0x97, 0x9c, 0xe1, 0xe9, 0x22, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x12, 0x04, 0xe7, 0x0b, 0xc9, 0x70, - 0x71, 0x26, 0x43, 0xd5, 0x15, 0x4b, 0x30, 0x29, 0x30, 0x6b, 0x70, 0x06, 0x21, 0x04, 0x9c, 0xdc, - 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, - 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x37, 0x3d, 0xb3, 0x24, 0xa3, - 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0xbf, 0x24, 0x35, 0x2f, 0x25, 0xb5, 0x28, 0x37, 0x33, 0xaf, - 0x44, 0x1f, 0xe4, 0xf0, 0x0a, 0x14, 0xa7, 0x97, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x9d, - 0x6b, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x73, 0xfc, 0x71, 0x28, 0xda, 0x00, 0x00, 0x00, +var fileDescriptor_f590a6fd2362c575 = []byte{ + // 195 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x4f, 0xd6, + 0x2f, 0x33, 0xd4, 0x2f, 0x4b, 0x2d, 0xca, 0x4c, 0xcb, 0x4c, 0x4d, 0x89, 0x4f, 0xce, 0xc9, 0x4c, + 0xcd, 0x2b, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x83, 0x6a, 0xd0, + 0x43, 0xd2, 0xa0, 0x57, 0x66, 0xa8, 0xe4, 0xc3, 0x25, 0x10, 0x06, 0xd5, 0xe3, 0x0c, 0xd6, 0xe2, + 0xe9, 0x22, 0x24, 0xc5, 0xc5, 0x91, 0x93, 0x58, 0x9a, 0x97, 0x9c, 0xe1, 0xe9, 0x22, 0xc1, 0xa8, + 0xc0, 0xa8, 0xc1, 0x12, 0x04, 0xe7, 0x0b, 0xc9, 0x70, 0x71, 0x26, 0x43, 0xd5, 0x15, 0x4b, 0x30, + 0x29, 0x30, 0x6b, 0x70, 0x06, 0x21, 0x04, 0x9c, 0xdc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, + 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, + 0x58, 0x8e, 0x21, 0x4a, 0x37, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, + 0x33, 0x3d, 0x2f, 0xb3, 0x24, 0x15, 0xee, 0x85, 0x0a, 0x14, 0x4f, 0x94, 0x54, 0x16, 0xa4, 0x16, + 0x27, 0xb1, 0x81, 0x5d, 0x6d, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xd3, 0xe1, 0x44, 0xeb, 0xe8, + 0x00, 0x00, 0x00, } func (m *VerifiedClientID) Marshal() (dAtA []byte, err error) { diff --git a/x/monitoringp/client/cli/query.go b/x/monitoringp/client/cli/query.go deleted file mode 100644 index 7272b117..00000000 --- a/x/monitoringp/client/cli/query.go +++ /dev/null @@ -1,34 +0,0 @@ -package cli - -import ( - "fmt" - // "strings" - - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -// GetQueryCmd returns the cli query commands for this module -func GetQueryCmd(queryRoute string) *cobra.Command { - // Group monitoringp queries under a subcommand - cmd := &cobra.Command{ - Use: types.FullModuleName, - Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdShowConsumerClientID(), - CmdShowConnectionChannelID(), - CmdShowMonitoringInfo(), - CmdQueryParams(), - ) - - // this line is used by starport scaffolding # 1 - return cmd -} diff --git a/x/monitoringp/client/cli/query_connection_channel_id.go b/x/monitoringp/client/cli/query_connection_channel_id.go deleted file mode 100644 index f3086ae8..00000000 --- a/x/monitoringp/client/cli/query_connection_channel_id.go +++ /dev/null @@ -1,37 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -func CmdShowConnectionChannelID() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-connection-channel-id", - Short: "Shows the connection channel ID used for the IBC connection", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryGetConnectionChannelIDRequest{} - - res, err := queryClient.ConnectionChannelID(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringp/client/cli/query_consumer_client_id.go b/x/monitoringp/client/cli/query_consumer_client_id.go deleted file mode 100644 index 1c25f07a..00000000 --- a/x/monitoringp/client/cli/query_consumer_client_id.go +++ /dev/null @@ -1,37 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -func CmdShowConsumerClientID() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-consumer-client-id", - Short: "Shows the consumer client ID used for the IBC connection", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryGetConsumerClientIDRequest{} - - res, err := queryClient.ConsumerClientID(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringp/client/cli/query_monitoring_info.go b/x/monitoringp/client/cli/query_monitoring_info.go deleted file mode 100644 index 8d3635c3..00000000 --- a/x/monitoringp/client/cli/query_monitoring_info.go +++ /dev/null @@ -1,37 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -func CmdShowMonitoringInfo() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-monitoring-info", - Short: "Shows the monitoring information", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryGetMonitoringInfoRequest{} - - res, err := queryClient.MonitoringInfo(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringp/client/cli/query_params.go b/x/monitoringp/client/cli/query_params.go deleted file mode 100644 index 10a05a3e..00000000 --- a/x/monitoringp/client/cli/query_params.go +++ /dev/null @@ -1,35 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -func CmdQueryParams() *cobra.Command { - cmd := &cobra.Command{ - Use: "params", - Short: "Shows the parameters of the module", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/monitoringp/client/cli/tx.go b/x/monitoringp/client/cli/tx.go index 0b05bb2a..875a537a 100644 --- a/x/monitoringp/client/cli/tx.go +++ b/x/monitoringp/client/cli/tx.go @@ -2,17 +2,23 @@ package cli import ( "fmt" + "time" - "github.com/cosmos/cosmos-sdk/client" "github.com/spf13/cobra" - "github.com/tendermint/spn/x/monitoringp/types" + "github.com/cosmos/cosmos-sdk/client" + // "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/ignite/network/x/monitoringp/types" ) -// GetTxCmd returns the transaction commands for this module +var DefaultRelativePacketTimeoutTimestamp = uint64((time.Duration(10) * time.Minute).Nanoseconds()) + +const listSeparator = "," + +// GetTxCmd returns the transaction commands for this module. func GetTxCmd() *cobra.Command { cmd := &cobra.Command{ - Use: types.FullModuleName, + Use: types.ModuleName, Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), DisableFlagParsing: true, SuggestionsMinimumDistance: 2, @@ -20,5 +26,6 @@ func GetTxCmd() *cobra.Command { } // this line is used by starport scaffolding # 1 + return cmd } diff --git a/x/monitoringp/genesis.go b/x/monitoringp/genesis.go deleted file mode 100644 index 429420d1..00000000 --- a/x/monitoringp/genesis.go +++ /dev/null @@ -1,72 +0,0 @@ -package monitoringp - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringp/keeper" - "github.com/tendermint/spn/x/monitoringp/types" -) - -// InitGenesis initializes the monitoringp module's state from a provided genesis -// state. -func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { - // Set if defined - if genState.ConsumerClientID != nil { - k.SetConsumerClientID(ctx, *genState.ConsumerClientID) - } - // Set if defined - if genState.ConnectionChannelID != nil { - k.SetConnectionChannelID(ctx, *genState.ConnectionChannelID) - } - // Set if defined - if genState.MonitoringInfo != nil { - k.SetMonitoringInfo(ctx, *genState.MonitoringInfo) - } - // this line is used by starport scaffolding # genesis/module/init - k.SetPort(ctx, genState.PortId) - // Only try to bind to port if it is not already bound, since we may already own - // port capability from capability InitGenesis - if !k.IsBound(ctx, genState.PortId) { - // module binds to the port on InitChain - // and claims the returned capability - err := k.BindPort(ctx, genState.PortId) - if err != nil { - panic("could not claim port capability: " + err.Error()) - } - } - k.SetParams(ctx, genState.Params) - - // initialize and setup the consumer IBC client - if genState.Params.ConsumerConsensusState.Timestamp != "" { - _, err := k.InitializeConsumerClient(ctx) - if err != nil { - panic("couldn't initialize the consumer client ID" + err.Error()) - } - } -} - -// ExportGenesis returns the monitoringp module's exported genesis. -func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - genesis := types.DefaultGenesis() - genesis.Params = k.GetParams(ctx) - - genesis.PortId = k.GetPort(ctx) - // Get all consumerClientID - consumerClientID, found := k.GetConsumerClientID(ctx) - if found { - genesis.ConsumerClientID = &consumerClientID - } - // Get all connectionChannelID - connectionChannelID, found := k.GetConnectionChannelID(ctx) - if found { - genesis.ConnectionChannelID = &connectionChannelID - } - // Get all monitoringInfo - monitoringInfo, found := k.GetMonitoringInfo(ctx) - if found { - genesis.MonitoringInfo = &monitoringInfo - } - // this line is used by starport scaffolding # genesis/module/export - - return genesis -} diff --git a/x/monitoringp/genesis_test.go b/x/monitoringp/genesis_test.go deleted file mode 100644 index 538c96c3..00000000 --- a/x/monitoringp/genesis_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package monitoringp_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringp" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func TestGenesis(t *testing.T) { - genesisState := types.GenesisState{ - Params: types.DefaultParams(), - PortId: types.PortID, - ConsumerClientID: &types.ConsumerClientID{ - ClientID: "29", - }, - ConnectionChannelID: &types.ConnectionChannelID{ - ChannelID: "17", - }, - MonitoringInfo: &types.MonitoringInfo{}, - // this line is used by starport scaffolding # genesis/test/state - } - - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - t.Run("should allow import and export of genesis", func(t *testing.T) { - monitoringp.InitGenesis(ctx, *tk.MonitoringProviderKeeper, genesisState) - got := monitoringp.ExportGenesis(ctx, *tk.MonitoringProviderKeeper) - require.NotNil(t, got) - - nullify.Fill(&genesisState) - nullify.Fill(got) - - require.Equal(t, genesisState.PortId, got.PortId) - require.Equal(t, genesisState.ConsumerClientID, got.ConsumerClientID) - require.Equal(t, genesisState.ConnectionChannelID, got.ConnectionChannelID) - require.Equal(t, genesisState.MonitoringInfo, got.MonitoringInfo) - // this line is used by starport scaffolding # genesis/test/assert - }) -} diff --git a/x/monitoringp/keeper/begin_block.go b/x/monitoringp/keeper/begin_block.go deleted file mode 100644 index 03665dae..00000000 --- a/x/monitoringp/keeper/begin_block.go +++ /dev/null @@ -1,107 +0,0 @@ -package keeper - -import ( - "fmt" - "time" - - abci "github.com/cometbft/cometbft/abci/types" - sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/monitoringp/types" -) - -const ( - // MonitoringPacketTimeoutDelay is the delay before a monitoring packet is timed out - // The timeout is set to one year - // This is an arbitrarily chosen value that should never be reached in practice - MonitoringPacketTimeoutDelay = time.Hour * 8760 -) - -// ReportBlockSignatures gets signatures from blocks and update monitoring info -func (k Keeper) ReportBlockSignatures(ctx sdk.Context, lastCommit abci.CommitInfo, blockHeight int64) error { - // skip first block because it is not signed - if blockHeight == 1 { - return nil - } - - // no report if last height is reached - lastBlockHeight := k.LastBlockHeight(ctx) - if blockHeight > lastBlockHeight { - return nil - } - - // get monitoring info - monitoringInfo, found := k.GetMonitoringInfo(ctx) - if !found { - monitoringInfo = types.MonitoringInfo{ - SignatureCounts: spntypes.NewSignatureCounts(), - } - } - - // update signatures with voters that signed blocks - valSetSize := int64(len(lastCommit.Votes)) - for _, vote := range lastCommit.Votes { - if vote.SignedLastBlock { - // get the operator address from the consensus address - val, found := k.stakingKeeper.GetValidatorByConsAddr(ctx, vote.Validator.Address) - if !found { - return fmt.Errorf("validator from consensus address %s not found", vote.Validator.Address) - } - - monitoringInfo.SignatureCounts.AddSignature(val.OperatorAddress, valSetSize) - } - } - - // increment block count and save the monitoring info - monitoringInfo.SignatureCounts.BlockCount++ - k.SetMonitoringInfo(ctx, monitoringInfo) - - return nil -} - -// TransmitSignatures transmits over IBC the signatures to consumer if height is reached -// and signatures are not yet transmitted -func (k Keeper) TransmitSignatures(ctx sdk.Context, blockHeight int64) (sequence uint64, err error) { - // check condition to transmit packet - // IBC connection to consumer must be established - // last block height must be reached - // monitoring info must exist - // signatures must not yet be transmitted - if blockHeight < k.LastBlockHeight(ctx) { - return 0, nil - } - cid, cidFound := k.GetConnectionChannelID(ctx) - if !cidFound { - return 0, nil - } - mi, miFound := k.GetMonitoringInfo(ctx) - if !miFound || mi.Transmitted { - return 0, nil - } - - // transmit signature packet - sequence, err = k.TransmitMonitoringPacket( - ctx, - spntypes.MonitoringPacket{ - BlockHeight: blockHeight, - SignatureCounts: mi.SignatureCounts, - }, - types.PortID, - cid.ChannelID, - clienttypes.ZeroHeight(), - uint64(ctx.BlockTime().Add(MonitoringPacketTimeoutDelay).UnixNano()), - ) - if err != nil { - k.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: err.Error(), - }) - return 0, err - } - - // signatures have been transmitted - mi.Transmitted = true - k.SetMonitoringInfo(ctx, mi) - return sequence, nil -} diff --git a/x/monitoringp/keeper/begin_block_test.go b/x/monitoringp/keeper/begin_block_test.go deleted file mode 100644 index 9fb66366..00000000 --- a/x/monitoringp/keeper/begin_block_test.go +++ /dev/null @@ -1,369 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - - abci "github.com/cometbft/cometbft/abci/types" - "github.com/stretchr/testify/require" - - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func TestKeeper_ReportBlockSignatures(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - var ( - valFoo = sample.Validator(t, r) - valBar = sample.Validator(t, r) - valBaz = sample.Validator(t, r) - valFred = sample.Validator(t, r) - valQux = sample.Validator(t, r) - - consFoo sdk.ConsAddress - consBar sdk.ConsAddress - consBaz sdk.ConsAddress - consFred sdk.ConsAddress - consQux sdk.ConsAddress - err error - ) - - t.Run("should get consensus addresses", func(t *testing.T) { - consFoo, err = valFoo.GetConsAddr() - require.NoError(t, err) - consBar, err = valBar.GetConsAddr() - require.NoError(t, err) - consBaz, err = valBaz.GetConsAddr() - require.NoError(t, err) - consFred, err = valFred.GetConsAddr() - require.NoError(t, err) - consQux, err = valQux.GetConsAddr() - require.NoError(t, err) - }) - - // consensus address with no validator associated - consNoValidator := sample.ConsAddress(r) - - // initialize staking validator set - tk.StakingKeeper.SetValidator(ctx, valFoo) - tk.StakingKeeper.SetValidator(ctx, valBar) - tk.StakingKeeper.SetValidator(ctx, valBaz) - tk.StakingKeeper.SetValidator(ctx, valFred) - tk.StakingKeeper.SetValidator(ctx, valQux) - - t.Run("should set validators by consensus address", func(t *testing.T) { - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valFoo) - require.NoError(t, err) - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valBar) - require.NoError(t, err) - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valBaz) - require.NoError(t, err) - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valFred) - require.NoError(t, err) - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valQux) - require.NoError(t, err) - }) - - tests := []struct { - name string - monitoringInfoExist bool - inputMonitoringInfo types.MonitoringInfo - lastBlockHeight int64 - lastCommitInfo abci.CommitInfo - currentBlockHeight int64 - expectedMonitoringInfoFound bool - expectedMonitoringInfo types.MonitoringInfo - wantErr bool - }{ - { - name: "should not create monitoring info with lastBlockHeight reached", - monitoringInfoExist: false, - lastBlockHeight: 10, - currentBlockHeight: 11, - expectedMonitoringInfoFound: false, - }, - { - name: "should not create monitoring info created " + - "because counting skipped if blockHeight == 1", - monitoringInfoExist: false, - lastBlockHeight: 1, - currentBlockHeight: 1, - expectedMonitoringInfoFound: false, - }, - { - name: "should not update with lastBlockHeight reached", - monitoringInfoExist: true, - inputMonitoringInfo: tc.MonitoringInfo(10, - tc.SignatureCount(t, - valFoo.OperatorAddress, - "1", - ), - tc.SignatureCount(t, - valBar.OperatorAddress, - "2", - ), - ), - lastBlockHeight: 10, - lastCommitInfo: tc.LastCommitInfo( - tc.Vote{ - Address: consFoo, - Signed: true, - }, - ), - currentBlockHeight: 11, - expectedMonitoringInfoFound: true, - expectedMonitoringInfo: tc.MonitoringInfo(10, - tc.SignatureCount(t, - valFoo.OperatorAddress, - "1", - ), - tc.SignatureCount(t, - valBar.OperatorAddress, - "2", - ), - ), - }, - { - name: "should create structure if monitoring info doesn't exist with " + - "block count to 1 and signatures from commit", - monitoringInfoExist: false, - lastBlockHeight: 10, - lastCommitInfo: tc.LastCommitInfo( - tc.Vote{ - Address: consFoo, - Signed: true, - }, - ), - currentBlockHeight: 2, - expectedMonitoringInfoFound: true, - expectedMonitoringInfo: tc.MonitoringInfo(1, - tc.SignatureCount(t, - valFoo.OperatorAddress, - "1", - ), - ), - }, - { - name: "should update monitoring info following signatures in the last commit", - monitoringInfoExist: true, - inputMonitoringInfo: tc.MonitoringInfo(50, - tc.SignatureCount(t, - valFoo.OperatorAddress, - "1", - ), - tc.SignatureCount(t, - valBar.OperatorAddress, - "2", - ), - tc.SignatureCount(t, - valBaz.OperatorAddress, - "3", - ), - ), - lastBlockHeight: 10, - lastCommitInfo: tc.LastCommitInfo( - tc.Vote{ - Address: consFoo, - Signed: true, - }, - tc.Vote{ - Address: consBar, - Signed: false, - }, - tc.Vote{ - Address: consBaz, - Signed: true, - }, - tc.Vote{ - Address: consQux, - Signed: false, - }, - tc.Vote{ - Address: consFred, - Signed: true, - }, - ), - currentBlockHeight: 2, - expectedMonitoringInfoFound: true, - expectedMonitoringInfo: tc.MonitoringInfo(51, - tc.SignatureCount(t, - valFoo.OperatorAddress, - "1.2", - ), - tc.SignatureCount(t, - valBar.OperatorAddress, - "2", - ), - tc.SignatureCount(t, - valBaz.OperatorAddress, - "3.2", - ), - tc.SignatureCount(t, - valFred.OperatorAddress, - "0.2", - ), - ), - }, - { - name: "should prevent reporting signatures when a signer doesn't have an associated validator", - monitoringInfoExist: true, - inputMonitoringInfo: tc.MonitoringInfo(50, - tc.SignatureCount(t, - valFoo.OperatorAddress, - "1", - ), - ), - lastBlockHeight: 10, - lastCommitInfo: tc.LastCommitInfo( - tc.Vote{ - Address: consNoValidator, - Signed: true, - }, - ), - currentBlockHeight: 2, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // set keeper values - params := tk.MonitoringProviderKeeper.GetParams(ctx) - params.LastBlockHeight = tt.lastBlockHeight - tk.MonitoringProviderKeeper.SetParams(ctx, params) - if tt.monitoringInfoExist { - tk.MonitoringProviderKeeper.SetMonitoringInfo(ctx, tt.inputMonitoringInfo) - } else { - tk.MonitoringProviderKeeper.RemoveMonitoringInfo(ctx) - } - - // report - err := tk.MonitoringProviderKeeper.ReportBlockSignatures(ctx, tt.lastCommitInfo, tt.currentBlockHeight) - if tt.wantErr { - require.Error(t, err) - return - } - require.NoError(t, err) - - // check saved values - monitoringInfo, found := tk.MonitoringProviderKeeper.GetMonitoringInfo(ctx) - require.EqualValues(t, tt.expectedMonitoringInfoFound, found) - require.EqualValues(t, tt.expectedMonitoringInfo, monitoringInfo) - }) - } -} - -func TestKeeper_TransmitSignatures(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - valFoo, valBar, valBaz, valFred, valQux := sample.Validator(t, r), - sample.Validator(t, r), - sample.Validator(t, r), - sample.Validator(t, r), - sample.Validator(t, r) - - // initialize staking validator set - tk.StakingKeeper.SetValidator(ctx, valFoo) - tk.StakingKeeper.SetValidator(ctx, valBar) - tk.StakingKeeper.SetValidator(ctx, valBaz) - tk.StakingKeeper.SetValidator(ctx, valFred) - tk.StakingKeeper.SetValidator(ctx, valQux) - - t.Run("should set validators by consensus address", func(t *testing.T) { - err := tk.StakingKeeper.SetValidatorByConsAddr(ctx, valFoo) - require.NoError(t, err) - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valBar) - require.NoError(t, err) - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valBaz) - require.NoError(t, err) - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valFred) - require.NoError(t, err) - err = tk.StakingKeeper.SetValidatorByConsAddr(ctx, valQux) - require.NoError(t, err) - }) - - tests := []struct { - name string - monitoringInfoExist bool - inputMonitoringInfo types.MonitoringInfo - lastBlockHeight int64 - currentBlockHeight int64 - channelIDExist bool - channelID types.ConnectionChannelID - expectedMonitoringInfoFound bool - expectedMonitoringInfo types.MonitoringInfo - wantErr bool - }{ - { - name: "should return monitoring info with channel not found", - monitoringInfoExist: true, - inputMonitoringInfo: tc.MonitoringInfo(1, - tc.SignatureCount(t, - valFoo.OperatorAddress, - "1")), - lastBlockHeight: 10, - currentBlockHeight: 11, - channelIDExist: true, - channelID: types.ConnectionChannelID{ChannelID: "channelID"}, - wantErr: true, - }, - { - name: "should return nil for currentBlockHeight < lastBlockHeight", - monitoringInfoExist: false, - lastBlockHeight: 11, - currentBlockHeight: 10, - channelIDExist: false, - expectedMonitoringInfoFound: false, - }, - { - name: "should return nil for lastBlockHeight no channel ID set", - monitoringInfoExist: false, - lastBlockHeight: 10, - currentBlockHeight: 11, - channelIDExist: false, - expectedMonitoringInfoFound: false, - }, - { - name: "should return nil for no monitoring info found", - monitoringInfoExist: false, - lastBlockHeight: 10, - currentBlockHeight: 11, - channelIDExist: true, - channelID: types.ConnectionChannelID{ChannelID: "channelID"}, - expectedMonitoringInfoFound: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // set keeper values - params := tk.MonitoringProviderKeeper.GetParams(ctx) - params.LastBlockHeight = tt.lastBlockHeight - tk.MonitoringProviderKeeper.SetParams(ctx, params) - if tt.monitoringInfoExist { - tk.MonitoringProviderKeeper.SetMonitoringInfo(ctx, tt.inputMonitoringInfo) - } else { - tk.MonitoringProviderKeeper.RemoveMonitoringInfo(ctx) - } - - if tt.channelIDExist { - tk.MonitoringProviderKeeper.SetConnectionChannelID(ctx, tt.channelID) - } - - // report - // TODO check sequence in test - _, err := tk.MonitoringProviderKeeper.TransmitSignatures(ctx, tt.currentBlockHeight) - if tt.wantErr { - require.Error(t, err) - return - } - require.NoError(t, err) - - // check saved values - monitoringInfo, found := tk.MonitoringProviderKeeper.GetMonitoringInfo(ctx) - require.EqualValues(t, tt.expectedMonitoringInfoFound, found) - require.EqualValues(t, tt.expectedMonitoringInfo, monitoringInfo) - }) - } -} diff --git a/x/monitoringp/keeper/connection_channel_id.go b/x/monitoringp/keeper/connection_channel_id.go deleted file mode 100644 index 27d526c8..00000000 --- a/x/monitoringp/keeper/connection_channel_id.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -// SetConnectionChannelID set connectionChannelID in the store -func (k Keeper) SetConnectionChannelID(ctx sdk.Context, connectionChannelID types.ConnectionChannelID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ConnectionChannelIDKey)) - b := k.cdc.MustMarshal(&connectionChannelID) - store.Set([]byte{0}, b) -} - -// GetConnectionChannelID returns connectionChannelID -func (k Keeper) GetConnectionChannelID(ctx sdk.Context) (val types.ConnectionChannelID, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ConnectionChannelIDKey)) - - b := store.Get([]byte{0}) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} diff --git a/x/monitoringp/keeper/connection_channel_id_test.go b/x/monitoringp/keeper/connection_channel_id_test.go deleted file mode 100644 index 7cfbe995..00000000 --- a/x/monitoringp/keeper/connection_channel_id_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringp/keeper" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func createTestConnectionChannelID(ctx sdk.Context, keeper *keeper.Keeper) types.ConnectionChannelID { - item := types.ConnectionChannelID{} - keeper.SetConnectionChannelID(ctx, item) - return item -} - -func TestConnectionChannelIDGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - t.Run("should allow get", func(t *testing.T) { - item := createTestConnectionChannelID(ctx, tk.MonitoringProviderKeeper) - rst, found := tk.MonitoringProviderKeeper.GetConnectionChannelID(ctx) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - }) -} diff --git a/x/monitoringp/keeper/consumer_client.go b/x/monitoringp/keeper/consumer_client.go deleted file mode 100644 index 3f4a4adc..00000000 --- a/x/monitoringp/keeper/consumer_client.go +++ /dev/null @@ -1,68 +0,0 @@ -package keeper - -import ( - "time" - - sdkerrors "cosmossdk.io/errors" - "github.com/cometbft/cometbft/light" - sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - committypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" - ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - - "github.com/tendermint/spn/pkg/chainid" - "github.com/tendermint/spn/x/monitoringp/types" -) - -// InitializeConsumerClient initializes the consumer IBC client and set it in the store -func (k Keeper) InitializeConsumerClient(ctx sdk.Context) (string, error) { - // initialize the client state - clientState, err := k.initializeClientState(ctx, k.ConsumerChainID(ctx)) - if err != nil { - return "", sdkerrors.Wrap(types.ErrInvalidClientState, err.Error()) - } - if err := clientState.Validate(); err != nil { - return "", sdkerrors.Wrap(types.ErrInvalidClientState, err.Error()) - } - - // get consensus state from param - tmConsensusState, err := k.ConsumerConsensusState(ctx).ToTendermintConsensusState() - if err != nil { - return "", sdkerrors.Wrap(types.ErrInvalidConsensusState, err.Error()) - } - - // create IBC client for consumer - clientID, err := k.clientKeeper.CreateClient(ctx, clientState, &tmConsensusState) - if err != nil { - return "", sdkerrors.Wrap(types.ErrClientCreationFailure, err.Error()) - } - - // register the IBC client - k.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: clientID, - }) - - return clientID, nil -} - -// initializeClientState initializes the client state provided for the IBC client -func (k Keeper) initializeClientState(ctx sdk.Context, chainID string) (*ibctmtypes.ClientState, error) { - _, revisionNumber, err := chainid.ParseGenesisChainID(chainID) - if err != nil { - return nil, err - } - - unbondingPeriod := k.ConsumerUnbondingPeriod(ctx) - revisionHeight := k.ConsumerRevisionHeight(ctx) - - return ibctmtypes.NewClientState( - chainID, - ibctmtypes.NewFractionFromTm(light.DefaultTrustLevel), - time.Second*time.Duration(unbondingPeriod)-1, - time.Second*time.Duration(unbondingPeriod), - time.Minute*10, - clienttypes.NewHeight(revisionNumber, revisionHeight), - committypes.GetSDKSpecs(), - []string{"upgrade", "upgradedIBCState"}, - ), nil -} diff --git a/x/monitoringp/keeper/consumer_client_id.go b/x/monitoringp/keeper/consumer_client_id.go deleted file mode 100644 index 10629587..00000000 --- a/x/monitoringp/keeper/consumer_client_id.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -// SetConsumerClientID set consumerClientID in the store -func (k Keeper) SetConsumerClientID(ctx sdk.Context, consumerClientID types.ConsumerClientID) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ConsumerClientIDKey)) - b := k.cdc.MustMarshal(&consumerClientID) - store.Set([]byte{0}, b) -} - -// GetConsumerClientID returns consumerClientID -func (k Keeper) GetConsumerClientID(ctx sdk.Context) (val types.ConsumerClientID, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ConsumerClientIDKey)) - - b := store.Get([]byte{0}) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} diff --git a/x/monitoringp/keeper/consumer_client_id_test.go b/x/monitoringp/keeper/consumer_client_id_test.go deleted file mode 100644 index c17566be..00000000 --- a/x/monitoringp/keeper/consumer_client_id_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringp/keeper" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func createTestConsumerClientID(ctx sdk.Context, keeper *keeper.Keeper) types.ConsumerClientID { - item := types.ConsumerClientID{} - keeper.SetConsumerClientID(ctx, item) - return item -} - -func TestConsumerClientIDGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - t.Run("should allow get", func(t *testing.T) { - item := createTestConsumerClientID(ctx, tk.MonitoringProviderKeeper) - rst, found := tk.MonitoringProviderKeeper.GetConsumerClientID(ctx) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - }) -} diff --git a/x/monitoringp/keeper/consumer_client_test.go b/x/monitoringp/keeper/consumer_client_test.go deleted file mode 100644 index 67bf261e..00000000 --- a/x/monitoringp/keeper/consumer_client_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package keeper_test - -import ( - "testing" - "time" - - ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - "github.com/stretchr/testify/require" - - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func TestKeeper_InitializeConsumerClient(t *testing.T) { - t.Run("initialize consumer client", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - // set params with valid values - tk.MonitoringProviderKeeper.SetParams(ctx, types.NewParams( - 1000, - types.DefaultConsumerChainID, - sample.ConsensusState(0), - spntypes.DefaultUnbondingPeriod, - spntypes.DefaultRevisionHeight, - )) - clientID, err := tk.MonitoringProviderKeeper.InitializeConsumerClient(ctx) - require.NoError(t, err) - require.NotEmpty(t, clientID) - - consumerClientID, found := tk.MonitoringProviderKeeper.GetConsumerClientID(ctx) - require.True(t, found, "consumer client ID should be registered in the store") - require.EqualValues(t, clientID, consumerClientID.ClientID) - - // IBC client should be created - clientState, found := tk.IBCKeeper.ClientKeeper.GetClientState(ctx, clientID) - require.True(t, found, "IBC consumer client state should be created") - - cs, ok := clientState.(*ibctmtypes.ClientState) - require.True(t, ok) - require.EqualValues(t, tk.MonitoringProviderKeeper.ConsumerRevisionHeight(ctx), cs.LatestHeight.RevisionHeight) - require.EqualValues(t, time.Second*time.Duration(tk.MonitoringProviderKeeper.ConsumerUnbondingPeriod(ctx)), cs.UnbondingPeriod) - }) - - t.Run("invalid consumer consensus state", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - // default params contain an empty consensus state, therefore invalid - _, err := tk.MonitoringProviderKeeper.InitializeConsumerClient(ctx) - require.ErrorIs(t, err, types.ErrInvalidConsensusState) - }) -} diff --git a/x/monitoringp/keeper/grpc.go b/x/monitoringp/keeper/grpc.go deleted file mode 100644 index 4492691a..00000000 --- a/x/monitoringp/keeper/grpc.go +++ /dev/null @@ -1,7 +0,0 @@ -package keeper - -import ( - "github.com/tendermint/spn/x/monitoringp/types" -) - -var _ types.QueryServer = Keeper{} diff --git a/x/monitoringp/keeper/grpc_connection_channel_id.go b/x/monitoringp/keeper/grpc_connection_channel_id.go deleted file mode 100644 index 7514d331..00000000 --- a/x/monitoringp/keeper/grpc_connection_channel_id.go +++ /dev/null @@ -1,25 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -func (k Keeper) ConnectionChannelID(c context.Context, req *types.QueryGetConnectionChannelIDRequest) (*types.QueryGetConnectionChannelIDResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetConnectionChannelID(ctx) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetConnectionChannelIDResponse{ConnectionChannelID: val}, nil -} diff --git a/x/monitoringp/keeper/grpc_connection_channel_id_test.go b/x/monitoringp/keeper/grpc_connection_channel_id_test.go deleted file mode 100644 index bf20182c..00000000 --- a/x/monitoringp/keeper/grpc_connection_channel_id_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func TestConnectionChannelIDQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - wctx := sdk.WrapSDKContext(ctx) - for _, tc := range []struct { - name string - setItem bool - request *types.QueryGetConnectionChannelIDRequest - response *types.QueryGetConnectionChannelIDResponse - err error - }{ - { - name: "should return Not Found", - setItem: false, - request: &types.QueryGetConnectionChannelIDRequest{}, - err: status.Error(codes.NotFound, "not found"), - }, - { - name: "should return Invalid Request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - { - name: "should allow valid query", - setItem: true, - request: &types.QueryGetConnectionChannelIDRequest{}, - }, - } { - t.Run(tc.name, func(t *testing.T) { - if tc.setItem { - item := createTestConnectionChannelID(ctx, tk.MonitoringProviderKeeper) - tc.response = &types.QueryGetConnectionChannelIDResponse{ConnectionChannelID: item} - } - response, err := tk.MonitoringProviderKeeper.ConnectionChannelID(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, - nullify.Fill(tc.response), - nullify.Fill(response), - ) - } - }) - } -} diff --git a/x/monitoringp/keeper/grpc_consumer_client_id.go b/x/monitoringp/keeper/grpc_consumer_client_id.go deleted file mode 100644 index 53646808..00000000 --- a/x/monitoringp/keeper/grpc_consumer_client_id.go +++ /dev/null @@ -1,25 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -func (k Keeper) ConsumerClientID(c context.Context, req *types.QueryGetConsumerClientIDRequest) (*types.QueryGetConsumerClientIDResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetConsumerClientID(ctx) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetConsumerClientIDResponse{ConsumerClientID: val}, nil -} diff --git a/x/monitoringp/keeper/grpc_consumer_client_id_test.go b/x/monitoringp/keeper/grpc_consumer_client_id_test.go deleted file mode 100644 index f127b05c..00000000 --- a/x/monitoringp/keeper/grpc_consumer_client_id_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func TestConsumerClientIDQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - wctx := sdk.WrapSDKContext(ctx) - for _, tc := range []struct { - name string - setItem bool - request *types.QueryGetConsumerClientIDRequest - response *types.QueryGetConsumerClientIDResponse - err error - }{ - { - name: "should return Not Found", - setItem: false, - request: &types.QueryGetConsumerClientIDRequest{}, - err: status.Error(codes.NotFound, "not found"), - }, - { - name: "should return Invalid Request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - { - name: "should allow valid query", - setItem: true, - request: &types.QueryGetConsumerClientIDRequest{}, - }, - } { - t.Run(tc.name, func(t *testing.T) { - if tc.setItem { - item := createTestConsumerClientID(ctx, tk.MonitoringProviderKeeper) - tc.response = &types.QueryGetConsumerClientIDResponse{ConsumerClientID: item} - } - response, err := tk.MonitoringProviderKeeper.ConsumerClientID(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, - nullify.Fill(tc.response), - nullify.Fill(response), - ) - } - }) - } -} diff --git a/x/monitoringp/keeper/grpc_monitoring_info.go b/x/monitoringp/keeper/grpc_monitoring_info.go deleted file mode 100644 index 1c699653..00000000 --- a/x/monitoringp/keeper/grpc_monitoring_info.go +++ /dev/null @@ -1,25 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -func (k Keeper) MonitoringInfo(c context.Context, req *types.QueryGetMonitoringInfoRequest) (*types.QueryGetMonitoringInfoResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetMonitoringInfo(ctx) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetMonitoringInfoResponse{MonitoringInfo: val}, nil -} diff --git a/x/monitoringp/keeper/grpc_monitoring_info_test.go b/x/monitoringp/keeper/grpc_monitoring_info_test.go deleted file mode 100644 index 57064b3d..00000000 --- a/x/monitoringp/keeper/grpc_monitoring_info_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func TestMonitoringInfoQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - wctx := sdk.WrapSDKContext(ctx) - for _, tc := range []struct { - name string - setItem bool - request *types.QueryGetMonitoringInfoRequest - response *types.QueryGetMonitoringInfoResponse - err error - }{ - { - name: "should return Not Found", - setItem: false, - request: &types.QueryGetMonitoringInfoRequest{}, - err: status.Error(codes.NotFound, "not found"), - }, - { - name: "should return Invalid Request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - { - name: "should allow valid query", - setItem: true, - request: &types.QueryGetMonitoringInfoRequest{}, - }, - } { - t.Run(tc.name, func(t *testing.T) { - if tc.setItem { - item := createTestMonitoringInfo(ctx, tk.MonitoringProviderKeeper) - tc.response = &types.QueryGetMonitoringInfoResponse{MonitoringInfo: item} - } - response, err := tk.MonitoringProviderKeeper.MonitoringInfo(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, - nullify.Fill(tc.response), - nullify.Fill(response), - ) - } - }) - } -} diff --git a/x/monitoringp/keeper/grpc_params.go b/x/monitoringp/keeper/grpc_params.go deleted file mode 100644 index 658ea1a0..00000000 --- a/x/monitoringp/keeper/grpc_params.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil -} diff --git a/x/monitoringp/keeper/grpc_params_test.go b/x/monitoringp/keeper/grpc_params_test.go deleted file mode 100644 index 472d87cc..00000000 --- a/x/monitoringp/keeper/grpc_params_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func TestParamsQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - wctx := sdk.WrapSDKContext(ctx) - - t.Run("should allow params get", func(t *testing.T) { - params := types.DefaultParams() - tk.MonitoringProviderKeeper.SetParams(ctx, params) - response, err := tk.MonitoringProviderKeeper.Params(wctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.Equal(t, &types.QueryParamsResponse{Params: params}, response) - _, err = tk.MonitoringProviderKeeper.Params(wctx, nil) - require.Error(t, err) - }) -} diff --git a/x/monitoringp/keeper/handshake.go b/x/monitoringp/keeper/handshake.go deleted file mode 100644 index 6d0339ab..00000000 --- a/x/monitoringp/keeper/handshake.go +++ /dev/null @@ -1,98 +0,0 @@ -package keeper - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -// VerifyClientIDFromConnID verifies if the client ID associated with the provided connection ID -// is the consumer client ID and if no connection is yet established with the consumer chain -// this operation should be performed at OnChanOpenTry handshake phase -func (k Keeper) VerifyClientIDFromConnID(ctx sdk.Context, connID string) error { - // get the current client ID and check if it's the consumer client ID - clientID, err := k.getClientIDFromConnID(ctx, connID) - if err != nil { - return err - } - - // check no connection is already established - _, found := k.GetConnectionChannelID(ctx) - if found { - return types.ErrConsumerConnectionEstablished - } - - // check if the consumer client ID exists - consumerClient, found := k.GetConsumerClientID(ctx) - if !found { - return types.ErrNoConsumerClient - } - - if consumerClient.ClientID != clientID { - return sdkerrors.Wrapf( - types.ErrInvalidClient, - "the client is not the consumer client, got %s, expected %s", - clientID, - consumerClient.ClientID, - ) - } - - return nil -} - -// RegisterConnectionChannelID registers the channel ID for the connection used with the consumer chain -func (k Keeper) RegisterConnectionChannelID(ctx sdk.Context, channelID string) error { - connID, err := k.getConnIDFromChannelID(ctx, channelID) - if err != nil { - return err - } - - // verify the channel during registration - // the channel could have been registered with another connection, if it's the case, an error is returned - // any other error is a critical error - if err = k.VerifyClientIDFromConnID(ctx, connID); err != nil { - return err - } - - // register the connection channel ID - k.SetConnectionChannelID(ctx, types.ConnectionChannelID{ - ChannelID: channelID, - }) - return nil -} - -// getClientIDFromConnID retrieves the client ID associated with a connection ID -func (k Keeper) getClientIDFromConnID(ctx sdk.Context, connID string) (string, error) { - conn, ok := k.connectionKeeper.GetConnection(ctx, connID) - if !ok { - return "", sdkerrors.Wrapf( - connectiontypes.ErrConnectionNotFound, - "connection not found for connection ID: %s", - connID, - ) - } - return conn.GetClientID(), nil -} - -// getConnIDFromChannelID retrieves the connection ID associated with the provided channel ID -func (k Keeper) getConnIDFromChannelID(ctx sdk.Context, channelID string) (string, error) { - // retrieve the client ID from the channel - channel, ok := k.channelKeeper.GetChannel(ctx, types.PortID, channelID) - if !ok { - return "", sdkerrors.Wrapf( - channeltypes.ErrChannelNotFound, - "channel not found for channel ID: %s", - channelID, - ) - } - if len(channel.ConnectionHops) != 1 { - return "", sdkerrors.Wrap( - channeltypes.ErrTooManyConnectionHops, - "must have direct connection to consumer chain", - ) - } - return channel.ConnectionHops[0], nil -} diff --git a/x/monitoringp/keeper/handshake_test.go b/x/monitoringp/keeper/handshake_test.go deleted file mode 100644 index 25b51a68..00000000 --- a/x/monitoringp/keeper/handshake_test.go +++ /dev/null @@ -1,166 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/monitoringp/types" -) - -// monitoringpKeeperWithFooClient returns a test monitoring keeper containing necessary IBC mocks for a client with ID foo -func monitoringpKeeperWithFooClient(t *testing.T) (sdk.Context, testkeeper.TestKeepers, testkeeper.TestMsgServers) { - return testkeeper.NewTestSetupWithIBCMocksMonitoringp( - t, - []testkeeper.Connection{ - { - ConnID: "foo", - Conn: connectiontypes.ConnectionEnd{ - ClientId: "foo", - }, - }, - }, - []testkeeper.Channel{ - { - ChannelID: "foo", - Channel: channeltypes.Channel{ - ConnectionHops: []string{"foo"}, - }, - }, - }, - ) -} - -func TestKeeper_VerifyClientIDFromChannelID(t *testing.T) { - t.Run("should return no error if the client exists and no connection is established", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "foo", - }) - err := tk.MonitoringProviderKeeper.VerifyClientIDFromConnID(ctx, "foo") - require.NoError(t, err) - }) - - t.Run("should fail if connection client ID is not equal to consumerClientID", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "notequal", - }) - err := tk.MonitoringProviderKeeper.VerifyClientIDFromConnID(ctx, "foo") - require.ErrorIs(t, err, types.ErrInvalidClient) - }) - - t.Run("should fail if connection doesn't exist", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "foo", - }) - err := tk.MonitoringProviderKeeper.VerifyClientIDFromConnID(ctx, "bar") - require.ErrorIs(t, err, connectiontypes.ErrConnectionNotFound) - }) - - t.Run("should fail if the consumer client doesn't exist", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - err := tk.MonitoringProviderKeeper.VerifyClientIDFromConnID(ctx, "foo") - require.ErrorIs(t, err, types.ErrNoConsumerClient) - }) - - t.Run("should fail if connection has already been established", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "foo", - }) - tk.MonitoringProviderKeeper.SetConnectionChannelID(ctx, types.ConnectionChannelID{ - ChannelID: "bar", - }) - err := tk.MonitoringProviderKeeper.VerifyClientIDFromConnID(ctx, "foo") - require.ErrorIs(t, err, types.ErrConsumerConnectionEstablished) - }) -} - -func TestKeeper_RegisterConnectionChannelID(t *testing.T) { - t.Run("should register the channel id", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "foo", - }) - err := tk.MonitoringProviderKeeper.RegisterConnectionChannelID(ctx, "foo") - require.NoError(t, err) - channelID, found := tk.MonitoringProviderKeeper.GetConnectionChannelID(ctx) - require.True(t, found) - require.EqualValues(t, types.ConnectionChannelID{ - ChannelID: "foo", - }, channelID) - }) - - t.Run("should fail if connection has already been established", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "foo", - }) - tk.MonitoringProviderKeeper.SetConnectionChannelID(ctx, types.ConnectionChannelID{ - ChannelID: "bar", - }) - err := tk.MonitoringProviderKeeper.RegisterConnectionChannelID(ctx, "foo") - require.ErrorIs(t, err, types.ErrConsumerConnectionEstablished) - }) - - t.Run("should fail if the consumer client doesn't exist", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - err := tk.MonitoringProviderKeeper.RegisterConnectionChannelID(ctx, "foo") - require.ErrorIs(t, err, types.ErrNoConsumerClient) - }) - - t.Run("should fail if the channel doesn't exist", func(t *testing.T) { - ctx, tk, _ := monitoringpKeeperWithFooClient(t) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "foo", - }) - err := tk.MonitoringProviderKeeper.RegisterConnectionChannelID(ctx, "bar") - require.ErrorIs(t, err, channeltypes.ErrChannelNotFound) - }) - - t.Run("should fail if the channel has more than 1 hop connection", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithIBCMocksMonitoringp( - t, - []testkeeper.Connection{}, - []testkeeper.Channel{ - { - ChannelID: "foo", - Channel: channeltypes.Channel{ - ConnectionHops: []string{"foo", "bar"}, - }, - }, - }, - ) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "foo", - }) - err := tk.MonitoringProviderKeeper.RegisterConnectionChannelID(ctx, "foo") - require.ErrorIs(t, err, channeltypes.ErrTooManyConnectionHops) - }) - - t.Run("should fail if the connection doesn't exist", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithIBCMocksMonitoringp( - t, - []testkeeper.Connection{}, - []testkeeper.Channel{ - { - ChannelID: "foo", - Channel: channeltypes.Channel{ - ConnectionHops: []string{"foo"}, - }, - }, - }, - ) - tk.MonitoringProviderKeeper.SetConsumerClientID(ctx, types.ConsumerClientID{ - ClientID: "foo", - }) - err := tk.MonitoringProviderKeeper.RegisterConnectionChannelID(ctx, "foo") - require.ErrorIs(t, err, connectiontypes.ErrConnectionNotFound) - }) -} diff --git a/x/monitoringp/keeper/keeper.go b/x/monitoringp/keeper/keeper.go index bf5ec535..4c84bd99 100644 --- a/x/monitoringp/keeper/keeper.go +++ b/x/monitoringp/keeper/keeper.go @@ -3,27 +3,48 @@ package keeper import ( "fmt" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + "cosmossdk.io/core/store" + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/log" + "cosmossdk.io/store/prefix" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" - capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" - "github.com/tendermint/spn/x/monitoringp/types" + "github.com/ignite/network/x/monitoringp/types" ) type ( Keeper struct { - cdc codec.BinaryCodec - portKey []byte - storeKey storetypes.StoreKey - memKey storetypes.StoreKey - paramstore paramtypes.Subspace - stakingKeeper types.StakingKeeper - scopedKeeper capabilitykeeper.ScopedKeeper + cdc codec.BinaryCodec + addressCodec address.Codec + storeService store.KVStoreService + logger log.Logger + + // the address capable of executing a MsgUpdateParams message. + // Typically, this should be the x/gov module account. + authority string + + Schema collections.Schema + Params collections.Item[types.Params] + MonitoringInfo collections.Item[types.MonitoringInfo] + ConnectionChannelID collections.Item[types.ConnectionChannelID] + ConsumerClientID collections.Item[types.ConsumerClientID] + // this line is used by starport scaffolding # collection/type + + ibcKeeperFn func() *ibckeeper.Keeper + capabilityScopedFn func(string) capabilitykeeper.ScopedKeeper + + stakingKeeper types.StakingKeeper + clientKeeper types.ClientKeeper portKeeper types.PortKeeper connectionKeeper types.ConnectionKeeper @@ -33,72 +54,151 @@ type ( func NewKeeper( cdc codec.BinaryCodec, - storeKey, - memKey storetypes.StoreKey, - ps paramtypes.Subspace, + addressCodec address.Codec, + storeService store.KVStoreService, + logger log.Logger, + authority string, + ibcKeeperFn func() *ibckeeper.Keeper, + capabilityScopedFn func(string) capabilitykeeper.ScopedKeeper, stakingKeeper types.StakingKeeper, +) Keeper { + if _, err := addressCodec.StringToBytes(authority); err != nil { + panic(fmt.Sprintf("invalid authority address %s: %s", authority, err)) + } + + sb := collections.NewSchemaBuilder(storeService) + + k := Keeper{ + cdc: cdc, + addressCodec: addressCodec, + storeService: storeService, + authority: authority, + logger: logger, + ibcKeeperFn: ibcKeeperFn, + capabilityScopedFn: capabilityScopedFn, + stakingKeeper: stakingKeeper, + Params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + MonitoringInfo: collections.NewItem(sb, types.MonitoringInfoKey, "monitoringInfo", codec.CollValue[types.MonitoringInfo](cdc)), + ConnectionChannelID: collections.NewItem(sb, types.ConnectionChannelIDKey, "connectionChannelID", codec.CollValue[types.ConnectionChannelID](cdc)), + ConsumerClientID: collections.NewItem(sb, types.ConsumerClientIDKey, "consumerClientID", codec.CollValue[types.ConsumerClientID](cdc)), + // this line is used by starport scaffolding # collection/instantiate + } + + schema, err := sb.Build() + if err != nil { + panic(err) + } + k.Schema = schema + + return k +} + +// GetAuthority returns the module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger() log.Logger { + return k.logger.With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +// AddressCodec returns the address codec. +func (k Keeper) AddressCodec() address.Codec { + return k.addressCodec +} + +// ---------------------------------------------------------------------------- +// IBC Keeper Logic +// ---------------------------------------------------------------------------- + +// SetIBCKeepers sets all IBC Keepers +// TODO set +func (k Keeper) SetIBCKeepers( clientKeeper types.ClientKeeper, connectionKeeper types.ConnectionKeeper, channelKeeper types.ChannelKeeper, portKeeper types.PortKeeper, - scopedKeeper capabilitykeeper.ScopedKeeper, -) *Keeper { - // set KeyTable if it has not already been set - if !ps.HasKeyTable() { - ps = ps.WithKeyTable(types.ParamKeyTable()) - } +) { + k.SetClientKeeper(clientKeeper) + k.SetPortKeeper(portKeeper) + k.SetConnectionKeeper(connectionKeeper) + k.SetChannelKeeper(channelKeeper) +} - return &Keeper{ - cdc: cdc, - portKey: types.PortKey, - storeKey: storeKey, - memKey: memKey, - paramstore: ps, - stakingKeeper: stakingKeeper, - scopedKeeper: scopedKeeper, - clientKeeper: clientKeeper, - portKeeper: portKeeper, - connectionKeeper: connectionKeeper, - channelKeeper: channelKeeper, - } +// SetClientKeeper sets IBC client keeper +func (k Keeper) SetClientKeeper(clientKeeper types.ClientKeeper) { + k.clientKeeper = clientKeeper +} + +// SetPortKeeper sets IBC port keeper +func (k Keeper) SetPortKeeper(portKeeper types.PortKeeper) { + k.portKeeper = portKeeper } -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +// SetConnectionKeeper sets IBC connection keeper +func (k Keeper) SetConnectionKeeper(connectionKeeper types.ConnectionKeeper) { + k.connectionKeeper = connectionKeeper } -// IsBound checks if the module is already bound to the desired port -func (k Keeper) IsBound(ctx sdk.Context, portID string) bool { - _, ok := k.scopedKeeper.GetCapability(ctx, host.PortPath(portID)) - return ok +// SetChannelKeeper sets IBC channel keeper +func (k Keeper) SetChannelKeeper(channelKeeper types.ChannelKeeper) { + k.channelKeeper = channelKeeper } -// BindPort defines a wrapper function for the ort Keeper's function in +// ChanCloseInit defines a wrapper function for the channel Keeper's function. +func (k Keeper) ChanCloseInit(ctx sdk.Context, portID, channelID string) error { + capName := host.ChannelCapabilityPath(portID, channelID) + chanCap, ok := k.ScopedKeeper().GetCapability(ctx, capName) + if !ok { + return errorsmod.Wrapf(channeltypes.ErrChannelCapabilityNotFound, "could not retrieve channel capability at: %s", capName) + } + return k.ibcKeeperFn().ChannelKeeper.ChanCloseInit(ctx, portID, channelID, chanCap) +} + +// ShouldBound checks if the IBC app module can be bound to the desired port +func (k Keeper) ShouldBound(ctx sdk.Context, portID string) bool { + scopedKeeper := k.ScopedKeeper() + if scopedKeeper == nil { + return false + } + _, ok := scopedKeeper.GetCapability(ctx, host.PortPath(portID)) + return !ok +} + +// BindPort defines a wrapper function for the port Keeper's function in // order to expose it to module's InitGenesis function func (k Keeper) BindPort(ctx sdk.Context, portID string) error { - c := k.portKeeper.BindPort(ctx, portID) - return k.ClaimCapability(ctx, c, host.PortPath(portID)) + cap := k.ibcKeeperFn().PortKeeper.BindPort(ctx, portID) + return k.ClaimCapability(ctx, cap, host.PortPath(portID)) } -// GetPort returns the portID for the module. Used in ExportGenesis +// GetPort returns the portID for the IBC app module. Used in ExportGenesis func (k Keeper) GetPort(ctx sdk.Context) string { - store := ctx.KVStore(k.storeKey) - return string(store.Get(k.portKey)) + storeAdapter := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := prefix.NewStore(storeAdapter, []byte{}) + return string(store.Get(types.PortKey)) } -// SetPort sets the portID for the module. Used in InitGenesis +// SetPort sets the portID for the IBC app module. Used in InitGenesis func (k Keeper) SetPort(ctx sdk.Context, portID string) { - store := ctx.KVStore(k.storeKey) - store.Set(k.portKey, []byte(portID)) + storeAdapter := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := prefix.NewStore(storeAdapter, []byte{}) + store.Set(types.PortKey, []byte(portID)) } // AuthenticateCapability wraps the scopedKeeper's AuthenticateCapability function -func (k Keeper) AuthenticateCapability(ctx sdk.Context, c *capabilitytypes.Capability, name string) bool { - return k.scopedKeeper.AuthenticateCapability(ctx, c, name) +func (k Keeper) AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool { + return k.ScopedKeeper().AuthenticateCapability(ctx, cap, name) } -// ClaimCapability allows the transfer module that can claim a capability that IBC module +// ClaimCapability allows the IBC app module to claim a capability that core IBC // passes to it -func (k Keeper) ClaimCapability(ctx sdk.Context, c *capabilitytypes.Capability, name string) error { - return k.scopedKeeper.ClaimCapability(ctx, c, name) +func (k Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error { + return k.ScopedKeeper().ClaimCapability(ctx, cap, name) +} + +// ScopedKeeper returns the ScopedKeeper +func (k Keeper) ScopedKeeper() exported.ScopedKeeper { + return k.capabilityScopedFn(types.ModuleName) } diff --git a/x/monitoringp/keeper/keeper_test.go b/x/monitoringp/keeper/keeper_test.go deleted file mode 100644 index 5e946987..00000000 --- a/x/monitoringp/keeper/keeper_test.go +++ /dev/null @@ -1,11 +0,0 @@ -package keeper_test - -import "math/rand" - -var r *rand.Rand - -// initialize random generator -func init() { - s := rand.NewSource(1) - r = rand.New(s) -} diff --git a/x/monitoringp/keeper/monitoring_info.go b/x/monitoringp/keeper/monitoring_info.go deleted file mode 100644 index 93430bea..00000000 --- a/x/monitoringp/keeper/monitoring_info.go +++ /dev/null @@ -1,34 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/monitoringp/types" -) - -// SetMonitoringInfo set monitoringInfo in the store -func (k Keeper) SetMonitoringInfo(ctx sdk.Context, monitoringInfo types.MonitoringInfo) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MonitoringInfoKey)) - b := k.cdc.MustMarshal(&monitoringInfo) - store.Set([]byte{0}, b) -} - -// GetMonitoringInfo returns monitoringInfo -func (k Keeper) GetMonitoringInfo(ctx sdk.Context) (val types.MonitoringInfo, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MonitoringInfoKey)) - - b := store.Get([]byte{0}) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveMonitoringInfo removes monitoringInfo from the store -func (k Keeper) RemoveMonitoringInfo(ctx sdk.Context) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MonitoringInfoKey)) - store.Delete([]byte{0}) -} diff --git a/x/monitoringp/keeper/monitoring_info_test.go b/x/monitoringp/keeper/monitoring_info_test.go deleted file mode 100644 index a9cc1dd7..00000000 --- a/x/monitoringp/keeper/monitoring_info_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/monitoringp/keeper" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func createTestMonitoringInfo(ctx sdk.Context, keeper *keeper.Keeper) types.MonitoringInfo { - item := types.MonitoringInfo{} - keeper.SetMonitoringInfo(ctx, item) - return item -} - -func TestMonitoringInfoGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - t.Run("should allow get", func(t *testing.T) { - item := createTestMonitoringInfo(ctx, tk.MonitoringProviderKeeper) - rst, found := tk.MonitoringProviderKeeper.GetMonitoringInfo(ctx) - - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - }) -} - -func TestMonitoringInfoRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - t.Run("should allow remove", func(t *testing.T) { - createTestMonitoringInfo(ctx, tk.MonitoringProviderKeeper) - tk.MonitoringProviderKeeper.RemoveMonitoringInfo(ctx) - _, found := tk.MonitoringProviderKeeper.GetMonitoringInfo(ctx) - require.False(t, found) - }) -} diff --git a/x/monitoringp/keeper/monitoring_packet.go b/x/monitoringp/keeper/monitoring_packet.go deleted file mode 100644 index 8622722e..00000000 --- a/x/monitoringp/keeper/monitoring_packet.go +++ /dev/null @@ -1,86 +0,0 @@ -package keeper - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/monitoringp/types" -) - -// TransmitMonitoringPacket transmits the packet over IBC with the specified source port and source channel -func (k Keeper) TransmitMonitoringPacket( - ctx sdk.Context, - packetData spntypes.MonitoringPacket, - sourcePort, - sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, -) (sequence uint64, err error) { - channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel)) - if !ok { - return 0, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") - } - - // encode the packet - var modulePacket spntypes.MonitoringPacketData - modulePacket.Packet = &spntypes.MonitoringPacketData_MonitoringPacket{ - MonitoringPacket: &packetData, - } - - packetBytes, err := types.ModuleCdc.MarshalJSON(&modulePacket) - if err != nil { - return 0, sdkerrors.Wrap(types.ErrJSONMarshal, err.Error()) - } - - return k.channelKeeper.SendPacket(ctx, channelCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, packetBytes) -} - -// OnRecvMonitoringPacket processes packet reception -func (k Keeper) OnRecvMonitoringPacket( - _ sdk.Context, - _ channeltypes.Packet, - _ spntypes.MonitoringPacket, -) (packetAck spntypes.MonitoringPacketAck, err error) { - return packetAck, types.ErrNotImplemented -} - -// OnAcknowledgementMonitoringPacket responds to the the success or failure of a packet -// acknowledgement written on the receiving chain. -func (k Keeper) OnAcknowledgementMonitoringPacket( - ctx sdk.Context, - packet channeltypes.Packet, - data spntypes.MonitoringPacket, - ack channeltypes.Acknowledgement, -) error { - switch dispatchedAck := ack.Response.(type) { - case *channeltypes.Acknowledgement_Error: - return nil - case *channeltypes.Acknowledgement_Result: - // Decode the packet acknowledgment - var packetAck spntypes.MonitoringPacketAck - - if err := types.ModuleCdc.UnmarshalJSON(dispatchedAck.Result, &packetAck); err != nil { - // The counter-party module doesn't implement the correct acknowledgment format - return sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error()) - } - - return nil - default: - // The counter-party module doesn't implement the correct acknowledgment format - return sdkerrors.Wrapf(types.ErrUnrecognizedAckType, "ack type: %T", ack) - - } -} - -// OnTimeoutMonitoringPacket responds to the case where a packet has not been transmitted because of a timeout -func (k Keeper) OnTimeoutMonitoringPacket( - _ sdk.Context, - _ channeltypes.Packet, - _ spntypes.MonitoringPacket, -) error { - return types.ErrNotImplemented -} diff --git a/x/monitoringp/keeper/msg_server.go b/x/monitoringp/keeper/msg_server.go new file mode 100644 index 00000000..027c12c7 --- /dev/null +++ b/x/monitoringp/keeper/msg_server.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "github.com/ignite/network/x/monitoringp/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} diff --git a/x/monitoringp/keeper/msg_update_params.go b/x/monitoringp/keeper/msg_update_params.go new file mode 100644 index 00000000..d6ff1faa --- /dev/null +++ b/x/monitoringp/keeper/msg_update_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + + "github.com/ignite/network/x/monitoringp/types" +) + +func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if _, err := k.addressCodec.StringToBytes(req.Authority); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + if k.GetAuthority() != req.Authority { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) + } + + if err := req.Params.Validate(); err != nil { + return nil, err + } + + if err := k.Params.Set(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/monitoringp/keeper/msg_update_params_test.go b/x/monitoringp/keeper/msg_update_params_test.go new file mode 100644 index 00000000..18a46480 --- /dev/null +++ b/x/monitoringp/keeper/msg_update_params_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +func TestMsgUpdateParams(t *testing.T) { + k, ctx, _ := keepertest.MonitoringpKeeper(t) + ms := keeper.NewMsgServerImpl(k) + + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + // default params + testCases := []struct { + name string + input *types.MsgUpdateParams + expErr bool + expErrMsg string + }{ + { + name: "invalid authority", + input: &types.MsgUpdateParams{ + Authority: "invalid", + Params: params, + }, + expErr: true, + expErrMsg: "invalid authority", + }, + { + name: "send enabled param", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: types.Params{}, + }, + expErr: false, + }, + { + name: "all good", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: params, + }, + expErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, err := ms.UpdateParams(ctx, tc.input) + + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expErrMsg) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/monitoringp/keeper/params.go b/x/monitoringp/keeper/params.go deleted file mode 100644 index 8f3a2295..00000000 --- a/x/monitoringp/keeper/params.go +++ /dev/null @@ -1,54 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/monitoringp/types" -) - -// LastBlockHeight returns the last block height state param -func (k Keeper) LastBlockHeight(ctx sdk.Context) (res int64) { - k.paramstore.Get(ctx, types.KeyLastBlockHeight, &res) - return -} - -// ConsumerConsensusState returns the consumer consensus state param -func (k Keeper) ConsumerConsensusState(ctx sdk.Context) (res spntypes.ConsensusState) { - k.paramstore.Get(ctx, types.KeyConsumerConsensusState, &res) - return -} - -// ConsumerChainID returns the consumer chain ID param -func (k Keeper) ConsumerChainID(ctx sdk.Context) (res string) { - k.paramstore.Get(ctx, types.KeyConsumerChainID, &res) - return -} - -// ConsumerUnbondingPeriod returns the consumer unbonding period -func (k Keeper) ConsumerUnbondingPeriod(ctx sdk.Context) (res int64) { - k.paramstore.Get(ctx, types.KeyConsumerUnbondingPeriod, &res) - return -} - -// ConsumerRevisionHeight returns the consumer revision height -func (k Keeper) ConsumerRevisionHeight(ctx sdk.Context) (res uint64) { - k.paramstore.Get(ctx, types.KeyConsumerRevisionHeight, &res) - return -} - -// GetParams get all parameters as types.Params -func (k Keeper) GetParams(ctx sdk.Context) types.Params { - return types.NewParams( - k.LastBlockHeight(ctx), - k.ConsumerChainID(ctx), - k.ConsumerConsensusState(ctx), - k.ConsumerUnbondingPeriod(ctx), - k.ConsumerRevisionHeight(ctx), - ) -} - -// SetParams set the params -func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { - k.paramstore.SetParamSet(ctx, ¶ms) -} diff --git a/x/monitoringp/keeper/params_test.go b/x/monitoringp/keeper/params_test.go deleted file mode 100644 index 5869d37f..00000000 --- a/x/monitoringp/keeper/params_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/monitoringp/types" -) - -func TestGetParams(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetupWithMonitoringp(t) - - t.Run("should allow default params set", func(t *testing.T) { - params := types.DefaultParams() - tk.MonitoringProviderKeeper.SetParams(ctx, params) - require.EqualValues(t, params, tk.MonitoringProviderKeeper.GetParams(ctx)) - require.EqualValues(t, spntypes.ConsensusState{}, tk.MonitoringProviderKeeper.ConsumerConsensusState(ctx)) - require.EqualValues(t, types.DefaultConsumerChainID, tk.MonitoringProviderKeeper.ConsumerChainID(ctx)) - require.EqualValues(t, spntypes.DefaultUnbondingPeriod, tk.MonitoringProviderKeeper.ConsumerUnbondingPeriod(ctx)) - require.EqualValues(t, spntypes.DefaultRevisionHeight, tk.MonitoringProviderKeeper.ConsumerRevisionHeight(ctx)) - }) - - t.Run("should allow params set", func(t *testing.T) { - chainID := sample.GenesisChainID(r) - cs := sample.ConsensusState(0) - params := types.NewParams( - 1000, - chainID, - cs, - 10, - 20, - ) - tk.MonitoringProviderKeeper.SetParams(ctx, params) - require.EqualValues(t, params, tk.MonitoringProviderKeeper.GetParams(ctx)) - require.EqualValues(t, 1000, tk.MonitoringProviderKeeper.LastBlockHeight(ctx)) - require.EqualValues(t, cs, tk.MonitoringProviderKeeper.ConsumerConsensusState(ctx)) - require.EqualValues(t, chainID, tk.MonitoringProviderKeeper.ConsumerChainID(ctx)) - require.EqualValues(t, 10, tk.MonitoringProviderKeeper.ConsumerUnbondingPeriod(ctx)) - require.EqualValues(t, 20, tk.MonitoringProviderKeeper.ConsumerRevisionHeight(ctx)) - }) -} diff --git a/x/monitoringp/keeper/query.go b/x/monitoringp/keeper/query.go new file mode 100644 index 00000000..5568c1d2 --- /dev/null +++ b/x/monitoringp/keeper/query.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "github.com/ignite/network/x/monitoringp/types" +) + +var _ types.QueryServer = queryServer{} + +// NewQueryServerImpl returns an implementation of the QueryServer interface +// for the provided Keeper. +func NewQueryServerImpl(k Keeper) types.QueryServer { + return queryServer{k} +} + +type queryServer struct { + k Keeper +} diff --git a/x/monitoringp/keeper/query_connection_channel_id.go b/x/monitoringp/keeper/query_connection_channel_id.go new file mode 100644 index 00000000..d9a08482 --- /dev/null +++ b/x/monitoringp/keeper/query_connection_channel_id.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringp/types" +) + +func (q queryServer) GetConnectionChannelID(ctx context.Context, req *types.QueryGetConnectionChannelIDRequest) (*types.QueryGetConnectionChannelIDResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.ConnectionChannelID.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetConnectionChannelIDResponse{ConnectionChannelID: val}, nil +} diff --git a/x/monitoringp/keeper/query_connection_channel_id_test.go b/x/monitoringp/keeper/query_connection_channel_id_test.go new file mode 100644 index 00000000..1368060f --- /dev/null +++ b/x/monitoringp/keeper/query_connection_channel_id_test.go @@ -0,0 +1,53 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +func TestConnectionChannelIDQuery(t *testing.T) { + k, ctx, _ := keepertest.MonitoringpKeeper(t) + qs := keeper.NewQueryServerImpl(k) + item := types.ConnectionChannelID{} + err := k.ConnectionChannelID.Set(ctx, item) + require.NoError(t, err) + + tests := []struct { + desc string + request *types.QueryGetConnectionChannelIDRequest + response *types.QueryGetConnectionChannelIDResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetConnectionChannelIDRequest{}, + response: &types.QueryGetConnectionChannelIDResponse{ConnectionChannelID: item}, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetConnectionChannelID(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} diff --git a/x/monitoringp/keeper/query_consumer_client_id.go b/x/monitoringp/keeper/query_consumer_client_id.go new file mode 100644 index 00000000..f0815074 --- /dev/null +++ b/x/monitoringp/keeper/query_consumer_client_id.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringp/types" +) + +func (q queryServer) GetConsumerClientID(ctx context.Context, req *types.QueryGetConsumerClientIDRequest) (*types.QueryGetConsumerClientIDResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.ConsumerClientID.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetConsumerClientIDResponse{ConsumerClientID: val}, nil +} diff --git a/x/monitoringp/keeper/query_consumer_client_id_test.go b/x/monitoringp/keeper/query_consumer_client_id_test.go new file mode 100644 index 00000000..0bdbbf7d --- /dev/null +++ b/x/monitoringp/keeper/query_consumer_client_id_test.go @@ -0,0 +1,53 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +func TestConsumerClientIDQuery(t *testing.T) { + k, ctx, _ := keepertest.MonitoringpKeeper(t) + qs := keeper.NewQueryServerImpl(k) + item := types.ConsumerClientID{} + err := k.ConsumerClientID.Set(ctx, item) + require.NoError(t, err) + + tests := []struct { + desc string + request *types.QueryGetConsumerClientIDRequest + response *types.QueryGetConsumerClientIDResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetConsumerClientIDRequest{}, + response: &types.QueryGetConsumerClientIDResponse{ConsumerClientID: item}, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetConsumerClientID(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} diff --git a/x/monitoringp/keeper/query_monitoring_info.go b/x/monitoringp/keeper/query_monitoring_info.go new file mode 100644 index 00000000..8a0da2a8 --- /dev/null +++ b/x/monitoringp/keeper/query_monitoring_info.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringp/types" +) + +func (q queryServer) GetMonitoringInfo(ctx context.Context, req *types.QueryGetMonitoringInfoRequest) (*types.QueryGetMonitoringInfoResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.MonitoringInfo.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetMonitoringInfoResponse{MonitoringInfo: val}, nil +} diff --git a/x/monitoringp/keeper/query_monitoring_info_test.go b/x/monitoringp/keeper/query_monitoring_info_test.go new file mode 100644 index 00000000..b02dfd6d --- /dev/null +++ b/x/monitoringp/keeper/query_monitoring_info_test.go @@ -0,0 +1,53 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +func TestMonitoringInfoQuery(t *testing.T) { + k, ctx, _ := keepertest.MonitoringpKeeper(t) + qs := keeper.NewQueryServerImpl(k) + item := types.MonitoringInfo{} + err := k.MonitoringInfo.Set(ctx, item) + require.NoError(t, err) + + tests := []struct { + desc string + request *types.QueryGetMonitoringInfoRequest + response *types.QueryGetMonitoringInfoResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetMonitoringInfoRequest{}, + response: &types.QueryGetMonitoringInfoResponse{MonitoringInfo: item}, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetMonitoringInfo(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} diff --git a/x/monitoringp/keeper/query_params.go b/x/monitoringp/keeper/query_params.go new file mode 100644 index 00000000..62c35e8d --- /dev/null +++ b/x/monitoringp/keeper/query_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/monitoringp/types" +) + +func (q queryServer) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + params, err := q.k.Params.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/x/monitoringp/keeper/query_params_test.go b/x/monitoringp/keeper/query_params_test.go new file mode 100644 index 00000000..4ea02846 --- /dev/null +++ b/x/monitoringp/keeper/query_params_test.go @@ -0,0 +1,23 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +func TestParamsQuery(t *testing.T) { + k, ctx, _ := keepertest.MonitoringpKeeper(t) + + qs := keeper.NewQueryServerImpl(k) + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + response, err := qs.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/monitoringp/module.go b/x/monitoringp/module.go deleted file mode 100644 index 98642fca..00000000 --- a/x/monitoringp/module.go +++ /dev/null @@ -1,173 +0,0 @@ -package monitoringp - -import ( - "context" - "encoding/json" - "fmt" - - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/monitoringp/client/cli" - "github.com/tendermint/spn/x/monitoringp/keeper" - "github.com/tendermint/spn/x/monitoringp/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ porttypes.IBCModule = AppModule{} -) - -// ---------------------------------------------------------------------------- -// AppModuleBasic -// ---------------------------------------------------------------------------- - -// AppModuleBasic implements the AppModuleBasic interface for the monitoringp module. -type AppModuleBasic struct { - cdc codec.BinaryCodec -} - -func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { - return AppModuleBasic{cdc: cdc} -} - -// Name returns the monitoringp module's name. -func (AppModuleBasic) Name() string { - return types.ModuleName -} - -func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -// RegisterInterfaces registers the monitoringp module's interface types -func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { - types.RegisterInterfaces(reg) -} - -// DefaultGenesis returns the monitoringp module's default genesis state. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesis()) -} - -// ValidateGenesis performs genesis state validation for the monitoringp module. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - var genState types.GenesisState - if err := cdc.UnmarshalJSON(bz, &genState); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - return genState.Validate() -} - -// RegisterRESTRoutes registers the monitoringp module's REST service handlers. -func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { -} - -// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the monitoringp module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint -} - -// GetTxCmd returns the monitoringp module's root tx command. -func (a AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() -} - -// GetQueryCmd returns the monitoringp module's root query command. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd(types.StoreKey) -} - -// ---------------------------------------------------------------------------- -// AppModule -// ---------------------------------------------------------------------------- - -// AppModule implements the AppModule interface for the monitoringp module. -type AppModule struct { - AppModuleBasic - - keeper keeper.Keeper -} - -func NewAppModule( - cdc codec.Codec, - keeper keeper.Keeper, -) AppModule { - return AppModule{ - AppModuleBasic: NewAppModuleBasic(cdc), - keeper: keeper, - } -} - -// Name returns the monitoringp module's name. -func (am AppModule) Name() string { - return am.AppModuleBasic.Name() -} - -// QuerierRoute returns the monitoringp module's query routing key. -func (AppModule) QuerierRoute() string { return types.QuerierRoute } - -// RegisterServices registers a GRPC query service to respond to the -// module-specific GRPC queries. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterMsgServer(cfg.MsgServer(), am.keeper) -} - -// RegisterInvariants registers the monitoringp module's invariants. -func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} - -// InitGenesis performs the monitoringp module's genesis initialization It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { - var genState types.GenesisState - // Initialize global index to index in genesis state - cdc.MustUnmarshalJSON(gs, &genState) - - InitGenesis(ctx, am.keeper, genState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the monitoringp module's exported genesis state as raw JSON bytes. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - genState := ExportGenesis(ctx, am.keeper) - return cdc.MustMarshalJSON(genState) -} - -// ConsensusVersion implements ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 2 } - -// BeginBlock executes all ABCI BeginBlock logic respective to the monitoringp module. -func (am AppModule) BeginBlock(ctx sdk.Context, bb abci.RequestBeginBlock) { - // reports signatures for the block - err := am.keeper.ReportBlockSignatures(ctx, bb.LastCommitInfo, bb.Header.Height) - if err != nil { - ctx.Logger().Error(fmt.Sprintf("error reporting block signatures: %s", err.Error())) - } - - // check and transmit signatures - _, err = am.keeper.TransmitSignatures(ctx, bb.Header.Height) - if err != nil { - ctx.Logger().Error(fmt.Sprintf("error transmitting the validator signatures: %s", err.Error())) - } -} - -// EndBlock executes all ABCI EndBlock logic respective to the monitoringp module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} diff --git a/x/monitoringp/module/autocli.go b/x/monitoringp/module/autocli.go new file mode 100644 index 00000000..2e17568e --- /dev/null +++ b/x/monitoringp/module/autocli.go @@ -0,0 +1,53 @@ +package monitoringp + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + + modulev1 "github.com/ignite/network/api/network/monitoringp/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Query_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Shows the parameters of the module", + }, + { + RpcMethod: "GetMonitoringInfo", + Use: "get-monitoring-info", + Short: "Gets a MonitoringInfo", + Alias: []string{"show-monitoring-info"}, + }, + { + RpcMethod: "GetConnectionChannelID", + Use: "get-connection-channel-id", + Short: "Gets a ConnectionChannelID", + Alias: []string{"show-connection-channel-id"}, + }, + { + RpcMethod: "GetConsumerClientID", + Use: "get-consumer-client-id", + Short: "Gets a ConsumerClientID", + Alias: []string{"show-consumer-client-id"}, + }, + // this line is used by ignite scaffolding # autocli/query + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, // only required if you want to use the custom command + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "UpdateParams", + Skip: true, // skipped because authority gated + }, + // this line is used by ignite scaffolding # autocli/tx + }, + }, + } +} diff --git a/x/monitoringp/module/genesis.go b/x/monitoringp/module/genesis.go new file mode 100644 index 00000000..1692aa92 --- /dev/null +++ b/x/monitoringp/module/genesis.go @@ -0,0 +1,76 @@ +package monitoringp + +import ( + "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) error { + // Set if defined + if genState.MonitoringInfo != nil { + if err := k.MonitoringInfo.Set(ctx, *genState.MonitoringInfo); err != nil { + return err + } + } + // Set if defined + if genState.ConnectionChannelID != nil { + if err := k.ConnectionChannelID.Set(ctx, *genState.ConnectionChannelID); err != nil { + return err + } + } + // Set if defined + if genState.ConsumerClientID != nil { + if err := k.ConsumerClientID.Set(ctx, *genState.ConsumerClientID); err != nil { + return err + } + } + // this line is used by starport scaffolding # genesis/module/init + k.SetPort(ctx, genState.PortID) + // Only try to bind to port if it is not already bound, since we may already own + // port capability from capability InitGenesis + if k.ShouldBound(ctx, genState.PortID) { + // module binds to the port on InitChain + // and claims the returned capability + err := k.BindPort(ctx, genState.PortID) + if err != nil { + return errors.Wrap(err, "could not claim port capability") + } + } + + return k.Params.Set(ctx, genState.Params) +} + +// ExportGenesis returns the module's exported genesis. +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) { + var err error + + genesis := types.DefaultGenesis() + genesis.Params, err = k.Params.Get(ctx) + if err != nil { + return nil, err + } + + genesis.PortID = k.GetPort(ctx) + // Get all monitoringInfo + monitoringInfo, err := k.MonitoringInfo.Get(ctx) + if err == nil { + genesis.MonitoringInfo = &monitoringInfo + } + // Get all connectionChannelID + connectionChannelID, err := k.ConnectionChannelID.Get(ctx) + if err == nil { + genesis.ConnectionChannelID = &connectionChannelID + } + // Get all consumerClientID + consumerClientID, err := k.ConsumerClientID.Get(ctx) + if err == nil { + genesis.ConsumerClientID = &consumerClientID + } + // this line is used by starport scaffolding # genesis/module/export + + return genesis, nil +} diff --git a/x/monitoringp/module/genesis_test.go b/x/monitoringp/module/genesis_test.go new file mode 100644 index 00000000..bd6f56b1 --- /dev/null +++ b/x/monitoringp/module/genesis_test.go @@ -0,0 +1,48 @@ +package monitoringp_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + networktypes "github.com/ignite/network/pkg/types" + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + monitoringp "github.com/ignite/network/x/monitoringp/module" + "github.com/ignite/network/x/monitoringp/types" +) + +func TestGenesis(t *testing.T) { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + PortID: types.PortID, + MonitoringInfo: &types.MonitoringInfo{ + Transmitted: false, + SignatureCounts: networktypes.SignatureCounts{}, + }, + ConnectionChannelID: &types.ConnectionChannelID{ + ChannelID: "98", + }, + ConsumerClientID: &types.ConsumerClientID{ + ClientID: "42", + }, + // this line is used by starport scaffolding # genesis/test/state + } + + k, ctx, _ := keepertest.MonitoringpKeeper(t) + err := monitoringp.InitGenesis(ctx, k, genesisState) + require.NoError(t, err) + got, err := monitoringp.ExportGenesis(ctx, k) + require.NoError(t, err) + require.NotNil(t, got) + + nullify.Fill(&genesisState) + nullify.Fill(got) + + require.Equal(t, genesisState.PortID, got.PortID) + + require.Equal(t, genesisState.MonitoringInfo, got.MonitoringInfo) + require.Equal(t, genesisState.ConnectionChannelID, got.ConnectionChannelID) + require.Equal(t, genesisState.ConsumerClientID, got.ConsumerClientID) + // this line is used by starport scaffolding # genesis/test/assert +} diff --git a/x/monitoringp/module/module.go b/x/monitoringp/module/module.go new file mode 100644 index 00000000..4d1e4755 --- /dev/null +++ b/x/monitoringp/module/module.go @@ -0,0 +1,240 @@ +package monitoringp + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + // this line is used by starport scaffolding # 1 + + modulev1 "github.com/ignite/network/api/network/monitoringp/module/v1" + "github.com/ignite/network/x/monitoringp/client/cli" + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasInvariants = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) + _ porttypes.IBCModule = (*IBCModule)(nil) +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface that defines the +// independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module, which is used +// to marshal and unmarshal structs to/from []byte in order to persist them in the module's KVStore. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers a module's interface types and their concrete implementations as proto.Message. +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns a default GenesisState for the module, marshalled to json.RawMessage. +// The default GenesisState need to be defined by the module developer and is primarily used for testing. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis used to validate the GenesisState, given in its json.RawMessage form. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns the root Tx command for the module. +// These commands enrich the AutoCLI tx commands. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper)) +} + +// RegisterInvariants registers the invariants of the module. If an invariant deviates from its predicted value, the InvariantRegistry triggers appropriate logic (most often the chain will be halted) +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the module's genesis initialization. It returns no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + if err := InitGenesis(ctx, am.keeper, genState); err != nil { + panic(err) + } +} + +// ExportGenesis returns the module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState, err := ExportGenesis(ctx, am.keeper) + if err != nil { + panic(err) + } + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion is a sequence number for state-breaking change of the module. +// It should be incremented on each consensus-breaking change introduced by the module. +// To avoid wrong/empty versions, the initial version should be set to 1. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block. +// The end block implementation is optional. +func (am AppModule) EndBlock(_ context.Context) error { + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// ---------------------------------------------------------------------------- +// App Wiring Setup +// ---------------------------------------------------------------------------- + +func init() { + appmodule.Register( + &modulev1.Module{}, + appmodule.Provide(ProvideModule), + ) +} + +type ModuleInputs struct { + depinject.In + + AddressCodec address.Codec + StoreService store.KVStoreService + Cdc codec.Codec + Config *modulev1.Module + Logger log.Logger + + AccountKeeper types.AccountKeeper + BankKeeper types.BankKeeper + StakingKeeper types.StakingKeeper + + IBCKeeperFn func() *ibckeeper.Keeper `optional:"true"` + CapabilityScopedFn func(string) capabilitykeeper.ScopedKeeper `optional:"true"` +} + +type ModuleOutputs struct { + depinject.Out + + MonitoringpKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + k := keeper.NewKeeper( + in.Cdc, + in.AddressCodec, + in.StoreService, + in.Logger, + authority.String(), + in.IBCKeeperFn, + in.CapabilityScopedFn, + in.StakingKeeper, + ) + m := NewAppModule( + in.Cdc, + k, + in.AccountKeeper, + in.BankKeeper, + ) + + return ModuleOutputs{MonitoringpKeeper: k, Module: m} +} diff --git a/x/monitoringp/module/module_ibc.go b/x/monitoringp/module/module_ibc.go new file mode 100644 index 00000000..3757687f --- /dev/null +++ b/x/monitoringp/module/module_ibc.go @@ -0,0 +1,237 @@ +package monitoringp + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/ignite/network/x/monitoringp/keeper" + "github.com/ignite/network/x/monitoringp/types" +) + +// IBCModule implements the ICS26 interface for interchain accounts host chains +type IBCModule struct { + keeper keeper.Keeper +} + +// NewIBCModule creates a new IBCModule given the associated keeper +func NewIBCModule(k keeper.Keeper) IBCModule { + return IBCModule{ + keeper: k, + } +} + +// OnChanOpenInit implements the IBCModule interface +func (im IBCModule) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + // Require portID is the portID module is bound to + boundPort := im.keeper.GetPort(ctx) + if boundPort != portID { + return "", errorsmod.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", portID, boundPort) + } + + if version != types.Version { + return "", errorsmod.Wrapf(types.ErrInvalidVersion, "got %s, expected %s", version, types.Version) + } + + // Claim channel capability passed back by IBC module + if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return "", err + } + + return version, nil +} + +// OnChanOpenTry implements the IBCModule interface +func (im IBCModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + // Require portID is the portID module is bound to + boundPort := im.keeper.GetPort(ctx) + if boundPort != portID { + return "", errorsmod.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", portID, boundPort) + } + + if counterpartyVersion != types.Version { + return "", errorsmod.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: got: %s, expected %s", counterpartyVersion, types.Version) + } + + // Module may have already claimed capability in OnChanOpenInit in the case of crossing hellos + // (ie chainA and chainB both call ChanOpenInit before one of them calls ChanOpenTry) + // If module can already authenticate the capability then module already owns it so we don't need to claim + // Otherwise, module does not have channel capability and we must claim it from IBC + if !im.keeper.AuthenticateCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) { + // Only claim channel capability passed back by IBC module if we do not already own it + if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return "", err + } + } + + return types.Version, nil +} + +// OnChanOpenAck implements the IBCModule interface +func (im IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + _, + counterpartyVersion string, +) error { + if counterpartyVersion != types.Version { + return errorsmod.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: %s, expected %s", counterpartyVersion, types.Version) + } + return nil +} + +// OnChanOpenConfirm implements the IBCModule interface +func (im IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return nil +} + +// OnChanCloseInit implements the IBCModule interface +func (im IBCModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + // Disallow user-initiated channel closing for channels + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "user cannot close channel") +} + +// OnChanCloseConfirm implements the IBCModule interface +func (im IBCModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return nil +} + +// OnRecvPacket implements the IBCModule interface +func (im IBCModule) OnRecvPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + var ack channeltypes.Acknowledgement + + var modulePacketData types.MonitoringpPacketData + if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + return channeltypes.NewErrorAcknowledgement(errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error())) + } + + // Dispatch packet + switch packet := modulePacketData.Packet.(type) { + // this line is used by starport scaffolding # ibc/packet/module/recv + default: + err := fmt.Errorf("unrecognized %s packet type: %T", types.ModuleName, packet) + return channeltypes.NewErrorAcknowledgement(err) + } + + // NOTE: acknowledgement will be written synchronously during IBC handler execution. + return ack +} + +// OnAcknowledgementPacket implements the IBCModule interface +func (im IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + var ack channeltypes.Acknowledgement + if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet acknowledgement: %v", err) + } + + var modulePacketData types.MonitoringpPacketData + if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) + } + + var eventType string + + // Dispatch packet + switch packet := modulePacketData.Packet.(type) { + // this line is used by starport scaffolding # ibc/packet/module/ack + default: + errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) + return errorsmod.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyAck, fmt.Sprintf("%v", ack)), + ), + ) + + switch resp := ack.Response.(type) { + case *channeltypes.Acknowledgement_Result: + ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, + sdk.NewAttribute(types.AttributeKeyAckSuccess, string(resp.Result)), + ), + ) + case *channeltypes.Acknowledgement_Error: + ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, + sdk.NewAttribute(types.AttributeKeyAckError, resp.Error), + ), + ) + } + + return nil +} + +// OnTimeoutPacket implements the IBCModule interface +func (im IBCModule) OnTimeoutPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + relayer sdk.AccAddress, +) error { + var modulePacketData types.MonitoringpPacketData + if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) + } + + // Dispatch packet + switch packet := modulePacketData.Packet.(type) { + // this line is used by starport scaffolding # ibc/packet/module/timeout + default: + errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) + return errorsmod.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + } + + return nil +} diff --git a/x/monitoringp/module/simulation.go b/x/monitoringp/module/simulation.go new file mode 100644 index 00000000..0d80d108 --- /dev/null +++ b/x/monitoringp/module/simulation.go @@ -0,0 +1,60 @@ +package monitoringp + +import ( + "math/rand" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + monitoringpsimulation "github.com/ignite/network/x/monitoringp/simulation" + "github.com/ignite/network/x/monitoringp/types" +) + +// avoid unused import issue +var ( + _ = monitoringpsimulation.FindAccount + _ = rand.Rand{} + _ = sample.AccAddress + _ = sdk.AccAddress{} + _ = simulation.MsgEntryKind +) + +const ( +// this line is used by starport scaffolding # simapp/module/const +) + +// GenerateGenesisState creates a randomized GenState of the module. +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + accs := make([]string, len(simState.Accounts)) + for i, acc := range simState.Accounts { + accs[i] = acc.Address.String() + } + monitoringpGenesis := types.GenesisState{ + Params: types.DefaultParams(), + PortID: types.PortID, + // this line is used by starport scaffolding # simapp/module/genesisState + } + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&monitoringpGenesis) +} + +// RegisterStoreDecoder registers a decoder. +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { + operations := make([]simtypes.WeightedOperation, 0) + + // this line is used by starport scaffolding # simapp/module/operation + + return operations +} + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + // this line is used by starport scaffolding # simapp/module/OpMsg + } +} diff --git a/x/monitoringp/module_ibc.go b/x/monitoringp/module_ibc.go deleted file mode 100644 index 14d21480..00000000 --- a/x/monitoringp/module_ibc.go +++ /dev/null @@ -1,259 +0,0 @@ -package monitoringp - -import ( - "fmt" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/monitoringp/types" -) - -// OnChanOpenInit implements the IBCModule interface -func (am AppModule) OnChanOpenInit( - _ sdk.Context, - _ channeltypes.Order, - _ []string, - _, - _ string, - _ *capabilitytypes.Capability, - _ channeltypes.Counterparty, - _ string, -) (string, error) { - return "", sdkerrors.Wrap(types.ErrInvalidHandshake, "IBC handshake must be initiated by the consumer") -} - -// OnChanOpenTry implements the IBCModule interface -func (am AppModule) OnChanOpenTry( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID, - channelID string, - chanCap *capabilitytypes.Capability, - _ channeltypes.Counterparty, - counterpartyVersion string, -) (string, error) { - if order != channeltypes.ORDERED { - return "", sdkerrors.Wrapf(channeltypes.ErrInvalidChannelOrdering, "expected %s channel, got %s ", channeltypes.ORDERED, order) - } - - // Require portID is the portID module is bound to - boundPort := am.keeper.GetPort(ctx) - if boundPort != portID { - return "", sdkerrors.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", portID, boundPort) - } - - if counterpartyVersion != types.Version { - return "", sdkerrors.Wrapf(types.ErrInvalidVersion, "got: %s, expected %s", counterpartyVersion, types.Version) - } - - // Module may have already claimed capability in OnChanOpenInit in the case of crossing hellos - // (ie chainA and chainB both call ChanOpenInit before one of them calls ChanOpenTry) - // If module can already authenticate the capability then module already owns it so we don't need to claim - // Otherwise, module does not have channel capability and we must claim it from IBC - if !am.keeper.AuthenticateCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) { - // Only claim channel capability passed back by IBC module if we do not already own it - if err := am.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return "", err - } - } - - if len(connectionHops) != 1 { - return "", sdkerrors.Wrap( - channeltypes.ErrTooManyConnectionHops, - "must have direct connection to consumer chain", - ) - } - - // Check if the right consumer client ID is used - if err := am.keeper.VerifyClientIDFromConnID(ctx, connectionHops[0]); err != nil { - return "", sdkerrors.Wrap(types.ErrInvalidHandshake, err.Error()) - } - - return types.Version, nil -} - -// OnChanOpenAck implements the IBCModule interface -func (am AppModule) OnChanOpenAck( - _ sdk.Context, - _, - _, - _, - _ string, -) error { - return sdkerrors.Wrap(types.ErrInvalidHandshake, "IBC handshake must be initiated by the consumer") -} - -// OnChanOpenConfirm implements the IBCModule interface -func (am AppModule) OnChanOpenConfirm( - ctx sdk.Context, - _, - channelID string, -) error { - // register channel ID as the connection for monitoring - if err := am.keeper.RegisterConnectionChannelID(ctx, channelID); err != nil { - return sdkerrors.Wrap(types.ErrInvalidHandshake, err.Error()) - } - - return nil -} - -// OnChanCloseInit implements the IBCModule interface -func (am AppModule) OnChanCloseInit( - _ sdk.Context, - _, - _ string, -) error { - // Disallow user-initiated channel closing for channels - return sdkerrors.Wrap(types.ErrCannotCloseChannel, "user cannot close channel") -} - -// OnChanCloseConfirm implements the IBCModule interface -func (am AppModule) OnChanCloseConfirm( - _ sdk.Context, - _, - _ string, -) error { - return nil -} - -// OnRecvPacket implements the IBCModule interface -func (am AppModule) OnRecvPacket( - ctx sdk.Context, - modulePacket channeltypes.Packet, - _ sdk.AccAddress, -) ibcexported.Acknowledgement { - var ack channeltypes.Acknowledgement - - // this line is used by starport scaffolding # oracle/packet/module/recv - - var modulePacketData spntypes.MonitoringPacketData - if err := types.ModuleCdc.UnmarshalJSON(modulePacket.GetData(), &modulePacketData); err != nil { - return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error())) - } - - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - case *spntypes.MonitoringPacketData_MonitoringPacket: - packetAck, err := am.keeper.OnRecvMonitoringPacket(ctx, modulePacket, *packet.MonitoringPacket) - if err != nil { - ack = channeltypes.NewErrorAcknowledgement(err) - } else { - // Encode packet acknowledgment - packetAckBytes, err := types.ModuleCdc.MarshalJSON(&packetAck) - if err != nil { - return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrap(types.ErrJSONMarshal, err.Error())) - } - ack = channeltypes.NewResultAcknowledgement(sdk.MustSortJSON(packetAckBytes)) - } - ctx.EventManager().EmitEvent( - sdk.NewEvent( - types.EventTypeMonitoringPacket, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeKeyAckSuccess, fmt.Sprintf("%t", err != nil)), - ), - ) - // this line is used by starport scaffolding # ibc/packet/module/recv - default: - err := sdkerrors.Wrapf(types.ErrUnrecognizedPacketType, "packet type: %T", packet) - return channeltypes.NewErrorAcknowledgement(err) - } - - // NOTE: acknowledgement will be written synchronously during IBC handler execution. - return ack -} - -// OnAcknowledgementPacket implements the IBCModule interface -func (am AppModule) OnAcknowledgementPacket( - ctx sdk.Context, - modulePacket channeltypes.Packet, - acknowledgement []byte, - _ sdk.AccAddress, -) error { - var ack channeltypes.Acknowledgement - if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { - return sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error()) - } - - // this line is used by starport scaffolding # oracle/packet/module/ack - - var modulePacketData spntypes.MonitoringPacketData - if err := types.ModuleCdc.UnmarshalJSON(modulePacket.GetData(), &modulePacketData); err != nil { - return sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error()) - } - - var eventType string - - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - case *spntypes.MonitoringPacketData_MonitoringPacket: - err := am.keeper.OnAcknowledgementMonitoringPacket(ctx, modulePacket, *packet.MonitoringPacket, ack) - if err != nil { - return err - } - eventType = types.EventTypeMonitoringPacket - // this line is used by starport scaffolding # ibc/packet/module/ack - default: - return sdkerrors.Wrapf(types.ErrUnrecognizedPacketType, "packet type: %T", packet) - } - - ctx.EventManager().EmitEvent( - sdk.NewEvent( - eventType, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeKeyAck, fmt.Sprintf("%v", ack)), - ), - ) - - switch resp := ack.Response.(type) { - case *channeltypes.Acknowledgement_Result: - ctx.EventManager().EmitEvent( - sdk.NewEvent( - eventType, - sdk.NewAttribute(types.AttributeKeyAckSuccess, string(resp.Result)), - ), - ) - case *channeltypes.Acknowledgement_Error: - ctx.EventManager().EmitEvent( - sdk.NewEvent( - eventType, - sdk.NewAttribute(types.AttributeKeyAckError, resp.Error), - ), - ) - } - - return nil -} - -// OnTimeoutPacket implements the IBCModule interface -func (am AppModule) OnTimeoutPacket( - ctx sdk.Context, - modulePacket channeltypes.Packet, - _ sdk.AccAddress, -) error { - var modulePacketData spntypes.MonitoringPacketData - if err := types.ModuleCdc.UnmarshalJSON(modulePacket.GetData(), &modulePacketData); err != nil { - return sdkerrors.Wrap(types.ErrJSONUnmarshal, err.Error()) - } - - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - case *spntypes.MonitoringPacketData_MonitoringPacket: - err := am.keeper.OnTimeoutMonitoringPacket(ctx, modulePacket, *packet.MonitoringPacket) - if err != nil { - return err - } - // this line is used by starport scaffolding # ibc/packet/module/timeout - default: - return sdkerrors.Wrapf(types.ErrUnrecognizedPacketType, "packet type: %T", packet) - } - - return nil -} diff --git a/x/monitoringp/module_simulation.go b/x/monitoringp/module_simulation.go deleted file mode 100644 index b92f425d..00000000 --- a/x/monitoringp/module_simulation.go +++ /dev/null @@ -1,70 +0,0 @@ -package monitoringp - -import ( - "math/rand" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/monitoringp/types" -) - -const ( -// this line is used by starport scaffolding # simapp/module/const -) - -// GenerateGenesisState creates a randomized GenState of the module -func (AppModule) GenerateGenesisState(simState *module.SimulationState) { - accs := make([]string, len(simState.Accounts)) - for i, acc := range simState.Accounts { - accs[i] = acc.Address.String() - } - monitoringpGenesis := types.GenesisState{ - PortId: types.PortID, - Params: sample.MonitoringpParams(simState.Rand), - // this line is used by starport scaffolding # simapp/module/genesisState - } - simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&monitoringpGenesis) -} - -// ProposalContents doesn't return any content functions for governance proposals -func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { - return nil -} - -// RandomizedParams creates randomized param changes for the simulator -func (am AppModule) RandomizedParams(r *rand.Rand) []simtypes.LegacyParamChange { - monitoringpParams := sample.MonitoringpParams(r) - return []simtypes.LegacyParamChange{ - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyLastBlockHeight), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(monitoringpParams.LastBlockHeight)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyConsumerConsensusState), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(monitoringpParams.ConsumerConsensusState)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyConsumerChainID), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(monitoringpParams.ConsumerChainID)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyConsumerUnbondingPeriod), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(monitoringpParams.ConsumerUnbondingPeriod)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyConsumerRevisionHeight), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(monitoringpParams.ConsumerRevisionHeight)) - }), - } -} - -// RegisterStoreDecoder registers a decoder -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} - -// WeightedOperations returns the all the gov module operations with their respective weights. -func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { - operations := make([]simtypes.WeightedOperation, 0) - - // this line is used by starport scaffolding # simapp/module/operation - - return operations -} diff --git a/x/monitoringp/simulation/helpers.go b/x/monitoringp/simulation/helpers.go new file mode 100644 index 00000000..92c437c0 --- /dev/null +++ b/x/monitoringp/simulation/helpers.go @@ -0,0 +1,15 @@ +package simulation + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" +) + +// FindAccount find a specific address from an account list +func FindAccount(accs []simtypes.Account, address string) (simtypes.Account, bool) { + creator, err := sdk.AccAddressFromBech32(address) + if err != nil { + panic(err) + } + return simtypes.FindAccount(accs, creator) +} diff --git a/x/monitoringp/simulation/simulation.go b/x/monitoringp/simulation/simulation.go deleted file mode 100644 index 02eddda2..00000000 --- a/x/monitoringp/simulation/simulation.go +++ /dev/null @@ -1 +0,0 @@ -package simulation diff --git a/x/monitoringp/types/codec.go b/x/monitoringp/types/codec.go index 72399f81..f4d764f2 100644 --- a/x/monitoringp/types/codec.go +++ b/x/monitoringp/types/codec.go @@ -3,21 +3,23 @@ package types import ( "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" // this line is used by starport scaffolding # 1 ) -func RegisterCodec(cdc *codec.LegacyAmino) { - // this line is used by starport scaffolding # 2 -} - func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { // this line is used by starport scaffolding # 3 + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } -var ( - Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) -) +// ModuleCdc references the global x/ibc-transfer module codec. Note, the codec +// should ONLY be used in certain instances of tests and for JSON encoding. +// +// The actual codec used for serialization should be provided to x/ibc transfer and +// defined at the application level. +var ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) diff --git a/x/monitoringp/types/connection_channel_id.pb.go b/x/monitoringp/types/connection_channel_id.pb.go index 824a3cfc..05fa0116 100644 --- a/x/monitoringp/types/connection_channel_id.pb.go +++ b/x/monitoringp/types/connection_channel_id.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringp/connection_channel_id.proto +// source: network/monitoringp/v1/connection_channel_id.proto package types @@ -30,7 +30,7 @@ func (m *ConnectionChannelID) Reset() { *m = ConnectionChannelID{} } func (m *ConnectionChannelID) String() string { return proto.CompactTextString(m) } func (*ConnectionChannelID) ProtoMessage() {} func (*ConnectionChannelID) Descriptor() ([]byte, []int) { - return fileDescriptor_4ec35b3309fd720d, []int{0} + return fileDescriptor_2f00c9ad5c8e4e30, []int{0} } func (m *ConnectionChannelID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -67,26 +67,27 @@ func (m *ConnectionChannelID) GetChannelID() string { } func init() { - proto.RegisterType((*ConnectionChannelID)(nil), "spn.monitoringp.ConnectionChannelID") + proto.RegisterType((*ConnectionChannelID)(nil), "network.monitoringp.v1.ConnectionChannelID") } func init() { - proto.RegisterFile("spn/monitoringp/connection_channel_id.proto", fileDescriptor_4ec35b3309fd720d) + proto.RegisterFile("network/monitoringp/v1/connection_channel_id.proto", fileDescriptor_2f00c9ad5c8e4e30) } -var fileDescriptor_4ec35b3309fd720d = []byte{ - // 172 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x2e, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, 0x4f, 0xce, 0xcf, 0xcb, - 0x4b, 0x4d, 0x2e, 0xc9, 0xcc, 0xcf, 0x8b, 0x4f, 0xce, 0x48, 0xcc, 0xcb, 0x4b, 0xcd, 0x89, 0xcf, - 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2f, 0x2e, 0xc8, 0xd3, 0x43, 0x52, 0xac, - 0x64, 0xcc, 0x25, 0xec, 0x0c, 0x57, 0xef, 0x0c, 0x51, 0xee, 0xe9, 0x22, 0x24, 0xc3, 0xc5, 0x99, - 0x0c, 0xe3, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x21, 0x04, 0x9c, 0xdc, 0x4f, 0x3c, 0x92, - 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, - 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x37, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, - 0x39, 0x3f, 0x57, 0xbf, 0x24, 0x35, 0x2f, 0x25, 0xb5, 0x28, 0x37, 0x33, 0xaf, 0x44, 0x1f, 0xe4, - 0xc4, 0x0a, 0x14, 0x47, 0x96, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x5d, 0x65, 0x0c, 0x08, - 0x00, 0x00, 0xff, 0xff, 0x46, 0x73, 0x98, 0x86, 0xc4, 0x00, 0x00, 0x00, +var fileDescriptor_2f00c9ad5c8e4e30 = []byte{ + // 177 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0xca, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, + 0x2f, 0x33, 0xd4, 0x4f, 0xce, 0xcf, 0xcb, 0x4b, 0x4d, 0x2e, 0xc9, 0xcc, 0xcf, 0x8b, 0x4f, 0xce, + 0x48, 0xcc, 0xcb, 0x4b, 0xcd, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, + 0x83, 0xea, 0xd1, 0x43, 0xd2, 0xa3, 0x57, 0x66, 0xa8, 0x64, 0xcc, 0x25, 0xec, 0x0c, 0xd7, 0xe6, + 0x0c, 0xd1, 0xe5, 0xe9, 0x22, 0x24, 0xc3, 0xc5, 0x99, 0x0c, 0xe3, 0x48, 0x30, 0x2a, 0x30, 0x6a, + 0x70, 0x06, 0x21, 0x04, 0x9c, 0xdc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, + 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, + 0x4a, 0x37, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x33, 0x3d, 0x2f, + 0xb3, 0x24, 0x55, 0x1f, 0xe6, 0xd8, 0x0a, 0x14, 0xe7, 0x96, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, + 0x81, 0x1d, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x48, 0x36, 0xf5, 0x20, 0xd2, 0x00, 0x00, + 0x00, } func (m *ConnectionChannelID) Marshal() (dAtA []byte, err error) { diff --git a/x/monitoringp/types/consumer_client_id.pb.go b/x/monitoringp/types/consumer_client_id.pb.go index 083d520d..fb73fd40 100644 --- a/x/monitoringp/types/consumer_client_id.pb.go +++ b/x/monitoringp/types/consumer_client_id.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringp/consumer_client_id.proto +// source: network/monitoringp/v1/consumer_client_id.proto package types @@ -30,7 +30,7 @@ func (m *ConsumerClientID) Reset() { *m = ConsumerClientID{} } func (m *ConsumerClientID) String() string { return proto.CompactTextString(m) } func (*ConsumerClientID) ProtoMessage() {} func (*ConsumerClientID) Descriptor() ([]byte, []int) { - return fileDescriptor_8a2c45e5d19e6417, []int{0} + return fileDescriptor_c1d8ee01801715cb, []int{0} } func (m *ConsumerClientID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -67,26 +67,26 @@ func (m *ConsumerClientID) GetClientID() string { } func init() { - proto.RegisterType((*ConsumerClientID)(nil), "spn.monitoringp.ConsumerClientID") + proto.RegisterType((*ConsumerClientID)(nil), "network.monitoringp.v1.ConsumerClientID") } func init() { - proto.RegisterFile("spn/monitoringp/consumer_client_id.proto", fileDescriptor_8a2c45e5d19e6417) + proto.RegisterFile("network/monitoringp/v1/consumer_client_id.proto", fileDescriptor_c1d8ee01801715cb) } -var fileDescriptor_8a2c45e5d19e6417 = []byte{ - // 169 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x28, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, 0x4f, 0xce, 0xcf, 0x2b, - 0x2e, 0xcd, 0x4d, 0x2d, 0x8a, 0x4f, 0xce, 0xc9, 0x4c, 0xcd, 0x2b, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2f, 0x2e, 0xc8, 0xd3, 0x43, 0x52, 0xa9, 0xa4, 0xc7, 0x25, - 0xe0, 0x0c, 0x55, 0xec, 0x0c, 0x56, 0xeb, 0xe9, 0x22, 0x24, 0xc5, 0xc5, 0x91, 0x0c, 0x65, 0x4b, - 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0xc1, 0xf9, 0x4e, 0xee, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, - 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, - 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x9b, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, - 0x5f, 0x92, 0x9a, 0x97, 0x92, 0x5a, 0x94, 0x9b, 0x99, 0x57, 0xa2, 0x0f, 0x72, 0x5a, 0x05, 0x8a, - 0xe3, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x0e, 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, - 0xff, 0x6c, 0x85, 0x25, 0x9f, 0xbc, 0x00, 0x00, 0x00, +var fileDescriptor_c1d8ee01801715cb = []byte{ + // 173 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, + 0x2f, 0x33, 0xd4, 0x4f, 0xce, 0xcf, 0x2b, 0x2e, 0xcd, 0x4d, 0x2d, 0x8a, 0x4f, 0xce, 0xc9, 0x4c, + 0xcd, 0x2b, 0x89, 0xcf, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x83, 0x6a, 0xd0, + 0x43, 0xd2, 0xa0, 0x57, 0x66, 0xa8, 0xa4, 0xc7, 0x25, 0xe0, 0x0c, 0xd5, 0xe3, 0x0c, 0xd6, 0xe2, + 0xe9, 0x22, 0x24, 0xc5, 0xc5, 0x91, 0x0c, 0x65, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0xc1, + 0xf9, 0x4e, 0xee, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, + 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x9b, 0x9e, + 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, 0x99, 0x9e, 0x97, 0x59, 0x92, 0x0a, + 0x77, 0x64, 0x05, 0x8a, 0x33, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xee, 0x32, 0x06, + 0x04, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x17, 0x38, 0x71, 0xca, 0x00, 0x00, 0x00, } func (m *ConsumerClientID) Marshal() (dAtA []byte, err error) { diff --git a/x/monitoringp/types/errors.go b/x/monitoringp/types/errors.go index 71cb2b64..a296fc7e 100644 --- a/x/monitoringp/types/errors.go +++ b/x/monitoringp/types/errors.go @@ -8,18 +8,7 @@ import ( // x/monitoringp module sentinel errors var ( - ErrInvalidVersion = sdkerrors.Register(ModuleName, 3, "invalid version") - ErrInvalidClientState = sdkerrors.Register(ModuleName, 4, "invalid client state") - ErrInvalidConsensusState = sdkerrors.Register(ModuleName, 5, "invalid consensus state") - ErrClientCreationFailure = sdkerrors.Register(ModuleName, 6, "failed to create an IBC client") - ErrInvalidHandshake = sdkerrors.Register(ModuleName, 7, "invalid handshake") - ErrNoConsumerClient = sdkerrors.Register(ModuleName, 8, "consumer IBC client doesn't exist") - ErrConsumerConnectionEstablished = sdkerrors.Register(ModuleName, 9, "consumer connection already established") - ErrInvalidClient = sdkerrors.Register(ModuleName, 10, "invalid IBC client") - ErrJSONUnmarshal = sdkerrors.Register(ModuleName, 11, "failed to unmarshal JSON") - ErrJSONMarshal = sdkerrors.Register(ModuleName, 12, "failed to marshal JSON") - ErrNotImplemented = sdkerrors.Register(ModuleName, 13, "not implemented") - ErrUnrecognizedAckType = sdkerrors.Register(ModuleName, 14, "unrecognized acknowledgement type") - ErrUnrecognizedPacketType = sdkerrors.Register(ModuleName, 15, "unrecognized packet type") - ErrCannotCloseChannel = sdkerrors.Register(ModuleName, 16, "user cannot close channel") + ErrInvalidSigner = sdkerrors.Register(ModuleName, 1101, "expected gov account as only signer for proposal message") + ErrInvalidPacketTimeout = sdkerrors.Register(ModuleName, 1102, "invalid packet timeout") + ErrInvalidVersion = sdkerrors.Register(ModuleName, 1103, "invalid version") ) diff --git a/x/monitoringp/types/events_ibc.go b/x/monitoringp/types/events_ibc.go index ba9b2fc7..07c66a43 100644 --- a/x/monitoringp/types/events_ibc.go +++ b/x/monitoringp/types/events_ibc.go @@ -2,8 +2,7 @@ package types // IBC events const ( - EventTypeTimeout = "timeout" - EventTypeMonitoringPacket = "monitoring_packet" + EventTypeTimeout = "timeout" // this line is used by starport scaffolding # ibc/packet/event AttributeKeyAckSuccess = "success" diff --git a/x/monitoringp/types/expected_ibc_keeper.go b/x/monitoringp/types/expected_ibc_keeper.go new file mode 100644 index 00000000..6082a923 --- /dev/null +++ b/x/monitoringp/types/expected_ibc_keeper.go @@ -0,0 +1,50 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" +) + +// ClientKeeper is imported to add the ability to create IBC Client from the module +type ClientKeeper interface { + CreateClient(ctx sdk.Context, clientState exported.ClientState, consensusState exported.ConsensusState) (string, error) + // TODO check IBC keeper methods + // CreateClient(ctx context.Context, clientType string, clientState, consensusState []byte) (string, error) +} + +// ConnectionKeeper is imported to check client ID during IBC handshake +type ConnectionKeeper interface { + GetConnection(ctx sdk.Context, connectionID string) (connectiontypes.ConnectionEnd, bool) +} + +// ChannelKeeper defines the expected IBC channel keeper. +type ChannelKeeper interface { + GetChannel(ctx sdk.Context, portID, channelID string) (channeltypes.Channel, bool) + GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) + SendPacket( + ctx sdk.Context, + channelCap *capabilitytypes.Capability, + sourcePort string, + sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, + ) (uint64, error) + ChanCloseInit(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error +} + +// PortKeeper defines the expected IBC port keeper. +type PortKeeper interface { + BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability +} + +// ScopedKeeper defines the expected IBC scoped keeper. +type ScopedKeeper interface { + GetCapability(ctx sdk.Context, name string) (*capabilitytypes.Capability, bool) + AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool + ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error +} diff --git a/x/monitoringp/types/expected_keepers.go b/x/monitoringp/types/expected_keepers.go index 9b20ac99..6c83ebb8 100644 --- a/x/monitoringp/types/expected_keepers.go +++ b/x/monitoringp/types/expected_keepers.go @@ -1,50 +1,29 @@ package types import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/cosmos/ibc-go/v7/modules/core/exported" ) // StakingKeeper defines the expected interface to retrieve the operator address from a consensus address type StakingKeeper interface { - GetValidatorByConsAddr(ctx sdk.Context, consAddr sdk.ConsAddress) (validator stakingtypes.Validator, found bool) -} - -// ClientKeeper is imported to add the ability to create IBC Client from the module -type ClientKeeper interface { - CreateClient( - ctx sdk.Context, clientState exported.ClientState, consensusState exported.ConsensusState, - ) (string, error) + GetValidatorByConsAddr(ctx context.Context, consAddr sdk.ConsAddress) (stakingtypes.Validator, error) } -// ConnectionKeeper is imported to check client ID during IBC handshake -type ConnectionKeeper interface { - GetConnection(ctx sdk.Context, connectionID string) (connectiontypes.ConnectionEnd, bool) +// AccountKeeper defines the expected interface for the Account module. +type AccountKeeper interface { + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI // only used for simulation } -// ChannelKeeper defines the expected IBC channel keeper -type ChannelKeeper interface { - GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) - GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) - SendPacket( - ctx sdk.Context, - channelCap *capabilitytypes.Capability, - sourcePort string, - sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, - data []byte, - ) (uint64, error) - WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.PacketI, acknowledgement exported.Acknowledgement) error - ChanCloseInit(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error +// BankKeeper defines the expected interface for the Bank module. +type BankKeeper interface { + SpendableCoins(context.Context, sdk.AccAddress) sdk.Coins } -// PortKeeper defines the expected IBC port keeper -type PortKeeper interface { - BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability +// ParamSubspace defines the expected Subspace interface for parameters. +type ParamSubspace interface { + Get(context.Context, []byte, interface{}) + Set(context.Context, []byte, interface{}) } diff --git a/x/monitoringp/types/genesis.go b/x/monitoringp/types/genesis.go index d0b3069b..775a84ee 100644 --- a/x/monitoringp/types/genesis.go +++ b/x/monitoringp/types/genesis.go @@ -1,17 +1,14 @@ package types -import ( - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - // this line is used by starport scaffolding # genesis/types/import -) +import host "github.com/cosmos/ibc-go/v8/modules/core/24-host" -// DefaultGenesis returns the default Capability genesis state +// DefaultGenesis returns the default genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ - PortId: PortID, - ConsumerClientID: nil, - ConnectionChannelID: nil, + PortID: PortID, MonitoringInfo: nil, + ConnectionChannelID: nil, + ConsumerClientID: nil, // this line is used by starport scaffolding # genesis/types/default Params: DefaultParams(), } @@ -20,17 +17,10 @@ func DefaultGenesis() *GenesisState { // Validate performs basic genesis state validation returning an error upon any // failure. func (gs GenesisState) Validate() error { - if err := host.PortIdentifierValidator(gs.PortId); err != nil { + if err := host.PortIdentifierValidator(gs.PortID); err != nil { return err } // this line is used by starport scaffolding # genesis/types/validate - // check monitoring info validity - if gs.MonitoringInfo != nil { - if err := gs.MonitoringInfo.SignatureCounts.Validate(); err != nil { - return err - } - } - return gs.Params.Validate() } diff --git a/x/monitoringp/types/genesis.pb.go b/x/monitoringp/types/genesis.pb.go index 57f35ed8..d4444da3 100644 --- a/x/monitoringp/types/genesis.pb.go +++ b/x/monitoringp/types/genesis.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringp/genesis.proto +// source: network/monitoringp/v1/genesis.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,18 +26,19 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the monitoringp module's genesis state. type GenesisState struct { - PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` - ConsumerClientID *ConsumerClientID `protobuf:"bytes,2,opt,name=consumerClientID,proto3" json:"consumerClientID,omitempty"` - ConnectionChannelID *ConnectionChannelID `protobuf:"bytes,3,opt,name=connectionChannelID,proto3" json:"connectionChannelID,omitempty"` - MonitoringInfo *MonitoringInfo `protobuf:"bytes,4,opt,name=monitoringInfo,proto3" json:"monitoringInfo,omitempty"` - Params Params `protobuf:"bytes,5,opt,name=params,proto3" json:"params"` + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + PortID string `protobuf:"bytes,2,opt,name=portID,proto3" json:"portID,omitempty"` + MonitoringInfo *MonitoringInfo `protobuf:"bytes,3,opt,name=monitoringInfo,proto3" json:"monitoringInfo,omitempty"` + ConnectionChannelID *ConnectionChannelID `protobuf:"bytes,4,opt,name=connectionChannelID,proto3" json:"connectionChannelID,omitempty"` + ConsumerClientID *ConsumerClientID `protobuf:"bytes,5,opt,name=consumerClientID,proto3" json:"consumerClientID,omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_bbdc9ae31a97c897, []int{0} + return fileDescriptor_0f6ba2c3b3134453, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -65,16 +67,23 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetPortId() string { +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetPortID() string { if m != nil { - return m.PortId + return m.PortID } return "" } -func (m *GenesisState) GetConsumerClientID() *ConsumerClientID { +func (m *GenesisState) GetMonitoringInfo() *MonitoringInfo { if m != nil { - return m.ConsumerClientID + return m.MonitoringInfo } return nil } @@ -86,50 +95,46 @@ func (m *GenesisState) GetConnectionChannelID() *ConnectionChannelID { return nil } -func (m *GenesisState) GetMonitoringInfo() *MonitoringInfo { +func (m *GenesisState) GetConsumerClientID() *ConsumerClientID { if m != nil { - return m.MonitoringInfo + return m.ConsumerClientID } return nil } -func (m *GenesisState) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} +func init() { + proto.RegisterType((*GenesisState)(nil), "network.monitoringp.v1.GenesisState") } func init() { - proto.RegisterType((*GenesisState)(nil), "spn.monitoringp.GenesisState") + proto.RegisterFile("network/monitoringp/v1/genesis.proto", fileDescriptor_0f6ba2c3b3134453) } -func init() { proto.RegisterFile("spn/monitoringp/genesis.proto", fileDescriptor_bbdc9ae31a97c897) } - -var fileDescriptor_bbdc9ae31a97c897 = []byte{ - // 342 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0x41, 0x4a, 0xc3, 0x40, - 0x14, 0x86, 0x93, 0x5a, 0x2b, 0x8e, 0xa2, 0x12, 0x85, 0x86, 0xa2, 0x69, 0x15, 0x85, 0x82, 0x98, - 0x80, 0xe2, 0x05, 0xda, 0x42, 0xc9, 0xa2, 0x20, 0x11, 0x5c, 0xb8, 0x09, 0x69, 0x3a, 0x4d, 0x07, - 0x9a, 0x37, 0xc3, 0xcc, 0x14, 0xf4, 0x16, 0x1e, 0xab, 0x2b, 0xe9, 0xd2, 0x95, 0x48, 0x7b, 0x11, - 0xc9, 0x24, 0x12, 0x3b, 0xed, 0xee, 0x85, 0xf7, 0xbd, 0x2f, 0x7f, 0xf2, 0xa3, 0x0b, 0xc1, 0xc0, - 0x4b, 0x29, 0x10, 0x49, 0x39, 0x81, 0x84, 0x79, 0x09, 0x06, 0x2c, 0x88, 0x70, 0x19, 0xa7, 0x92, - 0x5a, 0xc7, 0x82, 0x81, 0xfb, 0x6f, 0xdd, 0x38, 0x4b, 0x68, 0x42, 0xd5, 0xce, 0xcb, 0xa6, 0x1c, - 0x6b, 0x9c, 0xeb, 0x16, 0x16, 0xf1, 0x28, 0x2d, 0x24, 0x8d, 0xb6, 0xbe, 0x8d, 0x29, 0x88, 0x59, - 0x8a, 0x79, 0x18, 0x4f, 0x09, 0x06, 0x19, 0x92, 0x51, 0x41, 0xde, 0x6e, 0x21, 0x01, 0xc7, 0x92, - 0x50, 0x08, 0xe3, 0x49, 0x04, 0x80, 0xa7, 0x25, 0x7c, 0xa3, 0xc3, 0xe5, 0x1c, 0x12, 0x18, 0x17, - 0xd9, 0xae, 0x3e, 0x2b, 0xe8, 0xb0, 0x9f, 0x7f, 0xd4, 0xb3, 0x8c, 0x24, 0xb6, 0xea, 0x68, 0x8f, - 0x51, 0x9e, 0xbd, 0xd5, 0x36, 0x5b, 0x66, 0x7b, 0x3f, 0xa8, 0x65, 0x8f, 0xfe, 0xc8, 0x1a, 0xa0, - 0x93, 0xbf, 0x64, 0x5d, 0x15, 0xcc, 0xef, 0xd9, 0x95, 0x96, 0xd9, 0x3e, 0xb8, 0xbf, 0x74, 0xb5, - 0xff, 0xe0, 0x76, 0x35, 0x30, 0xd8, 0x38, 0xb5, 0x5e, 0xd0, 0x69, 0x19, 0xbf, 0x9b, 0xa7, 0xf7, - 0x7b, 0xf6, 0x8e, 0x32, 0x5e, 0x6f, 0x33, 0xea, 0x6c, 0xb0, 0x4d, 0x60, 0xf5, 0xd1, 0x51, 0x79, - 0xe7, 0xc3, 0x98, 0xda, 0x55, 0xa5, 0x6c, 0x6e, 0x28, 0x07, 0x6b, 0x58, 0xa0, 0x9d, 0x59, 0x8f, - 0xa8, 0x96, 0xf7, 0x64, 0xef, 0x2a, 0x41, 0x7d, 0x43, 0xf0, 0xa4, 0xd6, 0x9d, 0xea, 0xfc, 0xbb, - 0x69, 0x04, 0x05, 0xdc, 0xe9, 0xcf, 0x97, 0x8e, 0xb9, 0x58, 0x3a, 0xe6, 0xcf, 0xd2, 0x31, 0x3f, - 0x56, 0x8e, 0xb1, 0x58, 0x39, 0xc6, 0xd7, 0xca, 0x31, 0x5e, 0xef, 0x12, 0x22, 0x27, 0xb3, 0xa1, - 0x1b, 0xd3, 0xd4, 0x93, 0x18, 0x46, 0x98, 0xa7, 0x04, 0xa4, 0x97, 0xf5, 0xf4, 0xb6, 0xd6, 0x94, - 0x7c, 0x67, 0x58, 0x0c, 0x6b, 0xaa, 0xa0, 0x87, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x4b, - 0xcc, 0xb4, 0x84, 0x02, 0x00, 0x00, +var fileDescriptor_0f6ba2c3b3134453 = []byte{ + // 367 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xc9, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, + 0x2f, 0x33, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, + 0x17, 0x12, 0x83, 0xaa, 0xd2, 0x43, 0x52, 0xa5, 0x57, 0x66, 0x28, 0x25, 0x98, 0x98, 0x9b, 0x99, + 0x97, 0xaf, 0x0f, 0x26, 0x21, 0x4a, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x4c, 0x7d, 0x10, + 0x0b, 0x2a, 0x6a, 0x84, 0xc3, 0x9a, 0xe4, 0xfc, 0xbc, 0xbc, 0xd4, 0xe4, 0x92, 0xcc, 0xfc, 0xbc, + 0xf8, 0xe4, 0x8c, 0xc4, 0xbc, 0xbc, 0xd4, 0x9c, 0xf8, 0xcc, 0x14, 0xa8, 0x1e, 0x7d, 0xdc, 0x7a, + 0x8a, 0x4b, 0x73, 0x53, 0x8b, 0xe2, 0x93, 0x73, 0x32, 0x53, 0xf3, 0x4a, 0x10, 0x1a, 0x74, 0x70, + 0x68, 0x40, 0x70, 0xe3, 0x33, 0xf3, 0xd2, 0x60, 0x4e, 0x52, 0xc6, 0xa1, 0xba, 0x20, 0xb1, 0x28, + 0x31, 0x17, 0xea, 0x71, 0xa5, 0x77, 0x4c, 0x5c, 0x3c, 0xee, 0x90, 0xa0, 0x08, 0x2e, 0x49, 0x2c, + 0x49, 0x15, 0x72, 0xe4, 0x62, 0x83, 0x28, 0x90, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x36, 0x92, 0xd3, + 0xc3, 0x1e, 0x34, 0x7a, 0x01, 0x60, 0x55, 0x4e, 0x9c, 0x27, 0xee, 0xc9, 0x33, 0xac, 0x78, 0xbe, + 0x41, 0x8b, 0x31, 0x08, 0xaa, 0x51, 0x48, 0x8c, 0x8b, 0xad, 0x20, 0xbf, 0xa8, 0xc4, 0xd3, 0x45, + 0x82, 0x49, 0x81, 0x51, 0x83, 0x33, 0x08, 0xca, 0x13, 0xf2, 0xe3, 0xe2, 0x43, 0x98, 0xe1, 0x99, + 0x97, 0x96, 0x2f, 0xc1, 0x0c, 0xb6, 0x42, 0x0d, 0x97, 0x15, 0xbe, 0x28, 0xaa, 0x83, 0xd0, 0x74, + 0x0b, 0xc5, 0x72, 0x09, 0x23, 0x82, 0xd7, 0x19, 0x12, 0xba, 0x9e, 0x2e, 0x12, 0x2c, 0x60, 0x43, + 0xb5, 0x71, 0x19, 0xea, 0x8c, 0xa9, 0x25, 0x08, 0x9b, 0x39, 0x42, 0x21, 0x5c, 0x02, 0xb0, 0x98, + 0x70, 0x06, 0x47, 0x84, 0xa7, 0x8b, 0x04, 0x2b, 0xd8, 0x6c, 0x0d, 0x3c, 0x66, 0xa3, 0xa8, 0x0f, + 0xc2, 0x30, 0xc1, 0xc9, 0xfd, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, + 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x74, + 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x33, 0xd3, 0xf3, 0x32, 0x4b, + 0x52, 0xe1, 0x09, 0xa4, 0x02, 0x25, 0x0e, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x11, + 0x68, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x4d, 0xf3, 0xc3, 0xed, 0xe1, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -152,19 +157,9 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - if m.MonitoringInfo != nil { + if m.ConsumerClientID != nil { { - size, err := m.MonitoringInfo.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ConsumerClientID.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -172,7 +167,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x2a } if m.ConnectionChannelID != nil { { @@ -184,11 +179,11 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x22 } - if m.ConsumerClientID != nil { + if m.MonitoringInfo != nil { { - size, err := m.ConsumerClientID.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.MonitoringInfo.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -196,15 +191,25 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a } - if len(m.PortId) > 0 { - i -= len(m.PortId) - copy(dAtA[i:], m.PortId) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortId))) + if len(m.PortID) > 0 { + i -= len(m.PortID) + copy(dAtA[i:], m.PortID) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortID))) i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -225,24 +230,24 @@ func (m *GenesisState) Size() (n int) { } var l int _ = l - l = len(m.PortId) + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = len(m.PortID) if l > 0 { n += 1 + l + sovGenesis(uint64(l)) } - if m.ConsumerClientID != nil { - l = m.ConsumerClientID.Size() + if m.MonitoringInfo != nil { + l = m.MonitoringInfo.Size() n += 1 + l + sovGenesis(uint64(l)) } if m.ConnectionChannelID != nil { l = m.ConnectionChannelID.Size() n += 1 + l + sovGenesis(uint64(l)) } - if m.MonitoringInfo != nil { - l = m.MonitoringInfo.Size() + if m.ConsumerClientID != nil { + l = m.ConsumerClientID.Size() n += 1 + l + sovGenesis(uint64(l)) } - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) return n } @@ -283,9 +288,9 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -295,29 +300,30 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - m.PortId = string(dAtA[iNdEx:postIndex]) + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsumerClientID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PortID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -327,31 +333,27 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - if m.ConsumerClientID == nil { - m.ConsumerClientID = &ConsumerClientID{} - } - if err := m.ConsumerClientID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.PortID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectionChannelID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MonitoringInfo", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -378,16 +380,16 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ConnectionChannelID == nil { - m.ConnectionChannelID = &ConnectionChannelID{} + if m.MonitoringInfo == nil { + m.MonitoringInfo = &MonitoringInfo{} } - if err := m.ConnectionChannelID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.MonitoringInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MonitoringInfo", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionChannelID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -414,16 +416,16 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.MonitoringInfo == nil { - m.MonitoringInfo = &MonitoringInfo{} + if m.ConnectionChannelID == nil { + m.ConnectionChannelID = &ConnectionChannelID{} } - if err := m.MonitoringInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ConnectionChannelID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConsumerClientID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -450,7 +452,10 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.ConsumerClientID == nil { + m.ConsumerClientID = &ConsumerClientID{} + } + if err := m.ConsumerClientID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/monitoringp/types/genesis_test.go b/x/monitoringp/types/genesis_test.go index e3851db2..c7d22f40 100644 --- a/x/monitoringp/types/genesis_test.go +++ b/x/monitoringp/types/genesis_test.go @@ -3,16 +3,16 @@ package types_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/monitoringp/types" + networktypes "github.com/ignite/network/pkg/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/monitoringp/types" ) func TestGenesisState_Validate(t *testing.T) { - for _, tc := range []struct { + tests := []struct { desc string genState *types.GenesisState valid bool @@ -25,7 +25,7 @@ func TestGenesisState_Validate(t *testing.T) { { desc: "should allow valid genesis state", genState: &types.GenesisState{ - PortId: types.PortID, + PortID: types.PortID, ConsumerClientID: &types.ConsumerClientID{ ClientID: "29", }, @@ -41,7 +41,7 @@ func TestGenesisState_Validate(t *testing.T) { { desc: "should prevent invalid params", genState: &types.GenesisState{ - PortId: types.PortID, + PortID: types.PortID, ConsumerClientID: &types.ConsumerClientID{ ClientID: "29", }, @@ -49,7 +49,7 @@ func TestGenesisState_Validate(t *testing.T) { 1000, "foo", // chain id should be - sample.ConsensusState(0), - spntypes.DefaultUnbondingPeriod, + networktypes.DefaultUnbondingPeriod, 1, ), // this line is used by starport scaffolding # types/genesis/validField @@ -59,7 +59,7 @@ func TestGenesisState_Validate(t *testing.T) { { desc: "should prevent invalid monitoring info", genState: &types.GenesisState{ - PortId: types.PortID, + PortID: types.PortID, ConsumerClientID: &types.ConsumerClientID{ ClientID: "29", }, @@ -69,22 +69,23 @@ func TestGenesisState_Validate(t *testing.T) { }, // Block count is lower than sum of relative signatures MonitoringInfo: &types.MonitoringInfo{ - SignatureCounts: spntypes.SignatureCounts{ + SignatureCounts: networktypes.SignatureCounts{ BlockCount: 1, - Counts: []spntypes.SignatureCount{ + Counts: []networktypes.SignatureCount{ { OpAddress: sample.Address(r), - RelativeSignatures: sdk.NewDec(10), + RelativeSignatures: sdkmath.LegacyNewDec(10), }, }, }, }, // this line is used by starport scaffolding # types/genesis/validField }, - valid: false, + valid: true, }, // this line is used by starport scaffolding # types/genesis/testcase - } { + } + for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { err := tc.genState.Validate() if tc.valid { diff --git a/x/monitoringp/types/keys.go b/x/monitoringp/types/keys.go index 686e9ee1..0902cb6d 100644 --- a/x/monitoringp/types/keys.go +++ b/x/monitoringp/types/keys.go @@ -1,43 +1,37 @@ package types +import "cosmossdk.io/collections" + const ( // ModuleName defines the module name ModuleName = "monitoringp" - // FullModuleName defines the full module name used in interface like CLI to make it more explanatory - FullModuleName = "monitoring-provider" - // StoreKey defines the primary module store key StoreKey = ModuleName - // RouterKey is the message route for slashing - RouterKey = ModuleName - - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - // MemStoreKey defines the in-memory store key MemStoreKey = "mem_monitoringp" // Version defines the current version the IBC module supports - Version = "monitoring-1" + Version = "monitoringp-1" // PortID is the default port id that module binds to PortID = "monitoringp" +) - // ConsumerClientIDKey allows to retrieve in the store the client ID used for the IBC communication with the Consumer Chain - ConsumerClientIDKey = "ConsumerClientID/value/" +var ( + // ParamsKey is the prefix to retrieve all Params + ParamsKey = collections.NewPrefix("p_monitoringp") - // ConnectionChannelIDKey allows to retrieve the connection channel ID that is the ID of the IBC channel used for monitoring packet transmission - ConnectionChannelIDKey = "ConnectionChannelID/value/" + // PortKey defines the key to store the port ID in store + PortKey = collections.NewPrefix("monitoringp-port-") - // MonitoringInfoKey allows to retrieve moniroting info that contains information about the current state of monitoring - MonitoringInfoKey = "MonitoringInfo/value/" -) + // MonitoringInfoKey is the prefix to retrieve all MonitoringInfo + MonitoringInfoKey = collections.NewPrefix("monitoringInfo/value/") -// PortKey defines the key to store the port ID in store -var PortKey = KeyPrefix("monitoringp-port-") + // ConnectionChannelIDKey is the prefix to retrieve all ConnectionChannelID + ConnectionChannelIDKey = collections.NewPrefix("connectionChannelID/value/") -func KeyPrefix(p string) []byte { - return []byte(p) -} + // ConsumerClientIDKey is the prefix to retrieve all ConsumerClientID + ConsumerClientIDKey = collections.NewPrefix("consumerClientID/value/") +) diff --git a/x/monitoringp/types/monitoring_info.pb.go b/x/monitoringp/types/monitoring_info.pb.go index bef3c142..ee7df888 100644 --- a/x/monitoringp/types/monitoring_info.pb.go +++ b/x/monitoringp/types/monitoring_info.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringp/monitoring_info.proto +// source: network/monitoringp/v1/monitoring_info.proto package types @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - types "github.com/tendermint/spn/pkg/types" + types "github.com/ignite/network/pkg/types" io "io" math "math" math_bits "math/bits" @@ -33,7 +33,7 @@ func (m *MonitoringInfo) Reset() { *m = MonitoringInfo{} } func (m *MonitoringInfo) String() string { return proto.CompactTextString(m) } func (*MonitoringInfo) ProtoMessage() {} func (*MonitoringInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_41e8232cfb347c00, []int{0} + return fileDescriptor_1e6e0ccfd1879c9c, []int{0} } func (m *MonitoringInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -77,30 +77,30 @@ func (m *MonitoringInfo) GetSignatureCounts() types.SignatureCounts { } func init() { - proto.RegisterType((*MonitoringInfo)(nil), "spn.monitoringp.MonitoringInfo") + proto.RegisterType((*MonitoringInfo)(nil), "network.monitoringp.v1.MonitoringInfo") } func init() { - proto.RegisterFile("spn/monitoringp/monitoring_info.proto", fileDescriptor_41e8232cfb347c00) + proto.RegisterFile("network/monitoringp/v1/monitoring_info.proto", fileDescriptor_1e6e0ccfd1879c9c) } -var fileDescriptor_41e8232cfb347c00 = []byte{ - // 233 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2d, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0x40, 0x62, 0xc7, 0x67, 0xe6, - 0xa5, 0xe5, 0xeb, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0xf1, 0x17, 0x17, 0xe4, 0xe9, 0x21, 0x29, - 0x93, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xe9, 0x83, 0x58, 0x10, 0x65, 0x52, 0x52, 0x20, - 0xd3, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x91, 0xcc, 0x81, 0xc8, 0x29, 0xd5, 0x71, 0xf1, 0xf9, 0xc2, - 0xc5, 0x3c, 0xf3, 0xd2, 0xf2, 0x85, 0x14, 0xb8, 0xb8, 0x4b, 0x8a, 0x12, 0xf3, 0x8a, 0x73, 0x33, - 0x4b, 0x4a, 0x52, 0x53, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x82, 0x90, 0x85, 0x84, 0xbc, 0xb8, - 0xf8, 0x8b, 0x33, 0xd3, 0xf3, 0x12, 0x4b, 0x4a, 0x8b, 0x52, 0x9d, 0xf3, 0x4b, 0xf3, 0x4a, 0x8a, - 0x25, 0x98, 0x14, 0x18, 0x35, 0xb8, 0x8d, 0xa4, 0xf4, 0x40, 0x0e, 0x02, 0xdb, 0xa4, 0x17, 0x8c, - 0xaa, 0xc2, 0x89, 0xe5, 0xc4, 0x3d, 0x79, 0x86, 0x20, 0x74, 0x8d, 0x4e, 0xee, 0x27, 0x1e, 0xc9, - 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, - 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x9b, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, - 0x9c, 0x9f, 0xab, 0x5f, 0x92, 0x9a, 0x97, 0x92, 0x5a, 0x94, 0x9b, 0x99, 0x57, 0xa2, 0x0f, 0xf2, - 0x4b, 0x05, 0x4a, 0xd8, 0x80, 0xed, 0x4b, 0x62, 0x03, 0xfb, 0xc7, 0x18, 0x10, 0x00, 0x00, 0xff, - 0xff, 0x72, 0x8f, 0x52, 0x43, 0x3b, 0x01, 0x00, 0x00, +var fileDescriptor_1e6e0ccfd1879c9c = []byte{ + // 239 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xc9, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, + 0x2f, 0x33, 0x44, 0xe2, 0xc6, 0x67, 0xe6, 0xa5, 0xe5, 0xeb, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, + 0x89, 0x41, 0x55, 0xeb, 0x21, 0xa9, 0xd6, 0x2b, 0x33, 0x94, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, + 0x2b, 0xd1, 0x07, 0xb1, 0x20, 0xaa, 0xa5, 0xe4, 0x60, 0x66, 0x97, 0x54, 0x16, 0xa4, 0x16, 0x23, + 0x19, 0x09, 0x91, 0x57, 0x6a, 0x62, 0xe4, 0xe2, 0xf3, 0x85, 0x0b, 0x7a, 0xe6, 0xa5, 0xe5, 0x0b, + 0x29, 0x70, 0x71, 0x97, 0x14, 0x25, 0xe6, 0x15, 0xe7, 0x66, 0x96, 0x94, 0xa4, 0xa6, 0x48, 0x30, + 0x2a, 0x30, 0x6a, 0x70, 0x04, 0x21, 0x0b, 0x09, 0xf9, 0x71, 0xf1, 0x17, 0x67, 0xa6, 0xe7, 0x25, + 0x96, 0x94, 0x16, 0xa5, 0x3a, 0xe7, 0x97, 0xe6, 0x95, 0x14, 0x4b, 0x30, 0x29, 0x30, 0x6a, 0x70, + 0x1b, 0xc9, 0xe9, 0xc1, 0x1c, 0x07, 0xb6, 0x4e, 0x2f, 0x18, 0x55, 0x95, 0x13, 0xcb, 0x89, 0x7b, + 0xf2, 0x0c, 0x41, 0xe8, 0x9a, 0x9d, 0xdc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, + 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, + 0x21, 0x4a, 0x37, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x33, 0x3d, + 0x2f, 0xb3, 0x24, 0x55, 0x1f, 0xe6, 0xa1, 0x0a, 0x94, 0xe0, 0x02, 0xdb, 0x97, 0xc4, 0x06, 0xf6, + 0x94, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x07, 0xa6, 0x11, 0x52, 0x01, 0x00, 0x00, } func (m *MonitoringInfo) Marshal() (dAtA []byte, err error) { diff --git a/x/monitoringp/types/packet.pb.go b/x/monitoringp/types/packet.pb.go new file mode 100644 index 00000000..851c3689 --- /dev/null +++ b/x/monitoringp/types/packet.pb.go @@ -0,0 +1,502 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: network/monitoringp/v1/packet.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type MonitoringpPacketData struct { + // Types that are valid to be assigned to Packet: + // *MonitoringpPacketData_NoData + Packet isMonitoringpPacketData_Packet `protobuf_oneof:"packet"` +} + +func (m *MonitoringpPacketData) Reset() { *m = MonitoringpPacketData{} } +func (m *MonitoringpPacketData) String() string { return proto.CompactTextString(m) } +func (*MonitoringpPacketData) ProtoMessage() {} +func (*MonitoringpPacketData) Descriptor() ([]byte, []int) { + return fileDescriptor_d3cad18b88a69266, []int{0} +} +func (m *MonitoringpPacketData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MonitoringpPacketData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MonitoringpPacketData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MonitoringpPacketData) XXX_Merge(src proto.Message) { + xxx_messageInfo_MonitoringpPacketData.Merge(m, src) +} +func (m *MonitoringpPacketData) XXX_Size() int { + return m.Size() +} +func (m *MonitoringpPacketData) XXX_DiscardUnknown() { + xxx_messageInfo_MonitoringpPacketData.DiscardUnknown(m) +} + +var xxx_messageInfo_MonitoringpPacketData proto.InternalMessageInfo + +type isMonitoringpPacketData_Packet interface { + isMonitoringpPacketData_Packet() + MarshalTo([]byte) (int, error) + Size() int +} + +type MonitoringpPacketData_NoData struct { + NoData *NoData `protobuf:"bytes,1,opt,name=noData,proto3,oneof" json:"noData,omitempty"` +} + +func (*MonitoringpPacketData_NoData) isMonitoringpPacketData_Packet() {} + +func (m *MonitoringpPacketData) GetPacket() isMonitoringpPacketData_Packet { + if m != nil { + return m.Packet + } + return nil +} + +func (m *MonitoringpPacketData) GetNoData() *NoData { + if x, ok := m.GetPacket().(*MonitoringpPacketData_NoData); ok { + return x.NoData + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*MonitoringpPacketData) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*MonitoringpPacketData_NoData)(nil), + } +} + +type NoData struct { +} + +func (m *NoData) Reset() { *m = NoData{} } +func (m *NoData) String() string { return proto.CompactTextString(m) } +func (*NoData) ProtoMessage() {} +func (*NoData) Descriptor() ([]byte, []int) { + return fileDescriptor_d3cad18b88a69266, []int{1} +} +func (m *NoData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NoData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_NoData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *NoData) XXX_Merge(src proto.Message) { + xxx_messageInfo_NoData.Merge(m, src) +} +func (m *NoData) XXX_Size() int { + return m.Size() +} +func (m *NoData) XXX_DiscardUnknown() { + xxx_messageInfo_NoData.DiscardUnknown(m) +} + +var xxx_messageInfo_NoData proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MonitoringpPacketData)(nil), "network.monitoringp.v1.MonitoringpPacketData") + proto.RegisterType((*NoData)(nil), "network.monitoringp.v1.NoData") +} + +func init() { + proto.RegisterFile("network/monitoringp/v1/packet.proto", fileDescriptor_d3cad18b88a69266) +} + +var fileDescriptor_d3cad18b88a69266 = []byte{ + // 189 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xce, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, + 0x2f, 0x33, 0xd4, 0x2f, 0x48, 0x4c, 0xce, 0x4e, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x12, 0x83, 0x2a, 0xd2, 0x43, 0x52, 0xa4, 0x57, 0x66, 0xa8, 0x14, 0xcd, 0x25, 0xea, 0x8b, 0x10, + 0x09, 0x00, 0x6b, 0x71, 0x49, 0x2c, 0x49, 0x14, 0xb2, 0xe0, 0x62, 0xcb, 0xcb, 0x07, 0xb1, 0x24, + 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0xe4, 0xf4, 0xb0, 0x9b, 0xa0, 0xe7, 0x07, 0x56, 0xe5, 0xc1, + 0x10, 0x04, 0x55, 0xef, 0xc4, 0xc1, 0xc5, 0x06, 0xb1, 0x5a, 0x89, 0x83, 0x8b, 0x0d, 0x22, 0xeb, + 0xe4, 0x7e, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, + 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0xba, 0xe9, 0x99, 0x25, + 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x99, 0xe9, 0x79, 0x99, 0x25, 0xa9, 0xfa, 0x30, + 0xff, 0x54, 0xa0, 0xf8, 0xa8, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0xec, 0x1d, 0x63, 0x40, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xca, 0x91, 0x10, 0x65, 0xf5, 0x00, 0x00, 0x00, +} + +func (m *MonitoringpPacketData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MonitoringpPacketData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MonitoringpPacketData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Packet != nil { + { + size := m.Packet.Size() + i -= size + if _, err := m.Packet.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + return len(dAtA) - i, nil +} + +func (m *MonitoringpPacketData_NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MonitoringpPacketData_NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.NoData != nil { + { + size, err := m.NoData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPacket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} +func (m *NoData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintPacket(dAtA []byte, offset int, v uint64) int { + offset -= sovPacket(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MonitoringpPacketData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Packet != nil { + n += m.Packet.Size() + } + return n +} + +func (m *MonitoringpPacketData_NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NoData != nil { + l = m.NoData.Size() + n += 1 + l + sovPacket(uint64(l)) + } + return n +} +func (m *NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovPacket(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozPacket(x uint64) (n int) { + return sovPacket(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MonitoringpPacketData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MonitoringpPacketData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MonitoringpPacketData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NoData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPacket + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPacket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &NoData{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Packet = &MonitoringpPacketData_NoData{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipPacket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPacket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NoData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NoData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NoData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipPacket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPacket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipPacket(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthPacket + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupPacket + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthPacket + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthPacket = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowPacket = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupPacket = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/monitoringp/types/params.go b/x/monitoringp/types/params.go index 46685bf5..2d63e915 100644 --- a/x/monitoringp/types/params.go +++ b/x/monitoringp/types/params.go @@ -3,37 +3,22 @@ package types import ( "fmt" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/pkg/errors" - "gopkg.in/yaml.v2" - "github.com/tendermint/spn/pkg/chainid" - spntypes "github.com/tendermint/spn/pkg/types" + "github.com/ignite/network/pkg/chainid" + networktypes "github.com/ignite/network/pkg/types" ) var ( - KeyLastBlockHeight = []byte("LastBlockHeight") - KeyConsumerConsensusState = []byte("ConsumerConsensusState") - KeyConsumerChainID = []byte("ConsumerChainID") - KeyConsumerUnbondingPeriod = []byte("ConsumerUnbondingPeriod") - KeyConsumerRevisionHeight = []byte("RevisionHeight") - DefaultLastBlockHeight int64 = 1 DefaultConsumerChainID = "spn-1" ) -var _ paramtypes.ParamSet = (*Params)(nil) - -// ParamKeyTable the param key table for launch module -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - -// NewParams creates a new Params instance +// NewParams creates a new Params instance. func NewParams( lastBlockHeight int64, consumerChainID string, - ccs spntypes.ConsensusState, + ccs networktypes.ConsensusState, consumerUnbondingpPeriod int64, consumerRevisionHeight uint64, ) Params { @@ -46,48 +31,18 @@ func NewParams( } } +// DefaultParams returns a default set of parameters. // DefaultParams returns a default set of parameters func DefaultParams() Params { return NewParams( DefaultLastBlockHeight, DefaultConsumerChainID, - spntypes.ConsensusState{}, - spntypes.DefaultUnbondingPeriod, - spntypes.DefaultRevisionHeight, + networktypes.ConsensusState{}, + networktypes.DefaultUnbondingPeriod, + networktypes.DefaultRevisionHeight, ) } -// ParamSetPairs get the params.ParamSet -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair( - KeyLastBlockHeight, - &p.LastBlockHeight, - validateLastBlockHeight, - ), - paramtypes.NewParamSetPair( - KeyConsumerConsensusState, - &p.ConsumerConsensusState, - validateConsumerConsensusState, - ), - paramtypes.NewParamSetPair( - KeyConsumerChainID, - &p.ConsumerChainID, - validateConsumerChainID, - ), - paramtypes.NewParamSetPair( - KeyConsumerUnbondingPeriod, - &p.ConsumerUnbondingPeriod, - validateConsumerUnbondingPeriod, - ), - paramtypes.NewParamSetPair( - KeyConsumerRevisionHeight, - &p.ConsumerRevisionHeight, - validateConsumerRevisionHeight, - ), - } -} - // Validate validates the set of params func (p Params) Validate() error { if err := validateLastBlockHeight(p.LastBlockHeight); err != nil { @@ -105,12 +60,6 @@ func (p Params) Validate() error { return validateConsumerRevisionHeight(p.ConsumerRevisionHeight) } -// String implements the Stringer interface. -func (p Params) String() string { - out, _ := yaml.Marshal(p) - return string(out) -} - // validateLastBlockHeight validates last block height func validateLastBlockHeight(i interface{}) error { lastBlockHeight, ok := i.(int64) @@ -127,7 +76,7 @@ func validateLastBlockHeight(i interface{}) error { // validateConsumerConsensusState validates consumer consensus state func validateConsumerConsensusState(i interface{}) error { - ccs, ok := i.(spntypes.ConsensusState) + ccs, ok := i.(networktypes.ConsensusState) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } @@ -167,8 +116,8 @@ func validateConsumerUnbondingPeriod(i interface{}) error { return fmt.Errorf("invalid parameter type: %T", i) } - if unbondingPeriod < spntypes.MinimalUnbondingPeriod { - return fmt.Errorf("minimal unbonding period is %d", spntypes.MinimalUnbondingPeriod) + if unbondingPeriod < networktypes.MinimalUnbondingPeriod { + return fmt.Errorf("minimal unbonding period is %d", networktypes.MinimalUnbondingPeriod) } return nil diff --git a/x/monitoringp/types/params.pb.go b/x/monitoringp/types/params.pb.go index 9803b5c9..f1df3a03 100644 --- a/x/monitoringp/types/params.pb.go +++ b/x/monitoringp/types/params.pb.go @@ -1,13 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringp/params.proto +// source: network/monitoringp/v1/params.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - types "github.com/tendermint/spn/pkg/types" + types "github.com/ignite/network/pkg/types" io "io" math "math" math_bits "math/bits" @@ -33,10 +34,11 @@ type Params struct { ConsumerRevisionHeight uint64 `protobuf:"varint,5,opt,name=consumerRevisionHeight,proto3" json:"consumerRevisionHeight,omitempty"` } -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_123eef92d97c01d9, []int{0} + return fileDescriptor_4cfe10c990d112bd, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -101,35 +103,75 @@ func (m *Params) GetConsumerRevisionHeight() uint64 { } func init() { - proto.RegisterType((*Params)(nil), "spn.monitoringp.Params") + proto.RegisterType((*Params)(nil), "network.monitoringp.v1.Params") } -func init() { proto.RegisterFile("spn/monitoringp/params.proto", fileDescriptor_123eef92d97c01d9) } +func init() { + proto.RegisterFile("network/monitoringp/v1/params.proto", fileDescriptor_4cfe10c990d112bd) +} -var fileDescriptor_123eef92d97c01d9 = []byte{ - // 315 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xcd, 0x4a, 0xc3, 0x40, - 0x14, 0x85, 0x33, 0x6d, 0x2c, 0x18, 0x17, 0x85, 0x28, 0x1a, 0x8b, 0xa4, 0xc1, 0x55, 0x36, 0x66, - 0x40, 0x41, 0xc4, 0x65, 0x15, 0xd4, 0x5d, 0x89, 0x88, 0xe0, 0x2e, 0x49, 0x87, 0xe9, 0x60, 0x73, - 0xef, 0x30, 0x33, 0x15, 0x7d, 0x0b, 0x97, 0x2e, 0x7d, 0x01, 0xdf, 0xa3, 0xcb, 0x2e, 0x5d, 0x89, - 0xb4, 0x2f, 0x22, 0x99, 0xfa, 0xd7, 0x42, 0x76, 0xc3, 0xf9, 0xce, 0x5c, 0xce, 0x3d, 0xd7, 0xdb, - 0xd3, 0x12, 0x68, 0x89, 0x20, 0x0c, 0x2a, 0x01, 0x5c, 0x52, 0x99, 0xa9, 0xac, 0xd4, 0x89, 0x54, - 0x68, 0xd0, 0x6f, 0x6b, 0x09, 0xc9, 0x3f, 0xda, 0xd9, 0xe2, 0xc8, 0xd1, 0x32, 0x5a, 0xbd, 0x16, - 0xb6, 0xce, 0x66, 0x35, 0xc4, 0x3c, 0x49, 0xa6, 0xa9, 0xc8, 0x8b, 0x85, 0xb8, 0xff, 0xd6, 0xf0, - 0x5a, 0x7d, 0x3b, 0xcc, 0x8f, 0xbd, 0xf6, 0x28, 0xd3, 0xa6, 0x37, 0xc2, 0xe2, 0xfe, 0x92, 0x09, - 0x3e, 0x34, 0x01, 0x89, 0x48, 0xdc, 0x4c, 0x57, 0xe5, 0xca, 0x59, 0x20, 0xe8, 0x71, 0xc9, 0xd4, - 0xd9, 0x30, 0x13, 0x70, 0x75, 0x1e, 0x34, 0x22, 0x12, 0xaf, 0xa7, 0xab, 0xb2, 0x7f, 0xeb, 0x6d, - 0xff, 0x4a, 0x08, 0x9a, 0x81, 0x1e, 0xeb, 0x6b, 0x93, 0x19, 0x16, 0x34, 0x23, 0x12, 0x6f, 0x1c, - 0xee, 0x26, 0x55, 0x76, 0x1b, 0x2a, 0x59, 0x36, 0xf4, 0xdc, 0xc9, 0x47, 0xd7, 0x49, 0x6b, 0xbe, - 0xfb, 0x27, 0xde, 0xce, 0x0f, 0xb9, 0x81, 0x1c, 0x61, 0x20, 0x80, 0xf7, 0x99, 0x12, 0x38, 0x08, - 0x5c, 0x1b, 0xba, 0x0e, 0xfb, 0xc7, 0x7f, 0x91, 0x52, 0xf6, 0x20, 0xb4, 0x40, 0xf8, 0xde, 0x76, - 0x2d, 0x22, 0xb1, 0x9b, 0xd6, 0xd0, 0x53, 0xf7, 0xe5, 0xb5, 0xeb, 0xf4, 0x2e, 0x26, 0xb3, 0x90, - 0x4c, 0x67, 0x21, 0xf9, 0x9c, 0x85, 0xe4, 0x79, 0x1e, 0x3a, 0xd3, 0x79, 0xe8, 0xbc, 0xcf, 0x43, - 0xe7, 0xee, 0x80, 0x0b, 0x33, 0x1c, 0xe7, 0x49, 0x81, 0x25, 0x35, 0x0c, 0x06, 0x4c, 0x95, 0x02, - 0x0c, 0xad, 0x4a, 0x7f, 0x5c, 0xba, 0x9d, 0xdd, 0x36, 0x6f, 0xd9, 0xfe, 0x8f, 0xbe, 0x02, 0x00, - 0x00, 0xff, 0xff, 0x5b, 0xe2, 0xe2, 0x07, 0xdb, 0x01, 0x00, 0x00, +var fileDescriptor_4cfe10c990d112bd = []byte{ + // 344 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xce, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, + 0x2f, 0x33, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x12, 0x83, 0x2a, 0xd2, 0x43, 0x52, 0xa4, 0x57, 0x66, 0x28, 0x25, 0x98, 0x98, 0x9b, 0x99, 0x97, + 0xaf, 0x0f, 0x26, 0x21, 0x4a, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x4c, 0x7d, 0x10, 0x0b, + 0x2a, 0x2a, 0x0e, 0xb3, 0xa5, 0xa4, 0xb2, 0x20, 0xb5, 0x58, 0x3f, 0x33, 0x29, 0x19, 0x22, 0xa1, + 0x74, 0x89, 0x89, 0x8b, 0x2d, 0x00, 0x6c, 0x95, 0x90, 0x06, 0x17, 0x7f, 0x4e, 0x62, 0x71, 0x89, + 0x53, 0x4e, 0x7e, 0x72, 0xb6, 0x47, 0x6a, 0x66, 0x7a, 0x46, 0x89, 0x04, 0xa3, 0x02, 0xa3, 0x06, + 0x73, 0x10, 0xba, 0x30, 0x48, 0x65, 0x72, 0x7e, 0x5e, 0x71, 0x69, 0x6e, 0x6a, 0x91, 0x73, 0x46, + 0x62, 0x66, 0x9e, 0xa7, 0x8b, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x67, 0x10, 0xba, 0xb0, 0x50, 0x34, + 0x97, 0x18, 0x5c, 0x28, 0x3f, 0xaf, 0x38, 0x35, 0xaf, 0xb8, 0xb4, 0x38, 0xb8, 0x24, 0xb1, 0x24, + 0x55, 0x82, 0x59, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x56, 0x0f, 0xe6, 0x33, 0xb0, 0xc3, 0xf4, 0x50, + 0x15, 0x39, 0xb1, 0x9c, 0xb8, 0x27, 0xcf, 0x10, 0x84, 0xc3, 0x08, 0x21, 0x0b, 0x2e, 0x71, 0x98, + 0x4c, 0x68, 0x5e, 0x52, 0x7e, 0x5e, 0x4a, 0x66, 0x5e, 0x7a, 0x40, 0x6a, 0x51, 0x66, 0x7e, 0x8a, + 0x04, 0x0b, 0xd8, 0xe1, 0xb8, 0xa4, 0x85, 0xcc, 0x10, 0xce, 0x0a, 0x4a, 0x2d, 0xcb, 0x2c, 0xce, + 0xcc, 0xcf, 0x83, 0xfa, 0x98, 0x55, 0x81, 0x51, 0x83, 0x25, 0x08, 0x87, 0xac, 0x95, 0xea, 0x8b, + 0x05, 0xf2, 0x8c, 0x5d, 0xcf, 0x37, 0x68, 0xc9, 0xc0, 0xc2, 0xb3, 0x02, 0x25, 0xde, 0x20, 0x21, + 0xe9, 0xe4, 0x7e, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, + 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0xba, 0xe9, 0x99, + 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x99, 0xe9, 0x79, 0x99, 0x25, 0xa9, 0xfa, + 0xd8, 0x4d, 0x02, 0x07, 0x47, 0x12, 0x1b, 0x38, 0x92, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x58, 0x9c, 0xa7, 0xd3, 0x25, 0x02, 0x00, 0x00, } +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.LastBlockHeight != that1.LastBlockHeight { + return false + } + if this.ConsumerChainID != that1.ConsumerChainID { + return false + } + if !this.ConsumerConsensusState.Equal(&that1.ConsumerConsensusState) { + return false + } + if this.ConsumerUnbondingPeriod != that1.ConsumerUnbondingPeriod { + return false + } + if this.ConsumerRevisionHeight != that1.ConsumerRevisionHeight { + return false + } + return true +} func (m *Params) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) diff --git a/x/monitoringp/types/params_test.go b/x/monitoringp/types/params_test.go deleted file mode 100644 index 0f8cdef9..00000000 --- a/x/monitoringp/types/params_test.go +++ /dev/null @@ -1,147 +0,0 @@ -package types - -import ( - "testing" - - "github.com/stretchr/testify/require" - - spntypes "github.com/tendermint/spn/pkg/types" -) - -var ( - chainID = "foo-1" - consensusState = spntypes.NewConsensusState( - "2022-01-12T12:25:19.523109Z", - "48C4C20AC5A7BD99A45AEBAB92E61F5667253A2C51CCCD84D20327D3CB8737C9", - "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", - ) - invalidConsensusState = spntypes.NewConsensusState( - "foo", - "DD388ED4B9DED48DEDF7C4A781AB656DD5C56D50655A662A92B516B33EA97EA2", - "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", - ) -) - -func TestParamsValidate(t *testing.T) { - tests := []struct { - name string - params Params - wantErr bool - }{ - { - name: "should allow valid default params", - params: DefaultParams(), - }, - { - name: "should allow valid consumer consensus state", - params: Params{ - LastBlockHeight: 1000, - ConsumerChainID: chainID, - ConsumerConsensusState: consensusState, - ConsumerUnbondingPeriod: spntypes.DefaultUnbondingPeriod, - ConsumerRevisionHeight: spntypes.DefaultRevisionHeight, - }, - }, - { - name: "should prevent invalid last block height", - params: Params{ - LastBlockHeight: 0, - ConsumerChainID: chainID, - ConsumerConsensusState: consensusState, - ConsumerUnbondingPeriod: spntypes.DefaultUnbondingPeriod, - ConsumerRevisionHeight: spntypes.DefaultRevisionHeight, - }, - wantErr: true, - }, - { - name: "should prevent invalid consumer chain ID", - params: Params{ - LastBlockHeight: 1000, - ConsumerChainID: "foo", - ConsumerConsensusState: consensusState, - ConsumerUnbondingPeriod: spntypes.DefaultUnbondingPeriod, - ConsumerRevisionHeight: spntypes.DefaultRevisionHeight, - }, - wantErr: true, - }, - { - name: "should prevent invalid consumer consensus state", - params: Params{ - LastBlockHeight: 1000, - ConsumerChainID: chainID, - ConsumerConsensusState: invalidConsensusState, - ConsumerUnbondingPeriod: spntypes.DefaultUnbondingPeriod, - ConsumerRevisionHeight: spntypes.DefaultRevisionHeight, - }, - wantErr: true, - }, - { - name: "should prevent invalid consumer unbonding period", - params: Params{ - LastBlockHeight: 1000, - ConsumerChainID: chainID, - ConsumerConsensusState: consensusState, - ConsumerUnbondingPeriod: spntypes.MinimalUnbondingPeriod - 1, - ConsumerRevisionHeight: spntypes.DefaultRevisionHeight, - }, - wantErr: true, - }, - { - name: "should prevent invalid consumer revision height", - params: Params{ - LastBlockHeight: 1000, - ConsumerChainID: chainID, - ConsumerConsensusState: consensusState, - ConsumerUnbondingPeriod: spntypes.DefaultUnbondingPeriod, - ConsumerRevisionHeight: 0, - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.params.Validate() - if tt.wantErr { - require.Error(t, err) - return - } - require.NoError(t, err) - }) - } - - t.Run("should prevent with wrong type", func(t *testing.T) { - require.Error(t, validateConsumerConsensusState(100)) - }) -} - -func TestValidateLastBlockHeight(t *testing.T) { - require.Error(t, validateLastBlockHeight("foo"), "should expect a int64") - require.Error(t, validateLastBlockHeight(int64(0)), "should prevent using 0") - require.NoError(t, validateLastBlockHeight(int64(1))) -} - -func TestValidateConsumerConsensusState(t *testing.T) { - require.Error(t, validateConsumerConsensusState(100), "should expect a ConsensusState") - require.Error(t, validateConsumerConsensusState(invalidConsensusState), "should prevent invalid ConsensusState") - require.NoError(t, validateConsumerConsensusState(spntypes.ConsensusState{}), "should allow empty") - require.NoError(t, validateConsumerConsensusState(consensusState)) -} - -func TestValidateConsumerChainID(t *testing.T) { - require.Error(t, validateConsumerChainID(100), "should expect a string") - require.Error(t, validateConsumerChainID("invalid-id"), "should prevent invalid chain ID") - require.NoError(t, validateConsumerChainID(chainID)) -} - -func TestValidateConsumerUnbondingPeriod(t *testing.T) { - require.Error(t, validateConsumerUnbondingPeriod("foo"), "should expect a int64") - require.Error(t, validateConsumerUnbondingPeriod(int64(spntypes.MinimalUnbondingPeriod-1)), "should prevent below minimal value") - require.NoError(t, validateConsumerUnbondingPeriod(int64(spntypes.MinimalUnbondingPeriod))) - require.NoError(t, validateConsumerUnbondingPeriod(int64(spntypes.DefaultUnbondingPeriod))) -} - -func TestValidateConsumerRevisionHeight(t *testing.T) { - require.Error(t, validateConsumerRevisionHeight("foo"), "should expect a uint64") - require.Error(t, validateConsumerRevisionHeight(uint64(0)), "should prevent using 0") - require.NoError(t, validateConsumerRevisionHeight(uint64(1))) -} diff --git a/x/monitoringp/types/query.pb.go b/x/monitoringp/types/query.pb.go index 338444f2..6a2f7d4a 100644 --- a/x/monitoringp/types/query.pb.go +++ b/x/monitoringp/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringp/query.proto +// source: network/monitoringp/v1/query.proto package types @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -30,21 +31,22 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type QueryGetConsumerClientIDRequest struct { +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { } -func (m *QueryGetConsumerClientIDRequest) Reset() { *m = QueryGetConsumerClientIDRequest{} } -func (m *QueryGetConsumerClientIDRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetConsumerClientIDRequest) ProtoMessage() {} -func (*QueryGetConsumerClientIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3a89b5986f036625, []int{0} +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_19c0c76e95648e0c, []int{0} } -func (m *QueryGetConsumerClientIDRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetConsumerClientIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetConsumerClientIDRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -54,34 +56,36 @@ func (m *QueryGetConsumerClientIDRequest) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (m *QueryGetConsumerClientIDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetConsumerClientIDRequest.Merge(m, src) +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) } -func (m *QueryGetConsumerClientIDRequest) XXX_Size() int { +func (m *QueryParamsRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetConsumerClientIDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetConsumerClientIDRequest.DiscardUnknown(m) +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetConsumerClientIDRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo -type QueryGetConsumerClientIDResponse struct { - ConsumerClientID ConsumerClientID `protobuf:"bytes,1,opt,name=ConsumerClientID,proto3" json:"ConsumerClientID"` +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` } -func (m *QueryGetConsumerClientIDResponse) Reset() { *m = QueryGetConsumerClientIDResponse{} } -func (m *QueryGetConsumerClientIDResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetConsumerClientIDResponse) ProtoMessage() {} -func (*QueryGetConsumerClientIDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3a89b5986f036625, []int{1} +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_19c0c76e95648e0c, []int{1} } -func (m *QueryGetConsumerClientIDResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetConsumerClientIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetConsumerClientIDResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -91,40 +95,40 @@ func (m *QueryGetConsumerClientIDResponse) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *QueryGetConsumerClientIDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetConsumerClientIDResponse.Merge(m, src) +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) } -func (m *QueryGetConsumerClientIDResponse) XXX_Size() int { +func (m *QueryParamsResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetConsumerClientIDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetConsumerClientIDResponse.DiscardUnknown(m) +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetConsumerClientIDResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo -func (m *QueryGetConsumerClientIDResponse) GetConsumerClientID() ConsumerClientID { +func (m *QueryParamsResponse) GetParams() Params { if m != nil { - return m.ConsumerClientID + return m.Params } - return ConsumerClientID{} + return Params{} } -type QueryGetConnectionChannelIDRequest struct { +type QueryGetMonitoringInfoRequest struct { } -func (m *QueryGetConnectionChannelIDRequest) Reset() { *m = QueryGetConnectionChannelIDRequest{} } -func (m *QueryGetConnectionChannelIDRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetConnectionChannelIDRequest) ProtoMessage() {} -func (*QueryGetConnectionChannelIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3a89b5986f036625, []int{2} +func (m *QueryGetMonitoringInfoRequest) Reset() { *m = QueryGetMonitoringInfoRequest{} } +func (m *QueryGetMonitoringInfoRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetMonitoringInfoRequest) ProtoMessage() {} +func (*QueryGetMonitoringInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_19c0c76e95648e0c, []int{2} } -func (m *QueryGetConnectionChannelIDRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetMonitoringInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetConnectionChannelIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetMonitoringInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetConnectionChannelIDRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetMonitoringInfoRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -134,34 +138,34 @@ func (m *QueryGetConnectionChannelIDRequest) XXX_Marshal(b []byte, deterministic return b[:n], nil } } -func (m *QueryGetConnectionChannelIDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetConnectionChannelIDRequest.Merge(m, src) +func (m *QueryGetMonitoringInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetMonitoringInfoRequest.Merge(m, src) } -func (m *QueryGetConnectionChannelIDRequest) XXX_Size() int { +func (m *QueryGetMonitoringInfoRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetConnectionChannelIDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetConnectionChannelIDRequest.DiscardUnknown(m) +func (m *QueryGetMonitoringInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetMonitoringInfoRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetConnectionChannelIDRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetMonitoringInfoRequest proto.InternalMessageInfo -type QueryGetConnectionChannelIDResponse struct { - ConnectionChannelID ConnectionChannelID `protobuf:"bytes,1,opt,name=ConnectionChannelID,proto3" json:"ConnectionChannelID"` +type QueryGetMonitoringInfoResponse struct { + MonitoringInfo MonitoringInfo `protobuf:"bytes,1,opt,name=MonitoringInfo,proto3" json:"MonitoringInfo"` } -func (m *QueryGetConnectionChannelIDResponse) Reset() { *m = QueryGetConnectionChannelIDResponse{} } -func (m *QueryGetConnectionChannelIDResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetConnectionChannelIDResponse) ProtoMessage() {} -func (*QueryGetConnectionChannelIDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3a89b5986f036625, []int{3} +func (m *QueryGetMonitoringInfoResponse) Reset() { *m = QueryGetMonitoringInfoResponse{} } +func (m *QueryGetMonitoringInfoResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetMonitoringInfoResponse) ProtoMessage() {} +func (*QueryGetMonitoringInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_19c0c76e95648e0c, []int{3} } -func (m *QueryGetConnectionChannelIDResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetMonitoringInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetConnectionChannelIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetMonitoringInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetConnectionChannelIDResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetMonitoringInfoResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -171,40 +175,40 @@ func (m *QueryGetConnectionChannelIDResponse) XXX_Marshal(b []byte, deterministi return b[:n], nil } } -func (m *QueryGetConnectionChannelIDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetConnectionChannelIDResponse.Merge(m, src) +func (m *QueryGetMonitoringInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetMonitoringInfoResponse.Merge(m, src) } -func (m *QueryGetConnectionChannelIDResponse) XXX_Size() int { +func (m *QueryGetMonitoringInfoResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetConnectionChannelIDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetConnectionChannelIDResponse.DiscardUnknown(m) +func (m *QueryGetMonitoringInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetMonitoringInfoResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetConnectionChannelIDResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetMonitoringInfoResponse proto.InternalMessageInfo -func (m *QueryGetConnectionChannelIDResponse) GetConnectionChannelID() ConnectionChannelID { +func (m *QueryGetMonitoringInfoResponse) GetMonitoringInfo() MonitoringInfo { if m != nil { - return m.ConnectionChannelID + return m.MonitoringInfo } - return ConnectionChannelID{} + return MonitoringInfo{} } -type QueryGetMonitoringInfoRequest struct { +type QueryGetConnectionChannelIDRequest struct { } -func (m *QueryGetMonitoringInfoRequest) Reset() { *m = QueryGetMonitoringInfoRequest{} } -func (m *QueryGetMonitoringInfoRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetMonitoringInfoRequest) ProtoMessage() {} -func (*QueryGetMonitoringInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3a89b5986f036625, []int{4} +func (m *QueryGetConnectionChannelIDRequest) Reset() { *m = QueryGetConnectionChannelIDRequest{} } +func (m *QueryGetConnectionChannelIDRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetConnectionChannelIDRequest) ProtoMessage() {} +func (*QueryGetConnectionChannelIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_19c0c76e95648e0c, []int{4} } -func (m *QueryGetMonitoringInfoRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetConnectionChannelIDRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetMonitoringInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetConnectionChannelIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetMonitoringInfoRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetConnectionChannelIDRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -214,34 +218,34 @@ func (m *QueryGetMonitoringInfoRequest) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } -func (m *QueryGetMonitoringInfoRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetMonitoringInfoRequest.Merge(m, src) +func (m *QueryGetConnectionChannelIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetConnectionChannelIDRequest.Merge(m, src) } -func (m *QueryGetMonitoringInfoRequest) XXX_Size() int { +func (m *QueryGetConnectionChannelIDRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetMonitoringInfoRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetMonitoringInfoRequest.DiscardUnknown(m) +func (m *QueryGetConnectionChannelIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetConnectionChannelIDRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetMonitoringInfoRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetConnectionChannelIDRequest proto.InternalMessageInfo -type QueryGetMonitoringInfoResponse struct { - MonitoringInfo MonitoringInfo `protobuf:"bytes,1,opt,name=MonitoringInfo,proto3" json:"MonitoringInfo"` +type QueryGetConnectionChannelIDResponse struct { + ConnectionChannelID ConnectionChannelID `protobuf:"bytes,1,opt,name=ConnectionChannelID,proto3" json:"ConnectionChannelID"` } -func (m *QueryGetMonitoringInfoResponse) Reset() { *m = QueryGetMonitoringInfoResponse{} } -func (m *QueryGetMonitoringInfoResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetMonitoringInfoResponse) ProtoMessage() {} -func (*QueryGetMonitoringInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3a89b5986f036625, []int{5} +func (m *QueryGetConnectionChannelIDResponse) Reset() { *m = QueryGetConnectionChannelIDResponse{} } +func (m *QueryGetConnectionChannelIDResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetConnectionChannelIDResponse) ProtoMessage() {} +func (*QueryGetConnectionChannelIDResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_19c0c76e95648e0c, []int{5} } -func (m *QueryGetMonitoringInfoResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetConnectionChannelIDResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetMonitoringInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetConnectionChannelIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetMonitoringInfoResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetConnectionChannelIDResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -251,41 +255,40 @@ func (m *QueryGetMonitoringInfoResponse) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *QueryGetMonitoringInfoResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetMonitoringInfoResponse.Merge(m, src) +func (m *QueryGetConnectionChannelIDResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetConnectionChannelIDResponse.Merge(m, src) } -func (m *QueryGetMonitoringInfoResponse) XXX_Size() int { +func (m *QueryGetConnectionChannelIDResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetMonitoringInfoResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetMonitoringInfoResponse.DiscardUnknown(m) +func (m *QueryGetConnectionChannelIDResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetConnectionChannelIDResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetMonitoringInfoResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetConnectionChannelIDResponse proto.InternalMessageInfo -func (m *QueryGetMonitoringInfoResponse) GetMonitoringInfo() MonitoringInfo { +func (m *QueryGetConnectionChannelIDResponse) GetConnectionChannelID() ConnectionChannelID { if m != nil { - return m.MonitoringInfo + return m.ConnectionChannelID } - return MonitoringInfo{} + return ConnectionChannelID{} } -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +type QueryGetConsumerClientIDRequest struct { } -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3a89b5986f036625, []int{6} +func (m *QueryGetConsumerClientIDRequest) Reset() { *m = QueryGetConsumerClientIDRequest{} } +func (m *QueryGetConsumerClientIDRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetConsumerClientIDRequest) ProtoMessage() {} +func (*QueryGetConsumerClientIDRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_19c0c76e95648e0c, []int{6} } -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetConsumerClientIDRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetConsumerClientIDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetConsumerClientIDRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -295,35 +298,34 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) +func (m *QueryGetConsumerClientIDRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetConsumerClientIDRequest.Merge(m, src) } -func (m *QueryParamsRequest) XXX_Size() int { +func (m *QueryGetConsumerClientIDRequest) XXX_Size() int { return m.Size() } -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +func (m *QueryGetConsumerClientIDRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetConsumerClientIDRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetConsumerClientIDRequest proto.InternalMessageInfo -// QueryParamsResponse is response type for the Query/Params RPC method. -type QueryParamsResponse struct { - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +type QueryGetConsumerClientIDResponse struct { + ConsumerClientID ConsumerClientID `protobuf:"bytes,1,opt,name=ConsumerClientID,proto3" json:"ConsumerClientID"` } -func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } -func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryParamsResponse) ProtoMessage() {} -func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3a89b5986f036625, []int{7} +func (m *QueryGetConsumerClientIDResponse) Reset() { *m = QueryGetConsumerClientIDResponse{} } +func (m *QueryGetConsumerClientIDResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetConsumerClientIDResponse) ProtoMessage() {} +func (*QueryGetConsumerClientIDResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_19c0c76e95648e0c, []int{7} } -func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetConsumerClientIDResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetConsumerClientIDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetConsumerClientIDResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -333,75 +335,80 @@ func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsResponse.Merge(m, src) +func (m *QueryGetConsumerClientIDResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetConsumerClientIDResponse.Merge(m, src) } -func (m *QueryParamsResponse) XXX_Size() int { +func (m *QueryGetConsumerClientIDResponse) XXX_Size() int { return m.Size() } -func (m *QueryParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +func (m *QueryGetConsumerClientIDResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetConsumerClientIDResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetConsumerClientIDResponse proto.InternalMessageInfo -func (m *QueryParamsResponse) GetParams() Params { +func (m *QueryGetConsumerClientIDResponse) GetConsumerClientID() ConsumerClientID { if m != nil { - return m.Params + return m.ConsumerClientID } - return Params{} + return ConsumerClientID{} +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "network.monitoringp.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "network.monitoringp.v1.QueryParamsResponse") + proto.RegisterType((*QueryGetMonitoringInfoRequest)(nil), "network.monitoringp.v1.QueryGetMonitoringInfoRequest") + proto.RegisterType((*QueryGetMonitoringInfoResponse)(nil), "network.monitoringp.v1.QueryGetMonitoringInfoResponse") + proto.RegisterType((*QueryGetConnectionChannelIDRequest)(nil), "network.monitoringp.v1.QueryGetConnectionChannelIDRequest") + proto.RegisterType((*QueryGetConnectionChannelIDResponse)(nil), "network.monitoringp.v1.QueryGetConnectionChannelIDResponse") + proto.RegisterType((*QueryGetConsumerClientIDRequest)(nil), "network.monitoringp.v1.QueryGetConsumerClientIDRequest") + proto.RegisterType((*QueryGetConsumerClientIDResponse)(nil), "network.monitoringp.v1.QueryGetConsumerClientIDResponse") } func init() { - proto.RegisterType((*QueryGetConsumerClientIDRequest)(nil), "spn.monitoringp.QueryGetConsumerClientIDRequest") - proto.RegisterType((*QueryGetConsumerClientIDResponse)(nil), "spn.monitoringp.QueryGetConsumerClientIDResponse") - proto.RegisterType((*QueryGetConnectionChannelIDRequest)(nil), "spn.monitoringp.QueryGetConnectionChannelIDRequest") - proto.RegisterType((*QueryGetConnectionChannelIDResponse)(nil), "spn.monitoringp.QueryGetConnectionChannelIDResponse") - proto.RegisterType((*QueryGetMonitoringInfoRequest)(nil), "spn.monitoringp.QueryGetMonitoringInfoRequest") - proto.RegisterType((*QueryGetMonitoringInfoResponse)(nil), "spn.monitoringp.QueryGetMonitoringInfoResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "spn.monitoringp.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "spn.monitoringp.QueryParamsResponse") -} - -func init() { proto.RegisterFile("spn/monitoringp/query.proto", fileDescriptor_3a89b5986f036625) } - -var fileDescriptor_3a89b5986f036625 = []byte{ - // 555 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xc1, 0x6a, 0x13, 0x41, - 0x1c, 0xc6, 0xb3, 0x62, 0x73, 0x18, 0x41, 0x65, 0x5a, 0x50, 0x56, 0xdd, 0xb4, 0xdb, 0x08, 0xa5, - 0xa5, 0x3b, 0x4d, 0xa3, 0x82, 0xd7, 0x46, 0x28, 0x05, 0x0b, 0x5a, 0x6f, 0x22, 0x84, 0xcd, 0x76, - 0xba, 0x1d, 0xc8, 0xce, 0x4c, 0x77, 0x26, 0x6a, 0x4f, 0x82, 0xbe, 0x80, 0xe0, 0x13, 0x78, 0xf1, - 0xea, 0x03, 0xf8, 0x02, 0x3d, 0x16, 0xbc, 0x78, 0x12, 0x49, 0x7c, 0x10, 0xc9, 0xec, 0x3f, 0xa6, - 0x3b, 0xbb, 0xd9, 0xb4, 0xb7, 0x25, 0xff, 0xef, 0xff, 0x7d, 0xbf, 0x09, 0xdf, 0x0c, 0xba, 0xa7, - 0x24, 0x27, 0x89, 0xe0, 0x4c, 0x8b, 0x94, 0xf1, 0x58, 0x92, 0x93, 0x01, 0x4d, 0x4f, 0x03, 0x99, - 0x0a, 0x2d, 0xf0, 0x2d, 0x25, 0x79, 0x70, 0x61, 0xe8, 0x2e, 0xc5, 0x22, 0x16, 0x66, 0x46, 0xc6, - 0x5f, 0x99, 0xcc, 0xbd, 0x1f, 0x0b, 0x11, 0xf7, 0x29, 0x09, 0x25, 0x23, 0x21, 0xe7, 0x42, 0x87, - 0x9a, 0x09, 0xae, 0x60, 0xba, 0x1e, 0x09, 0x95, 0x08, 0x45, 0x7a, 0xa1, 0xa2, 0x99, 0x3b, 0x79, - 0xdb, 0xea, 0x51, 0x1d, 0xb6, 0x88, 0x0c, 0x63, 0xc6, 0x8d, 0x78, 0xe2, 0x64, 0xd3, 0xc8, 0x30, - 0x0d, 0x93, 0x89, 0xd3, 0x9a, 0x3d, 0x8d, 0x04, 0x57, 0x83, 0x84, 0xa6, 0xdd, 0xa8, 0xcf, 0x28, - 0xd7, 0x5d, 0x76, 0x08, 0xca, 0x8d, 0x12, 0x25, 0xa7, 0xd1, 0x38, 0xa9, 0x1b, 0x1d, 0x87, 0x9c, - 0xd3, 0xfe, 0x54, 0xfc, 0xd0, 0x16, 0x4f, 0xbf, 0xbb, 0x8c, 0x1f, 0xc1, 0x29, 0xfd, 0x15, 0xd4, - 0x78, 0x39, 0xa6, 0xdf, 0xa5, 0xba, 0x03, 0xb9, 0x1d, 0x13, 0xbb, 0xf7, 0xec, 0x80, 0x9e, 0x0c, - 0xa8, 0xd2, 0xfe, 0x3b, 0xb4, 0x3c, 0x5b, 0xa2, 0xa4, 0xe0, 0x8a, 0xe2, 0x57, 0xe8, 0xb6, 0x3d, - 0xbb, 0xeb, 0x2c, 0x3b, 0x6b, 0x37, 0xb6, 0x57, 0x02, 0xeb, 0xef, 0x0e, 0x6c, 0xe1, 0xce, 0xf5, - 0xb3, 0xdf, 0x8d, 0xda, 0x41, 0xc1, 0xc0, 0x6f, 0x22, 0xff, 0x42, 0x30, 0x9c, 0xb4, 0x93, 0x1d, - 0x74, 0x8a, 0xf7, 0xc9, 0x41, 0xab, 0x95, 0x32, 0x40, 0x7c, 0x83, 0x16, 0x4b, 0xc6, 0x40, 0xd9, - 0x2c, 0xa3, 0xb4, 0xb5, 0x00, 0x5a, 0x66, 0xe3, 0x37, 0xd0, 0x83, 0x09, 0xc4, 0xfe, 0x7f, 0x97, - 0x3d, 0x7e, 0x24, 0x26, 0x98, 0x02, 0x79, 0xb3, 0x04, 0x00, 0xb8, 0x8f, 0x6e, 0xe6, 0x27, 0xc0, - 0xd6, 0x28, 0xb0, 0xe5, 0x65, 0x80, 0x65, 0x2d, 0xfb, 0x4b, 0x08, 0x9b, 0xc0, 0x17, 0xa6, 0x6c, - 0x13, 0x8c, 0xe7, 0x68, 0x31, 0xf7, 0x2b, 0x64, 0x3f, 0x46, 0xf5, 0xac, 0x94, 0x90, 0x79, 0xa7, - 0x90, 0x99, 0x2d, 0x40, 0x16, 0x88, 0xb7, 0xbf, 0x2e, 0xa0, 0x05, 0x63, 0x87, 0xbf, 0x3b, 0xc5, - 0x06, 0xe0, 0xad, 0x82, 0xcb, 0x9c, 0xae, 0xb9, 0xad, 0x2b, 0x6c, 0x64, 0xe8, 0xfe, 0x93, 0x8f, - 0x3f, 0xff, 0x7e, 0xb9, 0xb6, 0x85, 0x03, 0xa2, 0x29, 0x3f, 0xa4, 0x69, 0xc2, 0xb8, 0x26, 0xf3, - 0xef, 0x14, 0xfe, 0xe1, 0x94, 0x16, 0x02, 0xb7, 0xab, 0x10, 0x66, 0x94, 0xd0, 0x7d, 0x74, 0xb5, - 0x25, 0x40, 0x7f, 0x6a, 0xd0, 0xdb, 0xb8, 0x35, 0x07, 0xbd, 0x78, 0xc9, 0xf1, 0x37, 0xc7, 0x6e, - 0x0b, 0x0e, 0x66, 0x32, 0x94, 0x36, 0xd2, 0x25, 0x97, 0xd6, 0x03, 0x6e, 0xdb, 0xe0, 0x6e, 0xe2, - 0x8d, 0x2a, 0x5c, 0xeb, 0x99, 0xc1, 0x1f, 0x50, 0x3d, 0xab, 0x0e, 0x5e, 0x2d, 0xcf, 0xcb, 0xf5, - 0xd3, 0x6d, 0x56, 0x8b, 0x80, 0x64, 0xdd, 0x90, 0x34, 0xb1, 0x5f, 0x45, 0x92, 0x75, 0x74, 0x67, - 0xf7, 0x6c, 0xe8, 0x39, 0xe7, 0x43, 0xcf, 0xf9, 0x33, 0xf4, 0x9c, 0xcf, 0x23, 0xaf, 0x76, 0x3e, - 0xf2, 0x6a, 0xbf, 0x46, 0x5e, 0xed, 0xf5, 0x66, 0xcc, 0xf4, 0xf1, 0xa0, 0x17, 0x44, 0x22, 0xb1, - 0x7d, 0xde, 0xe7, 0x9c, 0xf4, 0xa9, 0xa4, 0xaa, 0x57, 0x37, 0x2f, 0x66, 0xfb, 0x5f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x66, 0x81, 0xc6, 0x28, 0x5d, 0x06, 0x00, 0x00, + proto.RegisterFile("network/monitoringp/v1/query.proto", fileDescriptor_19c0c76e95648e0c) +} + +var fileDescriptor_19c0c76e95648e0c = []byte{ + // 596 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xbf, 0x6f, 0x13, 0x3f, + 0x18, 0xc6, 0xe3, 0xaf, 0xbe, 0x8d, 0x84, 0x91, 0x10, 0x75, 0xaa, 0x0a, 0x9d, 0xe0, 0x52, 0xae, + 0xfc, 0xa8, 0x12, 0x72, 0x26, 0x89, 0x28, 0xbf, 0x26, 0x12, 0xa4, 0xaa, 0x03, 0x12, 0x44, 0x0c, + 0xa8, 0x4b, 0xe4, 0x1c, 0xee, 0xd5, 0x22, 0x67, 0x5f, 0xef, 0x9c, 0x40, 0x17, 0x06, 0x46, 0xa6, + 0x4a, 0xfc, 0x13, 0x8c, 0x6c, 0xac, 0x8c, 0x1d, 0x18, 0x2a, 0xb1, 0x30, 0x21, 0x94, 0x20, 0xf8, + 0x37, 0x50, 0x7c, 0x4e, 0xd3, 0x24, 0xe7, 0x6b, 0xcb, 0x12, 0x5d, 0xfc, 0x3e, 0xcf, 0xeb, 0xcf, + 0x7b, 0x7e, 0xce, 0xd0, 0xe1, 0x54, 0xbe, 0x16, 0xd1, 0x2b, 0x1c, 0x08, 0xce, 0xa4, 0x88, 0x18, + 0xf7, 0x43, 0xdc, 0xaf, 0xe2, 0xdd, 0x1e, 0x8d, 0xf6, 0xdc, 0x30, 0x12, 0x52, 0xa0, 0x65, 0xad, + 0x71, 0x8f, 0x69, 0xdc, 0x7e, 0xd5, 0x5a, 0x24, 0x01, 0xe3, 0x02, 0xab, 0xdf, 0x44, 0x6a, 0x95, + 0x3c, 0x11, 0x07, 0x22, 0xc6, 0x1d, 0x12, 0xd3, 0xa4, 0x07, 0xee, 0x57, 0x3b, 0x54, 0x92, 0x2a, + 0x0e, 0x89, 0xcf, 0x38, 0x91, 0x4c, 0x70, 0xad, 0x5d, 0xf2, 0x85, 0x2f, 0xd4, 0x23, 0x1e, 0x3d, + 0xe9, 0xd5, 0xcb, 0xbe, 0x10, 0x7e, 0x97, 0x62, 0x12, 0x32, 0x4c, 0x38, 0x17, 0x52, 0x59, 0x62, + 0x5d, 0xad, 0x19, 0x70, 0x3d, 0xc1, 0x39, 0xf5, 0x46, 0xca, 0xb6, 0xb7, 0x43, 0x38, 0xa7, 0xdd, + 0x36, 0x7b, 0xa9, 0x3d, 0xd8, 0xec, 0x89, 0x7b, 0x01, 0x8d, 0xda, 0x5e, 0x97, 0x51, 0x2e, 0x27, + 0x86, 0x5b, 0x06, 0xc3, 0xe4, 0x6f, 0x9b, 0xf1, 0xed, 0x31, 0xf0, 0xaa, 0x41, 0x1d, 0x92, 0x88, + 0x04, 0x9a, 0xdb, 0x59, 0x82, 0xe8, 0xd9, 0xe8, 0x6d, 0x3c, 0x55, 0x8b, 0x2d, 0xba, 0xdb, 0xa3, + 0xb1, 0x74, 0x5e, 0xc0, 0xc2, 0xd4, 0x6a, 0x1c, 0x0a, 0x1e, 0x53, 0xf4, 0x08, 0xe6, 0x13, 0xf3, + 0x25, 0xb0, 0x02, 0xd6, 0xce, 0xd7, 0x6c, 0x37, 0xfd, 0x00, 0xdc, 0xc4, 0xd7, 0x38, 0x77, 0xf0, + 0xa3, 0x98, 0xfb, 0xf8, 0xe7, 0x53, 0x09, 0xb4, 0xb4, 0xd1, 0x29, 0xc2, 0x2b, 0xaa, 0xf3, 0x06, + 0x95, 0x4f, 0x8e, 0x3c, 0x9b, 0x7c, 0x5b, 0x8c, 0xb7, 0xee, 0x43, 0xdb, 0x24, 0xd0, 0x14, 0xcf, + 0xe1, 0x85, 0xe9, 0x8a, 0xa6, 0xb9, 0x61, 0xa2, 0x99, 0x56, 0x37, 0xfe, 0x1f, 0x51, 0xb5, 0x66, + 0x7a, 0x38, 0xd7, 0xa0, 0x33, 0xde, 0xb7, 0x79, 0x74, 0x66, 0xcd, 0xe4, 0xc8, 0x36, 0x1f, 0x8f, + 0xe9, 0xde, 0x03, 0xb8, 0x9a, 0x29, 0xd3, 0x8c, 0x1e, 0x2c, 0xa4, 0x94, 0x35, 0x68, 0xd9, 0x04, + 0x9a, 0x62, 0xd1, 0xb4, 0x69, 0xdd, 0x9c, 0xab, 0xb0, 0x78, 0x8c, 0x45, 0x45, 0xa6, 0xa9, 0x12, + 0x33, 0xe1, 0x7d, 0x0b, 0x57, 0xcc, 0x12, 0xcd, 0xba, 0x05, 0x2f, 0xce, 0xd6, 0x34, 0xe8, 0x5a, + 0x06, 0xe8, 0x94, 0x5e, 0x53, 0xce, 0xf5, 0xa9, 0xfd, 0x5e, 0x80, 0x0b, 0x0a, 0x00, 0xed, 0x03, + 0x98, 0x4f, 0x62, 0x81, 0x4a, 0xa6, 0xb6, 0xf3, 0x49, 0xb4, 0xca, 0xa7, 0xd2, 0x26, 0x93, 0x38, + 0x95, 0x77, 0xdf, 0x7e, 0x7d, 0xf8, 0xef, 0x26, 0xba, 0x8e, 0x99, 0xcf, 0x99, 0xa4, 0x38, 0xf3, + 0x0b, 0x40, 0x9f, 0x01, 0x5c, 0x9c, 0x8b, 0x19, 0xba, 0x93, 0xb9, 0xa3, 0x29, 0xb7, 0xd6, 0xfa, + 0x59, 0x6d, 0x9a, 0xb9, 0xae, 0x98, 0x2b, 0xa8, 0x9c, 0xc5, 0x3c, 0xf3, 0x81, 0xa3, 0xaf, 0x00, + 0x2e, 0xa7, 0x27, 0x10, 0x3d, 0x38, 0x89, 0xc3, 0x9c, 0x6e, 0xeb, 0xe1, 0x3f, 0x79, 0xf5, 0x20, + 0xf7, 0xd5, 0x20, 0x75, 0x54, 0xcd, 0x1a, 0x24, 0xf5, 0x3a, 0x44, 0x5f, 0x00, 0x2c, 0xa4, 0x24, + 0x14, 0xdd, 0x3d, 0x05, 0x4f, 0x5a, 0xec, 0xad, 0x7b, 0x67, 0x37, 0xea, 0x29, 0xd6, 0xd5, 0x14, + 0xb7, 0x91, 0x7b, 0xc2, 0x14, 0x33, 0x17, 0x74, 0x63, 0xe3, 0x60, 0x60, 0x83, 0xc3, 0x81, 0x0d, + 0x7e, 0x0e, 0x6c, 0xb0, 0x3f, 0xb4, 0x73, 0x87, 0x43, 0x3b, 0xf7, 0x7d, 0x68, 0xe7, 0xb6, 0x2a, + 0x3e, 0x93, 0x3b, 0xbd, 0x8e, 0xeb, 0x89, 0x60, 0xb6, 0xe7, 0x9b, 0xa9, 0xae, 0x72, 0x2f, 0xa4, + 0x71, 0x27, 0xaf, 0xee, 0xe5, 0xfa, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x55, 0x9e, 0x63, + 0x00, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -416,14 +423,14 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { - // Queries a ConsumerClientID by index. - ConsumerClientID(ctx context.Context, in *QueryGetConsumerClientIDRequest, opts ...grpc.CallOption) (*QueryGetConsumerClientIDResponse, error) - // Queries a ConnectionChannelID by index. - ConnectionChannelID(ctx context.Context, in *QueryGetConnectionChannelIDRequest, opts ...grpc.CallOption) (*QueryGetConnectionChannelIDResponse, error) - // Queries a MonitoringInfo by index. - MonitoringInfo(ctx context.Context, in *QueryGetMonitoringInfoRequest, opts ...grpc.CallOption) (*QueryGetMonitoringInfoResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a MonitoringInfo by index. + GetMonitoringInfo(ctx context.Context, in *QueryGetMonitoringInfoRequest, opts ...grpc.CallOption) (*QueryGetMonitoringInfoResponse, error) + // Queries a ConnectionChannelID by index. + GetConnectionChannelID(ctx context.Context, in *QueryGetConnectionChannelIDRequest, opts ...grpc.CallOption) (*QueryGetConnectionChannelIDResponse, error) + // Queries a ConsumerClientID by index. + GetConsumerClientID(ctx context.Context, in *QueryGetConsumerClientIDRequest, opts ...grpc.CallOption) (*QueryGetConsumerClientIDResponse, error) } type queryClient struct { @@ -434,36 +441,36 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) ConsumerClientID(ctx context.Context, in *QueryGetConsumerClientIDRequest, opts ...grpc.CallOption) (*QueryGetConsumerClientIDResponse, error) { - out := new(QueryGetConsumerClientIDResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringp.Query/ConsumerClientID", in, out, opts...) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/network.monitoringp.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ConnectionChannelID(ctx context.Context, in *QueryGetConnectionChannelIDRequest, opts ...grpc.CallOption) (*QueryGetConnectionChannelIDResponse, error) { - out := new(QueryGetConnectionChannelIDResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringp.Query/ConnectionChannelID", in, out, opts...) +func (c *queryClient) GetMonitoringInfo(ctx context.Context, in *QueryGetMonitoringInfoRequest, opts ...grpc.CallOption) (*QueryGetMonitoringInfoResponse, error) { + out := new(QueryGetMonitoringInfoResponse) + err := c.cc.Invoke(ctx, "/network.monitoringp.v1.Query/GetMonitoringInfo", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) MonitoringInfo(ctx context.Context, in *QueryGetMonitoringInfoRequest, opts ...grpc.CallOption) (*QueryGetMonitoringInfoResponse, error) { - out := new(QueryGetMonitoringInfoResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringp.Query/MonitoringInfo", in, out, opts...) +func (c *queryClient) GetConnectionChannelID(ctx context.Context, in *QueryGetConnectionChannelIDRequest, opts ...grpc.CallOption) (*QueryGetConnectionChannelIDResponse, error) { + out := new(QueryGetConnectionChannelIDResponse) + err := c.cc.Invoke(ctx, "/network.monitoringp.v1.Query/GetConnectionChannelID", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/spn.monitoringp.Query/Params", in, out, opts...) +func (c *queryClient) GetConsumerClientID(ctx context.Context, in *QueryGetConsumerClientIDRequest, opts ...grpc.CallOption) (*QueryGetConsumerClientIDResponse, error) { + out := new(QueryGetConsumerClientIDResponse) + err := c.cc.Invoke(ctx, "/network.monitoringp.v1.Query/GetConsumerClientID", in, out, opts...) if err != nil { return nil, err } @@ -472,135 +479,135 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . // QueryServer is the server API for Query service. type QueryServer interface { - // Queries a ConsumerClientID by index. - ConsumerClientID(context.Context, *QueryGetConsumerClientIDRequest) (*QueryGetConsumerClientIDResponse, error) - // Queries a ConnectionChannelID by index. - ConnectionChannelID(context.Context, *QueryGetConnectionChannelIDRequest) (*QueryGetConnectionChannelIDResponse, error) - // Queries a MonitoringInfo by index. - MonitoringInfo(context.Context, *QueryGetMonitoringInfoRequest) (*QueryGetMonitoringInfoResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a MonitoringInfo by index. + GetMonitoringInfo(context.Context, *QueryGetMonitoringInfoRequest) (*QueryGetMonitoringInfoResponse, error) + // Queries a ConnectionChannelID by index. + GetConnectionChannelID(context.Context, *QueryGetConnectionChannelIDRequest) (*QueryGetConnectionChannelIDResponse, error) + // Queries a ConsumerClientID by index. + GetConsumerClientID(context.Context, *QueryGetConsumerClientIDRequest) (*QueryGetConsumerClientIDResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) ConsumerClientID(ctx context.Context, req *QueryGetConsumerClientIDRequest) (*QueryGetConsumerClientIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConsumerClientID not implemented") +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) ConnectionChannelID(ctx context.Context, req *QueryGetConnectionChannelIDRequest) (*QueryGetConnectionChannelIDResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConnectionChannelID not implemented") +func (*UnimplementedQueryServer) GetMonitoringInfo(ctx context.Context, req *QueryGetMonitoringInfoRequest) (*QueryGetMonitoringInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMonitoringInfo not implemented") } -func (*UnimplementedQueryServer) MonitoringInfo(ctx context.Context, req *QueryGetMonitoringInfoRequest) (*QueryGetMonitoringInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MonitoringInfo not implemented") +func (*UnimplementedQueryServer) GetConnectionChannelID(ctx context.Context, req *QueryGetConnectionChannelIDRequest) (*QueryGetConnectionChannelIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetConnectionChannelID not implemented") } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +func (*UnimplementedQueryServer) GetConsumerClientID(ctx context.Context, req *QueryGetConsumerClientIDRequest) (*QueryGetConsumerClientIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetConsumerClientID not implemented") } func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } -func _Query_ConsumerClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetConsumerClientIDRequest) +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ConsumerClientID(ctx, in) + return srv.(QueryServer).Params(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringp.Query/ConsumerClientID", + FullMethod: "/network.monitoringp.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ConsumerClientID(ctx, req.(*QueryGetConsumerClientIDRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ConnectionChannelID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetConnectionChannelIDRequest) +func _Query_GetMonitoringInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetMonitoringInfoRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ConnectionChannelID(ctx, in) + return srv.(QueryServer).GetMonitoringInfo(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringp.Query/ConnectionChannelID", + FullMethod: "/network.monitoringp.v1.Query/GetMonitoringInfo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ConnectionChannelID(ctx, req.(*QueryGetConnectionChannelIDRequest)) + return srv.(QueryServer).GetMonitoringInfo(ctx, req.(*QueryGetMonitoringInfoRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_MonitoringInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetMonitoringInfoRequest) +func _Query_GetConnectionChannelID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetConnectionChannelIDRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).MonitoringInfo(ctx, in) + return srv.(QueryServer).GetConnectionChannelID(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringp.Query/MonitoringInfo", + FullMethod: "/network.monitoringp.v1.Query/GetConnectionChannelID", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).MonitoringInfo(ctx, req.(*QueryGetMonitoringInfoRequest)) + return srv.(QueryServer).GetConnectionChannelID(ctx, req.(*QueryGetConnectionChannelIDRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) +func _Query_GetConsumerClientID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetConsumerClientIDRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) + return srv.(QueryServer).GetConsumerClientID(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.monitoringp.Query/Params", + FullMethod: "/network.monitoringp.v1.Query/GetConsumerClientID", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).GetConsumerClientID(ctx, req.(*QueryGetConsumerClientIDRequest)) } return interceptor(ctx, in, info, handler) } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.monitoringp.Query", + ServiceName: "network.monitoringp.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "ConsumerClientID", - Handler: _Query_ConsumerClientID_Handler, + MethodName: "Params", + Handler: _Query_Params_Handler, }, { - MethodName: "ConnectionChannelID", - Handler: _Query_ConnectionChannelID_Handler, + MethodName: "GetMonitoringInfo", + Handler: _Query_GetMonitoringInfo_Handler, }, { - MethodName: "MonitoringInfo", - Handler: _Query_MonitoringInfo_Handler, + MethodName: "GetConnectionChannelID", + Handler: _Query_GetConnectionChannelID_Handler, }, { - MethodName: "Params", - Handler: _Query_Params_Handler, + MethodName: "GetConsumerClientID", + Handler: _Query_GetConsumerClientID_Handler, }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/monitoringp/query.proto", + Metadata: "network/monitoringp/v1/query.proto", } -func (m *QueryGetConsumerClientIDRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -610,12 +617,12 @@ func (m *QueryGetConsumerClientIDRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetConsumerClientIDRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetConsumerClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -623,7 +630,7 @@ func (m *QueryGetConsumerClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *QueryGetConsumerClientIDResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -633,18 +640,18 @@ func (m *QueryGetConsumerClientIDResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetConsumerClientIDResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetConsumerClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.ConsumerClientID.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -656,7 +663,7 @@ func (m *QueryGetConsumerClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } -func (m *QueryGetConnectionChannelIDRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetMonitoringInfoRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -666,12 +673,12 @@ func (m *QueryGetConnectionChannelIDRequest) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryGetConnectionChannelIDRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetMonitoringInfoRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetConnectionChannelIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetMonitoringInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -679,7 +686,7 @@ func (m *QueryGetConnectionChannelIDRequest) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } -func (m *QueryGetConnectionChannelIDResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetMonitoringInfoResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -689,18 +696,18 @@ func (m *QueryGetConnectionChannelIDResponse) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryGetConnectionChannelIDResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetMonitoringInfoResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetConnectionChannelIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetMonitoringInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.ConnectionChannelID.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.MonitoringInfo.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -712,7 +719,7 @@ func (m *QueryGetConnectionChannelIDResponse) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *QueryGetMonitoringInfoRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetConnectionChannelIDRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -722,12 +729,12 @@ func (m *QueryGetMonitoringInfoRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetMonitoringInfoRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetConnectionChannelIDRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetMonitoringInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetConnectionChannelIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -735,7 +742,7 @@ func (m *QueryGetMonitoringInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryGetMonitoringInfoResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetConnectionChannelIDResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -745,18 +752,18 @@ func (m *QueryGetMonitoringInfoResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetMonitoringInfoResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetConnectionChannelIDResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetMonitoringInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetConnectionChannelIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.MonitoringInfo.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ConnectionChannelID.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -768,7 +775,7 @@ func (m *QueryGetMonitoringInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetConsumerClientIDRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -778,12 +785,12 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetConsumerClientIDRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetConsumerClientIDRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -791,7 +798,7 @@ func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetConsumerClientIDResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -801,18 +808,18 @@ func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetConsumerClientIDResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetConsumerClientIDResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ConsumerClientID.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -835,7 +842,7 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryGetConsumerClientIDRequest) Size() (n int) { +func (m *QueryParamsRequest) Size() (n int) { if m == nil { return 0 } @@ -844,18 +851,18 @@ func (m *QueryGetConsumerClientIDRequest) Size() (n int) { return n } -func (m *QueryGetConsumerClientIDResponse) Size() (n int) { +func (m *QueryParamsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.ConsumerClientID.Size() + l = m.Params.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryGetConnectionChannelIDRequest) Size() (n int) { +func (m *QueryGetMonitoringInfoRequest) Size() (n int) { if m == nil { return 0 } @@ -864,18 +871,18 @@ func (m *QueryGetConnectionChannelIDRequest) Size() (n int) { return n } -func (m *QueryGetConnectionChannelIDResponse) Size() (n int) { +func (m *QueryGetMonitoringInfoResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.ConnectionChannelID.Size() + l = m.MonitoringInfo.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryGetMonitoringInfoRequest) Size() (n int) { +func (m *QueryGetConnectionChannelIDRequest) Size() (n int) { if m == nil { return 0 } @@ -884,18 +891,18 @@ func (m *QueryGetMonitoringInfoRequest) Size() (n int) { return n } -func (m *QueryGetMonitoringInfoResponse) Size() (n int) { +func (m *QueryGetConnectionChannelIDResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.MonitoringInfo.Size() + l = m.ConnectionChannelID.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryParamsRequest) Size() (n int) { +func (m *QueryGetConsumerClientIDRequest) Size() (n int) { if m == nil { return 0 } @@ -904,13 +911,13 @@ func (m *QueryParamsRequest) Size() (n int) { return n } -func (m *QueryParamsResponse) Size() (n int) { +func (m *QueryGetConsumerClientIDResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.Params.Size() + l = m.ConsumerClientID.Size() n += 1 + l + sovQuery(uint64(l)) return n } @@ -921,7 +928,7 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryGetConsumerClientIDRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -944,10 +951,10 @@ func (m *QueryGetConsumerClientIDRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetConsumerClientIDRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetConsumerClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -971,7 +978,7 @@ func (m *QueryGetConsumerClientIDRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetConsumerClientIDResponse) Unmarshal(dAtA []byte) error { +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -994,15 +1001,15 @@ func (m *QueryGetConsumerClientIDResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetConsumerClientIDResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetConsumerClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsumerClientID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1029,7 +1036,7 @@ func (m *QueryGetConsumerClientIDResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ConsumerClientID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1054,7 +1061,7 @@ func (m *QueryGetConsumerClientIDResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetConnectionChannelIDRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetMonitoringInfoRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1077,10 +1084,10 @@ func (m *QueryGetConnectionChannelIDRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetConnectionChannelIDRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetMonitoringInfoRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetConnectionChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetMonitoringInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -1104,7 +1111,7 @@ func (m *QueryGetConnectionChannelIDRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetConnectionChannelIDResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetMonitoringInfoResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1127,15 +1134,15 @@ func (m *QueryGetConnectionChannelIDResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetConnectionChannelIDResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetMonitoringInfoResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetConnectionChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetMonitoringInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectionChannelID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MonitoringInfo", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1162,7 +1169,7 @@ func (m *QueryGetConnectionChannelIDResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ConnectionChannelID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.MonitoringInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1187,7 +1194,7 @@ func (m *QueryGetConnectionChannelIDResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetMonitoringInfoRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetConnectionChannelIDRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1210,10 +1217,10 @@ func (m *QueryGetMonitoringInfoRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetMonitoringInfoRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetConnectionChannelIDRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetMonitoringInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetConnectionChannelIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -1237,7 +1244,7 @@ func (m *QueryGetMonitoringInfoRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetMonitoringInfoResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetConnectionChannelIDResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1260,15 +1267,15 @@ func (m *QueryGetMonitoringInfoResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetMonitoringInfoResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetConnectionChannelIDResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetMonitoringInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetConnectionChannelIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MonitoringInfo", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionChannelID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1295,7 +1302,7 @@ func (m *QueryGetMonitoringInfoResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.MonitoringInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ConnectionChannelID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1320,7 +1327,7 @@ func (m *QueryGetMonitoringInfoResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetConsumerClientIDRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1343,10 +1350,10 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetConsumerClientIDRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetConsumerClientIDRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -1370,7 +1377,7 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetConsumerClientIDResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1393,15 +1400,15 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetConsumerClientIDResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetConsumerClientIDResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConsumerClientID", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1428,7 +1435,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ConsumerClientID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/monitoringp/types/query.pb.gw.go b/x/monitoringp/types/query.pb.gw.go index a76b4d2d..d573f2cd 100644 --- a/x/monitoringp/types/query.pb.gw.go +++ b/x/monitoringp/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: spn/monitoringp/query.proto +// source: network/monitoringp/v1/query.proto /* Package types is a reverse proxy. @@ -33,74 +33,74 @@ var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage var _ = metadata.Join -func request_Query_ConsumerClientID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetConsumerClientIDRequest +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest var metadata runtime.ServerMetadata - msg, err := client.ConsumerClientID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ConsumerClientID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetConsumerClientIDRequest +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest var metadata runtime.ServerMetadata - msg, err := server.ConsumerClientID(ctx, &protoReq) + msg, err := server.Params(ctx, &protoReq) return msg, metadata, err } -func request_Query_ConnectionChannelID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetConnectionChannelIDRequest +func request_Query_GetMonitoringInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetMonitoringInfoRequest var metadata runtime.ServerMetadata - msg, err := client.ConnectionChannelID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetMonitoringInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ConnectionChannelID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetConnectionChannelIDRequest +func local_request_Query_GetMonitoringInfo_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetMonitoringInfoRequest var metadata runtime.ServerMetadata - msg, err := server.ConnectionChannelID(ctx, &protoReq) + msg, err := server.GetMonitoringInfo(ctx, &protoReq) return msg, metadata, err } -func request_Query_MonitoringInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetMonitoringInfoRequest +func request_Query_GetConnectionChannelID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetConnectionChannelIDRequest var metadata runtime.ServerMetadata - msg, err := client.MonitoringInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetConnectionChannelID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_MonitoringInfo_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetMonitoringInfoRequest +func local_request_Query_GetConnectionChannelID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetConnectionChannelIDRequest var metadata runtime.ServerMetadata - msg, err := server.MonitoringInfo(ctx, &protoReq) + msg, err := server.GetConnectionChannelID(ctx, &protoReq) return msg, metadata, err } -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest +func request_Query_GetConsumerClientID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetConsumerClientIDRequest var metadata runtime.ServerMetadata - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetConsumerClientID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest +func local_request_Query_GetConsumerClientID_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetConsumerClientIDRequest var metadata runtime.ServerMetadata - msg, err := server.Params(ctx, &protoReq) + msg, err := server.GetConsumerClientID(ctx, &protoReq) return msg, metadata, err } @@ -111,7 +111,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - mux.Handle("GET", pattern_Query_ConsumerClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -122,7 +122,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ConsumerClientID_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -130,11 +130,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ConsumerClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ConnectionChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetMonitoringInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -145,7 +145,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ConnectionChannelID_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetMonitoringInfo_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -153,11 +153,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ConnectionChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetMonitoringInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MonitoringInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetConnectionChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -168,7 +168,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_MonitoringInfo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetConnectionChannelID_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -176,11 +176,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_MonitoringInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetConnectionChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetConsumerClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -191,7 +191,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetConsumerClientID_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -199,7 +199,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetConsumerClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -244,7 +244,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - mux.Handle("GET", pattern_Query_ConsumerClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -253,18 +253,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ConsumerClientID_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ConsumerClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ConnectionChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetMonitoringInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -273,18 +273,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ConnectionChannelID_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetMonitoringInfo_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ConnectionChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetMonitoringInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MonitoringInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetConnectionChannelID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -293,18 +293,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_MonitoringInfo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetConnectionChannelID_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_MonitoringInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetConnectionChannelID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetConsumerClientID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -313,14 +313,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetConsumerClientID_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetConsumerClientID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -328,21 +328,21 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_ConsumerClientID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "monitoringp", "consumer_client_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ignite", "network", "monitoringp", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ConnectionChannelID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "monitoringp", "connection_channel_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetMonitoringInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "monitoringp", "monitoring_info"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_MonitoringInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "monitoringp", "monitoring_info"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetConnectionChannelID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "monitoringp", "connection_channel_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "monitoringp", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetConsumerClientID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "monitoringp", "consumer_client_id"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( - forward_Query_ConsumerClientID_0 = runtime.ForwardResponseMessage + forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_ConnectionChannelID_0 = runtime.ForwardResponseMessage + forward_Query_GetMonitoringInfo_0 = runtime.ForwardResponseMessage - forward_Query_MonitoringInfo_0 = runtime.ForwardResponseMessage + forward_Query_GetConnectionChannelID_0 = runtime.ForwardResponseMessage - forward_Query_Params_0 = runtime.ForwardResponseMessage + forward_Query_GetConsumerClientID_0 = runtime.ForwardResponseMessage ) diff --git a/x/monitoringp/types/tx.pb.go b/x/monitoringp/types/tx.pb.go index 957787d5..51838864 100644 --- a/x/monitoringp/types/tx.pb.go +++ b/x/monitoringp/types/tx.pb.go @@ -1,15 +1,23 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/monitoringp/tx.proto +// source: network/monitoringp/v1/tx.proto package types import ( context "context" fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. @@ -23,19 +31,132 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -func init() { proto.RegisterFile("spn/monitoringp/tx.proto", fileDescriptor_d84d8c749f6e6b38) } +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // params defines the module parameters to update. + // + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_ea9e73e010830a66, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} -var fileDescriptor_d84d8c749f6e6b38 = []byte{ - // 131 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x28, 0x2e, 0xc8, 0xd3, - 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, 0x2f, 0xa9, 0xd0, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2f, 0x2e, 0xc8, 0xd3, 0x43, 0x92, 0x31, 0x62, 0xe5, 0x62, - 0xf6, 0x2d, 0x4e, 0x77, 0x72, 0x3f, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, - 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, - 0xdd, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0x92, 0xd4, 0xbc, 0x94, - 0xd4, 0xa2, 0xdc, 0xcc, 0xbc, 0x12, 0x7d, 0x90, 0x0d, 0x15, 0xa8, 0x76, 0x54, 0x16, 0xa4, 0x16, - 0x27, 0xb1, 0x81, 0xed, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xb3, 0x42, 0xec, 0x05, 0x83, - 0x00, 0x00, 0x00, +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ea9e73e010830a66, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgUpdateParams)(nil), "network.monitoringp.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "network.monitoringp.v1.MsgUpdateParamsResponse") +} + +func init() { proto.RegisterFile("network/monitoringp/v1/tx.proto", fileDescriptor_ea9e73e010830a66) } + +var fileDescriptor_ea9e73e010830a66 = []byte{ + // 350 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0x2f, 0xd0, + 0x2f, 0x33, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x83, 0x2a, 0xd0, + 0x43, 0x52, 0xa0, 0x57, 0x66, 0x28, 0x25, 0x98, 0x98, 0x9b, 0x99, 0x97, 0xaf, 0x0f, 0x26, 0x21, + 0x4a, 0xa5, 0xc4, 0x93, 0xf3, 0x8b, 0x73, 0xf3, 0x8b, 0xf5, 0x73, 0x8b, 0xd3, 0x41, 0x46, 0xe4, + 0x16, 0xa7, 0x43, 0x25, 0x24, 0x21, 0x12, 0xf1, 0x60, 0x9e, 0x3e, 0x84, 0x03, 0x95, 0x12, 0x49, + 0xcf, 0x4f, 0xcf, 0x87, 0x88, 0x83, 0x58, 0x50, 0x51, 0x65, 0x1c, 0xae, 0x2a, 0x48, 0x2c, 0x4a, + 0xcc, 0x85, 0x6a, 0x55, 0x3a, 0xc6, 0xc8, 0xc5, 0xef, 0x5b, 0x9c, 0x1e, 0x5a, 0x90, 0x92, 0x58, + 0x92, 0x1a, 0x00, 0x96, 0x11, 0x32, 0xe3, 0xe2, 0x4c, 0x2c, 0x2d, 0xc9, 0xc8, 0x2f, 0xca, 0x2c, + 0xa9, 0x94, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xb8, 0xb4, 0x45, 0x57, 0x04, 0x6a, 0xa7, + 0x63, 0x4a, 0x4a, 0x51, 0x6a, 0x71, 0x71, 0x70, 0x09, 0xc8, 0xc4, 0x20, 0x84, 0x52, 0x21, 0x47, + 0x2e, 0x36, 0x88, 0xd9, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0x72, 0x7a, 0xd8, 0xbd, 0xad, + 0x07, 0xb1, 0xc7, 0x89, 0xf3, 0xc4, 0x3d, 0x79, 0x86, 0x15, 0xcf, 0x37, 0x68, 0x31, 0x06, 0x41, + 0x35, 0x5a, 0x59, 0x34, 0x3d, 0xdf, 0xa0, 0x85, 0x30, 0xb2, 0xeb, 0xf9, 0x06, 0x2d, 0x55, 0x98, + 0x37, 0x2a, 0x50, 0x3c, 0x82, 0xe6, 0x68, 0x25, 0x49, 0x2e, 0x71, 0x34, 0xa1, 0xa0, 0xd4, 0xe2, + 0x82, 0xfc, 0xbc, 0xe2, 0x54, 0xa3, 0x32, 0x2e, 0x66, 0xdf, 0xe2, 0x74, 0xa1, 0x0c, 0x2e, 0x1e, + 0x14, 0x6f, 0xaa, 0xe3, 0x72, 0x1e, 0x9a, 0x39, 0x52, 0xfa, 0x44, 0x2a, 0x84, 0x59, 0x28, 0xc5, + 0xda, 0x00, 0xf2, 0x94, 0x93, 0xfb, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, + 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, + 0xe9, 0xa6, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0x67, 0xa6, 0xe7, 0x65, + 0x96, 0xa4, 0xea, 0x63, 0xf7, 0x65, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0x38, 0xae, 0x8c, + 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x4a, 0x3a, 0x7b, 0x68, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -50,6 +171,9 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) } type msgClient struct { @@ -60,22 +184,415 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/network.monitoringp.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. type UnimplementedMsgServer struct { } +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} + func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/network.monitoringp.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.monitoringp.Msg", + ServiceName: "network.monitoringp.v1.Msg", HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{}, - Metadata: "spn/monitoringp/tx.proto", + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "network/monitoringp/v1/tx.proto", +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/monitoringp/types/types.go b/x/monitoringp/types/types.go new file mode 100644 index 00000000..ab1254f4 --- /dev/null +++ b/x/monitoringp/types/types.go @@ -0,0 +1 @@ +package types diff --git a/x/participation/client/cli/query.go b/x/participation/client/cli/query.go deleted file mode 100644 index bb8d9e94..00000000 --- a/x/participation/client/cli/query.go +++ /dev/null @@ -1,37 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - - "github.com/tendermint/spn/x/participation/types" -) - -// GetQueryCmd returns the cli query commands for this module -func GetQueryCmd(queryRoute string) *cobra.Command { - // Group participation queries under a subcommand - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdShowUsedAllocations(), - CmdListUsedAllocations(), - CmdShowAuctionUsedAllocations(), - CmdListAuctionUsedAllocations(), - CmdShowTotalAllocations(), - CmdShowAvailableAllocations(), - CmdQueryParams(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/participation/client/cli/query_auction_used_allocations.go b/x/participation/client/cli/query_auction_used_allocations.go deleted file mode 100644 index 129b28ea..00000000 --- a/x/participation/client/cli/query_auction_used_allocations.go +++ /dev/null @@ -1,84 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/participation/types" -) - -func CmdListAuctionUsedAllocations() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-auction-used-allocations [address]", - Short: "List all used allocations for auctions for an address", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - argAddress := args[0] - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllAuctionUsedAllocationsRequest{ - Address: argAddress, - Pagination: pageReq, - } - - res, err := queryClient.AuctionUsedAllocationsAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowAuctionUsedAllocations() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-auction-used-allocations [address] [auction-id]", - Short: "Shows used allocations for an auction ", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argAddress := args[0] - argAuctionID, err := strconv.ParseUint(args[1], 10, 64) - if err != nil { - return err - } - - params := &types.QueryGetAuctionUsedAllocationsRequest{ - Address: argAddress, - AuctionID: argAuctionID, - } - - res, err := queryClient.AuctionUsedAllocations(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/participation/client/cli/query_auction_used_allocations_test.go b/x/participation/client/cli/query_auction_used_allocations_test.go deleted file mode 100644 index f38cc748..00000000 --- a/x/participation/client/cli/query_auction_used_allocations_test.go +++ /dev/null @@ -1,142 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/participation/client/cli" - "github.com/tendermint/spn/x/participation/types" -) - -func (suite *QueryTestSuite) TestShowAuctionUsedAllocations() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ParticipationState.AuctionUsedAllocationsList - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - name string - idAddress string - idAuctionID uint64 - args []string - err error - obj types.AuctionUsedAllocations - }{ - { - name: "should find", - idAddress: objs[0].Address, - idAuctionID: objs[0].AuctionID, - args: common, - obj: objs[0], - }, - { - name: "should return not found", - idAddress: strconv.Itoa(100000), - idAuctionID: 100000, - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.name, func(t *testing.T) { - args := []string{ - tc.idAddress, - strconv.FormatUint(tc.idAuctionID, 10), - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowAuctionUsedAllocations(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetAuctionUsedAllocationsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.AuctionUsedAllocations) - require.Equal(t, - nullify.Fill(&tc.obj), - nullify.Fill(&resp.AuctionUsedAllocations), - ) - } - }) - } -} - -func (suite *QueryTestSuite) TestListAuctionUsedAllocations() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ParticipationState.AuctionUsedAllocationsList - - address := objs[0].Address - - request := func(addr string, next []byte, offset, limit uint64, total bool) []string { - args := []string{ - addr, - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should paginate by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(objs); i += step { - args := request(address, nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListAuctionUsedAllocations(), args) - require.NoError(t, err) - var resp types.QueryAllAuctionUsedAllocationsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.AuctionUsedAllocations), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.AuctionUsedAllocations), - ) - } - }) - suite.T().Run("should paginate by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(objs); i += step { - args := request(address, next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListAuctionUsedAllocations(), args) - require.NoError(t, err) - var resp types.QueryAllAuctionUsedAllocationsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.AuctionUsedAllocations), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.AuctionUsedAllocations), - ) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should paginate all", func(t *testing.T) { - args := request(address, nil, 0, uint64(len(objs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListAuctionUsedAllocations(), args) - require.NoError(t, err) - var resp types.QueryAllAuctionUsedAllocationsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(objs), int(resp.Pagination.Total)) - require.ElementsMatch(t, - nullify.Fill(objs), - nullify.Fill(resp.AuctionUsedAllocations), - ) - }) -} diff --git a/x/participation/client/cli/query_available_allocations.go b/x/participation/client/cli/query_available_allocations.go deleted file mode 100644 index 0149b668..00000000 --- a/x/participation/client/cli/query_available_allocations.go +++ /dev/null @@ -1,42 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/participation/types" -) - -func CmdShowAvailableAllocations() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-available-allocations [address]", - Short: "Show the available, unused allocations for an account", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - reqAddress := args[0] - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryGetAvailableAllocationsRequest{ - Address: reqAddress, - } - - res, err := queryClient.AvailableAllocations(cmd.Context(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/participation/client/cli/query_params.go b/x/participation/client/cli/query_params.go deleted file mode 100644 index 69f76cf6..00000000 --- a/x/participation/client/cli/query_params.go +++ /dev/null @@ -1,35 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/participation/types" -) - -func CmdQueryParams() *cobra.Command { - cmd := &cobra.Command{ - Use: "params", - Short: "Shows the parameters of the module", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/participation/client/cli/query_test.go b/x/participation/client/cli/query_test.go deleted file mode 100644 index d7b54620..00000000 --- a/x/participation/client/cli/query_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package cli_test - -import ( - "testing" - - "github.com/stretchr/testify/suite" - - "github.com/tendermint/spn/testutil/networksuite" -) - -// QueryTestSuite is a test suite for query tests -type QueryTestSuite struct { - networksuite.NetworkTestSuite -} - -// TestQueryTestSuite runs test of the query suite -func TestQueryTestSuite(t *testing.T) { - suite.Run(t, new(QueryTestSuite)) -} diff --git a/x/participation/client/cli/query_total_allocations.go b/x/participation/client/cli/query_total_allocations.go deleted file mode 100644 index 898ca36a..00000000 --- a/x/participation/client/cli/query_total_allocations.go +++ /dev/null @@ -1,42 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/participation/types" -) - -func CmdShowTotalAllocations() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-total-allocations [address]", - Short: "Show the total allocations available for an account", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - reqAddress := args[0] - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryGetTotalAllocationsRequest{ - Address: reqAddress, - } - - res, err := queryClient.TotalAllocations(cmd.Context(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/participation/client/cli/query_used_allocations.go b/x/participation/client/cli/query_used_allocations.go deleted file mode 100644 index 7bf2bd7d..00000000 --- a/x/participation/client/cli/query_used_allocations.go +++ /dev/null @@ -1,74 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/participation/types" -) - -func CmdListUsedAllocations() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-used-allocations", - Short: "List all used allocations", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllUsedAllocationsRequest{ - Pagination: pageReq, - } - - res, err := queryClient.UsedAllocationsAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowUsedAllocations() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-used-allocations [address]", - Short: "Shows total used allocations for an address", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argAddress := args[0] - - params := &types.QueryGetUsedAllocationsRequest{ - Address: argAddress, - } - - res, err := queryClient.UsedAllocations(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/participation/client/cli/query_used_allocations_test.go b/x/participation/client/cli/query_used_allocations_test.go deleted file mode 100644 index 49197ed1..00000000 --- a/x/participation/client/cli/query_used_allocations_test.go +++ /dev/null @@ -1,135 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/participation/client/cli" - "github.com/tendermint/spn/x/participation/types" -) - -func (suite *QueryTestSuite) TestShowUsedAllocations() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ParticipationState.UsedAllocationsList - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idAddress string - args []string - err error - obj types.UsedAllocations - }{ - { - desc: "should find", - idAddress: objs[0].Address, - args: common, - obj: objs[0], - }, - { - desc: "should return not found", - idAddress: strconv.Itoa(100000), - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - tc.idAddress, - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowUsedAllocations(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetUsedAllocationsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.UsedAllocations) - require.Equal(t, - nullify.Fill(&tc.obj), - nullify.Fill(&resp.UsedAllocations), - ) - } - }) - } -} - -func (suite *QueryTestSuite) TestListUsedAllocations() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ParticipationState.UsedAllocationsList - - request := func(next []byte, offset, limit uint64, total bool) []string { - args := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should paginate by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(objs); i += step { - args := request(nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListUsedAllocations(), args) - require.NoError(t, err) - var resp types.QueryAllUsedAllocationsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.UsedAllocations), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.UsedAllocations), - ) - } - }) - suite.T().Run("should paginate by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(objs); i += step { - args := request(next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListUsedAllocations(), args) - require.NoError(t, err) - var resp types.QueryAllUsedAllocationsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.UsedAllocations), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.UsedAllocations), - ) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should paginate all", func(t *testing.T) { - args := request(nil, 0, uint64(len(objs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListUsedAllocations(), args) - require.NoError(t, err) - var resp types.QueryAllUsedAllocationsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(objs), int(resp.Pagination.Total)) - require.ElementsMatch(t, - nullify.Fill(objs), - nullify.Fill(resp.UsedAllocations), - ) - }) -} diff --git a/x/participation/client/cli/tx.go b/x/participation/client/cli/tx.go deleted file mode 100644 index a03135f2..00000000 --- a/x/participation/client/cli/tx.go +++ /dev/null @@ -1,30 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/participation/types" -) - -// GetTxCmd returns the transaction commands for this module -func GetTxCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdParticipate(), - CmdWithdrawAllocations(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/participation/client/cli/tx_participate.go b/x/participation/client/cli/tx_participate.go deleted file mode 100644 index 0e417785..00000000 --- a/x/participation/client/cli/tx_participate.go +++ /dev/null @@ -1,48 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/participation/types" -) - -func CmdParticipate() *cobra.Command { - cmd := &cobra.Command{ - Use: "participate [auction-id] [tier-id]", - Short: "Add as a participant for the auction with a specified tier benefit", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - argAuctionID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - argTierID, err := cast.ToUint64E(args[1]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgParticipate( - clientCtx.GetFromAddress().String(), - argAuctionID, - argTierID, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/participation/client/cli/tx_withdraw_allocations.go b/x/participation/client/cli/tx_withdraw_allocations.go deleted file mode 100644 index d74391ac..00000000 --- a/x/participation/client/cli/tx_withdraw_allocations.go +++ /dev/null @@ -1,43 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/participation/types" -) - -func CmdWithdrawAllocations() *cobra.Command { - cmd := &cobra.Command{ - Use: "withdraw-allocations [auction-id]", - Short: "Claim back used allocations for an auction participation", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - argAuctionID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgWithdrawAllocations( - clientCtx.GetFromAddress().String(), - argAuctionID, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/participation/genesis.go b/x/participation/genesis.go deleted file mode 100644 index 4d9dd4ff..00000000 --- a/x/participation/genesis.go +++ /dev/null @@ -1,35 +0,0 @@ -package participation - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/participation/keeper" - "github.com/tendermint/spn/x/participation/types" -) - -// InitGenesis initializes the participation module's state from a provided genesis -// state. -func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { - // Set all the usedAllocations - for _, elem := range genState.UsedAllocationsList { - k.SetUsedAllocations(ctx, elem) - } - // Set all the auctionUsedAllocations - for _, elem := range genState.AuctionUsedAllocationsList { - k.SetAuctionUsedAllocations(ctx, elem) - } - // this line is used by starport scaffolding # genesis/module/init - k.SetParams(ctx, genState.Params) -} - -// ExportGenesis returns the participation module's exported genesis. -func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - genesis := types.DefaultGenesis() - genesis.Params = k.GetParams(ctx) - - genesis.UsedAllocationsList = k.GetAllUsedAllocations(ctx) - genesis.AuctionUsedAllocationsList = k.GetAllAuctionUsedAllocations(ctx) - // this line is used by starport scaffolding # genesis/module/export - - return genesis -} diff --git a/x/participation/genesis_test.go b/x/participation/genesis_test.go deleted file mode 100644 index 6d5a8356..00000000 --- a/x/participation/genesis_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package participation_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation" -) - -func TestGenesis(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - r := sample.Rand() - - t.Run("should allow import and export of genesis", func(t *testing.T) { - genesisState := sample.ParticipationGenesisStateWithAllocations(r) - participation.InitGenesis(ctx, *tk.ParticipationKeeper, genesisState) - got := participation.ExportGenesis(ctx, *tk.ParticipationKeeper) - - require.Equal(t, genesisState.Params, got.Params) - - require.ElementsMatch(t, genesisState.UsedAllocationsList, got.UsedAllocationsList) - require.ElementsMatch(t, genesisState.AuctionUsedAllocationsList, got.AuctionUsedAllocationsList) - // this line is used by starport scaffolding # genesis/test/assert - }) -} diff --git a/x/participation/keeper/auction_used_allocations.go b/x/participation/keeper/auction_used_allocations.go deleted file mode 100644 index 0e7a1edf..00000000 --- a/x/participation/keeper/auction_used_allocations.go +++ /dev/null @@ -1,62 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/participation/types" -) - -// SetAuctionUsedAllocations set a specific auctionUsedAllocations in the store from its index -func (k Keeper) SetAuctionUsedAllocations(ctx sdk.Context, auctionUsedAllocations types.AuctionUsedAllocations) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.AuctionUsedAllocationsKeyPrefix)) - b := k.cdc.MustMarshal(&auctionUsedAllocations) - store.Set(types.AuctionUsedAllocationsKey(auctionUsedAllocations.Address, auctionUsedAllocations.AuctionID), b) -} - -// GetAuctionUsedAllocations returns a auctionUsedAllocations from its index -func (k Keeper) GetAuctionUsedAllocations(ctx sdk.Context, address string, auctionID uint64) (val types.AuctionUsedAllocations, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.AuctionUsedAllocationsKeyPrefix)) - - b := store.Get(types.AuctionUsedAllocationsKey(address, auctionID)) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -func (k Keeper) GetAllAuctionUsedAllocationsByAddress(ctx sdk.Context, address string) (list []types.AuctionUsedAllocations) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.AuctionUsedAllocationsKeyPrefix)) - - // use address as prefix to iterate only on address-related entries - // address is always the first part of the actual key (see types.AuctionUsedAllocationsKey) - iterator := sdk.KVStorePrefixIterator(store, []byte(address)) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.AuctionUsedAllocations - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} - -// GetAllAuctionUsedAllocations returns all auctionUsedAllocations -func (k Keeper) GetAllAuctionUsedAllocations(ctx sdk.Context) (list []types.AuctionUsedAllocations) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.AuctionUsedAllocationsKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.AuctionUsedAllocations - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/participation/keeper/auction_used_allocations_test.go b/x/participation/keeper/auction_used_allocations_test.go deleted file mode 100644 index a43149e5..00000000 --- a/x/participation/keeper/auction_used_allocations_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/keeper" - "github.com/tendermint/spn/x/participation/types" -) - -func createNAuctionUsedAllocations(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.AuctionUsedAllocations { - items := make([]types.AuctionUsedAllocations, n) - for i := range items { - items[i].Address = strconv.Itoa(i) - items[i].AuctionID = uint64(i) - items[i].NumAllocations = sample.Int(r) - keeper.SetAuctionUsedAllocations(ctx, items[i]) - } - return items -} - -func createNAuctionUsedAllocationsWithSameAddress(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.AuctionUsedAllocations { - items := make([]types.AuctionUsedAllocations, n) - address := sample.Address(r) - for i := range items { - items[i].Address = address - items[i].AuctionID = uint64(i) - items[i].NumAllocations = sample.Int(r) - - keeper.SetAuctionUsedAllocations(ctx, items[i]) - } - return items -} - -func TestAuctionUsedAllocationsGet(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get", func(t *testing.T) { - items := createNAuctionUsedAllocations(tk.ParticipationKeeper, sdkCtx, 10) - for _, item := range items { - rst, found := tk.ParticipationKeeper.GetAuctionUsedAllocations(sdkCtx, item.Address, item.AuctionID) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } - }) -} - -func TestAuctionUsedAllocationsGetAllByAddress(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get all by address", func(t *testing.T) { - items := createNAuctionUsedAllocationsWithSameAddress(tk.ParticipationKeeper, sdkCtx, 10) - address := items[0].Address - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.ParticipationKeeper.GetAllAuctionUsedAllocationsByAddress(sdkCtx, address)), - ) - }) -} - -func TestAuctionUsedAllocationsGetAll(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get all", func(t *testing.T) { - items := createNAuctionUsedAllocations(tk.ParticipationKeeper, sdkCtx, 10) - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.ParticipationKeeper.GetAllAuctionUsedAllocations(sdkCtx)), - ) - }) -} diff --git a/x/participation/keeper/available_allocations.go b/x/participation/keeper/available_allocations.go index 11972265..6a1887fc 100644 --- a/x/participation/keeper/available_allocations.go +++ b/x/participation/keeper/available_allocations.go @@ -1,20 +1,25 @@ package keeper import ( + "context" + + "cosmossdk.io/collections" sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pkg/errors" ) // GetAvailableAllocations returns the number of allocations that are unused -func (k Keeper) GetAvailableAllocations(ctx sdk.Context, address string) (sdkmath.Int, error) { +func (k Keeper) GetAvailableAllocations(ctx context.Context, address string) (sdkmath.Int, error) { numTotalAlloc, err := k.GetTotalAllocations(ctx, address) if err != nil { return sdkmath.ZeroInt(), err } - usedAlloc, found := k.GetUsedAllocations(ctx, address) - if !found { + usedAlloc, err := k.UsedAllocations.Get(ctx, address) + if errors.Is(err, collections.ErrNotFound) { return numTotalAlloc, nil + } else if err != nil { + return sdkmath.ZeroInt(), err } // return 0 if result would be negative diff --git a/x/participation/keeper/available_allocations_test.go b/x/participation/keeper/available_allocations_test.go deleted file mode 100644 index 31c37c3b..00000000 --- a/x/participation/keeper/available_allocations_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdkmath "cosmossdk.io/math" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" -) - -func TestAvailableAllocationsGet(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - - invalidAddress := strconv.Itoa(1) - allocationPrice := types.AllocationPrice{Bonded: sdkmath.NewInt(100)} - - params := types.DefaultParams() - params.AllocationPrice = allocationPrice - tk.ParticipationKeeper.SetParams(sdkCtx, params) - - validAddress := sample.Address(r) - validAddressNoUse := sample.Address(r) - addressNegativeDelegations := sample.Address(r) - validAddressExtraUsed := sample.Address(r) - - tk.DelegateN(sdkCtx, r, validAddress, 100, 10) - tk.DelegateN(sdkCtx, r, validAddressNoUse, 100, 10) - tk.DelegateN(sdkCtx, r, addressNegativeDelegations, -100, 10) - tk.DelegateN(sdkCtx, r, validAddressExtraUsed, 100, 10) - - tk.ParticipationKeeper.SetUsedAllocations(sdkCtx, types.UsedAllocations{ - Address: validAddress, - NumAllocations: sdkmath.NewInt(2), - }) - - // set used allocations to be greater than totalAllocations - tk.ParticipationKeeper.SetUsedAllocations(sdkCtx, types.UsedAllocations{ - Address: validAddressExtraUsed, - NumAllocations: sdkmath.NewInt(11), - }) - - for _, tc := range []struct { - name string - address string - allocation sdkmath.Int - wantError bool - }{ - { - name: "should allow with valid address with used allocations", - address: validAddress, - allocation: sdkmath.NewInt(8), // (100 * 10 / 100) - 2 = 8 - }, - { - name: "should allow with valid address with no used allocations", - address: validAddressNoUse, - allocation: sdkmath.NewInt(10), // (100 * 10 / 100) - 0 = 10 - }, - { - name: "should return 0 when usedAllocations > totalAllocations", - address: validAddressExtraUsed, - allocation: sdkmath.ZeroInt(), // 11 > 10 - > return 0 - }, - { - name: "should prevent with invalid address", - address: invalidAddress, - wantError: true, - }, - { - name: "should prevent with negative delegations", - address: addressNegativeDelegations, - wantError: true, - }, - } { - t.Run(tc.name, func(t *testing.T) { - alloc, err := tk.ParticipationKeeper.GetAvailableAllocations(sdkCtx, tc.address) - if tc.wantError { - require.Error(t, err) - return - } else { - require.NoError(t, err) - require.Equal(t, tc.allocation, alloc) - } - }) - } -} diff --git a/x/participation/keeper/grpc.go b/x/participation/keeper/grpc.go deleted file mode 100644 index fe41c55e..00000000 --- a/x/participation/keeper/grpc.go +++ /dev/null @@ -1,7 +0,0 @@ -package keeper - -import ( - "github.com/tendermint/spn/x/participation/types" -) - -var _ types.QueryServer = Keeper{} diff --git a/x/participation/keeper/grpc_auction_used_allocations.go b/x/participation/keeper/grpc_auction_used_allocations.go deleted file mode 100644 index 785a76c8..00000000 --- a/x/participation/keeper/grpc_auction_used_allocations.go +++ /dev/null @@ -1,59 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/participation/types" -) - -func (k Keeper) AuctionUsedAllocationsAll(c context.Context, req *types.QueryAllAuctionUsedAllocationsRequest) (*types.QueryAllAuctionUsedAllocationsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var auctionUsedAllocationss []types.AuctionUsedAllocations - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - auctionUsedAllocationsStore := prefix.NewStore(store, types.KeyPrefix(types.AuctionUsedAllocationsKeyPrefix)) - addressAuctionUsedAllocationsStore := prefix.NewStore(auctionUsedAllocationsStore, types.KeyPrefix(req.Address)) - - pageRes, err := query.Paginate(addressAuctionUsedAllocationsStore, req.Pagination, func(key []byte, value []byte) error { - var auctionUsedAllocations types.AuctionUsedAllocations - if err := k.cdc.Unmarshal(value, &auctionUsedAllocations); err != nil { - return err - } - - auctionUsedAllocationss = append(auctionUsedAllocationss, auctionUsedAllocations) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllAuctionUsedAllocationsResponse{AuctionUsedAllocations: auctionUsedAllocationss, Pagination: pageRes}, nil -} - -func (k Keeper) AuctionUsedAllocations(c context.Context, req *types.QueryGetAuctionUsedAllocationsRequest) (*types.QueryGetAuctionUsedAllocationsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetAuctionUsedAllocations( - ctx, - req.Address, - req.AuctionID, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetAuctionUsedAllocationsResponse{AuctionUsedAllocations: val}, nil -} diff --git a/x/participation/keeper/grpc_available_allocations.go b/x/participation/keeper/grpc_available_allocations.go deleted file mode 100644 index f916aa88..00000000 --- a/x/participation/keeper/grpc_available_allocations.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/participation/types" -) - -func (k Keeper) AvailableAllocations(goCtx context.Context, - req *types.QueryGetAvailableAllocationsRequest, -) (*types.QueryGetAvailableAllocationsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - ctx := sdk.UnwrapSDKContext(goCtx) - - availableAlloc, err := k.GetAvailableAllocations(ctx, req.Address) - if err != nil { - return nil, status.Error(codes.InvalidArgument, err.Error()) - } - - return &types.QueryGetAvailableAllocationsResponse{AvailableAllocations: availableAlloc}, nil -} diff --git a/x/participation/keeper/grpc_available_allocations_test.go b/x/participation/keeper/grpc_available_allocations_test.go deleted file mode 100644 index 86189791..00000000 --- a/x/participation/keeper/grpc_available_allocations_test.go +++ /dev/null @@ -1,70 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" -) - -func TestShowAvailableAllocationsQuery(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(sdkCtx) - - allocationPrice := types.AllocationPrice{Bonded: sdkmath.NewInt(100)} - params := types.DefaultParams() - params.AllocationPrice = allocationPrice - tk.ParticipationKeeper.SetParams(sdkCtx, params) - - addr := sample.Address(r) - dels, _ := tk.DelegateN(sdkCtx, r, addr, 100, 10) - - for _, tc := range []struct { - name string - request *types.QueryGetAvailableAllocationsRequest - response *types.QueryGetAvailableAllocationsResponse - err error - }{ - { - name: "should allow valid case", - request: &types.QueryGetAvailableAllocationsRequest{ - Address: dels[0].DelegatorAddress, - }, - response: &types.QueryGetAvailableAllocationsResponse{AvailableAllocations: sdkmath.NewInt(10)}, - }, - - { - name: "should prevent invalid address", - request: &types.QueryGetAvailableAllocationsRequest{ - Address: strconv.Itoa(100000), - }, - err: status.Error(codes.InvalidArgument, "decoding bech32 failed: invalid bech32 string length 6: invalid participant address"), - }, - { - name: "should return invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.ParticipationKeeper.AvailableAllocations(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, - nullify.Fill(tc.response), - nullify.Fill(response), - ) - } - }) - } -} diff --git a/x/participation/keeper/grpc_params.go b/x/participation/keeper/grpc_params.go deleted file mode 100644 index a1c3198b..00000000 --- a/x/participation/keeper/grpc_params.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/participation/types" -) - -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil -} diff --git a/x/participation/keeper/grpc_params_test.go b/x/participation/keeper/grpc_params_test.go deleted file mode 100644 index b11c0da7..00000000 --- a/x/participation/keeper/grpc_params_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/tendermint/spn/testutil/sample" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/participation/types" -) - -func TestParamsQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - - t.Run("should allow params get", func(t *testing.T) { - params := sample.ParticipationParams(r) - tk.ParticipationKeeper.SetParams(ctx, params) - - response, err := tk.ParticipationKeeper.Params(wctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.Equal(t, &types.QueryParamsResponse{Params: params}, response) - - _, err = tk.ParticipationKeeper.Params(wctx, nil) - require.Error(t, err) - }) -} diff --git a/x/participation/keeper/grpc_total_allocations.go b/x/participation/keeper/grpc_total_allocations.go deleted file mode 100644 index d51a74e8..00000000 --- a/x/participation/keeper/grpc_total_allocations.go +++ /dev/null @@ -1,26 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/participation/types" -) - -func (k Keeper) TotalAllocations(goCtx context.Context, req *types.QueryGetTotalAllocationsRequest) (*types.QueryGetTotalAllocationsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - ctx := sdk.UnwrapSDKContext(goCtx) - - numAlloc, err := k.GetTotalAllocations(ctx, req.Address) - if err != nil { - return nil, status.Error(codes.InvalidArgument, err.Error()) - } - - return &types.QueryGetTotalAllocationsResponse{TotalAllocations: numAlloc}, nil -} diff --git a/x/participation/keeper/grpc_total_allocations_test.go b/x/participation/keeper/grpc_total_allocations_test.go deleted file mode 100644 index 1d6cbf21..00000000 --- a/x/participation/keeper/grpc_total_allocations_test.go +++ /dev/null @@ -1,70 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" -) - -func TestShowTotalAllocationsQuery(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(sdkCtx) - - params := types.DefaultParams() - params.AllocationPrice = types.AllocationPrice{Bonded: sdkmath.NewInt(100)} - - tk.ParticipationKeeper.SetParams(sdkCtx, params) - - addr := sample.Address(r) - dels, _ := tk.DelegateN(sdkCtx, r, addr, 100, 10) - - for _, tc := range []struct { - name string - request *types.QueryGetTotalAllocationsRequest - response *types.QueryGetTotalAllocationsResponse - err error - }{ - { - name: "should allow valid case", - request: &types.QueryGetTotalAllocationsRequest{ - Address: dels[0].DelegatorAddress, - }, - response: &types.QueryGetTotalAllocationsResponse{TotalAllocations: sdkmath.NewInt(10)}, - }, - - { - name: "should prevent invalid address", - request: &types.QueryGetTotalAllocationsRequest{ - Address: strconv.Itoa(100000), - }, - err: status.Error(codes.InvalidArgument, "decoding bech32 failed: invalid bech32 string length 6: invalid participant address"), - }, - { - name: "should return invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.ParticipationKeeper.TotalAllocations(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, - nullify.Fill(tc.response), - nullify.Fill(response), - ) - } - }) - } -} diff --git a/x/participation/keeper/grpc_used_allocations.go b/x/participation/keeper/grpc_used_allocations.go deleted file mode 100644 index 330c38c4..00000000 --- a/x/participation/keeper/grpc_used_allocations.go +++ /dev/null @@ -1,67 +0,0 @@ -package keeper - -import ( - "context" - - sdkmath "cosmossdk.io/math" - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/participation/types" -) - -func (k Keeper) UsedAllocationsAll(c context.Context, req *types.QueryAllUsedAllocationsRequest) (*types.QueryAllUsedAllocationsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var usedAllocationss []types.UsedAllocations - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - usedAllocationsStore := prefix.NewStore(store, types.KeyPrefix(types.UsedAllocationsKeyPrefix)) - - pageRes, err := query.Paginate(usedAllocationsStore, req.Pagination, func(key []byte, value []byte) error { - var usedAllocations types.UsedAllocations - if err := k.cdc.Unmarshal(value, &usedAllocations); err != nil { - return err - } - - usedAllocationss = append(usedAllocationss, usedAllocations) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllUsedAllocationsResponse{UsedAllocations: usedAllocationss, Pagination: pageRes}, nil -} - -func (k Keeper) UsedAllocations(c context.Context, req *types.QueryGetUsedAllocationsRequest) (*types.QueryGetUsedAllocationsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - if _, err := sdk.AccAddressFromBech32(req.Address); err != nil { - return nil, status.Error(codes.InvalidArgument, err.Error()) - } - - val, found := k.GetUsedAllocations( - ctx, - req.Address, - ) - if !found { - return &types.QueryGetUsedAllocationsResponse{ - UsedAllocations: types.UsedAllocations{ - Address: req.Address, - NumAllocations: sdkmath.ZeroInt(), - }, - }, nil - } - - return &types.QueryGetUsedAllocationsResponse{UsedAllocations: val}, nil -} diff --git a/x/participation/keeper/invariants.go b/x/participation/keeper/invariants.go index 4756f602..1219dc12 100644 --- a/x/participation/keeper/invariants.go +++ b/x/participation/keeper/invariants.go @@ -4,7 +4,7 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/participation/types" + "github.com/ignite/network/x/participation/types" ) const ( @@ -28,9 +28,15 @@ func AllInvariants(k Keeper) sdk.Invariant { // is different from the sum of per-auction used allocations in `AuctionUsedAllocations` func MismatchUsedAllocationsInvariant(k Keeper) sdk.Invariant { return func(ctx sdk.Context) (string, bool) { - all := k.GetAllUsedAllocations(ctx) + all, err := k.AllUsedAllocations(ctx) + if err != nil { + return "", false + } for _, usedAllocs := range all { - auctionUsedAllocs := k.GetAllAuctionUsedAllocationsByAddress(ctx, usedAllocs.Address) + auctionUsedAllocs, err := k.AllAuctionUsedAllocations(ctx, usedAllocs.Address) + if err != nil { + return "", false + } sum := sdkmath.ZeroInt() for _, auction := range auctionUsedAllocs { if !auction.Withdrawn { diff --git a/x/participation/keeper/invariants_test.go b/x/participation/keeper/invariants_test.go index a9143420..35156c91 100644 --- a/x/participation/keeper/invariants_test.go +++ b/x/participation/keeper/invariants_test.go @@ -3,13 +3,15 @@ package keeper_test import ( "testing" + "cosmossdk.io/collections" sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/keeper" - "github.com/tendermint/spn/x/participation/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" ) func TestMismatchUsedAllocationsInvariant(t *testing.T) { @@ -45,22 +47,29 @@ func TestMismatchUsedAllocationsInvariant(t *testing.T) { NumAllocations: sdkmath.NewInt(2), } ) + accAddr, err := sdk.AccAddressFromBech32(addr) + require.NoError(t, err) t.Run("should allow valid case", func(t *testing.T) { - tk.ParticipationKeeper.SetUsedAllocations(ctx, validUsedAllocs) + err := tk.ParticipationKeeper.UsedAllocations.Set(ctx, accAddr.String(), validUsedAllocs) + require.NoError(t, err) for _, auction := range auctionUsedAllocs { - tk.ParticipationKeeper.SetAuctionUsedAllocations(ctx, auction) + err = tk.ParticipationKeeper.AuctionUsedAllocations.Set(ctx, collections.Join(accAddr, auction.AuctionID), auction) + require.NoError(t, err) } - _, isValid := keeper.MismatchUsedAllocationsInvariant(*tk.ParticipationKeeper)(ctx) + _, isValid := keeper.MismatchUsedAllocationsInvariant(tk.ParticipationKeeper)(ctx) require.False(t, isValid) }) t.Run("should prevent invalid case", func(t *testing.T) { - tk.ParticipationKeeper.SetUsedAllocations(ctx, invalidUsedAllocs) + err := tk.ParticipationKeeper.UsedAllocations.Set(ctx, accAddr.String(), invalidUsedAllocs) + require.NoError(t, err) for _, auction := range auctionUsedAllocs { - tk.ParticipationKeeper.SetAuctionUsedAllocations(ctx, auction) + err = tk.ParticipationKeeper.AuctionUsedAllocations.Set(ctx, collections.Join(accAddr, auction.AuctionID), auction) + require.NoError(t, err) + require.NoError(t, err) } - _, isValid := keeper.MismatchUsedAllocationsInvariant(*tk.ParticipationKeeper)(ctx) + _, isValid := keeper.MismatchUsedAllocationsInvariant(tk.ParticipationKeeper)(ctx) require.True(t, isValid) }) } diff --git a/x/participation/keeper/keeper.go b/x/participation/keeper/keeper.go index 52a94a9f..2844cfd1 100644 --- a/x/participation/keeper/keeper.go +++ b/x/participation/keeper/keeper.go @@ -3,49 +3,87 @@ package keeper import ( "fmt" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + "cosmossdk.io/core/store" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/tendermint/spn/x/participation/types" + "github.com/ignite/network/x/participation/types" ) type ( Keeper struct { - cdc codec.BinaryCodec - storeKey storetypes.StoreKey - memKey storetypes.StoreKey - paramstore paramtypes.Subspace - fundraisingKeeper types.FundraisingKeeper + cdc codec.BinaryCodec + addressCodec address.Codec + storeService store.KVStoreService + logger log.Logger + + // the address capable of executing a MsgUpdateParams message. + // Typically, this should be the x/gov module account. + authority string + + Schema collections.Schema + Params collections.Item[types.Params] + AuctionUsedAllocations collections.Map[collections.Pair[sdk.AccAddress, uint64], types.AuctionUsedAllocations] + UsedAllocations collections.Map[string, types.UsedAllocations] + // this line is used by starport scaffolding # collection/type + stakingKeeper types.StakingKeeper + fundraisingKeeper types.FundraisingKeeper } ) func NewKeeper( cdc codec.BinaryCodec, - storeKey, - memKey storetypes.StoreKey, - ps paramtypes.Subspace, - fundraisingKeeper types.FundraisingKeeper, + addressCodec address.Codec, + storeService store.KVStoreService, + logger log.Logger, + authority string, stakingKeeper types.StakingKeeper, -) *Keeper { - // set KeyTable if it has not already been set - if !ps.HasKeyTable() { - ps = ps.WithKeyTable(types.ParamKeyTable()) + fundraisingKeeper types.FundraisingKeeper, +) Keeper { + if _, err := addressCodec.StringToBytes(authority); err != nil { + panic(fmt.Sprintf("invalid authority address %s: %s", authority, err)) } - return &Keeper{ - cdc: cdc, - storeKey: storeKey, - memKey: memKey, - paramstore: ps, - fundraisingKeeper: fundraisingKeeper, - stakingKeeper: stakingKeeper, + sb := collections.NewSchemaBuilder(storeService) + + k := Keeper{ + cdc: cdc, + addressCodec: addressCodec, + storeService: storeService, + authority: authority, + logger: logger, + stakingKeeper: stakingKeeper, + fundraisingKeeper: fundraisingKeeper, + Params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + AuctionUsedAllocations: collections.NewMap(sb, types.AuctionUsedAllocationsKey, "auctionUsedAllocations", collections.PairKeyCodec(sdk.LengthPrefixedAddressKey(sdk.AccAddressKey), collections.Uint64Key), codec.CollValue[types.AuctionUsedAllocations](cdc)), + UsedAllocations: collections.NewMap(sb, types.UsedAllocationsKey, "usedAllocations", collections.StringKey, codec.CollValue[types.UsedAllocations](cdc)), + // this line is used by starport scaffolding # collection/instantiate } + + schema, err := sb.Build() + if err != nil { + panic(err) + } + k.Schema = schema + + return k +} + +// GetAuthority returns the module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger() log.Logger { + return k.logger.With("module", fmt.Sprintf("x/%s", types.ModuleName)) } -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +// AddressCodec returns the address codec. +func (k Keeper) AddressCodec() address.Codec { + return k.addressCodec } diff --git a/x/participation/keeper/msg.go b/x/participation/keeper/msg_server.go similarity index 85% rename from x/participation/keeper/msg.go rename to x/participation/keeper/msg_server.go index e2412520..a626a34a 100644 --- a/x/participation/keeper/msg.go +++ b/x/participation/keeper/msg_server.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/tendermint/spn/x/participation/types" + "github.com/ignite/network/x/participation/types" ) type msgServer struct { diff --git a/x/participation/keeper/msg_participate.go b/x/participation/keeper/msg_server_participate.go similarity index 50% rename from x/participation/keeper/msg_participate.go rename to x/participation/keeper/msg_server_participate.go index 220247d6..272713bd 100644 --- a/x/participation/keeper/msg_participate.go +++ b/x/participation/keeper/msg_server_participate.go @@ -3,16 +3,27 @@ package keeper import ( "context" + "cosmossdk.io/collections" sdkerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" + "github.com/pkg/errors" - "github.com/tendermint/spn/x/participation/types" + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/participation/types" ) -func (k msgServer) Participate(goCtx context.Context, msg *types.MsgParticipate) (*types.MsgParticipateResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) Participate(ctx context.Context, msg *types.MsgParticipate) (*types.MsgParticipateResponse, error) { + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get launch params") + } + + participantAddress, err := k.addressCodec.StringToBytes(msg.Participant) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid participant address") + } availableAlloc, err := k.GetAvailableAllocations(ctx, msg.Participant) if err != nil { @@ -20,9 +31,9 @@ func (k msgServer) Participate(goCtx context.Context, msg *types.MsgParticipate) } // check if auction exists - auction, found := k.fundraisingKeeper.GetAuction(ctx, msg.AuctionID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrAuctionNotFound, "auction %d not found", msg.AuctionID) + auction, err := k.fundraisingKeeper.GetAuction(ctx, msg.AuctionID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.AuctionID) } // check if auction is not in standby @@ -31,20 +42,23 @@ func (k msgServer) Participate(goCtx context.Context, msg *types.MsgParticipate) } // check if auction allows participation at this time - if !k.IsRegistrationEnabled(ctx, auction.GetStartTime()) { + isRegistrationEnabled, err := k.IsRegistrationEnabled(ctx, auction.GetStartTime()) + if err != nil { + return nil, ignterrors.Criticalf("failed to get project params %s", err.Error()) + } + if !isRegistrationEnabled { return nil, sdkerrors.Wrapf(types.ErrParticipationNotAllowed, "participation period for auction %d not yet started", msg.AuctionID) } // check if the user is already added as an allowed bidder for the auction - _, found = k.GetAuctionUsedAllocations(ctx, msg.Participant, msg.AuctionID) - if found { + _, err = k.AuctionUsedAllocations.Get(ctx, collections.Join(sdk.AccAddress(participantAddress), msg.AuctionID)) + if err != nil { return nil, sdkerrors.Wrapf(types.ErrAlreadyParticipating, "address %s is already a participant for auction %d", msg.Participant, msg.AuctionID) } - tiers := k.ParticipationTierList(ctx) - tier, found := types.GetTierFromID(tiers, msg.TierID) + tier, found := types.GetTierFromID(params.ParticipationTierList, msg.TierID) if !found { return nil, sdkerrors.Wrapf(types.ErrTierNotFound, "tier %d not found", msg.TierID) } @@ -52,8 +66,8 @@ func (k msgServer) Participate(goCtx context.Context, msg *types.MsgParticipate) // check if user has enough available allocations to cover tier if tier.RequiredAllocations.GT(availableAlloc) { return nil, sdkerrors.Wrapf(types.ErrInsufficientAllocations, - "available allocations %d is less than required allocations %d for tier %d", - availableAlloc, tier.RequiredAllocations, tier.TierID) + "available allocations %s is less than required allocations %s for tier %d", + availableAlloc.String(), tier.RequiredAllocations.String(), tier.TierID) } allowedBidder := fundraisingtypes.AllowedBidder{ @@ -69,26 +83,34 @@ func (k msgServer) Participate(goCtx context.Context, msg *types.MsgParticipate) // set used allocations numUsedAllocations := sdkmath.ZeroInt() - used, found := k.GetUsedAllocations(ctx, msg.Participant) - if found { + used, err := k.UsedAllocations.Get(ctx, msg.Participant) + if errors.Is(err, collections.ErrNotFound) { numUsedAllocations = used.NumAllocations + } else if err != nil { + return nil, ignterrors.Criticalf("failed to get used allocations %s", err.Error()) } numUsedAllocations = numUsedAllocations.Add(tier.RequiredAllocations) - k.SetUsedAllocations(ctx, types.UsedAllocations{ + err = k.UsedAllocations.Set(ctx, msg.Participant, types.UsedAllocations{ Address: msg.Participant, NumAllocations: numUsedAllocations, }) + if err != nil { + return nil, ignterrors.Criticalf("failed to set used allocations %s", err.Error()) + } // set auction used allocations - k.SetAuctionUsedAllocations(ctx, types.AuctionUsedAllocations{ + err = k.AuctionUsedAllocations.Set(ctx, collections.Join(sdk.AccAddress(participantAddress), msg.AuctionID), types.AuctionUsedAllocations{ Address: msg.Participant, AuctionID: msg.AuctionID, NumAllocations: tier.RequiredAllocations, Withdrawn: false, }) + if err != nil { + return nil, ignterrors.Criticalf("failed to set auction used allocations %s", err.Error()) + } - return &types.MsgParticipateResponse{}, ctx.EventManager().EmitTypedEvent(&types.EventAllocationsUsed{ + return &types.MsgParticipateResponse{}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&types.EventAllocationsUsed{ Participant: msg.Participant, AuctionID: msg.AuctionID, NumAllocations: tier.RequiredAllocations, diff --git a/x/participation/keeper/msg_participate_test.go b/x/participation/keeper/msg_server_participate_test.go similarity index 74% rename from x/participation/keeper/msg_participate_test.go rename to x/participation/keeper/msg_server_participate_test.go index 0191eeb6..52c41d27 100644 --- a/x/participation/keeper/msg_participate_test.go +++ b/x/participation/keeper/msg_server_participate_test.go @@ -4,25 +4,26 @@ import ( "testing" "time" + "cosmossdk.io/collections" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" "github.com/stretchr/testify/require" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/participation/types" ) func Test_msgServer_Participate(t *testing.T) { var ( - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) + ctx, tk, ts = testkeeper.NewTestSetup(t) auctioneer = sample.Address(r) registrationPeriod = time.Hour * 5 // 5 hours before start - startTime = sdkCtx.BlockTime().Add(time.Hour * 10) + startTime = ctx.BlockTime().Add(time.Hour * 10) startTimeLowerRegistrationPeriod = time.Unix(int64((registrationPeriod - time.Hour).Seconds()), 0) - endTime = sdkCtx.BlockTime().Add(time.Hour * 24 * 7) - validRegistrationTime = sdkCtx.BlockTime().Add(time.Hour * 6) + endTime = ctx.BlockTime().Add(time.Hour * 24 * 7) + validRegistrationTime = ctx.BlockTime().Add(time.Hour * 6) allocationPrice = types.AllocationPrice{Bonded: sdkmath.NewInt(100)} addrsWithDelsTier = []string{sample.Address(r), sample.Address(r), sample.Address(r), sample.Address(r)} availableAllocsTier = make([]sdkmath.Int, len(addrsWithDelsTier)) @@ -35,7 +36,8 @@ func Test_msgServer_Participate(t *testing.T) { params := types.DefaultParams() params.AllocationPrice = allocationPrice params.RegistrationPeriod = registrationPeriod - tk.ParticipationKeeper.SetParams(sdkCtx, params) + err := tk.ParticipationKeeper.Params.Set(ctx, params) + require.NoError(t, err) sellingCoin1 := sample.CoinWithRange(r, params.ParticipationTierList[1].Benefits.MaxBidAmount.Int64(), params.ParticipationTierList[1].Benefits.MaxBidAmount.Int64()+1000) @@ -44,32 +46,33 @@ func Test_msgServer_Participate(t *testing.T) { params.ParticipationTierList[1].Benefits.MaxBidAmount.Int64()+1000) t.Run("should allow initialize auctions", func(t *testing.T) { - tk.Mint(sdkCtx, auctioneer, sdk.NewCoins(sellingCoin1)) - auctionRegistrationPeriodID = tk.CreateFixedPriceAuction(sdkCtx, r, auctioneer, sellingCoin1, startTime, endTime) + tk.Mint(ctx, auctioneer, sdk.NewCoins(sellingCoin1)) + auctionRegistrationPeriodID = tk.CreateFixedPriceAuction(ctx, r, auctioneer, sellingCoin1, startTime, endTime) // initialize auction with edge case start time (forcefully set to status standby) - tk.Mint(sdkCtx, auctioneer, sdk.NewCoins(sellingCoin2)) - auctionLowerRegistrationPeriodID = tk.CreateFixedPriceAuction(sdkCtx, r, auctioneer, sellingCoin2, startTimeLowerRegistrationPeriod, endTime) - auctionLowerRegistrationPeriod, found := tk.FundraisingKeeper.GetAuction(sdkCtx, auctionLowerRegistrationPeriodID) - require.True(t, found) - err := auctionLowerRegistrationPeriod.SetStatus(fundraisingtypes.AuctionStatusStandBy) + tk.Mint(ctx, auctioneer, sdk.NewCoins(sellingCoin2)) + auctionLowerRegistrationPeriodID = tk.CreateFixedPriceAuction(ctx, r, auctioneer, sellingCoin2, startTimeLowerRegistrationPeriod, endTime) + auctionLowerRegistrationPeriod, err := tk.FundraisingKeeper.GetAuction(ctx, auctionLowerRegistrationPeriodID) + require.NoError(t, err) + err = auctionLowerRegistrationPeriod.SetStatus(fundraisingtypes.AuctionStatusStandBy) + require.NoError(t, err) + err = tk.FundraisingKeeper.Auction.Set(ctx, auctionLowerRegistrationPeriod.GetId(), auctionLowerRegistrationPeriod) require.NoError(t, err) - tk.FundraisingKeeper.SetAuction(sdkCtx, auctionLowerRegistrationPeriod) // initialize auction that is already started - tk.Mint(sdkCtx, auctioneer, sdk.NewCoins(sellingCoin1)) - auctionStartedID = tk.CreateFixedPriceAuction(sdkCtx, r, auctioneer, sellingCoin1, sdkCtx.BlockTime(), endTime) + tk.Mint(ctx, auctioneer, sdk.NewCoins(sellingCoin1)) + auctionStartedID = tk.CreateFixedPriceAuction(ctx, r, auctioneer, sellingCoin1, ctx.BlockTime(), endTime) // initialize auction that will be set to `cancelled` - tk.Mint(sdkCtx, auctioneer, sdk.NewCoins(sellingCoin1)) - auctionCancelledID = tk.CreateFixedPriceAuction(sdkCtx, r, auctioneer, sellingCoin1, startTime, endTime) + tk.Mint(ctx, auctioneer, sdk.NewCoins(sellingCoin1)) + auctionCancelledID = tk.CreateFixedPriceAuction(ctx, r, auctioneer, sellingCoin1, startTime, endTime) // cancel auction - err = tk.FundraisingKeeper.CancelAuction(sdkCtx, fundraisingtypes.NewMsgCancelAuction(auctioneer, auctionCancelledID)) + err = tk.FundraisingKeeper.CancelAuction(ctx, fundraisingtypes.NewMsgCancelAuction(auctioneer, auctionCancelledID)) require.NoError(t, err) }) // add delegations for i := 0; i < len(addrsWithDelsTier); i++ { - tk.DelegateN(sdkCtx, r, addrsWithDelsTier[i], 100, 10) - var err error - availableAllocsTier[i], err = tk.ParticipationKeeper.GetAvailableAllocations(sdkCtx, addrsWithDelsTier[i]) + _, _, err := tk.DelegateN(ctx, r, addrsWithDelsTier[i], 100, 10) + require.NoError(t, err) + availableAllocsTier[i], err = tk.ParticipationKeeper.GetAvailableAllocations(ctx, addrsWithDelsTier[i]) require.NoError(t, err) require.EqualValues(t, sdkmath.NewInt(10), availableAllocsTier[i]) } @@ -193,7 +196,7 @@ func Test_msgServer_Participate(t *testing.T) { TierID: 2, }, err: types.ErrParticipationNotAllowed, - blockTime: sdkCtx.BlockTime(), + blockTime: ctx.BlockTime(), }, { name: "should prevent participating if tier amount greater than auction max bid amount", @@ -209,8 +212,7 @@ func Test_msgServer_Participate(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { // set wanted block time - tmpSdkCtx := sdkCtx.WithBlockTime(tt.blockTime) - tmpCtx := sdk.WrapSDKContext(tmpSdkCtx) + tmpCtx := ctx.WithBlockTime(tt.blockTime) _, err := ts.ParticipationSrv.Participate(tmpCtx, tt.msg) @@ -225,25 +227,28 @@ func Test_msgServer_Participate(t *testing.T) { require.True(t, found) // check auction contains allowed bidder - allowedBidders := tk.FundraisingKeeper.GetAllowedBiddersByAuction(tmpSdkCtx, tt.msg.AuctionID) + allowedBidders, err := tk.FundraisingKeeper.GetAllowedBiddersByAuction(tmpCtx, tt.msg.AuctionID) + require.NoError(t, err) require.Contains(t, allowedBidders, fundraisingtypes.AllowedBidder{ Bidder: tt.msg.Participant, MaxBidAmount: tier.Benefits.MaxBidAmount, }) // check used allocations entry for bidder - usedAllocations, found := tk.ParticipationKeeper.GetUsedAllocations(tmpSdkCtx, tt.msg.Participant) - require.True(t, found) + usedAllocations, err := tk.ParticipationKeeper.UsedAllocations.Get(tmpCtx, tt.msg.Participant) + require.NoError(t, err) require.EqualValues(t, tt.desiredUsedAlloc, usedAllocations.NumAllocations) // check valid auction used allocations entry for bidder exists - auctionUsedAllocations, found := tk.ParticipationKeeper.GetAuctionUsedAllocations(tmpSdkCtx, tt.msg.Participant, tt.msg.AuctionID) - require.True(t, found) + participantAddress, err := sdk.AccAddressFromBech32(tt.msg.Participant) + require.NoError(t, err) + auctionUsedAllocations, err := tk.ParticipationKeeper.AuctionUsedAllocations.Get(tmpCtx, collections.Join(participantAddress, tt.msg.AuctionID)) + require.NoError(t, err) require.Equal(t, tier.RequiredAllocations, auctionUsedAllocations.NumAllocations) require.False(t, auctionUsedAllocations.Withdrawn) // check that available allocations has decreased accordingly according to tier used - availableAlloc, err := tk.ParticipationKeeper.GetAvailableAllocations(tmpSdkCtx, tt.msg.Participant) + availableAlloc, err := tk.ParticipationKeeper.GetAvailableAllocations(tmpCtx, tt.msg.Participant) require.NoError(t, err) require.True(t, found) require.EqualValues(t, tt.currentAvailableAlloc.Sub(tier.RequiredAllocations), availableAlloc) diff --git a/x/participation/keeper/msg_server_withdraw_allocations.go b/x/participation/keeper/msg_server_withdraw_allocations.go new file mode 100644 index 00000000..3f1f4bef --- /dev/null +++ b/x/participation/keeper/msg_server_withdraw_allocations.go @@ -0,0 +1,73 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/collections" + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" + + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/participation/types" +) + +func (k msgServer) WithdrawAllocations(ctx context.Context, msg *types.MsgWithdrawAllocations) (*types.MsgWithdrawAllocationsResponse, error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + blockTime := sdkCtx.BlockTime() + + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get launch params") + } + + participantAddress, err := k.addressCodec.StringToBytes(msg.Participant) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid participant address") + } + + auction, err := k.fundraisingKeeper.GetAuction(ctx, msg.AuctionID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.AuctionID) + } + + // only prevent time-based restrictions on withdrawals if the auction's status is not `CANCELLED` + if auction.GetStatus() != fundraisingtypes.AuctionStatusCancelled { + if !blockTime.After(auction.GetStartTime().Add(params.WithdrawalDelay)) { + return nil, sdkerrors.Wrapf(types.ErrAllocationWithdrawalTimeNotReached, "withdrawal for auction %d not yet allowed", msg.AuctionID) + } + } + + auctionUsedAllocations, err := k.AuctionUsedAllocations.Get(ctx, collections.Join(sdk.AccAddress(participantAddress), msg.AuctionID)) + if err != nil { + return nil, sdkerrors.Wrapf(types.ErrUsedAllocationsNotFound, "used allocations for auction %d not found", msg.AuctionID) + } + if auctionUsedAllocations.Withdrawn { + return nil, sdkerrors.Wrapf(types.ErrAllocationsAlreadyWithdrawn, "allocations for auction %d already claimed", msg.AuctionID) + } + + totalUsedAllocations, err := k.UsedAllocations.Get(ctx, msg.Participant) + if err != nil { + return nil, ignterrors.Criticalf("unable to find total used allocations entry for address %s", msg.Participant) + } + + // decrease totalUsedAllocations making sure subtraction is feasible + if totalUsedAllocations.NumAllocations.LT(auctionUsedAllocations.NumAllocations) { + return nil, ignterrors.Critical("number of total used allocations cannot become negative") + } + totalUsedAllocations.NumAllocations = totalUsedAllocations.NumAllocations.Sub(auctionUsedAllocations.NumAllocations) + + auctionUsedAllocations.Withdrawn = true + if err = k.AuctionUsedAllocations.Set(ctx, collections.Join(sdk.AccAddress(participantAddress), auctionUsedAllocations.AuctionID), auctionUsedAllocations); err != nil { + return nil, ignterrors.Criticalf("unable to set auction used allocations entry for address %s", msg.Participant) + } + + if err = k.UsedAllocations.Set(ctx, totalUsedAllocations.Address, totalUsedAllocations); err != nil { + return nil, ignterrors.Criticalf("unable to set total used allocations entry for address %s", msg.Participant) + } + + return &types.MsgWithdrawAllocationsResponse{}, sdkCtx.EventManager().EmitTypedEvent(&types.EventAllocationsWithdrawn{ + Participant: msg.Participant, + AuctionID: msg.AuctionID, + }) +} diff --git a/x/participation/keeper/msg_withdraw_allocations_test.go b/x/participation/keeper/msg_server_withdraw_allocations_test.go similarity index 59% rename from x/participation/keeper/msg_withdraw_allocations_test.go rename to x/participation/keeper/msg_server_withdraw_allocations_test.go index 45009516..4eda406a 100644 --- a/x/participation/keeper/msg_withdraw_allocations_test.go +++ b/x/participation/keeper/msg_server_withdraw_allocations_test.go @@ -4,25 +4,25 @@ import ( "testing" "time" + "cosmossdk.io/collections" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" "github.com/stretchr/testify/require" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/participation/types" ) func Test_msgServer_WithdrawAllocations(t *testing.T) { var ( - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) - auctioneer = sample.Address(r) - validParticipant = sample.Address(r) - invalidParticipant = sample.Address(r) - auctionStartTime = sdkCtx.BlockTime().Add(time.Hour) - auctionEndTime = sdkCtx.BlockTime().Add(time.Hour * 24 * 7) + ctx, tk, ts = testkeeper.NewTestSetup(t) + auctioneer = sample.AccAddress(r) + validParticipant = sample.AccAddress(r) + invalidParticipant = sample.AccAddress(r) + auctionStartTime = ctx.BlockTime().Add(time.Hour) + auctionEndTime = ctx.BlockTime().Add(time.Hour * 24 * 7) validWithdrawalTime = auctionStartTime.Add(time.Hour * 10) withdrawalDelay = time.Hour * 5 ) @@ -30,31 +30,33 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { params := types.DefaultParams() params.WithdrawalDelay = withdrawalDelay params.AllocationPrice = types.AllocationPrice{Bonded: sdkmath.NewInt(100)} - tk.ParticipationKeeper.SetParams(sdkCtx, params) + err := tk.ParticipationKeeper.Params.Set(ctx, params) + require.NoError(t, err) auctionSellingCoin := sample.CoinWithRange(r, params.ParticipationTierList[1].Benefits.MaxBidAmount.Int64(), params.ParticipationTierList[1].Benefits.MaxBidAmount.Int64()+1000) // delegate some coins so participant has some allocations to use - tk.DelegateN(sdkCtx, r, validParticipant, 100, 10) + _, _, err = tk.DelegateN(ctx, r, validParticipant.String(), 100, 10) + require.NoError(t, err) // initialize an auction - tk.Mint(sdkCtx, auctioneer, sdk.NewCoins(auctionSellingCoin)) - auctionID := tk.CreateFixedPriceAuction(sdkCtx, r, auctioneer, auctionSellingCoin, auctionStartTime, auctionEndTime) + tk.Mint(ctx, auctioneer.String(), sdk.NewCoins(auctionSellingCoin)) + auctionID := tk.CreateFixedPriceAuction(ctx, r, auctioneer.String(), auctionSellingCoin, auctionStartTime, auctionEndTime) // initialize another auction that will be set to `cancelled` - tk.Mint(sdkCtx, auctioneer, sdk.NewCoins(auctionSellingCoin)) - cancelledAuctionID := tk.CreateFixedPriceAuction(sdkCtx, r, auctioneer, auctionSellingCoin, auctionStartTime, auctionEndTime) + tk.Mint(ctx, auctioneer.String(), sdk.NewCoins(auctionSellingCoin)) + cancelledAuctionID := tk.CreateFixedPriceAuction(ctx, r, auctioneer.String(), auctionSellingCoin, auctionStartTime, auctionEndTime) t.Run("should allow participation", func(t *testing.T) { _, err := ts.ParticipationSrv.Participate(ctx, &types.MsgParticipate{ - Participant: validParticipant, + Participant: validParticipant.String(), AuctionID: auctionID, TierID: 1, }) require.NoError(t, err) _, err = ts.ParticipationSrv.Participate(ctx, &types.MsgParticipate{ - Participant: validParticipant, + Participant: validParticipant.String(), AuctionID: cancelledAuctionID, TierID: 1, }) @@ -62,17 +64,18 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { }) t.Run("should allow auction cancel", func(t *testing.T) { - err := tk.FundraisingKeeper.CancelAuction(sdkCtx, fundraisingtypes.NewMsgCancelAuction(auctioneer, cancelledAuctionID)) + err := tk.FundraisingKeeper.CancelAuction(ctx, fundraisingtypes.NewMsgCancelAuction(auctioneer.String(), cancelledAuctionID)) require.NoError(t, err) }) // manually insert entry for invalidParticipant for later test - tk.ParticipationKeeper.SetAuctionUsedAllocations(sdkCtx, types.AuctionUsedAllocations{ - Address: invalidParticipant, + err = tk.ParticipationKeeper.AuctionUsedAllocations.Set(ctx, collections.Join(invalidParticipant, auctionID), types.AuctionUsedAllocations{ + Address: invalidParticipant.String(), AuctionID: auctionID, NumAllocations: sdkmath.OneInt(), Withdrawn: true, // set withdrawn to true }) + require.NoError(t, err) tests := []struct { name string @@ -83,7 +86,7 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { { name: "should allow to remove allocations", msg: &types.MsgWithdrawAllocations{ - Participant: validParticipant, + Participant: validParticipant.String(), AuctionID: auctionID, }, blockTime: validWithdrawalTime, @@ -91,7 +94,7 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { { name: "should allow to remove allocations if auction status is cancelled", msg: &types.MsgWithdrawAllocations{ - Participant: validParticipant, + Participant: validParticipant.String(), AuctionID: cancelledAuctionID, }, blockTime: auctionStartTime, @@ -99,7 +102,7 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { { name: "should return auction not found", msg: &types.MsgWithdrawAllocations{ - Participant: validParticipant, + Participant: validParticipant.String(), AuctionID: auctionID + 1000, }, blockTime: validWithdrawalTime, @@ -108,7 +111,7 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { { name: "should prevent withdrawal before withdrawal delay has passed", msg: &types.MsgWithdrawAllocations{ - Participant: validParticipant, + Participant: validParticipant.String(), AuctionID: auctionID, }, blockTime: auctionStartTime, @@ -126,7 +129,7 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { { name: "should prevent withdrawal if already claimed", msg: &types.MsgWithdrawAllocations{ - Participant: invalidParticipant, + Participant: invalidParticipant.String(), AuctionID: auctionID, }, blockTime: validWithdrawalTime, @@ -135,26 +138,22 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - preUsedAllocations, found := tk.ParticipationKeeper.GetUsedAllocations(sdkCtx, tt.msg.Participant) + preUsedAllocations, err := tk.ParticipationKeeper.UsedAllocations.Get(ctx, tt.msg.Participant) if tt.err == nil { // check if valid only when no error expected - require.True(t, found) + require.NoError(t, err) } - preAuctionUsedAllocations, found := tk.ParticipationKeeper.GetAuctionUsedAllocations(sdkCtx, validParticipant, tt.msg.AuctionID) + preAuctionUsedAllocations, err := tk.ParticipationKeeper.AuctionUsedAllocations.Get(ctx, collections.Join(validParticipant, tt.msg.AuctionID)) if tt.err == nil { // check if valid only when no error expected - require.True(t, found) + require.NoError(t, err) require.False(t, preAuctionUsedAllocations.Withdrawn) } // set wanted block time - tmpSdkCtx := sdkCtx.WithBlockTime(tt.blockTime) - tmpCtx := sdk.WrapSDKContext(tmpSdkCtx) - - _, err := ts.ParticipationSrv.WithdrawAllocations(tmpCtx, tt.msg) - - // check error + tmpCtx := ctx.WithBlockTime(tt.blockTime) + _, err = ts.ParticipationSrv.WithdrawAllocations(tmpCtx, tt.msg) if tt.err != nil { require.ErrorIs(t, err, tt.err) return @@ -162,14 +161,16 @@ func Test_msgServer_WithdrawAllocations(t *testing.T) { require.NoError(t, err) // check auctionUsedAllocations is set to `withdrawn` - postAuctionUsedAllocations, found := tk.ParticipationKeeper.GetAuctionUsedAllocations(tmpSdkCtx, tt.msg.Participant, tt.msg.AuctionID) - require.True(t, found) + participantAddress, err := sdk.AccAddressFromBech32(tt.msg.Participant) + require.NoError(t, err) + postAuctionUsedAllocations, err := tk.ParticipationKeeper.AuctionUsedAllocations.Get(tmpCtx, collections.Join(participantAddress, tt.msg.AuctionID)) + require.NoError(t, err) require.True(t, postAuctionUsedAllocations.Withdrawn) require.Equal(t, preAuctionUsedAllocations.NumAllocations, postAuctionUsedAllocations.NumAllocations) // check usedAllocationEntry is correctly decreased - postUsedAllocations, found := tk.ParticipationKeeper.GetUsedAllocations(tmpSdkCtx, tt.msg.Participant) - require.True(t, found) + postUsedAllocations, err := tk.ParticipationKeeper.UsedAllocations.Get(tmpCtx, tt.msg.Participant) + require.NoError(t, err) calculated := preUsedAllocations.NumAllocations.Sub(preAuctionUsedAllocations.NumAllocations) require.True(t, postUsedAllocations.NumAllocations.Equal(calculated), "numAlloc %s not equal to calculated %s", postUsedAllocations.NumAllocations, calculated) }) diff --git a/x/participation/keeper/msg_update_params.go b/x/participation/keeper/msg_update_params.go new file mode 100644 index 00000000..4fb30ea4 --- /dev/null +++ b/x/participation/keeper/msg_update_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + + "github.com/ignite/network/x/participation/types" +) + +func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if _, err := k.addressCodec.StringToBytes(req.Authority); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + if k.GetAuthority() != req.Authority { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) + } + + if err := req.Params.Validate(); err != nil { + return nil, err + } + + if err := k.Params.Set(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/participation/keeper/msg_update_params_test.go b/x/participation/keeper/msg_update_params_test.go new file mode 100644 index 00000000..ee8308bf --- /dev/null +++ b/x/participation/keeper/msg_update_params_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" +) + +func TestMsgUpdateParams(t *testing.T) { + k, ctx, _ := keepertest.ParticipationKeeper(t) + ms := keeper.NewMsgServerImpl(k) + + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + // default params + testCases := []struct { + name string + input *types.MsgUpdateParams + expErr bool + expErrMsg string + }{ + { + name: "invalid authority", + input: &types.MsgUpdateParams{ + Authority: "invalid", + Params: params, + }, + expErr: true, + expErrMsg: "invalid authority", + }, + { + name: "send enabled param", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: types.Params{}, + }, + expErr: false, + }, + { + name: "all good", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: params, + }, + expErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, err := ms.UpdateParams(ctx, tc.input) + + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expErrMsg) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/participation/keeper/msg_withdraw_allocations.go b/x/participation/keeper/msg_withdraw_allocations.go deleted file mode 100644 index 26824c4b..00000000 --- a/x/participation/keeper/msg_withdraw_allocations.go +++ /dev/null @@ -1,59 +0,0 @@ -package keeper - -import ( - "context" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - - ignterrors "github.com/ignite/modules/pkg/errors" - - "github.com/tendermint/spn/x/participation/types" -) - -func (k msgServer) WithdrawAllocations(goCtx context.Context, msg *types.MsgWithdrawAllocations) (*types.MsgWithdrawAllocationsResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - blockTime := ctx.BlockTime() - - auction, found := k.fundraisingKeeper.GetAuction(ctx, msg.AuctionID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrAuctionNotFound, "auction %d not found", msg.AuctionID) - } - - // only prevent time-based restrictions on withdrawals if the auction's status is not `CANCELLED` - if auction.GetStatus() != fundraisingtypes.AuctionStatusCancelled { - withdrawalDelay := k.WithdrawalDelay(ctx) - if !blockTime.After(auction.GetStartTime().Add(withdrawalDelay)) { - return nil, sdkerrors.Wrapf(types.ErrAllocationWithdrawalTimeNotReached, "withdrawal for auction %d not yet allowed", msg.AuctionID) - } - } - - auctionUsedAllocations, found := k.GetAuctionUsedAllocations(ctx, msg.Participant, msg.AuctionID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrUsedAllocationsNotFound, "used allocations for auction %d not found", msg.AuctionID) - } - if auctionUsedAllocations.Withdrawn { - return nil, sdkerrors.Wrapf(types.ErrAllocationsAlreadyWithdrawn, "allocations for auction %d already claimed", msg.AuctionID) - } - - totalUsedAllocations, found := k.GetUsedAllocations(ctx, msg.Participant) - if !found { - return nil, ignterrors.Criticalf("unable to find total used allocations entry for address %s", msg.Participant) - } - - // decrease totalUsedAllocations making sure subtraction is feasible - if totalUsedAllocations.NumAllocations.LT(auctionUsedAllocations.NumAllocations) { - return nil, ignterrors.Critical("number of total used allocations cannot become negative") - } - totalUsedAllocations.NumAllocations = totalUsedAllocations.NumAllocations.Sub(auctionUsedAllocations.NumAllocations) - - auctionUsedAllocations.Withdrawn = true - k.SetAuctionUsedAllocations(ctx, auctionUsedAllocations) - k.SetUsedAllocations(ctx, totalUsedAllocations) - - return &types.MsgWithdrawAllocationsResponse{}, ctx.EventManager().EmitTypedEvent(&types.EventAllocationsWithdrawn{ - Participant: msg.Participant, - AuctionID: msg.AuctionID, - }) -} diff --git a/x/participation/keeper/params.go b/x/participation/keeper/params.go deleted file mode 100644 index e3cef4d8..00000000 --- a/x/participation/keeper/params.go +++ /dev/null @@ -1,48 +0,0 @@ -package keeper - -import ( - "time" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/participation/types" -) - -// GetParams get all parameters as types.Params -func (k Keeper) GetParams(ctx sdk.Context) types.Params { - return types.NewParams( - k.AllocationPrice(ctx), - k.ParticipationTierList(ctx), - k.RegistrationPeriod(ctx), - k.WithdrawalDelay(ctx), - ) -} - -// SetParams set the params -func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { - k.paramstore.SetParamSet(ctx, ¶ms) -} - -// AllocationPrice returns the AllocationPrice param -func (k Keeper) AllocationPrice(ctx sdk.Context) (res types.AllocationPrice) { - k.paramstore.Get(ctx, types.KeyAllocationPrice, &res) - return -} - -// ParticipationTierList returns the ParticipationTierList param -func (k Keeper) ParticipationTierList(ctx sdk.Context) (res []types.Tier) { - k.paramstore.Get(ctx, types.KeyParticipationTierList, &res) - return -} - -// RegistrationPeriod returns the RegistrationPeriod param -func (k Keeper) RegistrationPeriod(ctx sdk.Context) (res time.Duration) { - k.paramstore.Get(ctx, types.KeyRegistrationPeriod, &res) - return -} - -// WithdrawalDelay returns the WithdrawalDelay param -func (k Keeper) WithdrawalDelay(ctx sdk.Context) (res time.Duration) { - k.paramstore.Get(ctx, types.KeyWithdrawalDelay, &res) - return -} diff --git a/x/participation/keeper/params_test.go b/x/participation/keeper/params_test.go deleted file mode 100644 index 04963008..00000000 --- a/x/participation/keeper/params_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/tendermint/spn/testutil/sample" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" -) - -func TestGetParams(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow params get", func(t *testing.T) { - params := sample.ParticipationParams(r) - tk.ParticipationKeeper.SetParams(ctx, params) - require.EqualValues(t, params, tk.ParticipationKeeper.GetParams(ctx)) - require.EqualValues(t, params.AllocationPrice, tk.ParticipationKeeper.AllocationPrice(ctx)) - require.EqualValues(t, params.ParticipationTierList, tk.ParticipationKeeper.ParticipationTierList(ctx)) - require.EqualValues(t, params.RegistrationPeriod, tk.ParticipationKeeper.RegistrationPeriod(ctx)) - require.EqualValues(t, params.WithdrawalDelay, tk.ParticipationKeeper.WithdrawalDelay(ctx)) - }) -} diff --git a/x/participation/keeper/query.go b/x/participation/keeper/query.go new file mode 100644 index 00000000..fa4645de --- /dev/null +++ b/x/participation/keeper/query.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "github.com/ignite/network/x/participation/types" +) + +var _ types.QueryServer = queryServer{} + +// NewQueryServerImpl returns an implementation of the QueryServer interface +// for the provided Keeper. +func NewQueryServerImpl(k Keeper) types.QueryServer { + return queryServer{k} +} + +type queryServer struct { + k Keeper +} diff --git a/x/participation/keeper/query_auction_used_allocations.go b/x/participation/keeper/query_auction_used_allocations.go new file mode 100644 index 00000000..96167e3c --- /dev/null +++ b/x/participation/keeper/query_auction_used_allocations.go @@ -0,0 +1,59 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/participation/types" +) + +func (q queryServer) ListAuctionUsedAllocations(ctx context.Context, req *types.QueryAllAuctionUsedAllocationsRequest) (*types.QueryAllAuctionUsedAllocationsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + auctionUsedAllocations, pageRes, err := query.CollectionFilteredPaginate( + ctx, + q.k.AuctionUsedAllocations, + req.Pagination, + func(key collections.Pair[sdk.AccAddress, uint64], value types.AuctionUsedAllocations) (bool, error) { + return req.Address == value.Address, nil + }, + func(_ collections.Pair[sdk.AccAddress, uint64], value types.AuctionUsedAllocations) (types.AuctionUsedAllocations, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllAuctionUsedAllocationsResponse{AuctionUsedAllocations: auctionUsedAllocations, Pagination: pageRes}, nil +} + +func (q queryServer) GetAuctionUsedAllocations(ctx context.Context, req *types.QueryGetAuctionUsedAllocationsRequest) (*types.QueryGetAuctionUsedAllocationsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + address, err := q.k.addressCodec.StringToBytes(req.Address) + if err != nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.AuctionUsedAllocations.Get(ctx, collections.Join(sdk.AccAddress(address), req.AuctionID)) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetAuctionUsedAllocationsResponse{AuctionUsedAllocations: val}, nil +} diff --git a/x/participation/keeper/grpc_auction_used_allocations_test.go b/x/participation/keeper/query_auction_used_allocations_test.go similarity index 50% rename from x/participation/keeper/grpc_auction_used_allocations_test.go rename to x/participation/keeper/query_auction_used_allocations_test.go index feaef857..454c06ed 100644 --- a/x/participation/keeper/grpc_auction_used_allocations_test.go +++ b/x/participation/keeper/query_auction_used_allocations_test.go @@ -1,61 +1,78 @@ package keeper_test import ( + "context" "strconv" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + "cosmossdk.io/collections" "github.com/cosmos/cosmos-sdk/types/query" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/participation/types" + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" ) +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNAuctionUsedAllocations(keeper keeper.Keeper, ctx context.Context, n int) []types.AuctionUsedAllocations { + items := make([]types.AuctionUsedAllocations, n) + auctionID := uint64(0) + for i := range items { + address := sample.AccAddress(r) + items[i].AuctionID = auctionID + items[i].Address = address.String() + + _ = keeper.AuctionUsedAllocations.Set(ctx, collections.Join(address, auctionID), items[i]) + } + return items +} + func TestAuctionUsedAllocationsQuerySingle(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(sdkCtx) - msgs := createNAuctionUsedAllocations(tk.ParticipationKeeper, sdkCtx, 2) - for _, tc := range []struct { - name string + k, ctx, _ := keepertest.ParticipationKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNAuctionUsedAllocations(k, ctx, 2) + tests := []struct { + desc string request *types.QueryGetAuctionUsedAllocationsRequest response *types.QueryGetAuctionUsedAllocationsResponse err error }{ { - name: "should allow valid query first", + desc: "First", request: &types.QueryGetAuctionUsedAllocationsRequest{ - Address: msgs[0].Address, - AuctionID: msgs[0].AuctionID, + Address: msgs[0].Address, }, response: &types.QueryGetAuctionUsedAllocationsResponse{AuctionUsedAllocations: msgs[0]}, }, { - name: "should allow valid query second", + desc: "Second", request: &types.QueryGetAuctionUsedAllocationsRequest{ - Address: msgs[1].Address, - AuctionID: msgs[1].AuctionID, + Address: msgs[1].Address, }, response: &types.QueryGetAuctionUsedAllocationsResponse{AuctionUsedAllocations: msgs[1]}, }, { - name: "should return KeyNotFound", + desc: "KeyNotFound", request: &types.QueryGetAuctionUsedAllocationsRequest{ - Address: strconv.Itoa(100000), - AuctionID: 100000, + Address: strconv.Itoa(100000), }, err: status.Error(codes.NotFound, "not found"), }, { - name: "should return InvalidRequest", + desc: "InvalidRequest", err: status.Error(codes.InvalidArgument, "invalid request"), }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.ParticipationKeeper.AuctionUsedAllocations(wctx, tc.request) + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetAuctionUsedAllocations(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) } else { @@ -70,14 +87,12 @@ func TestAuctionUsedAllocationsQuerySingle(t *testing.T) { } func TestAuctionUsedAllocationsQueryPaginated(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(sdkCtx) - msgs := createNAuctionUsedAllocationsWithSameAddress(tk.ParticipationKeeper, sdkCtx, 5) - address := msgs[0].Address + k, ctx, _ := keepertest.ParticipationKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNAuctionUsedAllocations(k, ctx, 5) - request := func(addr string, next []byte, offset, limit uint64, total bool) *types.QueryAllAuctionUsedAllocationsRequest { + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllAuctionUsedAllocationsRequest { return &types.QueryAllAuctionUsedAllocationsRequest{ - Address: addr, Pagination: &query.PageRequest{ Key: next, Offset: offset, @@ -86,16 +101,10 @@ func TestAuctionUsedAllocationsQueryPaginated(t *testing.T) { }, } } - t.Run("should return empty set", func(t *testing.T) { - resp, err := tk.ParticipationKeeper.AuctionUsedAllocationsAll(wctx, request("invalid", nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, 0, int(resp.Pagination.Total)) - require.Nil(t, resp.AuctionUsedAllocations) - }) - t.Run("should paginate by offset", func(t *testing.T) { + t.Run("ByOffset", func(t *testing.T) { step := 2 for i := 0; i < len(msgs); i += step { - resp, err := tk.ParticipationKeeper.AuctionUsedAllocationsAll(wctx, request(address, nil, uint64(i), uint64(step), false)) + resp, err := qs.ListAuctionUsedAllocations(ctx, request(nil, uint64(i), uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.AuctionUsedAllocations), step) require.Subset(t, @@ -104,11 +113,11 @@ func TestAuctionUsedAllocationsQueryPaginated(t *testing.T) { ) } }) - t.Run("should paginate by key", func(t *testing.T) { + t.Run("ByKey", func(t *testing.T) { step := 2 var next []byte for i := 0; i < len(msgs); i += step { - resp, err := tk.ParticipationKeeper.AuctionUsedAllocationsAll(wctx, request(address, next, 0, uint64(step), false)) + resp, err := qs.ListAuctionUsedAllocations(ctx, request(next, 0, uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.AuctionUsedAllocations), step) require.Subset(t, @@ -118,8 +127,8 @@ func TestAuctionUsedAllocationsQueryPaginated(t *testing.T) { next = resp.Pagination.NextKey } }) - t.Run("should paginate all", func(t *testing.T) { - resp, err := tk.ParticipationKeeper.AuctionUsedAllocationsAll(wctx, request(address, nil, 0, 0, true)) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListAuctionUsedAllocations(ctx, request(nil, 0, 0, true)) require.NoError(t, err) require.Equal(t, len(msgs), int(resp.Pagination.Total)) require.ElementsMatch(t, @@ -127,8 +136,8 @@ func TestAuctionUsedAllocationsQueryPaginated(t *testing.T) { nullify.Fill(resp.AuctionUsedAllocations), ) }) - t.Run("should return InvalidRequest", func(t *testing.T) { - _, err := tk.ParticipationKeeper.AuctionUsedAllocationsAll(wctx, nil) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListAuctionUsedAllocations(ctx, nil) require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) }) } diff --git a/x/participation/keeper/query_available_allocations.go b/x/participation/keeper/query_available_allocations.go new file mode 100644 index 00000000..8eeadd92 --- /dev/null +++ b/x/participation/keeper/query_available_allocations.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/participation/types" +) + +func (q queryServer) AvailableAllocations(ctx context.Context, req *types.QueryAvailableAllocationsRequest) (*types.QueryAvailableAllocationsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + // TODO: Process the query + + return &types.QueryAvailableAllocationsResponse{}, nil +} diff --git a/x/participation/keeper/query_params.go b/x/participation/keeper/query_params.go new file mode 100644 index 00000000..28d2cc49 --- /dev/null +++ b/x/participation/keeper/query_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/participation/types" +) + +func (q queryServer) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + params, err := q.k.Params.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/x/participation/keeper/query_params_test.go b/x/participation/keeper/query_params_test.go new file mode 100644 index 00000000..53c14358 --- /dev/null +++ b/x/participation/keeper/query_params_test.go @@ -0,0 +1,23 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" +) + +func TestParamsQuery(t *testing.T) { + k, ctx, _ := keepertest.ParticipationKeeper(t) + + qs := keeper.NewQueryServerImpl(k) + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + response, err := qs.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/participation/keeper/query_total_allocations.go b/x/participation/keeper/query_total_allocations.go new file mode 100644 index 00000000..d98518fa --- /dev/null +++ b/x/participation/keeper/query_total_allocations.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/participation/types" +) + +func (q queryServer) TotalAllocations(ctx context.Context, req *types.QueryTotalAllocationsRequest) (*types.QueryTotalAllocationsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + // TODO: Process the query + + return &types.QueryTotalAllocationsResponse{}, nil +} diff --git a/x/participation/keeper/query_used_allocations.go b/x/participation/keeper/query_used_allocations.go new file mode 100644 index 00000000..cbc7975c --- /dev/null +++ b/x/participation/keeper/query_used_allocations.go @@ -0,0 +1,50 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/participation/types" +) + +func (q queryServer) ListUsedAllocations(ctx context.Context, req *types.QueryAllUsedAllocationsRequest) (*types.QueryAllUsedAllocationsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + usedAllocationss, pageRes, err := query.CollectionPaginate( + ctx, + q.k.UsedAllocations, + req.Pagination, + func(_ string, value types.UsedAllocations) (types.UsedAllocations, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllUsedAllocationsResponse{UsedAllocations: usedAllocationss, Pagination: pageRes}, nil +} + +func (q queryServer) GetUsedAllocations(ctx context.Context, req *types.QueryGetUsedAllocationsRequest) (*types.QueryGetUsedAllocationsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.UsedAllocations.Get(ctx, req.Address) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetUsedAllocationsResponse{UsedAllocations: val}, nil +} diff --git a/x/participation/keeper/grpc_used_allocations_test.go b/x/participation/keeper/query_used_allocations_test.go similarity index 54% rename from x/participation/keeper/grpc_used_allocations_test.go rename to x/participation/keeper/query_used_allocations_test.go index e541000e..d89087a6 100644 --- a/x/participation/keeper/grpc_used_allocations_test.go +++ b/x/participation/keeper/query_used_allocations_test.go @@ -1,68 +1,73 @@ package keeper_test import ( + "context" "strconv" "testing" - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" ) +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNUsedAllocations(keeper keeper.Keeper, ctx context.Context, n int) []types.UsedAllocations { + items := make([]types.UsedAllocations, n) + for i := range items { + items[i].Address = strconv.Itoa(i) + + _ = keeper.UsedAllocations.Set(ctx, items[i].Address, items[i]) + } + return items +} + func TestUsedAllocationsQuerySingle(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(sdkCtx) - msgs := createNUsedAllocations(tk.ParticipationKeeper, sdkCtx, 2) - validAddr := sample.Address(r) - for _, tc := range []struct { - name string + k, ctx, _ := keepertest.ParticipationKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNUsedAllocations(k, ctx, 2) + tests := []struct { + desc string request *types.QueryGetUsedAllocationsRequest response *types.QueryGetUsedAllocationsResponse err error }{ { - name: "should allow valid query first", + desc: "First", request: &types.QueryGetUsedAllocationsRequest{ Address: msgs[0].Address, }, response: &types.QueryGetUsedAllocationsResponse{UsedAllocations: msgs[0]}, }, { - name: "should allow valid query second", + desc: "Second", request: &types.QueryGetUsedAllocationsRequest{ Address: msgs[1].Address, }, response: &types.QueryGetUsedAllocationsResponse{UsedAllocations: msgs[1]}, }, { - name: "should return ZeroAllocations", - request: &types.QueryGetUsedAllocationsRequest{ - Address: validAddr, - }, - response: &types.QueryGetUsedAllocationsResponse{UsedAllocations: types.UsedAllocations{Address: validAddr, NumAllocations: sdkmath.ZeroInt()}}, - }, - { - name: "should return InvalidAddress", + desc: "KeyNotFound", request: &types.QueryGetUsedAllocationsRequest{ Address: strconv.Itoa(100000), }, - err: status.Error(codes.InvalidArgument, "decoding bech32 failed: invalid bech32 string length 6"), + err: status.Error(codes.NotFound, "not found"), }, { - name: "should return InvalidRequest", + desc: "InvalidRequest", err: status.Error(codes.InvalidArgument, "invalid request"), }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.ParticipationKeeper.UsedAllocations(wctx, tc.request) + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetUsedAllocations(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) } else { @@ -77,9 +82,9 @@ func TestUsedAllocationsQuerySingle(t *testing.T) { } func TestUsedAllocationsQueryPaginated(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(sdkCtx) - msgs := createNUsedAllocations(tk.ParticipationKeeper, sdkCtx, 5) + k, ctx, _ := keepertest.ParticipationKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNUsedAllocations(k, ctx, 5) request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllUsedAllocationsRequest { return &types.QueryAllUsedAllocationsRequest{ @@ -91,10 +96,10 @@ func TestUsedAllocationsQueryPaginated(t *testing.T) { }, } } - t.Run("should paginate by offset", func(t *testing.T) { + t.Run("ByOffset", func(t *testing.T) { step := 2 for i := 0; i < len(msgs); i += step { - resp, err := tk.ParticipationKeeper.UsedAllocationsAll(wctx, request(nil, uint64(i), uint64(step), false)) + resp, err := qs.ListUsedAllocations(ctx, request(nil, uint64(i), uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.UsedAllocations), step) require.Subset(t, @@ -103,11 +108,11 @@ func TestUsedAllocationsQueryPaginated(t *testing.T) { ) } }) - t.Run("should paginate by key", func(t *testing.T) { + t.Run("ByKey", func(t *testing.T) { step := 2 var next []byte for i := 0; i < len(msgs); i += step { - resp, err := tk.ParticipationKeeper.UsedAllocationsAll(wctx, request(next, 0, uint64(step), false)) + resp, err := qs.ListUsedAllocations(ctx, request(next, 0, uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.UsedAllocations), step) require.Subset(t, @@ -117,8 +122,8 @@ func TestUsedAllocationsQueryPaginated(t *testing.T) { next = resp.Pagination.NextKey } }) - t.Run("should paginate all", func(t *testing.T) { - resp, err := tk.ParticipationKeeper.UsedAllocationsAll(wctx, request(nil, 0, 0, true)) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListUsedAllocations(ctx, request(nil, 0, 0, true)) require.NoError(t, err) require.Equal(t, len(msgs), int(resp.Pagination.Total)) require.ElementsMatch(t, @@ -126,8 +131,8 @@ func TestUsedAllocationsQueryPaginated(t *testing.T) { nullify.Fill(resp.UsedAllocations), ) }) - t.Run("should return InvalidRequest", func(t *testing.T) { - _, err := tk.ParticipationKeeper.UsedAllocationsAll(wctx, nil) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListUsedAllocations(ctx, nil) require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) }) } diff --git a/x/participation/keeper/registration_period.go b/x/participation/keeper/registration_period.go index e64a6366..fdb8c048 100644 --- a/x/participation/keeper/registration_period.go +++ b/x/participation/keeper/registration_period.go @@ -1,19 +1,25 @@ package keeper import ( + "context" "time" sdk "github.com/cosmos/cosmos-sdk/types" ) // IsRegistrationEnabled returns true if the current block time is within the allowed registration period -func (k Keeper) IsRegistrationEnabled(ctx sdk.Context, auctionStartTime time.Time) bool { - blockTime := ctx.BlockTime() +func (k Keeper) IsRegistrationEnabled(ctx context.Context, auctionStartTime time.Time) (bool, error) { + blockTime := sdk.UnwrapSDKContext(ctx).BlockTime() if !blockTime.Before(auctionStartTime) { - return false + return false, nil } - registrationPeriod := k.RegistrationPeriod(ctx) + params, err := k.Params.Get(ctx) + if err != nil { + return false, err + } + + registrationPeriod := params.RegistrationPeriod if auctionStartTime.Unix() < int64(registrationPeriod.Seconds()) { // subtraction would result in negative value, clamp the result to ~0 // by making registrationPeriod ~= auctionStartTime @@ -21,5 +27,5 @@ func (k Keeper) IsRegistrationEnabled(ctx sdk.Context, auctionStartTime time.Tim } // as commented in `Time.Sub()`: To compute t-d for a duration d, use t.Add(-d). registrationStart := auctionStartTime.Add(-registrationPeriod) - return blockTime.After(registrationStart) + return blockTime.After(registrationStart), nil } diff --git a/x/participation/keeper/registration_period_test.go b/x/participation/keeper/registration_period_test.go index 4eba6716..74f5244c 100644 --- a/x/participation/keeper/registration_period_test.go +++ b/x/participation/keeper/registration_period_test.go @@ -6,16 +6,18 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" + testkeeper "github.com/ignite/network/testutil/keeper" ) func TestIsRegistrationEnabled(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) registrationPeriod := time.Hour - params := tk.ParticipationKeeper.GetParams(ctx) + params, err := tk.ParticipationKeeper.Params.Get(ctx) + require.NoError(t, err) params.RegistrationPeriod = registrationPeriod - tk.ParticipationKeeper.SetParams(ctx, params) + err = tk.ParticipationKeeper.Params.Set(ctx, params) + require.NoError(t, err) for _, tc := range []struct { name string @@ -51,7 +53,7 @@ func TestIsRegistrationEnabled(t *testing.T) { } { t.Run(tc.name, func(t *testing.T) { tmpCtx := ctx.WithBlockTime(tc.blockTime) - res := tk.ParticipationKeeper.IsRegistrationEnabled(tmpCtx, tc.auctionStartTime) + res, _ := tk.ParticipationKeeper.IsRegistrationEnabled(tmpCtx, tc.auctionStartTime) require.Equal(t, tc.expected, res) }) } diff --git a/x/participation/keeper/total_allocations.go b/x/participation/keeper/total_allocations.go index ad568ae1..438de3e1 100644 --- a/x/participation/keeper/total_allocations.go +++ b/x/participation/keeper/total_allocations.go @@ -1,27 +1,37 @@ package keeper import ( + "context" "math" sdkerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/participation/types" + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/participation/types" ) // GetTotalAllocations returns the number of available allocations based on delegations -func (k Keeper) GetTotalAllocations(ctx sdk.Context, address string) (sdkmath.Int, error) { - allocationPriceBondedDec := sdk.NewDecFromInt(k.AllocationPrice(ctx).Bonded) +func (k Keeper) GetTotalAllocations(ctx context.Context, address string) (sdkmath.Int, error) { + params, err := k.Params.Get(ctx) + if err != nil { + return sdkmath.ZeroInt(), ignterrors.Critical("failed to get participation params") + } + + allocationPriceBondedDec := sdkmath.LegacyNewDecFromInt(params.AllocationPrice.Bonded) - accAddr, err := sdk.AccAddressFromBech32(address) + accAddr, err := k.addressCodec.StringToBytes(address) if err != nil { return sdkmath.ZeroInt(), sdkerrors.Wrapf(types.ErrInvalidAddress, err.Error()) } // count total shares for account - totalDel := sdk.ZeroDec() - dels := k.stakingKeeper.GetDelegatorDelegations(ctx, accAddr, math.MaxUint16) + totalDel := sdkmath.LegacyZeroDec() + dels, err := k.stakingKeeper.GetDelegatorDelegations(ctx, accAddr, math.MaxUint16) + if err != nil { + return sdkmath.ZeroInt(), sdkerrors.Wrapf(types.ErrInvalidDelegations, err.Error()) + } + for _, del := range dels { totalDel = totalDel.Add(del.GetShares()) } diff --git a/x/participation/keeper/total_allocations_test.go b/x/participation/keeper/total_allocations_test.go index 6291b664..d765ddce 100644 --- a/x/participation/keeper/total_allocations_test.go +++ b/x/participation/keeper/total_allocations_test.go @@ -7,25 +7,27 @@ import ( sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/participation/types" ) func TestTotalAllocationsGet(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) + ctx, tk, _ := testkeeper.NewTestSetup(t) invalidAddress := strconv.Itoa(1) params := types.DefaultParams() params.AllocationPrice = types.AllocationPrice{Bonded: sdkmath.NewInt(100)} - tk.ParticipationKeeper.SetParams(sdkCtx, params) - + err := tk.ParticipationKeeper.Params.Set(ctx, params) + require.NoError(t, err) validAddress := sample.Address(r) addressNegativeDelegations := sample.Address(r) - tk.DelegateN(sdkCtx, r, validAddress, 100, 10) - tk.DelegateN(sdkCtx, r, addressNegativeDelegations, -100, 10) + _, _, err = tk.DelegateN(ctx, r, validAddress, 100, 10) + require.NoError(t, err) + _, _, err = tk.DelegateN(ctx, r, addressNegativeDelegations, -100, 10) + require.NoError(t, err) for _, tc := range []struct { name string @@ -50,7 +52,7 @@ func TestTotalAllocationsGet(t *testing.T) { }, } { t.Run(tc.name, func(t *testing.T) { - alloc, err := tk.ParticipationKeeper.GetTotalAllocations(sdkCtx, tc.address) + alloc, err := tk.ParticipationKeeper.GetTotalAllocations(ctx, tc.address) if tc.wantError { require.Error(t, err) return diff --git a/x/participation/keeper/used_allocations.go b/x/participation/keeper/used_allocations.go index edbc209c..cf062eac 100644 --- a/x/participation/keeper/used_allocations.go +++ b/x/participation/keeper/used_allocations.go @@ -1,45 +1,35 @@ package keeper import ( - "github.com/cosmos/cosmos-sdk/store/prefix" + "context" + + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/participation/types" + "github.com/ignite/network/x/participation/types" ) -// SetUsedAllocations set a specific usedAllocations in the store from its index -func (k Keeper) SetUsedAllocations(ctx sdk.Context, usedAllocations types.UsedAllocations) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.UsedAllocationsKeyPrefix)) - b := k.cdc.MustMarshal(&usedAllocations) - store.Set(types.UsedAllocationsKey(usedAllocations.Address), b) -} - -// GetUsedAllocations returns a usedAllocations from its index -func (k Keeper) GetUsedAllocations(ctx sdk.Context, address string) (val types.UsedAllocations, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.UsedAllocationsKeyPrefix)) - - b := store.Get(types.UsedAllocationsKey(address)) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - - return val, true +// AllUsedAllocations returns all UsedAllocations. +func (k Keeper) AllUsedAllocations(ctx context.Context) ([]types.UsedAllocations, error) { + usedAllocations := make([]types.UsedAllocations, 0) + err := k.UsedAllocations.Walk(ctx, nil, func(_ string, value types.UsedAllocations) (bool, error) { + usedAllocations = append(usedAllocations, value) + return false, nil + }) + return usedAllocations, err } -// GetAllUsedAllocations returns all usedAllocations -func (k Keeper) GetAllUsedAllocations(ctx sdk.Context) (list []types.UsedAllocations) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.UsedAllocationsKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.UsedAllocations - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) +// AllAuctionUsedAllocations returns all AuctionUsedAllocations. +func (k Keeper) AllAuctionUsedAllocations(ctx context.Context, address string) ([]types.AuctionUsedAllocations, error) { + accAddress, err := k.addressCodec.StringToBytes(address) + if err != nil { + return nil, err } - - return + auctionUsedAllocations := make([]types.AuctionUsedAllocations, 0) + rng := collections.NewPrefixedPairRange[sdk.AccAddress, uint64](accAddress) + err = k.AuctionUsedAllocations.Walk(ctx, rng, func(_ collections.Pair[sdk.AccAddress, uint64], value types.AuctionUsedAllocations) (bool, error) { + auctionUsedAllocations = append(auctionUsedAllocations, value) + return false, nil + }) + return auctionUsedAllocations, err } diff --git a/x/participation/keeper/used_allocations_test.go b/x/participation/keeper/used_allocations_test.go deleted file mode 100644 index b6082a54..00000000 --- a/x/participation/keeper/used_allocations_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/keeper" - "github.com/tendermint/spn/x/participation/types" -) - -func createNUsedAllocations(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.UsedAllocations { - items := make([]types.UsedAllocations, n) - for i := range items { - items[i].Address = sample.Address(r) - items[i].NumAllocations = sample.Int(r) - - keeper.SetUsedAllocations(ctx, items[i]) - } - return items -} - -func TestUsedAllocationsGet(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get", func(t *testing.T) { - items := createNUsedAllocations(tk.ParticipationKeeper, sdkCtx, 10) - for _, item := range items { - rst, found := tk.ParticipationKeeper.GetUsedAllocations(sdkCtx, - item.Address, - ) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } - }) -} - -func TestUsedAllocationsGetAll(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should allow get all", func(t *testing.T) { - items := createNUsedAllocations(tk.ParticipationKeeper, sdkCtx, 10) - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.ParticipationKeeper.GetAllUsedAllocations(sdkCtx)), - ) - }) -} diff --git a/x/participation/module.go b/x/participation/module.go deleted file mode 100644 index d1e46601..00000000 --- a/x/participation/module.go +++ /dev/null @@ -1,172 +0,0 @@ -package participation - -import ( - "context" - "encoding/json" - "fmt" - - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - fundraisingkeeper "github.com/tendermint/fundraising/x/fundraising/keeper" - - "github.com/tendermint/spn/x/participation/client/cli" - "github.com/tendermint/spn/x/participation/keeper" - "github.com/tendermint/spn/x/participation/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} -) - -// ---------------------------------------------------------------------------- -// AppModuleBasic -// ---------------------------------------------------------------------------- - -// AppModuleBasic implements the AppModuleBasic interface for the participation module. -type AppModuleBasic struct { - cdc codec.BinaryCodec -} - -func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { - return AppModuleBasic{cdc: cdc} -} - -// Name returns the participation module's name. -func (AppModuleBasic) Name() string { - return types.ModuleName -} - -func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -// RegisterInterfaces registers the participation module's interface types -func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { - types.RegisterInterfaces(reg) -} - -// DefaultGenesis returns the participation module's default genesis state. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesis()) -} - -// ValidateGenesis performs genesis state validation for the participation module. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - var genState types.GenesisState - if err := cdc.UnmarshalJSON(bz, &genState); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - return genState.Validate() -} - -// RegisterRESTRoutes registers the participation module's REST service handlers. -func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { -} - -// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the participation module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint -} - -// GetTxCmd returns the participation module's root tx command. -func (a AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() -} - -// GetQueryCmd returns the participation module's root query command. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd(types.StoreKey) -} - -// ---------------------------------------------------------------------------- -// AppModule -// ---------------------------------------------------------------------------- - -// AppModule implements the AppModule interface for the participation module. -type AppModule struct { - AppModuleBasic - keeper keeper.Keeper - accountKeeper authkeeper.AccountKeeper - bankKeeper bankkeeper.Keeper - fundraisingKeeper fundraisingkeeper.Keeper -} - -func NewAppModule( - cdc codec.Codec, - keeper keeper.Keeper, - accountKeeper authkeeper.AccountKeeper, - bankKeeper bankkeeper.Keeper, - fundraisingkeeper fundraisingkeeper.Keeper, -) AppModule { - return AppModule{ - AppModuleBasic: NewAppModuleBasic(cdc), - keeper: keeper, - accountKeeper: accountKeeper, - bankKeeper: bankKeeper, - fundraisingKeeper: fundraisingkeeper, - } -} - -// Name returns the participation module's name. -func (am AppModule) Name() string { - return am.AppModuleBasic.Name() -} - -// QuerierRoute returns the participation module's query routing key. -func (AppModule) QuerierRoute() string { return types.QuerierRoute } - -// RegisterServices registers a GRPC query service to respond to the -// module-specific GRPC queries. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) -} - -// RegisterInvariants registers the participation module's invariants. -func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { - keeper.RegisterInvariants(ir, am.keeper) -} - -// InitGenesis performs the participation module's genesis initialization It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { - var genState types.GenesisState - // Initialize global index to index in genesis state - cdc.MustUnmarshalJSON(gs, &genState) - - InitGenesis(ctx, am.keeper, genState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the participation module's exported genesis state as raw JSON bytes. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - genState := ExportGenesis(ctx, am.keeper) - return cdc.MustMarshalJSON(genState) -} - -// ConsensusVersion implements ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 2 } - -// BeginBlock executes all ABCI BeginBlock logic respective to the participation module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock executes all ABCI EndBlock logic respective to the participation module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} diff --git a/x/participation/module/autocli.go b/x/participation/module/autocli.go new file mode 100644 index 00000000..f33d956d --- /dev/null +++ b/x/participation/module/autocli.go @@ -0,0 +1,85 @@ +package participation + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + + modulev1 "github.com/ignite/network/api/network/participation/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Query_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Shows the parameters of the module", + }, + { + RpcMethod: "ListAuctionUsedAllocations", + Use: "list-auction-used-allocations", + Short: "List all AuctionUsedAllocations", + }, + { + RpcMethod: "GetAuctionUsedAllocations", + Use: "get-auction-used-allocations [id]", + Short: "Gets a AuctionUsedAllocations", + Alias: []string{"show-auction-used-allocations"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "address"}}, + }, + { + RpcMethod: "ListUsedAllocations", + Use: "list-used-allocations", + Short: "List all UsedAllocations", + }, + { + RpcMethod: "GetUsedAllocations", + Use: "get-used-allocations [id]", + Short: "Gets a UsedAllocations", + Alias: []string{"show-used-allocations"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "address"}}, + }, + { + RpcMethod: "TotalAllocations", + Use: "total-allocations [address]", + Short: "Query TotalAllocations", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "address"}}, + }, + + { + RpcMethod: "AvailableAllocations", + Use: "available-allocations [address]", + Short: "Query AvailableAllocations", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "address"}}, + }, + + // this line is used by ignite scaffolding # autocli/query + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, // only required if you want to use the custom command + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "UpdateParams", + Skip: true, // skipped because authority gated + }, + { + RpcMethod: "Participate", + Use: "participate [auction-id] [tier-id]", + Short: "Send a Participate tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "auctionID"}, {ProtoField: "tierID"}}, + }, + { + RpcMethod: "WithdrawAllocations", + Use: "withdraw-allocations [auction-id]", + Short: "Send a WithdrawAllocations tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "auctionID"}}, + }, + // this line is used by ignite scaffolding # autocli/tx + }, + }, + } +} diff --git a/x/participation/module/genesis.go b/x/participation/module/genesis.go new file mode 100644 index 00000000..e60c0722 --- /dev/null +++ b/x/participation/module/genesis.go @@ -0,0 +1,60 @@ +package participation + +import ( + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) error { + // Set all the auctionUsedAllocations + for _, elem := range genState.AuctionUsedAllocationsList { + address, err := k.AddressCodec().StringToBytes(elem.Address) + if err != nil { + return err + } + if err := k.AuctionUsedAllocations.Set(ctx, collections.Join(sdk.AccAddress(address), elem.AuctionID), elem); err != nil { + return err + } + } + // Set all the usedAllocations + for _, elem := range genState.UsedAllocationsList { + if err := k.UsedAllocations.Set(ctx, elem.Address, elem); err != nil { + return err + } + } + + // this line is used by starport scaffolding # genesis/module/init + + return k.Params.Set(ctx, genState.Params) +} + +// ExportGenesis returns the module's exported genesis. +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) { + var err error + + genesis := types.DefaultGenesis() + genesis.Params, err = k.Params.Get(ctx) + if err != nil { + return nil, err + } + + if err := k.AuctionUsedAllocations.Walk(ctx, nil, func(_ collections.Pair[sdk.AccAddress, uint64], val types.AuctionUsedAllocations) (stop bool, err error) { + genesis.AuctionUsedAllocationsList = append(genesis.AuctionUsedAllocationsList, val) + return false, nil + }); err != nil { + return nil, err + } + if err := k.UsedAllocations.Walk(ctx, nil, func(_ string, val types.UsedAllocations) (stop bool, err error) { + genesis.UsedAllocationsList = append(genesis.UsedAllocationsList, val) + return false, nil + }); err != nil { + return nil, err + } + // this line is used by starport scaffolding # genesis/module/export + + return genesis, nil +} diff --git a/x/participation/module/genesis_test.go b/x/participation/module/genesis_test.go new file mode 100644 index 00000000..0ef5c473 --- /dev/null +++ b/x/participation/module/genesis_test.go @@ -0,0 +1,50 @@ +package participation_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + participation "github.com/ignite/network/x/participation/module" + "github.com/ignite/network/x/participation/types" +) + +func TestGenesis(t *testing.T) { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + + AuctionUsedAllocationsList: []types.AuctionUsedAllocations{ + { + Address: "0", + }, + { + Address: "1", + }, + }, + UsedAllocationsList: []types.UsedAllocations{ + { + Address: "0", + }, + { + Address: "1", + }, + }, + // this line is used by starport scaffolding # genesis/test/state + } + + k, ctx, _ := keepertest.ParticipationKeeper(t) + err := participation.InitGenesis(ctx, k, genesisState) + require.NoError(t, err) + got, err := participation.ExportGenesis(ctx, k) + require.NoError(t, err) + require.NotNil(t, got) + + nullify.Fill(&genesisState) + nullify.Fill(got) + + require.ElementsMatch(t, genesisState.AuctionUsedAllocationsList, got.AuctionUsedAllocationsList) + require.ElementsMatch(t, genesisState.UsedAllocationsList, got.UsedAllocationsList) + // this line is used by starport scaffolding # genesis/test/assert +} diff --git a/x/participation/module/module.go b/x/participation/module/module.go new file mode 100644 index 00000000..87e4a5d1 --- /dev/null +++ b/x/participation/module/module.go @@ -0,0 +1,231 @@ +package participation + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + + // this line is used by starport scaffolding # 1 + + modulev1 "github.com/ignite/network/api/network/participation/module/v1" + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasInvariants = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface that defines the +// independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module, which is used +// to marshal and unmarshal structs to/from []byte in order to persist them in the module's KVStore. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers a module's interface types and their concrete implementations as proto.Message. +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns a default GenesisState for the module, marshalled to json.RawMessage. +// The default GenesisState need to be defined by the module developer and is primarily used for testing. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis used to validate the GenesisState, given in its json.RawMessage form. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper + fundraisingKeeper types.FundraisingKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, + fundraisingKeeper types.FundraisingKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + fundraisingKeeper: fundraisingKeeper, + } +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper)) +} + +// RegisterInvariants registers the invariants of the module. If an invariant deviates from its predicted value, the InvariantRegistry triggers appropriate logic (most often the chain will be halted) +func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { + keeper.RegisterInvariants(ir, am.keeper) +} + +// InitGenesis performs the module's genesis initialization. It returns no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + if err := InitGenesis(ctx, am.keeper, genState); err != nil { + panic(err) + } +} + +// ExportGenesis returns the module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState, err := ExportGenesis(ctx, am.keeper) + if err != nil { + panic(err) + } + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion is a sequence number for state-breaking change of the module. +// It should be incremented on each consensus-breaking change introduced by the module. +// To avoid wrong/empty versions, the initial version should be set to 1. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block. +// The end block implementation is optional. +func (am AppModule) EndBlock(_ context.Context) error { + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// ---------------------------------------------------------------------------- +// App Wiring Setup +// ---------------------------------------------------------------------------- + +func init() { + appmodule.Register( + &modulev1.Module{}, + appmodule.Provide(ProvideModule), + ) +} + +type ModuleInputs struct { + depinject.In + + AddressCodec address.Codec + StoreService store.KVStoreService + Cdc codec.Codec + Config *modulev1.Module + Logger log.Logger + + AccountKeeper types.AccountKeeper + BankKeeper types.BankKeeper + StakingKeeper types.StakingKeeper + FundraisingKeeper types.FundraisingKeeper +} + +type ModuleOutputs struct { + depinject.Out + + ParticipationKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + k := keeper.NewKeeper( + in.Cdc, + in.AddressCodec, + in.StoreService, + in.Logger, + authority.String(), + in.StakingKeeper, + in.FundraisingKeeper, + ) + m := NewAppModule( + in.Cdc, + k, + in.AccountKeeper, + in.BankKeeper, + in.FundraisingKeeper, + ) + + return ModuleOutputs{ParticipationKeeper: k, Module: m} +} diff --git a/x/participation/module/simulation.go b/x/participation/module/simulation.go new file mode 100644 index 00000000..7edc41d3 --- /dev/null +++ b/x/participation/module/simulation.go @@ -0,0 +1,97 @@ +package participation + +import ( + "math/rand" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + participationsimulation "github.com/ignite/network/x/participation/simulation" + "github.com/ignite/network/x/participation/types" +) + +// avoid unused import issue +var _ = sample.AccAddress + +const ( + defaultWeightMsgParticipate int = 50 + defaultWeightMsgWithdrawAllocations int = 50 + + opWeightMsgParticipate = "op_weight_msg_participate" + opWeightMsgWithdrawAllocations = "op_weight_withdraw_allocations" + + // this line is used by starport scaffolding # simapp/module/const +) + +// GenerateGenesisState creates a randomized GenState of the module. +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + accs := make([]string, len(simState.Accounts)) + for i, acc := range simState.Accounts { + accs[i] = acc.Address.String() + } + participationGenesis := types.GenesisState{ + Params: types.DefaultParams(), + // this line is used by starport scaffolding # simapp/module/genesisState + } + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&participationGenesis) +} + +// RegisterStoreDecoder registers a decoder. +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { + operations := make([]simtypes.WeightedOperation, 0) + + var weightMsgParticipate int + simState.AppParams.GetOrGenerate(opWeightMsgParticipate, &weightMsgParticipate, nil, + func(_ *rand.Rand) { + weightMsgParticipate = defaultWeightMsgParticipate + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgParticipate, + participationsimulation.SimulateMsgParticipate(am.accountKeeper, am.bankKeeper, am.fundraisingKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgWithdrawAllocations int + simState.AppParams.GetOrGenerate(opWeightMsgWithdrawAllocations, &weightMsgWithdrawAllocations, nil, + func(_ *rand.Rand) { + weightMsgWithdrawAllocations = defaultWeightMsgWithdrawAllocations + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgWithdrawAllocations, + participationsimulation.SimulateMsgWithdrawAllocations(am.accountKeeper, am.bankKeeper, am.fundraisingKeeper, am.keeper, simState.TxConfig), + )) + + // this line is used by starport scaffolding # simapp/module/operation + + return operations +} + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + simulation.NewWeightedProposalMsg( + opWeightMsgParticipate, + defaultWeightMsgParticipate, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + participationsimulation.SimulateMsgParticipate(am.accountKeeper, am.bankKeeper, am.fundraisingKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgWithdrawAllocations, + defaultWeightMsgWithdrawAllocations, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + participationsimulation.SimulateMsgWithdrawAllocations(am.accountKeeper, am.bankKeeper, am.fundraisingKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + // this line is used by starport scaffolding # simapp/module/OpMsg + } +} diff --git a/x/participation/module_simulation.go b/x/participation/module_simulation.go deleted file mode 100644 index fea78abd..00000000 --- a/x/participation/module_simulation.go +++ /dev/null @@ -1,96 +0,0 @@ -package participation - -import ( - "math/rand" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - - "github.com/tendermint/spn/testutil/sample" - participationsim "github.com/tendermint/spn/x/participation/simulation" - "github.com/tendermint/spn/x/participation/types" -) - -const ( - defaultWeightMsgParticipate int = 50 - defaultWeightMsgWithdrawAllocations int = 50 - - opWeightMsgParticipate = "op_weight_msg_participate" - opWeightMsgWithdrawAllocations = "op_weight_withdraw_allocations" - - // this line is used by starport scaffolding # simapp/module/const -) - -// GenerateGenesisState creates a randomized GenState of the module -func (AppModule) GenerateGenesisState(simState *module.SimulationState) { - accs := make([]string, len(simState.Accounts)) - for i, acc := range simState.Accounts { - accs[i] = acc.Address.String() - } - participationGenesis := types.GenesisState{ - Params: sample.ParticipationParams(simState.Rand), - // this line is used by starport scaffolding # simapp/module/genesisState - } - simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&participationGenesis) -} - -// ProposalContents doesn't return any content functions for governance proposals -func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { - return nil -} - -// RandomizedParams creates randomized param changes for the simulator -func (am AppModule) RandomizedParams(r *rand.Rand) []simtypes.LegacyParamChange { - participationParams := sample.ParticipationParams(r) - return []simtypes.LegacyParamChange{ - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyAllocationPrice), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(participationParams.AllocationPrice)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyParticipationTierList), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(participationParams.ParticipationTierList)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyRegistrationPeriod), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(participationParams.RegistrationPeriod)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyWithdrawalDelay), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(participationParams.WithdrawalDelay)) - }), - } -} - -// RegisterStoreDecoder registers a decoder -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} - -// WeightedOperations returns the all the gov module operations with their respective weights. -func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { - var ( - weightMsgParticipate int - weightMsgWithdrawAllocations int - ) - - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgParticipate, &weightMsgParticipate, nil, - func(_ *rand.Rand) { - weightMsgParticipate = defaultWeightMsgParticipate - }, - ) - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgWithdrawAllocations, &weightMsgWithdrawAllocations, nil, - func(_ *rand.Rand) { - weightMsgWithdrawAllocations = defaultWeightMsgWithdrawAllocations - }, - ) - - // this line is used by starport scaffolding # simapp/module/operation - - return []simtypes.WeightedOperation{ - simulation.NewWeightedOperation( - weightMsgParticipate, - participationsim.SimulateMsgParticipate(am.accountKeeper, am.bankKeeper, am.fundraisingKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgWithdrawAllocations, - participationsim.SimulateMsgWithdrawAllocations(am.accountKeeper, am.bankKeeper, am.fundraisingKeeper, am.keeper), - ), - } -} diff --git a/x/participation/simulation/store.go b/x/participation/simulation/helpers.go similarity index 56% rename from x/participation/simulation/store.go rename to x/participation/simulation/helpers.go index 38b1300c..91912aa9 100644 --- a/x/participation/simulation/store.go +++ b/x/participation/simulation/helpers.go @@ -3,102 +3,31 @@ package simulation import ( "math/rand" + "cosmossdk.io/collections" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - fundraisingkeeper "github.com/tendermint/fundraising/x/fundraising/keeper" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" - "github.com/tendermint/spn/x/participation/keeper" - "github.com/tendermint/spn/x/participation/types" + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" ) -// RandomAccWithBalance returns random account with the desired available balance -func RandomAccWithBalance(ctx sdk.Context, r *rand.Rand, - bk bankkeeper.Keeper, - accs []simtypes.Account, - desired sdk.Coins, -) (simtypes.Account, sdk.Coins, bool) { - // Randomize the set - r.Shuffle(len(accs), func(i, j int) { - accs[i], accs[j] = accs[j], accs[i] - }) - - for _, acc := range accs { - balances := bk.GetAllBalances(ctx, acc.Address) - if len(balances) == 0 { - continue - } - - if balances.IsAllGTE(desired) { - return acc, balances, true - } - } - - return simtypes.Account{}, sdk.NewCoins(), false -} - -// RandomAuctionStandby returns random auction that is in standby -func RandomAuctionStandby(ctx sdk.Context, r *rand.Rand, fk fundraisingkeeper.Keeper) (auction fundraisingtypes.AuctionI, found bool) { - auctions := fk.GetAuctions(ctx) - if len(auctions) == 0 { - return auction, false - } - - r.Shuffle(len(auctions), func(i, j int) { - auctions[i], auctions[j] = auctions[j], auctions[i] - }) - - for _, a := range auctions { - // auction must be in standby status - if a.GetStatus() == fundraisingtypes.AuctionStatusStandBy { - return a, true - } - } - - return auction, false -} - -// RandomAuctionParticipationEnabled returns random auction where participation is enabled -func RandomAuctionParticipationEnabled( +// RandomAuctionWithdrawEnabled returns random auction where used allocations can be withdrawn at blockTime +func RandomAuctionWithdrawEnabled( ctx sdk.Context, r *rand.Rand, - fk fundraisingkeeper.Keeper, + fk types.FundraisingKeeper, k keeper.Keeper, ) (auction fundraisingtypes.AuctionI, found bool) { - auctions := fk.GetAuctions(ctx) - if len(auctions) == 0 { + auctions, err := fk.Auctions(ctx) + if err != nil || len(auctions) == 0 { return auction, false } - - r.Shuffle(len(auctions), func(i, j int) { - auctions[i], auctions[j] = auctions[j], auctions[i] - }) - - for _, a := range auctions { - if a.GetStatus() != fundraisingtypes.AuctionStatusStandBy { - continue - } - if !k.IsRegistrationEnabled(ctx, a.GetStartTime()) { - continue - } - auction = a - found = true + params, err := k.Params.Get(ctx) + if err != nil { + panic(err) } - - return -} - -// RandomAuctionWithdrawEnabled returns random auction where used allocations can be withdrawn at blockTime -func RandomAuctionWithdrawEnabled( - ctx sdk.Context, - r *rand.Rand, - fk fundraisingkeeper.Keeper, - k keeper.Keeper, -) (auction fundraisingtypes.AuctionI, found bool) { - auctions := fk.GetAuctions(ctx) - withdrawalDelay := k.WithdrawalDelay(ctx) if len(auctions) == 0 { return auction, false } @@ -114,7 +43,7 @@ func RandomAuctionWithdrawEnabled( } // check if withdrawal delay has passed and hence withdraw is enabled - if ctx.BlockTime().After(a.GetStartTime().Add(withdrawalDelay)) { + if ctx.BlockTime().After(a.GetStartTime().Add(params.WithdrawalDelay)) { return a, true } } @@ -143,8 +72,8 @@ func RandomAccWithAvailableAllocations(ctx sdk.Context, r *rand.Rand, } if amt.GTE(desired) { - _, found := k.GetAuctionUsedAllocations(ctx, acc.Address.String(), auctionID) - if found { + _, err := k.AuctionUsedAllocations.Get(ctx, collections.Join(acc.Address, auctionID)) + if err != nil { continue } @@ -171,8 +100,8 @@ func RandomAccWithAuctionUsedAllocationsNotWithdrawn( // account must have used allocations for this auction that have not yet been withdrawn for _, acc := range accs { - usedAllocations, found := k.GetAuctionUsedAllocations(ctx, acc.Address.String(), auctionID) - if !found || usedAllocations.Withdrawn { + usedAllocations, err := k.AuctionUsedAllocations.Get(ctx, collections.Join(acc.Address, auctionID)) + if err != nil || usedAllocations.Withdrawn { continue } @@ -191,19 +120,33 @@ func RandomTierFromList(r *rand.Rand, tierList []types.Tier) (types.Tier, bool) return tierList[index], true } -func FindLargestMaxBid(tierList []types.Tier) (types.Tier, bool) { - largestMaxBid := sdkmath.ZeroInt() - if len(tierList) == 0 { - return types.Tier{}, false +// RandomAuctionParticipationEnabled returns random auction where participation is enabled +func RandomAuctionParticipationEnabled( + ctx sdk.Context, + r *rand.Rand, + fk types.FundraisingKeeper, + k keeper.Keeper, +) (auction fundraisingtypes.AuctionI, found bool) { + auctions, err := fk.Auctions(ctx) + if err != nil || len(auctions) == 0 { + return auction, false } - index := 0 - for i, tier := range tierList { - if tier.Benefits.MaxBidAmount.GT(largestMaxBid) { - largestMaxBid = tier.Benefits.MaxBidAmount - index = i + r.Shuffle(len(auctions), func(i, j int) { + auctions[i], auctions[j] = auctions[j], auctions[i] + }) + + for _, a := range auctions { + if a.GetStatus() != fundraisingtypes.AuctionStatusStandBy { + continue + } + ok, err := k.IsRegistrationEnabled(ctx, a.GetStartTime()) + if err != nil || !ok { + continue } + auction = a + found = true } - return tierList[index], true + return } diff --git a/x/participation/simulation/participate.go b/x/participation/simulation/participate.go new file mode 100644 index 00000000..caf894dd --- /dev/null +++ b/x/participation/simulation/participate.go @@ -0,0 +1,68 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" +) + +func SimulateMsgParticipate( + ak types.AccountKeeper, + bk types.BankKeeper, + fk types.FundraisingKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgParticipate{} + auction, found := RandomAuctionParticipationEnabled(ctx, r, fk, k) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no valid auction found"), nil, nil + } + + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + + tierList := params.ParticipationTierList + tier, found := RandomTierFromList(r, tierList) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no valid tiers"), nil, nil + } + + simAccount, _, found := RandomAccWithAvailableAllocations(ctx, r, k, accs, tier.RequiredAllocations, auction.GetId()) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no account with allocations"), nil, nil + } + + msg = types.NewMsgParticipate( + simAccount.Address.String(), + auction.GetId(), + tier.TierID, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/participation/simulation/simulation.go b/x/participation/simulation/simulation.go deleted file mode 100644 index dec0c44a..00000000 --- a/x/participation/simulation/simulation.go +++ /dev/null @@ -1,159 +0,0 @@ -package simulation - -import ( - "errors" - "math/rand" - - "github.com/cosmos/cosmos-sdk/baseapp" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - sdksimulation "github.com/cosmos/cosmos-sdk/x/simulation" - fundraisingkeeper "github.com/tendermint/fundraising/x/fundraising/keeper" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - "github.com/tendermint/spn/testutil/encoding" - "github.com/tendermint/spn/testutil/simulation" - "github.com/tendermint/spn/x/participation/keeper" - "github.com/tendermint/spn/x/participation/types" -) - -func SimulateMsgParticipate( - ak authkeeper.AccountKeeper, - bk bankkeeper.Keeper, - fk fundraisingkeeper.Keeper, - k keeper.Keeper, -) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - msg := &types.MsgParticipate{} - auction, found := RandomAuctionParticipationEnabled(ctx, r, fk, k) - if !found { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no valid auction found"), nil, nil - } - - tierList := k.ParticipationTierList(ctx) - tier, found := RandomTierFromList(r, tierList) - if !found { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no valid tiers"), nil, nil - } - - simAccount, _, found := RandomAccWithAvailableAllocations(ctx, r, k, accs, tier.RequiredAllocations, auction.GetId()) - if !found { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no account with allocations"), nil, nil - } - - msg = types.NewMsgParticipate( - simAccount.Address.String(), - auction.GetId(), - tier.TierID, - ) - - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -func SimulateMsgWithdrawAllocations( - ak authkeeper.AccountKeeper, - bk bankkeeper.Keeper, - fk fundraisingkeeper.Keeper, - k keeper.Keeper, -) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - msg := &types.MsgWithdrawAllocations{} - auction, found := RandomAuctionWithdrawEnabled(ctx, r, fk, k) - if !found { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no valid auction found"), nil, nil - } - - simAccount, found := RandomAccWithAuctionUsedAllocationsNotWithdrawn(ctx, r, k, accs, auction.GetId()) - if !found { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no account with used allocations found"), nil, nil - } - - msg = types.NewMsgWithdrawAllocations( - simAccount.Address.String(), - auction.GetId(), - ) - - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -func SimulateMsgCancelAuction( - ak authkeeper.AccountKeeper, - bk bankkeeper.Keeper, - fk fundraisingkeeper.Keeper, -) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - var simAccount simtypes.Account - msg := &fundraisingtypes.MsgCancelAuction{} - auction, found := RandomAuctionStandby(ctx, r, fk) - if !found { - return simtypes.NoOpMsg(fundraisingtypes.ModuleName, msg.Type(), "no valid auction found"), nil, nil - } - - // find account of auctioneer - found = false - for _, acc := range accs { - if acc.Address.Equals(auction.GetAuctioneer()) { - simAccount = acc - found = true - break - } - } - if !found { - // return error, this should never happen - return simtypes.OperationMsg{}, nil, errors.New("auctioneer not found within provided accounts") - } - - msg = fundraisingtypes.NewMsgCancelAuction(simAccount.Address.String(), auction.GetId()) - - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: fundraisingtypes.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} diff --git a/x/participation/simulation/store_test.go b/x/participation/simulation/store_test.go deleted file mode 100644 index 0c6df4ff..00000000 --- a/x/participation/simulation/store_test.go +++ /dev/null @@ -1,441 +0,0 @@ -package simulation_test - -import ( - "testing" - "time" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/simulation" - minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" - "github.com/stretchr/testify/require" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - participationsim "github.com/tendermint/spn/x/participation/simulation" - "github.com/tendermint/spn/x/participation/types" -) - -func TestRandomAccWithBalance(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - r = sample.Rand() - accs = simulation.RandomAccounts(r, 5) - newCoins sdk.Coins - ) - - t.Run("should set account balance", func(t *testing.T) { - newCoins = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1000))) - err := tk.BankKeeper.MintCoins(ctx, minttypes.ModuleName, newCoins) - require.NoError(t, err) - err = tk.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, accs[0].Address, newCoins) - require.NoError(t, err) - }) - - tests := []struct { - name string - accounts []simulation.Account - desiredCoins sdk.Coins - wantAccount simulation.Account - found bool - }{ - { - name: "should find no accounts with balance", - accounts: accs[1:], - found: false, - }, - { - name: "should find one account with balance", - accounts: accs, - desiredCoins: newCoins, - wantAccount: accs[0], - found: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, coins, found := participationsim.RandomAccWithBalance(ctx, r, tk.BankKeeper, tt.accounts, tt.desiredCoins) - require.Equal(t, tt.found, found) - if !tt.found { - return - } - - require.Equal(t, tt.wantAccount, got) - require.Equal(t, tt.desiredCoins, coins) - }) - } -} - -func TestRandomAuctionStandby(t *testing.T) { - var ( - r = sample.Rand() - accs = simulation.RandomAccounts(r, 5) - sellingCoin1 = sample.Coin(r) - ) - - t.Run("should find no auction that satisfies requirements", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - startTime := ctx.BlockTime().Add(-time.Hour) - endTime := ctx.BlockTime().Add(time.Hour * 24 * 7) - - // set custom auction with status AuctionStarted - endTimes := []time.Time{endTime} - ba := &fundraisingtypes.BaseAuction{ - Id: 0, - Type: fundraisingtypes.AuctionTypeFixedPrice, - Auctioneer: accs[0].Address.String(), - StartTime: startTime, - EndTimes: endTimes, - Status: fundraisingtypes.AuctionStatusStarted, - } - auction := fundraisingtypes.NewFixedPriceAuction(ba, sample.Coin(r)) - tk.FundraisingKeeper.SetAuction(ctx, auction) - - // set custom auction with status AuctionCancelled - ba = &fundraisingtypes.BaseAuction{ - Id: 1, - Type: fundraisingtypes.AuctionTypeFixedPrice, - Auctioneer: accs[0].Address.String(), - StartTime: startTime, - EndTimes: endTimes, - Status: fundraisingtypes.AuctionStatusCancelled, - } - auction = fundraisingtypes.NewFixedPriceAuction(ba, sample.Coin(r)) - tk.FundraisingKeeper.SetAuction(ctx, auction) - - _, found := participationsim.RandomAuctionStandby(ctx, r, tk.FundraisingKeeper) - require.False(t, found) - }) - - t.Run("should find one auction", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - startTime := ctx.BlockTime().Add(time.Hour * 10) - endTime := ctx.BlockTime().Add(time.Hour * 24 * 7) - - // initialize auction - tk.Mint(ctx, accs[0].Address.String(), sdk.NewCoins(sellingCoin1)) - auctionID1 := tk.CreateFixedPriceAuction(ctx, r, accs[0].Address.String(), sellingCoin1, startTime, endTime) - auction1, found := tk.FundraisingKeeper.GetAuction(ctx, auctionID1) - require.True(t, found) - - got, found := participationsim.RandomAuctionStandby(ctx, r, tk.FundraisingKeeper) - require.True(t, found) - require.Equal(t, auction1, got) - }) - - t.Run("should not find auctions", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - _, found := participationsim.RandomAuctionStandby(ctx, r, tk.FundraisingKeeper) - require.False(t, found) - }) -} - -func TestRandomAuctionParticipationEnabled(t *testing.T) { - var ( - r = sample.Rand() - accs = simulation.RandomAccounts(r, 5) - sellingCoin = sample.Coin(r) - ctx, tk, _ = testkeeper.NewTestSetup(t) - registrationPeriod = time.Hour - ) - - params := tk.ParticipationKeeper.GetParams(ctx) - params.RegistrationPeriod = registrationPeriod - tk.ParticipationKeeper.SetParams(ctx, params) - - t.Run("should not find auctions", func(t *testing.T) { - _, found := participationsim.RandomAuctionParticipationEnabled(ctx, r, tk.FundraisingKeeper, *tk.ParticipationKeeper) - require.False(t, found) - }) - - t.Run("should find no auction that satisfies requirements", func(t *testing.T) { - startTime := ctx.BlockTime().Add(time.Hour * 10) - endTime := ctx.BlockTime().Add(time.Hour * 24 * 7) - - // initialize auction - tk.Mint(ctx, accs[0].Address.String(), sdk.NewCoins(sellingCoin)) - auctionID := tk.CreateFixedPriceAuction(ctx, r, accs[0].Address.String(), sellingCoin, startTime, endTime) - _, found := tk.FundraisingKeeper.GetAuction(ctx, auctionID) - require.True(t, found) - - _, found = participationsim.RandomAuctionParticipationEnabled(ctx, r, tk.FundraisingKeeper, *tk.ParticipationKeeper) - require.False(t, found) - }) - - t.Run("should find one auction", func(t *testing.T) { - startTime := ctx.BlockTime().Add(time.Minute * 30) - endTime := ctx.BlockTime().Add(time.Hour * 24 * 7) - - // initialize auction - tk.Mint(ctx, accs[0].Address.String(), sdk.NewCoins(sellingCoin)) - auctionID := tk.CreateFixedPriceAuction(ctx, r, accs[0].Address.String(), sellingCoin, startTime, endTime) - auction, found := tk.FundraisingKeeper.GetAuction(ctx, auctionID) - require.True(t, found) - - got, found := participationsim.RandomAuctionParticipationEnabled(ctx, r, tk.FundraisingKeeper, *tk.ParticipationKeeper) - require.True(t, found) - require.Equal(t, auction, got) - }) -} - -func TestRandomAuctionWithdrawEnabled(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - r = sample.Rand() - accs = simulation.RandomAccounts(r, 5) - withdrawalDelay = time.Hour * 5 - invalidStartTime = ctx.BlockTime() - validStartTime = ctx.BlockTime().Add(-withdrawalDelay).Add(-time.Hour) - endTime = ctx.BlockTime().Add(time.Hour * 24 * 7) - sellingCoin = sample.Coin(r) - ) - - params := types.DefaultParams() - params.WithdrawalDelay = withdrawalDelay - tk.ParticipationKeeper.SetParams(ctx, params) - - t.Run("should find no auctions", func(t *testing.T) { - _, found := participationsim.RandomAuctionWithdrawEnabled(ctx, r, tk.FundraisingKeeper, *tk.ParticipationKeeper) - require.False(t, found) - }) - - // populate keeper with some invalid auctions - endTimes := []time.Time{endTime} - ba := &fundraisingtypes.BaseAuction{ - Id: 0, - Type: fundraisingtypes.AuctionTypeFixedPrice, - Auctioneer: accs[0].Address.String(), - StartTime: invalidStartTime, // started, but withdrawal delay not reached - EndTimes: endTimes, - Status: fundraisingtypes.AuctionStatusStarted, - } - invalidAuction := fundraisingtypes.NewFixedPriceAuction(ba, sample.Coin(r)) - tk.FundraisingKeeper.SetAuction(ctx, invalidAuction) - - ba = &fundraisingtypes.BaseAuction{ - Id: 1, - Type: fundraisingtypes.AuctionTypeFixedPrice, - Auctioneer: accs[0].Address.String(), - StartTime: invalidStartTime.Add(time.Hour), // not yet started, but withdrawal delay not reached - EndTimes: endTimes, - Status: fundraisingtypes.AuctionStatusStandBy, - } - invalidAuction = fundraisingtypes.NewFixedPriceAuction(ba, sample.Coin(r)) - tk.FundraisingKeeper.SetAuction(ctx, invalidAuction) - - t.Run("should find no auction that satisfies requirements", func(t *testing.T) { - _, found := participationsim.RandomAuctionWithdrawEnabled(ctx, r, tk.FundraisingKeeper, *tk.ParticipationKeeper) - require.False(t, found) - }) - - // add valid auction - tk.Mint(ctx, accs[0].Address.String(), sdk.NewCoins(sellingCoin)) - validAuctionID := tk.CreateFixedPriceAuction(ctx, r, accs[0].Address.String(), sellingCoin, validStartTime, endTime) - validAuction, found := tk.FundraisingKeeper.GetAuction(ctx, validAuctionID) - require.True(t, found) - - t.Run("should find auction where withdrawal delay has passed", func(t *testing.T) { - foundAuction, found := participationsim.RandomAuctionWithdrawEnabled(ctx, r, tk.FundraisingKeeper, *tk.ParticipationKeeper) - require.True(t, found) - require.Equal(t, validAuction, foundAuction) - require.True(t, ctx.BlockTime().After(foundAuction.GetStartTime().Add(withdrawalDelay))) - }) - - // forcefully set status for auction created above to cancelled - err := validAuction.SetStatus(fundraisingtypes.AuctionStatusCancelled) - require.NoError(t, err) - tk.FundraisingKeeper.SetAuction(ctx, validAuction) - - t.Run("should find cancelled auction", func(t *testing.T) { - foundAuction, found := participationsim.RandomAuctionWithdrawEnabled(ctx, r, tk.FundraisingKeeper, *tk.ParticipationKeeper) - require.True(t, found) - require.Equal(t, validAuction, foundAuction) - require.Equal(t, fundraisingtypes.AuctionStatusCancelled, foundAuction.GetStatus()) - }) -} - -func TestRandomAccWithAvailableAllocations(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - r = sample.Rand() - accs = simulation.RandomAccounts(r, 5) - auctionID uint64 = 0 - ) - - allocationPrice := types.AllocationPrice{Bonded: sdkmath.NewInt(100)} - params := types.DefaultParams() - params.AllocationPrice = allocationPrice - tk.ParticipationKeeper.SetParams(ctx, params) - - tk.DelegateN(ctx, r, accs[0].Address.String(), 100, 10) - tk.DelegateN(ctx, r, accs[1].Address.String(), 100, 10) - - tk.ParticipationKeeper.SetUsedAllocations(ctx, types.UsedAllocations{ - Address: accs[1].Address.String(), - NumAllocations: sdkmath.NewInt(2), - }) - tk.ParticipationKeeper.SetAuctionUsedAllocations(ctx, types.AuctionUsedAllocations{ - Address: accs[1].Address.String(), - AuctionID: auctionID, - NumAllocations: sdkmath.NewInt(2), - Withdrawn: false, - }) - - tests := []struct { - name string - accounts []simulation.Account - desiredAllocations sdkmath.Int - wantAccount simulation.Account - found bool - }{ - { - name: "should find no accounts with allocations", - accounts: accs[2:], - desiredAllocations: sdkmath.NewInt(10), - found: false, - }, - { - name: "should not find account with sufficient allocations", - accounts: accs[1:], - desiredAllocations: sdkmath.NewInt(10), - found: false, - }, - { - name: "should find one account with sufficient allocations", - accounts: accs, - desiredAllocations: sdkmath.NewInt(10), - wantAccount: accs[0], - found: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, allocations, found := participationsim.RandomAccWithAvailableAllocations( - ctx, - r, - *tk.ParticipationKeeper, - tt.accounts, - tt.desiredAllocations, - auctionID, - ) - require.Equal(t, tt.found, found) - if !tt.found { - return - } - - require.Equal(t, tt.wantAccount, got) - require.Equal(t, tt.desiredAllocations, allocations) - }) - } -} - -func TestRandomAccWithAuctionUsedAllocationsNotWithdrawn(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - r = sample.Rand() - accs = simulation.RandomAccounts(r, 5) - auctionID uint64 = 0 - ) - - allocationPrice := types.AllocationPrice{Bonded: sdkmath.NewInt(100)} - params := types.DefaultParams() - params.AllocationPrice = allocationPrice - tk.ParticipationKeeper.SetParams(ctx, params) - - // add some delegations - tk.DelegateN(ctx, r, accs[0].Address.String(), 100, 10) - tk.DelegateN(ctx, r, accs[1].Address.String(), 100, 10) - tk.DelegateN(ctx, r, accs[2].Address.String(), 100, 10) - - // add withdrawn allocations for accs[1] - tk.ParticipationKeeper.SetUsedAllocations(ctx, types.UsedAllocations{ - Address: accs[1].Address.String(), - NumAllocations: sdkmath.NewInt(2), - }) - tk.ParticipationKeeper.SetAuctionUsedAllocations(ctx, types.AuctionUsedAllocations{ - Address: accs[1].Address.String(), - AuctionID: auctionID, - NumAllocations: sdkmath.NewInt(2), - Withdrawn: true, - }) - - // add used allocations not yet withdrawn for accs[2] - tk.ParticipationKeeper.SetUsedAllocations(ctx, types.UsedAllocations{ - Address: accs[2].Address.String(), - NumAllocations: sdkmath.NewInt(2), - }) - tk.ParticipationKeeper.SetAuctionUsedAllocations(ctx, types.AuctionUsedAllocations{ - Address: accs[2].Address.String(), - AuctionID: auctionID, - NumAllocations: sdkmath.NewInt(2), - Withdrawn: false, - }) - - tests := []struct { - name string - accounts []simulation.Account - wantAccount simulation.Account - found bool - }{ - { - name: "should find no account with used allocations that can be withdrawn", - accounts: accs[:2], - found: false, - }, - - { - name: "should find no accounts with allocations", - accounts: accs[3:], - found: false, - }, - { - name: "should find one account has allocations that can be withdrawn", - accounts: accs, - wantAccount: accs[2], - found: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, found := participationsim.RandomAccWithAuctionUsedAllocationsNotWithdrawn( - ctx, - r, - *tk.ParticipationKeeper, - tt.accounts, - auctionID, - ) - require.Equal(t, tt.found, found) - if !tt.found { - return - } - - require.Equal(t, tt.wantAccount, got) - }) - } -} - -func TestRandomTierFromList(t *testing.T) { - r := sample.Rand() - - // find the existing 1 tier - tierList := []types.Tier{ - { - TierID: 1, - RequiredAllocations: sdkmath.NewInt(10), - Benefits: types.TierBenefits{}, - }, - } - - t.Run("should find valid tier", func(t *testing.T) { - tier, found := participationsim.RandomTierFromList(r, tierList) - require.True(t, found) - require.Equal(t, tier, tierList[0]) - }) - - t.Run("should find no valid tiers with empty list", func(t *testing.T) { - _, found := participationsim.RandomTierFromList(r, []types.Tier{}) - require.False(t, found) - }) -} diff --git a/x/participation/simulation/withdraw_allocations.go b/x/participation/simulation/withdraw_allocations.go new file mode 100644 index 00000000..bfdcae51 --- /dev/null +++ b/x/participation/simulation/withdraw_allocations.go @@ -0,0 +1,57 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/x/participation/keeper" + "github.com/ignite/network/x/participation/types" +) + +func SimulateMsgWithdrawAllocations( + ak types.AccountKeeper, + bk types.BankKeeper, + fk types.FundraisingKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgWithdrawAllocations{} + + auction, found := RandomAuctionWithdrawEnabled(ctx, r, fk, k) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no valid auction found"), nil, nil + } + + simAccount, found := RandomAccWithAuctionUsedAllocationsNotWithdrawn(ctx, r, k, accs, auction.GetId()) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no account with used allocations found"), nil, nil + } + + msg = types.NewMsgWithdrawAllocations( + simAccount.Address.String(), + auction.GetId(), + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/participation/types/auction_used_allocations.pb.go b/x/participation/types/auction_used_allocations.pb.go index ea86da41..b523d82e 100644 --- a/x/participation/types/auction_used_allocations.pb.go +++ b/x/participation/types/auction_used_allocations.pb.go @@ -1,12 +1,12 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/participation/auction_used_allocations.proto +// source: network/participation/v1/auction_used_allocations.proto package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,19 +25,18 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// Allocations used by a user for a specific auction type AuctionUsedAllocations struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` - Withdrawn bool `protobuf:"varint,3,opt,name=withdrawn,proto3" json:"withdrawn,omitempty"` - NumAllocations github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=numAllocations,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"numAllocations"` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` + Withdrawn bool `protobuf:"varint,3,opt,name=withdrawn,proto3" json:"withdrawn,omitempty"` + NumAllocations cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=numAllocations,proto3,customtype=cosmossdk.io/math.Int" json:"numAllocations"` } func (m *AuctionUsedAllocations) Reset() { *m = AuctionUsedAllocations{} } func (m *AuctionUsedAllocations) String() string { return proto.CompactTextString(m) } func (*AuctionUsedAllocations) ProtoMessage() {} func (*AuctionUsedAllocations) Descriptor() ([]byte, []int) { - return fileDescriptor_be38f4a33c84916f, []int{0} + return fileDescriptor_2525405e83d67202, []int{0} } func (m *AuctionUsedAllocations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -88,35 +87,35 @@ func (m *AuctionUsedAllocations) GetWithdrawn() bool { } func init() { - proto.RegisterType((*AuctionUsedAllocations)(nil), "spn.participation.AuctionUsedAllocations") + proto.RegisterType((*AuctionUsedAllocations)(nil), "network.participation.v1.AuctionUsedAllocations") } func init() { - proto.RegisterFile("spn/participation/auction_used_allocations.proto", fileDescriptor_be38f4a33c84916f) + proto.RegisterFile("network/participation/v1/auction_used_allocations.proto", fileDescriptor_2525405e83d67202) } -var fileDescriptor_be38f4a33c84916f = []byte{ - // 313 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x28, 0x2e, 0xc8, 0xd3, - 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x4f, 0x2c, - 0x4d, 0x06, 0xd1, 0xf1, 0xa5, 0xc5, 0xa9, 0x29, 0xf1, 0x89, 0x39, 0x39, 0xf9, 0xc9, 0x60, 0xf1, - 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0xc1, 0xe2, 0x82, 0x3c, 0x3d, 0x14, 0x1d, 0x52, - 0x22, 0xe9, 0xf9, 0xe9, 0xf9, 0x60, 0x59, 0x7d, 0x10, 0x0b, 0xa2, 0x50, 0x4a, 0x32, 0x39, 0xbf, - 0x38, 0x37, 0xbf, 0x38, 0x1e, 0x22, 0x01, 0xe1, 0x40, 0xa4, 0x94, 0xde, 0x31, 0x72, 0x89, 0x39, - 0x42, 0xac, 0x09, 0x2d, 0x4e, 0x4d, 0x71, 0x44, 0x58, 0x22, 0x64, 0xc4, 0xc5, 0x9e, 0x98, 0x92, - 0x52, 0x94, 0x5a, 0x5c, 0x2c, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0xe9, 0x24, 0x71, 0x69, 0x8b, 0xae, - 0x08, 0x54, 0xb7, 0x23, 0x44, 0x26, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x08, 0xa6, 0x50, 0x48, - 0x86, 0x8b, 0x13, 0xea, 0x68, 0x4f, 0x17, 0x09, 0x26, 0x05, 0x46, 0x0d, 0x96, 0x20, 0x84, 0x00, - 0x48, 0xb6, 0x3c, 0xb3, 0x24, 0x23, 0xa5, 0x28, 0xb1, 0x3c, 0x4f, 0x82, 0x59, 0x81, 0x51, 0x83, - 0x23, 0x08, 0x21, 0x20, 0x94, 0xc2, 0xc5, 0x97, 0x57, 0x9a, 0x8b, 0xe4, 0x02, 0x09, 0x16, 0xb0, - 0xb5, 0x36, 0x27, 0xee, 0xc9, 0x33, 0xdc, 0xba, 0x27, 0xaf, 0x96, 0x9e, 0x59, 0x92, 0x51, 0x9a, - 0xa4, 0x97, 0x9c, 0x9f, 0x0b, 0xf5, 0x03, 0x94, 0xd2, 0x2d, 0x4e, 0xc9, 0xd6, 0x2f, 0xa9, 0x2c, - 0x48, 0x2d, 0xd6, 0xf3, 0xcc, 0x2b, 0xb9, 0xb4, 0x45, 0x97, 0x0b, 0xea, 0x48, 0xcf, 0xbc, 0x92, - 0x20, 0x34, 0x33, 0x9d, 0x3c, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, - 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, - 0x1f, 0xc9, 0xfc, 0x92, 0xd4, 0xbc, 0x94, 0xd4, 0xa2, 0xdc, 0xcc, 0xbc, 0x12, 0x7d, 0x50, 0xb4, - 0x54, 0xa0, 0x45, 0x0c, 0xd8, 0xb2, 0x24, 0x36, 0x70, 0x10, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, - 0xff, 0x64, 0x53, 0x31, 0x8e, 0xba, 0x01, 0x00, 0x00, +var fileDescriptor_2525405e83d67202 = []byte{ + // 315 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x51, 0x41, 0x4f, 0xc2, 0x30, + 0x18, 0x5d, 0x95, 0xa8, 0xec, 0xe0, 0x61, 0x41, 0x33, 0x89, 0x19, 0xc4, 0x13, 0x89, 0xa1, 0x0d, + 0x7a, 0xf0, 0x0c, 0xf1, 0xb2, 0xeb, 0x88, 0x17, 0x2f, 0xa4, 0xac, 0xcd, 0x68, 0x60, 0xed, 0xd2, + 0x7e, 0x03, 0xfd, 0x17, 0xfe, 0x18, 0x7e, 0x04, 0x47, 0xc2, 0xc9, 0x98, 0x48, 0x0c, 0xfc, 0x11, + 0xc3, 0x3a, 0x82, 0x72, 0xfb, 0xfa, 0xde, 0xf7, 0xbe, 0xf7, 0xd2, 0xe7, 0x3e, 0x49, 0x0e, 0x33, + 0xa5, 0xc7, 0x24, 0xa3, 0x1a, 0x44, 0x2c, 0x32, 0x0a, 0x42, 0x49, 0x32, 0xed, 0x10, 0x9a, 0xc7, + 0xbb, 0x71, 0x90, 0x1b, 0xce, 0x06, 0x74, 0x32, 0x51, 0x71, 0x41, 0x19, 0x9c, 0x69, 0x05, 0xca, + 0xf3, 0x4b, 0x21, 0xfe, 0x27, 0xc4, 0xd3, 0x4e, 0xfd, 0x26, 0x56, 0x26, 0x55, 0x66, 0x50, 0xec, + 0x11, 0xfb, 0xb0, 0xa2, 0x7a, 0x2d, 0x51, 0x89, 0xb2, 0xf8, 0x6e, 0xb2, 0xe8, 0xdd, 0x37, 0x72, + 0xaf, 0xbb, 0xd6, 0xed, 0xc5, 0x70, 0xd6, 0x3d, 0x78, 0x79, 0x0f, 0xee, 0x39, 0x65, 0x4c, 0x73, + 0x63, 0x7c, 0xd4, 0x44, 0xad, 0x6a, 0xcf, 0x5f, 0xcd, 0xdb, 0xb5, 0xf2, 0x66, 0xd7, 0x32, 0x7d, + 0xd0, 0x42, 0x26, 0xd1, 0x7e, 0xd1, 0xbb, 0x75, 0xab, 0x65, 0xf6, 0xf0, 0xd9, 0x3f, 0x69, 0xa2, + 0x56, 0x25, 0x3a, 0x00, 0x3b, 0x76, 0x26, 0x60, 0xc4, 0x34, 0x9d, 0x49, 0xff, 0xb4, 0x89, 0x5a, + 0x17, 0xd1, 0x01, 0xf0, 0xfa, 0xee, 0xa5, 0xcc, 0xd3, 0x3f, 0x09, 0xfc, 0x4a, 0x61, 0x7b, 0xbf, + 0x58, 0x37, 0x9c, 0xaf, 0x75, 0xe3, 0xca, 0x5a, 0x1b, 0x36, 0xc6, 0x42, 0x91, 0x94, 0xc2, 0x08, + 0x87, 0x12, 0x56, 0xf3, 0xb6, 0x5b, 0x66, 0x0a, 0x25, 0x44, 0x47, 0x27, 0x7a, 0xe1, 0x62, 0x13, + 0xa0, 0xe5, 0x26, 0x40, 0x3f, 0x9b, 0x00, 0x7d, 0x6c, 0x03, 0x67, 0xb9, 0x0d, 0x9c, 0xcf, 0x6d, + 0xe0, 0xbc, 0x92, 0x44, 0xc0, 0x28, 0x1f, 0xe2, 0x58, 0xa5, 0x44, 0x24, 0x52, 0x00, 0x27, 0xfb, + 0x3e, 0xde, 0x8e, 0x1a, 0x81, 0xf7, 0x8c, 0x9b, 0xe1, 0x59, 0xf1, 0x63, 0x8f, 0xbf, 0x01, 0x00, + 0x00, 0xff, 0xff, 0xc2, 0x16, 0x48, 0xa7, 0xb7, 0x01, 0x00, 0x00, } func (m *AuctionUsedAllocations) Marshal() (dAtA []byte, err error) { diff --git a/x/participation/types/codec.go b/x/participation/types/codec.go index 95f517b7..2f04e760 100644 --- a/x/participation/types/codec.go +++ b/x/participation/types/codec.go @@ -1,18 +1,12 @@ package types import ( - "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" + // this line is used by starport scaffolding # 1 ) -func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgParticipate{}, "participation/Participate", nil) - cdc.RegisterConcrete(&MsgWithdrawAllocations{}, "participation/WithdrawAllocations", nil) - // this line is used by starport scaffolding # 2 -} - func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgParticipate{}, @@ -22,10 +16,8 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { ) // this line is used by starport scaffolding # 3 + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } - -var ( - Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) -) diff --git a/x/participation/types/errors.go b/x/participation/types/errors.go index a3577898..86c51e71 100644 --- a/x/participation/types/errors.go +++ b/x/participation/types/errors.go @@ -1,20 +1,24 @@ package types -import sdkerrors "cosmossdk.io/errors" - // DONTCOVER +import ( + sdkerrors "cosmossdk.io/errors" +) + // x/participation module sentinel errors var ( - ErrAuctionNotFound = sdkerrors.Register(ModuleName, 2, "auction not found") - ErrInvalidBidder = sdkerrors.Register(ModuleName, 3, "invalid bidder") - ErrInvalidAllocationAmount = sdkerrors.Register(ModuleName, 4, "invalid allocation amount") - ErrTierNotFound = sdkerrors.Register(ModuleName, 5, "tier not found") - ErrInsufficientAllocations = sdkerrors.Register(ModuleName, 6, "insufficient allocations") - ErrAlreadyParticipating = sdkerrors.Register(ModuleName, 7, "address is already participating") - ErrParticipationNotAllowed = sdkerrors.Register(ModuleName, 8, "unable to participate to auction") - ErrAllocationWithdrawalTimeNotReached = sdkerrors.Register(ModuleName, 9, "unable to withdraw allocations") - ErrUsedAllocationsNotFound = sdkerrors.Register(ModuleName, 10, "used allocations not found") - ErrAllocationsAlreadyWithdrawn = sdkerrors.Register(ModuleName, 11, "used allocations already withdrawn") - ErrInvalidAddress = sdkerrors.Register(ModuleName, 12, "invalid participant address") + ErrInvalidSigner = sdkerrors.Register(ModuleName, 1101, "expected gov account as only signer for proposal message") + ErrAuctionNotFound = sdkerrors.Register(ModuleName, 1102, "auction not found") + ErrInvalidBidder = sdkerrors.Register(ModuleName, 1103, "invalid bidder") + ErrInvalidAllocationAmount = sdkerrors.Register(ModuleName, 1104, "invalid allocation amount") + ErrTierNotFound = sdkerrors.Register(ModuleName, 1105, "tier not found") + ErrInsufficientAllocations = sdkerrors.Register(ModuleName, 1106, "insufficient allocations") + ErrAlreadyParticipating = sdkerrors.Register(ModuleName, 1107, "address is already participating") + ErrParticipationNotAllowed = sdkerrors.Register(ModuleName, 1108, "unable to participate to auction") + ErrAllocationWithdrawalTimeNotReached = sdkerrors.Register(ModuleName, 1109, "unable to withdraw allocations") + ErrUsedAllocationsNotFound = sdkerrors.Register(ModuleName, 1110, "used allocations not found") + ErrAllocationsAlreadyWithdrawn = sdkerrors.Register(ModuleName, 1111, "used allocations already withdrawn") + ErrInvalidAddress = sdkerrors.Register(ModuleName, 1112, "invalid participant address") + ErrInvalidDelegations = sdkerrors.Register(ModuleName, 1113, "invalid degalations") ) diff --git a/x/participation/types/events.pb.go b/x/participation/types/events.pb.go index 6c5b1b5b..1a7816a6 100644 --- a/x/participation/types/events.pb.go +++ b/x/participation/types/events.pb.go @@ -1,12 +1,12 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/participation/events.proto +// source: network/participation/v1/events.proto package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -26,16 +26,16 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type EventAllocationsUsed struct { - Participant string `protobuf:"bytes,1,opt,name=participant,proto3" json:"participant,omitempty"` - AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` - NumAllocations github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=numAllocations,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"numAllocations"` + Participant string `protobuf:"bytes,1,opt,name=participant,proto3" json:"participant,omitempty"` + AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` + NumAllocations cosmossdk_io_math.Int `protobuf:"bytes,3,opt,name=numAllocations,proto3,customtype=cosmossdk.io/math.Int" json:"numAllocations"` } func (m *EventAllocationsUsed) Reset() { *m = EventAllocationsUsed{} } func (m *EventAllocationsUsed) String() string { return proto.CompactTextString(m) } func (*EventAllocationsUsed) ProtoMessage() {} func (*EventAllocationsUsed) Descriptor() ([]byte, []int) { - return fileDescriptor_9fdf41644bb3267b, []int{0} + return fileDescriptor_2c252e1ef497c1ad, []int{0} } func (m *EventAllocationsUsed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -87,7 +87,7 @@ func (m *EventAllocationsWithdrawn) Reset() { *m = EventAllocationsWithd func (m *EventAllocationsWithdrawn) String() string { return proto.CompactTextString(m) } func (*EventAllocationsWithdrawn) ProtoMessage() {} func (*EventAllocationsWithdrawn) Descriptor() ([]byte, []int) { - return fileDescriptor_9fdf41644bb3267b, []int{1} + return fileDescriptor_2c252e1ef497c1ad, []int{1} } func (m *EventAllocationsWithdrawn) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -131,32 +131,36 @@ func (m *EventAllocationsWithdrawn) GetAuctionID() uint64 { } func init() { - proto.RegisterType((*EventAllocationsUsed)(nil), "spn.participation.EventAllocationsUsed") - proto.RegisterType((*EventAllocationsWithdrawn)(nil), "spn.participation.EventAllocationsWithdrawn") + proto.RegisterType((*EventAllocationsUsed)(nil), "network.participation.v1.EventAllocationsUsed") + proto.RegisterType((*EventAllocationsWithdrawn)(nil), "network.participation.v1.EventAllocationsWithdrawn") } -func init() { proto.RegisterFile("spn/participation/events.proto", fileDescriptor_9fdf41644bb3267b) } +func init() { + proto.RegisterFile("network/participation/v1/events.proto", fileDescriptor_2c252e1ef497c1ad) +} -var fileDescriptor_9fdf41644bb3267b = []byte{ - // 287 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x2e, 0xc8, 0xd3, - 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x4f, 0x2d, - 0x4b, 0xcd, 0x2b, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x2c, 0x2e, 0xc8, 0xd3, - 0x43, 0x91, 0x97, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xea, 0x83, 0x58, 0x10, 0x85, 0x52, - 0x92, 0xc9, 0xf9, 0xc5, 0xb9, 0xf9, 0xc5, 0xf1, 0x10, 0x09, 0x08, 0x07, 0x22, 0xa5, 0xb4, 0x87, - 0x91, 0x4b, 0xc4, 0x15, 0x64, 0xa8, 0x63, 0x4e, 0x4e, 0x7e, 0x32, 0xd8, 0x90, 0xe2, 0xd0, 0xe2, - 0xd4, 0x14, 0x21, 0x05, 0x2e, 0x6e, 0xb8, 0xd1, 0x79, 0x25, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, - 0x41, 0xc8, 0x42, 0x42, 0x32, 0x5c, 0x9c, 0x89, 0xa5, 0xc9, 0x20, 0x1d, 0x9e, 0x2e, 0x12, 0x4c, - 0x0a, 0x8c, 0x1a, 0x2c, 0x41, 0x08, 0x01, 0xa1, 0x14, 0x2e, 0xbe, 0xbc, 0xd2, 0x5c, 0x24, 0x53, - 0x25, 0x98, 0x41, 0x46, 0x38, 0xd9, 0x9c, 0xb8, 0x27, 0xcf, 0x70, 0xeb, 0x9e, 0xbc, 0x5a, 0x7a, - 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0x2e, 0xd4, 0x45, 0x50, 0x4a, 0xb7, 0x38, 0x25, - 0x5b, 0xbf, 0xa4, 0xb2, 0x20, 0xb5, 0x58, 0xcf, 0x33, 0xaf, 0xe4, 0xd2, 0x16, 0x5d, 0x2e, 0xa8, - 0x83, 0x3d, 0xf3, 0x4a, 0x82, 0xd0, 0xcc, 0x54, 0x8a, 0xe6, 0x92, 0x44, 0x77, 0x7d, 0x78, 0x66, - 0x49, 0x46, 0x4a, 0x51, 0x62, 0x79, 0x1e, 0xa5, 0x5e, 0x70, 0xf2, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, - 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, - 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0x7d, 0x24, 0xc7, 0x97, 0xa4, 0xe6, 0xa5, 0xa4, 0x16, 0xe5, - 0x66, 0xe6, 0x95, 0xe8, 0x83, 0xe2, 0xab, 0x02, 0x2d, 0xc6, 0xc0, 0x3e, 0x49, 0x62, 0x03, 0x87, - 0xb6, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x85, 0x27, 0xeb, 0xd9, 0xd3, 0x01, 0x00, 0x00, +var fileDescriptor_2c252e1ef497c1ad = []byte{ + // 314 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcd, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, + 0xcf, 0xd3, 0x2f, 0x33, 0xd4, 0x4f, 0x2d, 0x4b, 0xcd, 0x2b, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0x92, 0x80, 0x2a, 0xd3, 0x43, 0x51, 0xa6, 0x57, 0x66, 0x28, 0x25, 0x99, 0x9c, 0x5f, + 0x9c, 0x9b, 0x5f, 0x1c, 0x0f, 0x56, 0xa7, 0x0f, 0xe1, 0x40, 0x34, 0x49, 0x89, 0xa4, 0xe7, 0xa7, + 0xe7, 0x43, 0xc4, 0x41, 0x2c, 0x88, 0xa8, 0xd2, 0x51, 0x46, 0x2e, 0x11, 0x57, 0x90, 0xd9, 0x8e, + 0x39, 0x39, 0xf9, 0xc9, 0x60, 0x73, 0x8a, 0x43, 0x8b, 0x53, 0x53, 0x84, 0xac, 0xb8, 0xb8, 0xe1, + 0xa6, 0xe7, 0x95, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x3a, 0x49, 0x5c, 0xda, 0xa2, 0x2b, 0x02, + 0x35, 0xd5, 0x31, 0x25, 0xa5, 0x28, 0xb5, 0xb8, 0x38, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x08, + 0x59, 0xb1, 0x90, 0x0c, 0x17, 0x67, 0x62, 0x69, 0x32, 0xc8, 0x2c, 0x4f, 0x17, 0x09, 0x26, 0x05, + 0x46, 0x0d, 0x96, 0x20, 0x84, 0x80, 0x50, 0x30, 0x17, 0x5f, 0x5e, 0x69, 0x2e, 0x92, 0x7d, 0x12, + 0xcc, 0x60, 0xc3, 0xb5, 0x4f, 0xdc, 0x93, 0x67, 0xb8, 0x75, 0x4f, 0x5e, 0x14, 0x62, 0x41, 0x71, + 0x4a, 0xb6, 0x5e, 0x66, 0xbe, 0x7e, 0x6e, 0x62, 0x49, 0x86, 0x9e, 0x67, 0x5e, 0xc9, 0xa5, 0x2d, + 0xba, 0x5c, 0x50, 0x9b, 0x3d, 0xf3, 0x4a, 0x82, 0xd0, 0x8c, 0x50, 0x2a, 0xe5, 0x92, 0x44, 0xf7, + 0x46, 0x78, 0x66, 0x49, 0x46, 0x4a, 0x51, 0x62, 0x79, 0x1e, 0xed, 0xfc, 0xe2, 0xe4, 0x79, 0xe2, + 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, + 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0xfa, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, + 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x99, 0xe9, 0x79, 0x99, 0x25, 0xa9, 0xfa, 0xb0, 0xc8, 0xad, 0x40, + 0x8b, 0xde, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0x84, 0x18, 0x03, 0x02, 0x00, 0x00, + 0xff, 0xff, 0x95, 0x82, 0x6d, 0x60, 0x04, 0x02, 0x00, 0x00, } func (m *EventAllocationsUsed) Marshal() (dAtA []byte, err error) { diff --git a/x/participation/types/expected_keepers.go b/x/participation/types/expected_keepers.go index c6a423df..026c1387 100644 --- a/x/participation/types/expected_keepers.go +++ b/x/participation/types/expected_keepers.go @@ -1,17 +1,37 @@ package types import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" ) +// StakingKeeper defines the expected interface for the Staking module. +type StakingKeeper interface { + GetDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress, maxRetrieve uint16) ([]stakingtypes.Delegation, error) + ValidatorByConsAddr(ctx context.Context, addr sdk.ConsAddress) (stakingtypes.ValidatorI, error) +} + type FundraisingKeeper interface { - GetAuction(ctx sdk.Context, id uint64) (auction fundraisingtypes.AuctionI, found bool) - AddAllowedBidders(ctx sdk.Context, auctionID uint64, bidders []fundraisingtypes.AllowedBidder) error + Auctions(ctx context.Context) ([]fundraisingtypes.AuctionI, error) + GetAuction(ctx context.Context, auctionID uint64) (fundraisingtypes.AuctionI, error) + AddAllowedBidders(ctx context.Context, auctionID uint64, allowedBidders []fundraisingtypes.AllowedBidder) error } -type StakingKeeper interface { - GetDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress, - maxRetrieve uint16) []stakingtypes.Delegation +// AccountKeeper defines the expected interface for the Account module. +type AccountKeeper interface { + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI // only used for simulation +} + +// BankKeeper defines the expected interface for the Bank module. +type BankKeeper interface { + SpendableCoins(context.Context, sdk.AccAddress) sdk.Coins +} + +// ParamSubspace defines the expected Subspace interface for parameters. +type ParamSubspace interface { + Get(context.Context, []byte, interface{}) + Set(context.Context, []byte, interface{}) } diff --git a/x/participation/types/genesis.go b/x/participation/types/genesis.go index a5dbd9ce..8257b648 100644 --- a/x/participation/types/genesis.go +++ b/x/participation/types/genesis.go @@ -1,19 +1,12 @@ package types -import ( - "fmt" +import "fmt" - sdkmath "cosmossdk.io/math" -) - -// DefaultIndex is the default capability global index -const DefaultIndex uint64 = 1 - -// DefaultGenesis returns the default Capability genesis state +// DefaultGenesis returns the default genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ - UsedAllocationsList: []UsedAllocations{}, AuctionUsedAllocationsList: []AuctionUsedAllocations{}, + UsedAllocationsList: []UsedAllocations{}, // this line is used by starport scaffolding # genesis/types/default Params: DefaultParams(), } @@ -22,51 +15,26 @@ func DefaultGenesis() *GenesisState { // Validate performs basic genesis state validation returning an error upon any // failure. func (gs GenesisState) Validate() error { - usedAllocationsIndexMap := make(map[string]struct{}) - for _, elem := range gs.UsedAllocationsList { - index := string(UsedAllocationsKey(elem.Address)) - - // Check for duplicated address in usedAllocations - if _, ok := usedAllocationsIndexMap[index]; ok { - return fmt.Errorf("duplicated address for usedAllocations") - } - usedAllocationsIndexMap[index] = struct{}{} - } - + // Check for duplicated index in auctionUsedAllocations auctionUsedAllocationsIndexMap := make(map[string]struct{}) - auctionUsedAllocationsSum := make(map[string]sdkmath.Int) - for _, elem := range gs.AuctionUsedAllocationsList { - index := string(AuctionUsedAllocationsKey(elem.Address, elem.AuctionID)) - address := elem.Address - _, ok := auctionUsedAllocationsSum[address] - if !ok { - auctionUsedAllocationsSum[address] = sdkmath.ZeroInt() - } - // Check for duplicated address in auctionUsedAllocations + for _, elem := range gs.AuctionUsedAllocationsList { + index := fmt.Sprint(elem.Address) if _, ok := auctionUsedAllocationsIndexMap[index]; ok { - return fmt.Errorf("duplicated address for auctionUsedAllocations") + return fmt.Errorf("duplicated index for auctionUsedAllocations") } auctionUsedAllocationsIndexMap[index] = struct{}{} - - // check address exists in UsedAllocationsList - if _, ok := usedAllocationsIndexMap[string(UsedAllocationsKey(address))]; !ok { - return fmt.Errorf("invalid address for auctionUsedAllocations, could not find matching entry for usedAllocations") - } - - // update total used allocations for address - if !elem.Withdrawn { - auctionUsedAllocationsSum[address] = auctionUsedAllocationsSum[address].Add(elem.NumAllocations) - } } + // Check for duplicated index in usedAllocations + usedAllocationsIndexMap := make(map[string]struct{}) - // check for consistency between UsedAllocationsList and AuctionUsedAllocationsList for _, elem := range gs.UsedAllocationsList { - if !elem.NumAllocations.Equal(auctionUsedAllocationsSum[elem.Address]) { - return fmt.Errorf("inconsistent total used auction allocations for address %v", elem.Address) + index := fmt.Sprint(elem.Address) + if _, ok := usedAllocationsIndexMap[index]; ok { + return fmt.Errorf("duplicated index for usedAllocations") } + usedAllocationsIndexMap[index] = struct{}{} } - // this line is used by starport scaffolding # genesis/types/validate return gs.Params.Validate() diff --git a/x/participation/types/genesis.pb.go b/x/participation/types/genesis.pb.go index a7f0389f..d65214ba 100644 --- a/x/participation/types/genesis.pb.go +++ b/x/participation/types/genesis.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/participation/genesis.proto +// source: network/participation/v1/genesis.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,16 +26,17 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the participation module's genesis state. type GenesisState struct { - UsedAllocationsList []UsedAllocations `protobuf:"bytes,1,rep,name=usedAllocationsList,proto3" json:"usedAllocationsList"` + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` AuctionUsedAllocationsList []AuctionUsedAllocations `protobuf:"bytes,2,rep,name=auctionUsedAllocationsList,proto3" json:"auctionUsedAllocationsList"` - Params Params `protobuf:"bytes,3,opt,name=params,proto3" json:"params"` + UsedAllocationsList []UsedAllocations `protobuf:"bytes,3,rep,name=usedAllocationsList,proto3" json:"usedAllocationsList"` } func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_26d1da9784bfa6ba, []int{0} + return fileDescriptor_e7c38cf89800ee5a, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -63,11 +65,11 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetUsedAllocationsList() []UsedAllocations { +func (m *GenesisState) GetParams() Params { if m != nil { - return m.UsedAllocationsList + return m.Params } - return nil + return Params{} } func (m *GenesisState) GetAuctionUsedAllocationsList() []AuctionUsedAllocations { @@ -77,39 +79,43 @@ func (m *GenesisState) GetAuctionUsedAllocationsList() []AuctionUsedAllocations return nil } -func (m *GenesisState) GetParams() Params { +func (m *GenesisState) GetUsedAllocationsList() []UsedAllocations { if m != nil { - return m.Params + return m.UsedAllocationsList } - return Params{} + return nil } func init() { - proto.RegisterType((*GenesisState)(nil), "spn.participation.GenesisState") + proto.RegisterType((*GenesisState)(nil), "network.participation.v1.GenesisState") } -func init() { proto.RegisterFile("spn/participation/genesis.proto", fileDescriptor_26d1da9784bfa6ba) } +func init() { + proto.RegisterFile("network/participation/v1/genesis.proto", fileDescriptor_e7c38cf89800ee5a) +} -var fileDescriptor_26d1da9784bfa6ba = []byte{ - // 285 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2f, 0x2e, 0xc8, 0xd3, - 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x4f, 0x4f, - 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x2c, 0x2e, 0xc8, - 0xd3, 0x43, 0x51, 0x20, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x96, 0xd5, 0x07, 0xb1, 0x20, 0x0a, - 0xa5, 0xe4, 0x30, 0x4d, 0x2a, 0x48, 0x2c, 0x4a, 0xcc, 0x85, 0x1a, 0x24, 0xa5, 0x81, 0x29, 0x5f, - 0x5a, 0x9c, 0x9a, 0x12, 0x9f, 0x98, 0x93, 0x93, 0x9f, 0x0c, 0xe6, 0xc3, 0x54, 0x1a, 0x60, 0xaa, - 0x4c, 0x2c, 0x4d, 0x06, 0xd1, 0xf1, 0xd8, 0x75, 0x28, 0x4d, 0x61, 0xe2, 0xe2, 0x71, 0x87, 0x38, - 0x3b, 0xb8, 0x24, 0xb1, 0x24, 0x55, 0x28, 0x8a, 0x4b, 0x18, 0xa4, 0xd4, 0x11, 0xa1, 0xd2, 0x27, - 0xb3, 0xb8, 0x44, 0x82, 0x51, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x49, 0x0f, 0xc3, 0x4f, 0x7a, 0xa1, - 0xa8, 0xaa, 0x9d, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0xc2, 0x66, 0x88, 0x50, 0x3e, 0x97, 0x14, - 0xd4, 0x39, 0xa1, 0x58, 0xac, 0x60, 0x02, 0x5b, 0xa1, 0x89, 0xc5, 0x0a, 0x47, 0xac, 0x9a, 0xa0, - 0x36, 0xe1, 0x31, 0x52, 0xc8, 0x9c, 0x8b, 0x0d, 0x12, 0x92, 0x12, 0xcc, 0x0a, 0x8c, 0x1a, 0xdc, - 0x46, 0x92, 0x58, 0x0c, 0x0f, 0x00, 0x2b, 0x80, 0x1a, 0x06, 0x55, 0xee, 0xe4, 0x79, 0xe2, 0x91, - 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, - 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0xfa, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, - 0xc9, 0xf9, 0xb9, 0xfa, 0x25, 0xa9, 0x79, 0x29, 0xa9, 0x45, 0xb9, 0x99, 0x79, 0x25, 0xfa, 0xa0, - 0x80, 0xaf, 0x40, 0x0b, 0xfa, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0x40, 0x1b, 0x03, - 0x02, 0x00, 0x00, 0xff, 0xff, 0x44, 0x42, 0x2a, 0x91, 0x30, 0x02, 0x00, 0x00, +var fileDescriptor_e7c38cf89800ee5a = []byte{ + // 308 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcb, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, + 0xcf, 0xd3, 0x2f, 0x33, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0x92, 0x80, 0xaa, 0xd3, 0x43, 0x51, 0xa7, 0x57, 0x66, 0x28, 0x25, 0x98, 0x98, + 0x9b, 0x99, 0x97, 0xaf, 0x0f, 0x26, 0x21, 0x8a, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x4c, + 0x7d, 0x10, 0x0b, 0x2a, 0xaa, 0x8a, 0xd3, 0xaa, 0x82, 0xc4, 0xa2, 0xc4, 0x5c, 0xa8, 0x4d, 0x52, + 0xe6, 0x38, 0x95, 0x25, 0x96, 0x26, 0x83, 0x98, 0xf1, 0xa5, 0xc5, 0xa9, 0x29, 0xf1, 0x89, 0x39, + 0x39, 0xf9, 0xc9, 0x60, 0x29, 0x98, 0x46, 0x7d, 0x9c, 0x1a, 0xb1, 0x6b, 0x50, 0x5a, 0xc7, 0xc4, + 0xc5, 0xe3, 0x0e, 0xf1, 0x65, 0x70, 0x49, 0x62, 0x49, 0xaa, 0x90, 0x33, 0x17, 0x1b, 0xc4, 0x29, + 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0x0a, 0x7a, 0xb8, 0x7c, 0xad, 0x17, 0x00, 0x56, 0xe7, + 0xc4, 0x79, 0xe2, 0x9e, 0x3c, 0xc3, 0x8a, 0xe7, 0x1b, 0xb4, 0x18, 0x83, 0xa0, 0x5a, 0x85, 0xca, + 0xb8, 0xa4, 0xa0, 0x0e, 0x0d, 0x2d, 0x4e, 0x4d, 0x71, 0x44, 0xd8, 0xea, 0x93, 0x59, 0x5c, 0x22, + 0xc1, 0xa4, 0xc0, 0xac, 0xc1, 0x6d, 0x64, 0x80, 0xdb, 0x60, 0x47, 0xac, 0x7a, 0x9d, 0x58, 0x40, + 0x16, 0x05, 0xe1, 0x31, 0x59, 0x28, 0x91, 0x4b, 0xb8, 0x14, 0x8b, 0x85, 0xcc, 0x60, 0x0b, 0x35, + 0x71, 0x5b, 0x88, 0xdd, 0x26, 0x6c, 0x66, 0x39, 0x79, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, + 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, + 0xb1, 0x1c, 0x43, 0x94, 0x7e, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, + 0x66, 0x7a, 0x5e, 0x66, 0x49, 0x2a, 0x3c, 0x36, 0x2a, 0xd0, 0xe2, 0xa3, 0xa4, 0xb2, 0x20, 0xb5, + 0x38, 0x89, 0x0d, 0x1c, 0x05, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0x3c, 0x6a, 0x59, + 0x80, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -132,20 +138,10 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.AuctionUsedAllocationsList) > 0 { - for iNdEx := len(m.AuctionUsedAllocationsList) - 1; iNdEx >= 0; iNdEx-- { + if len(m.UsedAllocationsList) > 0 { + for iNdEx := len(m.UsedAllocationsList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.AuctionUsedAllocationsList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.UsedAllocationsList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -153,13 +149,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a } } - if len(m.UsedAllocationsList) > 0 { - for iNdEx := len(m.UsedAllocationsList) - 1; iNdEx >= 0; iNdEx-- { + if len(m.AuctionUsedAllocationsList) > 0 { + for iNdEx := len(m.AuctionUsedAllocationsList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.UsedAllocationsList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.AuctionUsedAllocationsList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -167,9 +163,19 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 } } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -190,20 +196,20 @@ func (m *GenesisState) Size() (n int) { } var l int _ = l - if len(m.UsedAllocationsList) > 0 { - for _, e := range m.UsedAllocationsList { + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.AuctionUsedAllocationsList) > 0 { + for _, e := range m.AuctionUsedAllocationsList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.AuctionUsedAllocationsList) > 0 { - for _, e := range m.AuctionUsedAllocationsList { + if len(m.UsedAllocationsList) > 0 { + for _, e := range m.UsedAllocationsList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) return n } @@ -244,7 +250,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UsedAllocationsList", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -271,8 +277,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.UsedAllocationsList = append(m.UsedAllocationsList, UsedAllocations{}) - if err := m.UsedAllocationsList[len(m.UsedAllocationsList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -312,7 +317,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UsedAllocationsList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -339,7 +344,8 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.UsedAllocationsList = append(m.UsedAllocationsList, UsedAllocations{}) + if err := m.UsedAllocationsList[len(m.UsedAllocationsList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/participation/types/genesis_test.go b/x/participation/types/genesis_test.go index ec433c05..85547b15 100644 --- a/x/participation/types/genesis_test.go +++ b/x/participation/types/genesis_test.go @@ -3,169 +3,77 @@ package types_test import ( "testing" - sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" + "github.com/ignite/network/x/participation/types" ) func TestGenesisState_Validate(t *testing.T) { - var ( - addr1 = sample.Address(r) - addr2 = sample.Address(r) - auctionID1 = uint64(0) - auctionID2 = uint64(1) - ) - - for _, tc := range []struct { - name string + tests := []struct { + desc string genState *types.GenesisState valid bool }{ { - name: "should validate default genesis state", + desc: "default is valid", genState: types.DefaultGenesis(), valid: true, }, { - name: "should validate valid genesis state", + desc: "valid genesis state", genState: &types.GenesisState{ - Params: types.DefaultParams(), - UsedAllocationsList: []types.UsedAllocations{ - { - Address: addr1, - NumAllocations: sdkmath.ZeroInt(), - }, - { - Address: addr2, - NumAllocations: sdkmath.ZeroInt(), - }, - }, AuctionUsedAllocationsList: []types.AuctionUsedAllocations{ { - Address: addr1, - AuctionID: auctionID1, - NumAllocations: sdkmath.ZeroInt(), + Address: "0", }, { - Address: addr2, - AuctionID: auctionID2, - NumAllocations: sdkmath.ZeroInt(), + Address: "1", }, }, - // this line is used by starport scaffolding # types/genesis/validField - }, - valid: true, - }, - { - name: "should validate with matching usedAllocations and auctionUsedAllocations", - genState: &types.GenesisState{ - Params: types.DefaultParams(), UsedAllocationsList: []types.UsedAllocations{ { - Address: addr1, - NumAllocations: sdkmath.NewInt(5), - }, - }, - AuctionUsedAllocationsList: []types.AuctionUsedAllocations{ - { - Address: addr1, - AuctionID: auctionID1, - NumAllocations: sdkmath.NewInt(2), - Withdrawn: false, + Address: "0", }, { - Address: addr1, - AuctionID: auctionID2, - NumAllocations: sdkmath.NewInt(3), - Withdrawn: false, + Address: "1", }, }, + // this line is used by starport scaffolding # types/genesis/validField }, valid: true, }, { - name: "should prevent duplicated usedAllocations", + desc: "duplicated auctionUsedAllocations", genState: &types.GenesisState{ - UsedAllocationsList: []types.UsedAllocations{ - { - Address: addr1, - NumAllocations: sdkmath.ZeroInt(), - }, - { - Address: addr1, - NumAllocations: sdkmath.ZeroInt(), - }, - }, - }, - valid: false, - }, - { - name: "should prevent duplicated auctionUsedAllocations", - genState: &types.GenesisState{ - UsedAllocationsList: []types.UsedAllocations{ - { - Address: addr1, - NumAllocations: sdkmath.ZeroInt(), - }, - }, AuctionUsedAllocationsList: []types.AuctionUsedAllocations{ { - Address: addr1, - AuctionID: auctionID1, - NumAllocations: sdkmath.ZeroInt(), + Address: "0", }, { - Address: addr1, - AuctionID: auctionID1, - NumAllocations: sdkmath.ZeroInt(), + Address: "0", }, }, }, valid: false, }, { - name: "should prevent invalid address in auctionUsedAllocations", - genState: &types.GenesisState{ - AuctionUsedAllocationsList: []types.AuctionUsedAllocations{ - { - Address: addr1, - AuctionID: auctionID1, - }, - }, - }, - valid: false, - }, - { - name: "should prevent mismatch between usedAllocations and auctionUsedAllocations", + desc: "duplicated usedAllocations", genState: &types.GenesisState{ UsedAllocationsList: []types.UsedAllocations{ { - Address: addr1, - NumAllocations: sdkmath.NewInt(10), + Address: "0", }, - }, - AuctionUsedAllocationsList: []types.AuctionUsedAllocations{ { - Address: addr1, - AuctionID: auctionID1, - NumAllocations: sdkmath.NewInt(2), - Withdrawn: false, - }, - { - Address: addr1, - AuctionID: auctionID2, - NumAllocations: sdkmath.NewInt(8), - Withdrawn: true, + Address: "0", }, }, }, valid: false, }, // this line is used by starport scaffolding # types/genesis/testcase - } { - t.Run(tc.name, func(t *testing.T) { + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { err := tc.genState.Validate() if tc.valid { require.NoError(t, err) diff --git a/x/participation/types/keys.go b/x/participation/types/keys.go index e20dc620..230d5203 100644 --- a/x/participation/types/keys.go +++ b/x/participation/types/keys.go @@ -1,8 +1,6 @@ package types -import ( - "strconv" -) +import "cosmossdk.io/collections" const ( // ModuleName defines the module name @@ -11,47 +9,17 @@ const ( // StoreKey defines the primary module store key StoreKey = ModuleName - // RouterKey is the message route for slashing - RouterKey = ModuleName - - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - // MemStoreKey defines the in-memory store key MemStoreKey = "mem_participation" - - // UsedAllocationsKeyPrefix is the prefix to retrieve all UsedAllocations - UsedAllocationsKeyPrefix = "UsedAllocations/value/" - - // AuctionUsedAllocationsKeyPrefix is the prefix to retrieve all AuctionUsedAllocations - AuctionUsedAllocationsKeyPrefix = "AuctionUsedAllocations/value/" ) -func KeyPrefix(p string) []byte { - return []byte(p) -} +var ( + // ParamsKey is the prefix to retrieve all Params + ParamsKey = collections.NewPrefix("p_participation") -// UsedAllocationsKey returns the store key to retrieve a UsedAllocations from the address field -func UsedAllocationsKey(address string) []byte { - var key []byte + // AuctionUsedAllocationsKey is the prefix to retrieve all AuctionUsedAllocations + AuctionUsedAllocationsKey = collections.NewPrefix("AuctionUsedAllocations/value/") - addressBytes := []byte(address) - key = append(key, addressBytes...) - key = append(key, []byte("/")...) - - return key -} - -// AuctionUsedAllocationsKey returns the store key to retrieve a AuctionUsedAllocations from the address and auctionID fields -func AuctionUsedAllocationsKey(address string, auctionID uint64) []byte { - var key []byte - - addressBytes := []byte(address) - auctionIDBytes := []byte(strconv.FormatUint(auctionID, 10)) - key = append(key, addressBytes...) - key = append(key, []byte("/")...) - key = append(key, auctionIDBytes...) - key = append(key, []byte("/")...) - - return key -} + // UsedAllocationsKey is the prefix to retrieve all UsedAllocations + UsedAllocationsKey = collections.NewPrefix("UsedAllocations/value/") +) diff --git a/x/participation/types/msg_participate.go b/x/participation/types/msg_participate.go deleted file mode 100644 index 5993fec4..00000000 --- a/x/participation/types/msg_participate.go +++ /dev/null @@ -1,47 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgParticipate = "participate" - -var _ sdk.Msg = &MsgParticipate{} - -func NewMsgParticipate(participant string, auctionID uint64, tierID uint64) *MsgParticipate { - return &MsgParticipate{ - Participant: participant, - AuctionID: auctionID, - TierID: tierID, - } -} - -func (msg *MsgParticipate) Route() string { - return RouterKey -} - -func (msg *MsgParticipate) Type() string { - return TypeMsgParticipate -} - -func (msg *MsgParticipate) GetSigners() []sdk.AccAddress { - participant, err := sdk.AccAddressFromBech32(msg.Participant) - if err != nil { - panic(err) - } - return []sdk.AccAddress{participant} -} - -func (msg *MsgParticipate) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgParticipate) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Participant) - if err != nil { - return sdkerrors.Wrap(ErrInvalidAddress, err.Error()) - } - return nil -} diff --git a/x/participation/types/msg_participate_test.go b/x/participation/types/msg_participate_test.go deleted file mode 100644 index 3c98ccc9..00000000 --- a/x/participation/types/msg_participate_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" -) - -func TestMsgParticipate_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg types.MsgParticipate - err error - }{ - { - name: "should allow valid address", - msg: types.MsgParticipate{ - Participant: sample.Address(r), - }, - }, - { - name: "should prevent invalid address", - msg: types.MsgParticipate{ - Participant: "invalid_address", - }, - err: types.ErrInvalidAddress, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/participation/types/msg_withdraw_allocations.go b/x/participation/types/msg_withdraw_allocations.go deleted file mode 100644 index 367bbec8..00000000 --- a/x/participation/types/msg_withdraw_allocations.go +++ /dev/null @@ -1,46 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgWithdrawAllocations = "withdraw_allocations" - -var _ sdk.Msg = &MsgWithdrawAllocations{} - -func NewMsgWithdrawAllocations(participant string, auctionID uint64) *MsgWithdrawAllocations { - return &MsgWithdrawAllocations{ - Participant: participant, - AuctionID: auctionID, - } -} - -func (msg *MsgWithdrawAllocations) Route() string { - return RouterKey -} - -func (msg *MsgWithdrawAllocations) Type() string { - return TypeMsgWithdrawAllocations -} - -func (msg *MsgWithdrawAllocations) GetSigners() []sdk.AccAddress { - participant, err := sdk.AccAddressFromBech32(msg.Participant) - if err != nil { - panic(err) - } - return []sdk.AccAddress{participant} -} - -func (msg *MsgWithdrawAllocations) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgWithdrawAllocations) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Participant) - if err != nil { - return sdkerrors.Wrap(ErrInvalidAddress, err.Error()) - } - return nil -} diff --git a/x/participation/types/msg_withdraw_allocations_test.go b/x/participation/types/msg_withdraw_allocations_test.go deleted file mode 100644 index 718e049b..00000000 --- a/x/participation/types/msg_withdraw_allocations_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/participation/types" -) - -func TestMsgWithdrawAllocations_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg types.MsgWithdrawAllocations - err error - }{ - { - name: "should allow valid address", - msg: types.MsgWithdrawAllocations{ - Participant: sample.Address(r), - }, - }, - { - name: "should prevent invalid address", - msg: types.MsgWithdrawAllocations{ - Participant: "invalid_address", - }, - err: types.ErrInvalidAddress, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/participation/types/msgs.go b/x/participation/types/msgs.go new file mode 100644 index 00000000..59215e8c --- /dev/null +++ b/x/participation/types/msgs.go @@ -0,0 +1,26 @@ +package types + +import sdk "github.com/cosmos/cosmos-sdk/types" + +func NewMsgParticipate(participant string, auctionID uint64, tierID uint64) *MsgParticipate { + return &MsgParticipate{ + Participant: participant, + AuctionID: auctionID, + TierID: tierID, + } +} + +func (msg MsgParticipate) Type() string { + return sdk.MsgTypeURL(&MsgParticipate{}) +} + +func NewMsgWithdrawAllocations(participant string, auctionID uint64) *MsgWithdrawAllocations { + return &MsgWithdrawAllocations{ + Participant: participant, + AuctionID: auctionID, + } +} + +func (msg MsgWithdrawAllocations) Type() string { + return sdk.MsgTypeURL(&MsgWithdrawAllocations{}) +} diff --git a/x/participation/types/params.go b/x/participation/types/params.go index b59048cd..0695d865 100644 --- a/x/participation/types/params.go +++ b/x/participation/types/params.go @@ -6,18 +6,9 @@ import ( "time" sdkmath "cosmossdk.io/math" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "gopkg.in/yaml.v2" ) -var _ paramtypes.ParamSet = (*Params)(nil) - var ( - KeyAllocationPrice = []byte("AllocationPrice") - KeyParticipationTierList = []byte("ParticipationTierList") - KeyRegistrationPeriod = []byte("RegistrationPeriod") - KeyWithdrawalDelay = []byte("WithdrawalDelay") - DefaultAllocationPrice = AllocationPrice{ Bonded: sdkmath.NewInt(1000), } @@ -59,11 +50,6 @@ var ( DefaultWithdrawalDelay = time.Hour * 24 * 14 // Two weeks ) -// ParamKeyTable the param key table for launch module -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - // NewParams creates a new Params instance func NewParams( allocationPrice AllocationPrice, @@ -79,7 +65,7 @@ func NewParams( } } -// DefaultParams returns a default set of parameters +// DefaultParams returns a default set of parameters. func DefaultParams() Params { return NewParams( DefaultAllocationPrice, @@ -89,16 +75,6 @@ func DefaultParams() Params { ) } -// ParamSetPairs get the params.ParamSet -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(KeyAllocationPrice, &p.AllocationPrice, validateAllocationPrice), - paramtypes.NewParamSetPair(KeyParticipationTierList, &p.ParticipationTierList, validateParticipationTierList), - paramtypes.NewParamSetPair(KeyRegistrationPeriod, &p.RegistrationPeriod, validateTimeDuration), - paramtypes.NewParamSetPair(KeyWithdrawalDelay, &p.WithdrawalDelay, validateTimeDuration), - } -} - // Validate validates the set of params func (p Params) Validate() error { if err := validateAllocationPrice(p.AllocationPrice); err != nil { @@ -116,12 +92,6 @@ func (p Params) Validate() error { return validateTimeDuration(p.WithdrawalDelay) } -// String implements the Stringer interface. -func (p Params) String() string { - out, _ := yaml.Marshal(p) - return string(out) -} - // validateAllocationPrice validates the AllocationPrice param func validateAllocationPrice(v interface{}) error { allocationPrice, ok := v.(AllocationPrice) @@ -192,3 +162,23 @@ func validateTimeDuration(i interface{}) error { return nil } + +func (a *AllocationPrice) Equal(cmp *AllocationPrice) bool { + return a.Bonded.Equal(cmp.Bonded) +} + +func (t *Tier) Equal(cmp *Tier) bool { + switch { + case t.TierID != cmp.TierID: + return false + case !t.RequiredAllocations.Equal(cmp.RequiredAllocations): + return false + case !t.Benefits.Equal(&cmp.Benefits): + return false + } + return true +} + +func (t *TierBenefits) Equal(cmp *TierBenefits) bool { + return t.MaxBidAmount.Equal(cmp.MaxBidAmount) +} diff --git a/x/participation/types/params.pb.go b/x/participation/types/params.pb.go index 3d51fc52..459187e0 100644 --- a/x/participation/types/params.pb.go +++ b/x/participation/types/params.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/participation/params.proto +// source: network/participation/v1/params.proto package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" @@ -39,10 +40,11 @@ type Params struct { WithdrawalDelay time.Duration `protobuf:"bytes,4,opt,name=withdrawalDelay,proto3,stdduration" json:"withdrawalDelay"` } -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_2292238422f27d29, []int{0} + return fileDescriptor_9b6c03ddd407c68b, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -101,14 +103,14 @@ func (m *Params) GetWithdrawalDelay() time.Duration { type AllocationPrice struct { // number of bonded tokens necessary to get one allocation - Bonded github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=bonded,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"bonded"` + Bonded cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=bonded,proto3,customtype=cosmossdk.io/math.Int" json:"bonded"` } func (m *AllocationPrice) Reset() { *m = AllocationPrice{} } func (m *AllocationPrice) String() string { return proto.CompactTextString(m) } func (*AllocationPrice) ProtoMessage() {} func (*AllocationPrice) Descriptor() ([]byte, []int) { - return fileDescriptor_2292238422f27d29, []int{1} + return fileDescriptor_9b6c03ddd407c68b, []int{1} } func (m *AllocationPrice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -139,16 +141,16 @@ var xxx_messageInfo_AllocationPrice proto.InternalMessageInfo // Matches a number of required allocations with benefits type Tier struct { - TierID uint64 `protobuf:"varint,1,opt,name=tierID,proto3" json:"tierID,omitempty"` - RequiredAllocations github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=requiredAllocations,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"requiredAllocations"` - Benefits TierBenefits `protobuf:"bytes,3,opt,name=benefits,proto3" json:"benefits"` + TierID uint64 `protobuf:"varint,1,opt,name=tierID,proto3" json:"tierID,omitempty"` + RequiredAllocations cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=requiredAllocations,proto3,customtype=cosmossdk.io/math.Int" json:"requiredAllocations"` + Benefits TierBenefits `protobuf:"bytes,3,opt,name=benefits,proto3" json:"benefits"` } func (m *Tier) Reset() { *m = Tier{} } func (m *Tier) String() string { return proto.CompactTextString(m) } func (*Tier) ProtoMessage() {} func (*Tier) Descriptor() ([]byte, []int) { - return fileDescriptor_2292238422f27d29, []int{2} + return fileDescriptor_9b6c03ddd407c68b, []int{2} } func (m *Tier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -193,14 +195,14 @@ func (m *Tier) GetBenefits() TierBenefits { type TierBenefits struct { // maximum amount an auction participant can bid - MaxBidAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=maxBidAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"maxBidAmount"` + MaxBidAmount cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=maxBidAmount,proto3,customtype=cosmossdk.io/math.Int" json:"maxBidAmount"` } func (m *TierBenefits) Reset() { *m = TierBenefits{} } func (m *TierBenefits) String() string { return proto.CompactTextString(m) } func (*TierBenefits) ProtoMessage() {} func (*TierBenefits) Descriptor() ([]byte, []int) { - return fileDescriptor_2292238422f27d29, []int{3} + return fileDescriptor_9b6c03ddd407c68b, []int{3} } func (m *TierBenefits) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -230,48 +232,90 @@ func (m *TierBenefits) XXX_DiscardUnknown() { var xxx_messageInfo_TierBenefits proto.InternalMessageInfo func init() { - proto.RegisterType((*Params)(nil), "spn.participation.Params") - proto.RegisterType((*AllocationPrice)(nil), "spn.participation.AllocationPrice") - proto.RegisterType((*Tier)(nil), "spn.participation.Tier") - proto.RegisterType((*TierBenefits)(nil), "spn.participation.TierBenefits") + proto.RegisterType((*Params)(nil), "network.participation.v1.Params") + proto.RegisterType((*AllocationPrice)(nil), "network.participation.v1.AllocationPrice") + proto.RegisterType((*Tier)(nil), "network.participation.v1.Tier") + proto.RegisterType((*TierBenefits)(nil), "network.participation.v1.TierBenefits") } -func init() { proto.RegisterFile("spn/participation/params.proto", fileDescriptor_2292238422f27d29) } +func init() { + proto.RegisterFile("network/participation/v1/params.proto", fileDescriptor_9b6c03ddd407c68b) +} -var fileDescriptor_2292238422f27d29 = []byte{ - // 471 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0x3f, 0x6f, 0xd4, 0x30, - 0x18, 0xc6, 0x93, 0x6b, 0x74, 0x2a, 0x6e, 0xa5, 0x13, 0xe6, 0x5f, 0xda, 0x21, 0xa9, 0x32, 0xa0, - 0x2e, 0x75, 0xa4, 0xb2, 0x21, 0x96, 0x8b, 0x6e, 0x39, 0x09, 0xa4, 0x53, 0xda, 0x89, 0x05, 0x9c, - 0xd8, 0x4d, 0x2d, 0x12, 0x3b, 0xd8, 0x8e, 0xda, 0x7e, 0x0b, 0xc6, 0x8e, 0x7c, 0x08, 0x3e, 0x44, - 0xc7, 0xc2, 0x84, 0x40, 0x2a, 0xe8, 0xee, 0x8b, 0xa0, 0x38, 0x06, 0x7a, 0x47, 0x90, 0x3a, 0xdc, - 0x94, 0xbc, 0x7a, 0xdf, 0xe7, 0xe7, 0x37, 0xcf, 0x13, 0x83, 0x40, 0xd5, 0x3c, 0xae, 0xb1, 0xd4, - 0x2c, 0x67, 0x35, 0xd6, 0x4c, 0x98, 0x0a, 0x57, 0x0a, 0xd5, 0x52, 0x68, 0x01, 0xef, 0xab, 0x9a, - 0xa3, 0xa5, 0xfe, 0xee, 0xc3, 0x42, 0x14, 0xc2, 0x74, 0xe3, 0xf6, 0xad, 0x1b, 0xdc, 0x0d, 0x0a, - 0x21, 0x8a, 0x92, 0xc6, 0xa6, 0xca, 0x9a, 0x93, 0x98, 0x34, 0xd2, 0xcc, 0xdb, 0xfe, 0x4e, 0x2e, - 0x54, 0x25, 0xd4, 0x9b, 0x4e, 0xd8, 0x15, 0x5d, 0x2b, 0xfa, 0x3e, 0x00, 0xc3, 0x99, 0x39, 0x14, - 0xa6, 0x60, 0x84, 0xcb, 0x52, 0xe4, 0x46, 0x39, 0x93, 0x2c, 0xa7, 0xbe, 0xbb, 0xe7, 0xee, 0x6f, - 0x1d, 0x46, 0xe8, 0x9f, 0x45, 0xd0, 0x78, 0x79, 0x32, 0xf1, 0xae, 0x6e, 0x42, 0x27, 0x5d, 0x05, - 0xc0, 0x23, 0xf0, 0x68, 0x49, 0x77, 0xcc, 0xa8, 0x7c, 0xc9, 0x94, 0xf6, 0x07, 0x7b, 0x1b, 0xfb, - 0x5b, 0x87, 0x4f, 0x7a, 0xc8, 0xed, 0x88, 0xc5, 0xf5, 0x6b, 0xe1, 0x11, 0x80, 0x92, 0x16, 0x4c, - 0xe9, 0xee, 0x23, 0x67, 0x54, 0x32, 0x41, 0xfc, 0x0d, 0xb3, 0xeb, 0x0e, 0xea, 0xbc, 0x40, 0xbf, - 0xbd, 0x40, 0x13, 0xeb, 0x45, 0xb2, 0xd9, 0x32, 0x2f, 0x7f, 0x84, 0x6e, 0xda, 0x23, 0x87, 0xaf, - 0xc0, 0xe8, 0x8c, 0xe9, 0x53, 0x22, 0xf1, 0x19, 0x2e, 0x27, 0xb4, 0xc4, 0x17, 0xbe, 0x77, 0x77, - 0xe2, 0xaa, 0xf6, 0xb9, 0x77, 0xf9, 0x31, 0x74, 0xa2, 0x02, 0x8c, 0x56, 0x8c, 0x82, 0xc7, 0x60, - 0x98, 0x09, 0x4e, 0x28, 0x31, 0xe6, 0xde, 0x4b, 0x5e, 0xb4, 0x8c, 0x6f, 0x37, 0xe1, 0xd3, 0x82, - 0xe9, 0xd3, 0x26, 0x43, 0xb9, 0xa8, 0x6c, 0x42, 0xf6, 0x71, 0xa0, 0xc8, 0xbb, 0x58, 0x5f, 0xd4, - 0x54, 0xa1, 0x29, 0xd7, 0x5f, 0x3e, 0x1d, 0x00, 0x1b, 0xe0, 0x94, 0xeb, 0xd4, 0xb2, 0xa2, 0xcf, - 0x2e, 0xf0, 0x5a, 0x7f, 0xe0, 0x63, 0x30, 0xd4, 0x8c, 0xca, 0xe9, 0xc4, 0xe0, 0xbd, 0xd4, 0x56, - 0x90, 0x83, 0x07, 0x92, 0xbe, 0x6f, 0x98, 0xa4, 0xe4, 0xef, 0x46, 0xca, 0x1f, 0xac, 0x61, 0x87, - 0x3e, 0x30, 0x1c, 0x83, 0xcd, 0x8c, 0x72, 0x7a, 0xc2, 0xb4, 0xb2, 0xc9, 0x84, 0xff, 0xcb, 0xda, - 0x8e, 0xd9, 0xcc, 0xff, 0xc8, 0xa2, 0x1a, 0x6c, 0xdf, 0xee, 0xc3, 0xb7, 0x60, 0xbb, 0xc2, 0xe7, - 0x09, 0x23, 0xe3, 0x4a, 0x34, 0x5c, 0xaf, 0xc5, 0xbf, 0x25, 0x62, 0x32, 0xbd, 0x9a, 0x07, 0xee, - 0xf5, 0x3c, 0x70, 0x7f, 0xce, 0x03, 0xf7, 0xc3, 0x22, 0x70, 0xae, 0x17, 0x81, 0xf3, 0x75, 0x11, - 0x38, 0xaf, 0xe3, 0x5b, 0x74, 0x4d, 0x39, 0xa1, 0xb2, 0x62, 0x5c, 0xc7, 0xed, 0x05, 0x3e, 0x5f, - 0xb9, 0xc2, 0xe6, 0xa8, 0x6c, 0x68, 0xfe, 0x96, 0x67, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc5, - 0x4e, 0x81, 0x14, 0xe4, 0x03, 0x00, 0x00, +var fileDescriptor_9b6c03ddd407c68b = []byte{ + // 504 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x52, 0x4d, 0x6b, 0x13, 0x41, + 0x18, 0xce, 0x36, 0x21, 0xd4, 0x69, 0x21, 0x38, 0x5a, 0xd9, 0xf6, 0xb0, 0x29, 0x01, 0xb5, 0x2a, + 0xce, 0xd0, 0x7a, 0xf3, 0xd6, 0x35, 0x07, 0x03, 0x8a, 0x21, 0x8a, 0x60, 0x41, 0xca, 0xec, 0xee, + 0x74, 0xf3, 0xd2, 0xdd, 0x9d, 0x38, 0x33, 0xdb, 0xb4, 0x7f, 0x41, 0x3c, 0x78, 0xf4, 0xe8, 0x4f, + 0xf0, 0xe0, 0x7f, 0xb0, 0xc7, 0xe2, 0x49, 0x3c, 0x54, 0x49, 0x0e, 0xfa, 0x33, 0x64, 0x67, 0x27, + 0x6a, 0x42, 0x82, 0x1f, 0x97, 0x65, 0xdf, 0x77, 0x9e, 0xe7, 0x79, 0x3f, 0x9e, 0x17, 0x5d, 0xcd, + 0xb8, 0x1e, 0x0a, 0x79, 0x48, 0x07, 0x4c, 0x6a, 0x08, 0x61, 0xc0, 0x34, 0x88, 0x8c, 0x1e, 0x6d, + 0x17, 0x09, 0x96, 0x2a, 0x32, 0x90, 0x42, 0x0b, 0xec, 0x5a, 0x18, 0x99, 0x82, 0x91, 0xa3, 0xed, + 0x8d, 0x8b, 0x2c, 0x85, 0x4c, 0x50, 0xf3, 0x2d, 0xc1, 0x1b, 0xeb, 0xa1, 0x50, 0xa9, 0x50, 0xfb, + 0x26, 0xa2, 0x65, 0x60, 0x9f, 0x2e, 0xc7, 0x22, 0x16, 0x65, 0xbe, 0xf8, 0xb3, 0x59, 0x2f, 0x16, + 0x22, 0x4e, 0x38, 0x35, 0x51, 0x90, 0x1f, 0xd0, 0x28, 0x97, 0x65, 0x01, 0x93, 0x69, 0xbd, 0xaa, + 0xa2, 0x7a, 0xd7, 0xb4, 0x83, 0x9f, 0xa1, 0x06, 0x4b, 0x12, 0x11, 0x9a, 0xe7, 0xae, 0x84, 0x90, + 0xbb, 0xce, 0xa6, 0xb3, 0xb5, 0xb2, 0x73, 0x83, 0x2c, 0x6a, 0x91, 0xec, 0x4e, 0x13, 0xfc, 0xda, + 0xe9, 0x79, 0xb3, 0xd2, 0x9b, 0xd5, 0xc1, 0x7b, 0x68, 0x6d, 0x8a, 0xfa, 0x04, 0xb8, 0x7c, 0x00, + 0x4a, 0xbb, 0x4b, 0x9b, 0xd5, 0xad, 0x95, 0x1d, 0x6f, 0x71, 0x81, 0x02, 0x69, 0x55, 0xe7, 0x4b, + 0xe0, 0xc7, 0x08, 0x4b, 0x1e, 0x83, 0xd2, 0xe5, 0x5c, 0x5d, 0x2e, 0x41, 0x44, 0x6e, 0xd5, 0x74, + 0xbe, 0x4e, 0xca, 0xf1, 0xc9, 0x64, 0x7c, 0xd2, 0xb6, 0xe3, 0xfb, 0xcb, 0x85, 0xe6, 0x9b, 0x2f, + 0x4d, 0xa7, 0x37, 0x87, 0x8e, 0x1f, 0xa2, 0xc6, 0x10, 0x74, 0x3f, 0x92, 0x6c, 0xc8, 0x92, 0x36, + 0x4f, 0xd8, 0x89, 0x5b, 0xfb, 0x7b, 0xc5, 0x59, 0xee, 0xdd, 0xeb, 0xdf, 0xdf, 0x36, 0x9d, 0x97, + 0xdf, 0xde, 0xdd, 0xf4, 0x26, 0x37, 0x71, 0x3c, 0x73, 0x15, 0xa5, 0x07, 0xad, 0xa7, 0xa8, 0x31, + 0xb3, 0x52, 0x7c, 0x0f, 0xd5, 0x03, 0x91, 0x45, 0x3c, 0x32, 0x6e, 0x5c, 0xf0, 0x6f, 0x15, 0x65, + 0x3e, 0x9f, 0x37, 0xd7, 0x4a, 0xf7, 0x55, 0x74, 0x48, 0x40, 0xd0, 0x94, 0xe9, 0x3e, 0xe9, 0x64, + 0xfa, 0xe3, 0xfb, 0xdb, 0xc8, 0x9e, 0x45, 0x27, 0xd3, 0x3d, 0x4b, 0x6d, 0x7d, 0x70, 0x50, 0xad, + 0xd8, 0x18, 0xbe, 0x82, 0xea, 0x1a, 0xb8, 0xec, 0xb4, 0x8d, 0x5a, 0xad, 0x67, 0x23, 0xfc, 0x1c, + 0x5d, 0x92, 0xfc, 0x45, 0x0e, 0x92, 0x47, 0xbf, 0x1a, 0x50, 0xee, 0xd2, 0xbf, 0x97, 0x9c, 0xa7, + 0x83, 0xef, 0xa3, 0xe5, 0x80, 0x67, 0xfc, 0x00, 0xb4, 0xb2, 0xd6, 0x5c, 0xfb, 0x83, 0xe7, 0x16, + 0x6d, 0xbd, 0xff, 0xc9, 0x6e, 0xed, 0xa3, 0xd5, 0xdf, 0xdf, 0xf1, 0x23, 0xb4, 0x9a, 0xb2, 0x63, + 0x1f, 0xa2, 0xdd, 0x54, 0xe4, 0x99, 0xfe, 0x9f, 0x25, 0x4d, 0x09, 0xf8, 0x9d, 0xd3, 0x91, 0xe7, + 0x9c, 0x8d, 0x3c, 0xe7, 0xeb, 0xc8, 0x73, 0x5e, 0x8f, 0xbd, 0xca, 0xd9, 0xd8, 0xab, 0x7c, 0x1a, + 0x7b, 0x95, 0x3d, 0x1a, 0x83, 0xee, 0xe7, 0x01, 0x09, 0x45, 0x4a, 0x21, 0xce, 0x40, 0x73, 0xba, + 0xc8, 0x4e, 0x7d, 0x32, 0xe0, 0x2a, 0xa8, 0x9b, 0x23, 0xb9, 0xf3, 0x23, 0x00, 0x00, 0xff, 0xff, + 0x24, 0x46, 0x95, 0x2f, 0x0a, 0x04, 0x00, 0x00, } +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.AllocationPrice.Equal(&that1.AllocationPrice) { + return false + } + if len(this.ParticipationTierList) != len(that1.ParticipationTierList) { + return false + } + for i := range this.ParticipationTierList { + if !this.ParticipationTierList[i].Equal(&that1.ParticipationTierList[i]) { + return false + } + } + if this.RegistrationPeriod != that1.RegistrationPeriod { + return false + } + if this.WithdrawalDelay != that1.WithdrawalDelay { + return false + } + return true +} func (m *Params) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) diff --git a/x/participation/types/params_test.go b/x/participation/types/params_test.go deleted file mode 100644 index 5202535a..00000000 --- a/x/participation/types/params_test.go +++ /dev/null @@ -1,278 +0,0 @@ -package types - -import ( - "errors" - "fmt" - "math/rand" - "testing" - "time" - - sdkmath "cosmossdk.io/math" - "github.com/stretchr/testify/require" -) - -func TestParamsValidate(t *testing.T) { - tests := []struct { - name string - params Params - err error - }{ - { - name: "should allow valid params", - params: NewParams( - DefaultAllocationPrice, - DefaultParticipationTierList, - DefaultRegistrationPeriod, - DefaultWithdrawalDelay, - ), - }, - { - name: "should prevent invalid allocation price", - params: NewParams( - AllocationPrice{ - Bonded: sdkmath.NewInt(-1), - }, - DefaultParticipationTierList, - DefaultRegistrationPeriod, - DefaultWithdrawalDelay, - ), - err: errors.New("value for 'bonded' must be greater than zero"), - }, - { - name: "should prevent invalid participation tier list", - params: NewParams( - DefaultAllocationPrice, - []Tier{ - { - TierID: 0, - RequiredAllocations: sdkmath.OneInt(), - Benefits: TierBenefits{MaxBidAmount: sdkmath.ZeroInt()}, - }, - }, - DefaultRegistrationPeriod, - DefaultWithdrawalDelay, - ), - err: errors.New("max bid amount must be greater than zero"), - }, - { - name: "should prevent invalid registration period", - params: NewParams( - DefaultAllocationPrice, - DefaultParticipationTierList, - -1, - DefaultWithdrawalDelay, - ), - err: errors.New("time frame must be positive"), - }, - { - name: "should prevent invalid withdrawal delay", - params: NewParams( - DefaultAllocationPrice, - DefaultParticipationTierList, - DefaultRegistrationPeriod, - 0, - ), - err: errors.New("time frame must be positive"), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.params.Validate() - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateAllocationPrice(t *testing.T) { - tests := []struct { - name string - allocationPrice interface{} - err error - }{ - { - name: "should allow valid allocation price", - allocationPrice: AllocationPrice{Bonded: sdkmath.OneInt()}, - }, - { - name: "should prevent invalid interface", - allocationPrice: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "should prevent uninitialized bonded amount", - allocationPrice: AllocationPrice{Bonded: sdkmath.Int{}}, - err: errors.New("value for 'bonded' should be set"), - }, - { - name: "should prevent bonded amount lower or equal than zero", - allocationPrice: AllocationPrice{Bonded: sdkmath.ZeroInt()}, - err: errors.New("value for 'bonded' must be greater than zero"), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateAllocationPrice(tt.allocationPrice) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateParticipationTierList(t *testing.T) { - tests := []struct { - name string - participationTierList interface{} - err error - }{ - { - name: "should allow empty participation tier list", - participationTierList: []Tier{}, - }, - { - name: "should allow valid participation tier list", - participationTierList: []Tier{ - { - TierID: 0, - RequiredAllocations: sdkmath.OneInt(), - Benefits: TierBenefits{MaxBidAmount: sdkmath.OneInt()}, - }, - { - TierID: 1, - RequiredAllocations: sdkmath.NewInt(2), - Benefits: TierBenefits{MaxBidAmount: sdkmath.NewInt(2)}, - }, - }, - }, - { - name: "should prevent invalid interface", - participationTierList: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "should prevent duplicated tier id", - participationTierList: []Tier{ - { - TierID: 0, - RequiredAllocations: sdkmath.OneInt(), - Benefits: TierBenefits{MaxBidAmount: sdkmath.OneInt()}, - }, - { - TierID: 0, - RequiredAllocations: sdkmath.NewInt(2), - Benefits: TierBenefits{MaxBidAmount: sdkmath.NewInt(2)}, - }, - }, - err: errors.New("duplicated tier ID: 0"), - }, - { - name: "should prevent invalid required allocations", - participationTierList: []Tier{ - { - TierID: 0, - RequiredAllocations: sdkmath.ZeroInt(), - Benefits: TierBenefits{MaxBidAmount: sdkmath.OneInt()}, - }, - }, - err: errors.New("required allocations must be greater than zero"), - }, - { - name: "should prevent invalid tier benefits", - participationTierList: []Tier{ - { - TierID: 0, - RequiredAllocations: sdkmath.OneInt(), - Benefits: TierBenefits{MaxBidAmount: sdkmath.ZeroInt()}, - }, - }, - err: errors.New("max bid amount must be greater than zero"), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateParticipationTierList(tt.participationTierList) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateTierBenefits(t *testing.T) { - tests := []struct { - name string - tierBenefits TierBenefits - err error - }{ - { - name: "should allow valid tier benefits", - tierBenefits: TierBenefits{MaxBidAmount: sdkmath.OneInt()}, - }, - { - name: "should prevent uninitialized max bid amount", - tierBenefits: TierBenefits{MaxBidAmount: sdkmath.Int{}}, - err: errors.New("max bid amount should be set"), - }, - { - name: "should prevent max bid amount lower than zero", - tierBenefits: TierBenefits{MaxBidAmount: sdkmath.NewInt(-1)}, - err: errors.New("max bid amount must be greater than zero"), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateTierBenefits(tt.tierBenefits) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateTimeDuration(t *testing.T) { - tests := []struct { - name string - timeFrame interface{} - err error - }{ - { - name: "should allow valid time frame", - timeFrame: time.Hour, - }, - { - name: "should prevent invalid interface", - timeFrame: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "should prevent value not positive", - timeFrame: time.Duration(-rand.Int63n(1000)), - err: errors.New("time frame must be positive"), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateTimeDuration(tt.timeFrame) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/participation/types/query.pb.go b/x/participation/types/query.pb.go index 60c1cf56..2700341d 100644 --- a/x/participation/types/query.pb.go +++ b/x/participation/types/query.pb.go @@ -1,14 +1,15 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/participation/query.proto +// source: network/participation/v1/query.proto package types import ( context "context" + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -32,110 +33,22 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type QueryGetUsedAllocationsRequest struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` -} - -func (m *QueryGetUsedAllocationsRequest) Reset() { *m = QueryGetUsedAllocationsRequest{} } -func (m *QueryGetUsedAllocationsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetUsedAllocationsRequest) ProtoMessage() {} -func (*QueryGetUsedAllocationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{0} -} -func (m *QueryGetUsedAllocationsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryGetUsedAllocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryGetUsedAllocationsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryGetUsedAllocationsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetUsedAllocationsRequest.Merge(m, src) -} -func (m *QueryGetUsedAllocationsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryGetUsedAllocationsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetUsedAllocationsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryGetUsedAllocationsRequest proto.InternalMessageInfo - -func (m *QueryGetUsedAllocationsRequest) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - -type QueryGetUsedAllocationsResponse struct { - UsedAllocations UsedAllocations `protobuf:"bytes,1,opt,name=usedAllocations,proto3" json:"usedAllocations"` -} - -func (m *QueryGetUsedAllocationsResponse) Reset() { *m = QueryGetUsedAllocationsResponse{} } -func (m *QueryGetUsedAllocationsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetUsedAllocationsResponse) ProtoMessage() {} -func (*QueryGetUsedAllocationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{1} -} -func (m *QueryGetUsedAllocationsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryGetUsedAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryGetUsedAllocationsResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryGetUsedAllocationsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetUsedAllocationsResponse.Merge(m, src) -} -func (m *QueryGetUsedAllocationsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryGetUsedAllocationsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetUsedAllocationsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryGetUsedAllocationsResponse proto.InternalMessageInfo - -func (m *QueryGetUsedAllocationsResponse) GetUsedAllocations() UsedAllocations { - if m != nil { - return m.UsedAllocations - } - return UsedAllocations{} -} - -type QueryAllUsedAllocationsRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { } -func (m *QueryAllUsedAllocationsRequest) Reset() { *m = QueryAllUsedAllocationsRequest{} } -func (m *QueryAllUsedAllocationsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllUsedAllocationsRequest) ProtoMessage() {} -func (*QueryAllUsedAllocationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{2} +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{0} } -func (m *QueryAllUsedAllocationsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllUsedAllocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllUsedAllocationsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -145,42 +58,36 @@ func (m *QueryAllUsedAllocationsRequest) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *QueryAllUsedAllocationsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllUsedAllocationsRequest.Merge(m, src) +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) } -func (m *QueryAllUsedAllocationsRequest) XXX_Size() int { +func (m *QueryParamsRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllUsedAllocationsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllUsedAllocationsRequest.DiscardUnknown(m) +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllUsedAllocationsRequest proto.InternalMessageInfo - -func (m *QueryAllUsedAllocationsRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil -} +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo -type QueryAllUsedAllocationsResponse struct { - UsedAllocations []UsedAllocations `protobuf:"bytes,1,rep,name=usedAllocations,proto3" json:"usedAllocations"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` } -func (m *QueryAllUsedAllocationsResponse) Reset() { *m = QueryAllUsedAllocationsResponse{} } -func (m *QueryAllUsedAllocationsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllUsedAllocationsResponse) ProtoMessage() {} -func (*QueryAllUsedAllocationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{3} +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{1} } -func (m *QueryAllUsedAllocationsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllUsedAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllUsedAllocationsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -190,30 +97,23 @@ func (m *QueryAllUsedAllocationsResponse) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (m *QueryAllUsedAllocationsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllUsedAllocationsResponse.Merge(m, src) +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) } -func (m *QueryAllUsedAllocationsResponse) XXX_Size() int { +func (m *QueryParamsResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllUsedAllocationsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllUsedAllocationsResponse.DiscardUnknown(m) +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllUsedAllocationsResponse proto.InternalMessageInfo - -func (m *QueryAllUsedAllocationsResponse) GetUsedAllocations() []UsedAllocations { - if m != nil { - return m.UsedAllocations - } - return nil -} +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo -func (m *QueryAllUsedAllocationsResponse) GetPagination() *query.PageResponse { +func (m *QueryParamsResponse) GetParams() Params { if m != nil { - return m.Pagination + return m.Params } - return nil + return Params{} } type QueryGetAuctionUsedAllocationsRequest struct { @@ -225,7 +125,7 @@ func (m *QueryGetAuctionUsedAllocationsRequest) Reset() { *m = QueryGetA func (m *QueryGetAuctionUsedAllocationsRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetAuctionUsedAllocationsRequest) ProtoMessage() {} func (*QueryGetAuctionUsedAllocationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{4} + return fileDescriptor_5aee62a5a3af97b8, []int{2} } func (m *QueryGetAuctionUsedAllocationsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -278,7 +178,7 @@ func (m *QueryGetAuctionUsedAllocationsResponse) Reset() { func (m *QueryGetAuctionUsedAllocationsResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetAuctionUsedAllocationsResponse) ProtoMessage() {} func (*QueryGetAuctionUsedAllocationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{5} + return fileDescriptor_5aee62a5a3af97b8, []int{3} } func (m *QueryGetAuctionUsedAllocationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -323,7 +223,7 @@ func (m *QueryAllAuctionUsedAllocationsRequest) Reset() { *m = QueryAllA func (m *QueryAllAuctionUsedAllocationsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllAuctionUsedAllocationsRequest) ProtoMessage() {} func (*QueryAllAuctionUsedAllocationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{6} + return fileDescriptor_5aee62a5a3af97b8, []int{4} } func (m *QueryAllAuctionUsedAllocationsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -377,7 +277,7 @@ func (m *QueryAllAuctionUsedAllocationsResponse) Reset() { func (m *QueryAllAuctionUsedAllocationsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllAuctionUsedAllocationsResponse) ProtoMessage() {} func (*QueryAllAuctionUsedAllocationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{7} + return fileDescriptor_5aee62a5a3af97b8, []int{5} } func (m *QueryAllAuctionUsedAllocationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -420,22 +320,22 @@ func (m *QueryAllAuctionUsedAllocationsResponse) GetPagination() *query.PageResp return nil } -type QueryGetTotalAllocationsRequest struct { +type QueryGetUsedAllocationsRequest struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryGetTotalAllocationsRequest) Reset() { *m = QueryGetTotalAllocationsRequest{} } -func (m *QueryGetTotalAllocationsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetTotalAllocationsRequest) ProtoMessage() {} -func (*QueryGetTotalAllocationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{8} +func (m *QueryGetUsedAllocationsRequest) Reset() { *m = QueryGetUsedAllocationsRequest{} } +func (m *QueryGetUsedAllocationsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetUsedAllocationsRequest) ProtoMessage() {} +func (*QueryGetUsedAllocationsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{6} } -func (m *QueryGetTotalAllocationsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetUsedAllocationsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetTotalAllocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetUsedAllocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetTotalAllocationsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetUsedAllocationsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -445,41 +345,41 @@ func (m *QueryGetTotalAllocationsRequest) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (m *QueryGetTotalAllocationsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetTotalAllocationsRequest.Merge(m, src) +func (m *QueryGetUsedAllocationsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetUsedAllocationsRequest.Merge(m, src) } -func (m *QueryGetTotalAllocationsRequest) XXX_Size() int { +func (m *QueryGetUsedAllocationsRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetTotalAllocationsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetTotalAllocationsRequest.DiscardUnknown(m) +func (m *QueryGetUsedAllocationsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetUsedAllocationsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetTotalAllocationsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetUsedAllocationsRequest proto.InternalMessageInfo -func (m *QueryGetTotalAllocationsRequest) GetAddress() string { +func (m *QueryGetUsedAllocationsRequest) GetAddress() string { if m != nil { return m.Address } return "" } -type QueryGetTotalAllocationsResponse struct { - TotalAllocations github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=totalAllocations,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"totalAllocations"` +type QueryGetUsedAllocationsResponse struct { + UsedAllocations UsedAllocations `protobuf:"bytes,1,opt,name=usedAllocations,proto3" json:"usedAllocations"` } -func (m *QueryGetTotalAllocationsResponse) Reset() { *m = QueryGetTotalAllocationsResponse{} } -func (m *QueryGetTotalAllocationsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetTotalAllocationsResponse) ProtoMessage() {} -func (*QueryGetTotalAllocationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{9} +func (m *QueryGetUsedAllocationsResponse) Reset() { *m = QueryGetUsedAllocationsResponse{} } +func (m *QueryGetUsedAllocationsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetUsedAllocationsResponse) ProtoMessage() {} +func (*QueryGetUsedAllocationsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{7} } -func (m *QueryGetTotalAllocationsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetUsedAllocationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetTotalAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetUsedAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetTotalAllocationsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetUsedAllocationsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -489,34 +389,41 @@ func (m *QueryGetTotalAllocationsResponse) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *QueryGetTotalAllocationsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetTotalAllocationsResponse.Merge(m, src) +func (m *QueryGetUsedAllocationsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetUsedAllocationsResponse.Merge(m, src) } -func (m *QueryGetTotalAllocationsResponse) XXX_Size() int { +func (m *QueryGetUsedAllocationsResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetTotalAllocationsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetTotalAllocationsResponse.DiscardUnknown(m) +func (m *QueryGetUsedAllocationsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetUsedAllocationsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetTotalAllocationsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetUsedAllocationsResponse proto.InternalMessageInfo -type QueryGetAvailableAllocationsRequest struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +func (m *QueryGetUsedAllocationsResponse) GetUsedAllocations() UsedAllocations { + if m != nil { + return m.UsedAllocations + } + return UsedAllocations{} +} + +type QueryAllUsedAllocationsRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryGetAvailableAllocationsRequest) Reset() { *m = QueryGetAvailableAllocationsRequest{} } -func (m *QueryGetAvailableAllocationsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetAvailableAllocationsRequest) ProtoMessage() {} -func (*QueryGetAvailableAllocationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{10} +func (m *QueryAllUsedAllocationsRequest) Reset() { *m = QueryAllUsedAllocationsRequest{} } +func (m *QueryAllUsedAllocationsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllUsedAllocationsRequest) ProtoMessage() {} +func (*QueryAllUsedAllocationsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{8} } -func (m *QueryGetAvailableAllocationsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllUsedAllocationsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetAvailableAllocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllUsedAllocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetAvailableAllocationsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllUsedAllocationsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -526,41 +433,42 @@ func (m *QueryGetAvailableAllocationsRequest) XXX_Marshal(b []byte, deterministi return b[:n], nil } } -func (m *QueryGetAvailableAllocationsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetAvailableAllocationsRequest.Merge(m, src) +func (m *QueryAllUsedAllocationsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllUsedAllocationsRequest.Merge(m, src) } -func (m *QueryGetAvailableAllocationsRequest) XXX_Size() int { +func (m *QueryAllUsedAllocationsRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetAvailableAllocationsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetAvailableAllocationsRequest.DiscardUnknown(m) +func (m *QueryAllUsedAllocationsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllUsedAllocationsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetAvailableAllocationsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllUsedAllocationsRequest proto.InternalMessageInfo -func (m *QueryGetAvailableAllocationsRequest) GetAddress() string { +func (m *QueryAllUsedAllocationsRequest) GetPagination() *query.PageRequest { if m != nil { - return m.Address + return m.Pagination } - return "" + return nil } -type QueryGetAvailableAllocationsResponse struct { - AvailableAllocations github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=availableAllocations,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"availableAllocations"` +type QueryAllUsedAllocationsResponse struct { + UsedAllocations []UsedAllocations `protobuf:"bytes,1,rep,name=usedAllocations,proto3" json:"usedAllocations"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryGetAvailableAllocationsResponse) Reset() { *m = QueryGetAvailableAllocationsResponse{} } -func (m *QueryGetAvailableAllocationsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetAvailableAllocationsResponse) ProtoMessage() {} -func (*QueryGetAvailableAllocationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{11} +func (m *QueryAllUsedAllocationsResponse) Reset() { *m = QueryAllUsedAllocationsResponse{} } +func (m *QueryAllUsedAllocationsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllUsedAllocationsResponse) ProtoMessage() {} +func (*QueryAllUsedAllocationsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{9} } -func (m *QueryGetAvailableAllocationsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllUsedAllocationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetAvailableAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllUsedAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetAvailableAllocationsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllUsedAllocationsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -570,34 +478,48 @@ func (m *QueryGetAvailableAllocationsResponse) XXX_Marshal(b []byte, determinist return b[:n], nil } } -func (m *QueryGetAvailableAllocationsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetAvailableAllocationsResponse.Merge(m, src) +func (m *QueryAllUsedAllocationsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllUsedAllocationsResponse.Merge(m, src) } -func (m *QueryGetAvailableAllocationsResponse) XXX_Size() int { +func (m *QueryAllUsedAllocationsResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetAvailableAllocationsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetAvailableAllocationsResponse.DiscardUnknown(m) +func (m *QueryAllUsedAllocationsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllUsedAllocationsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetAvailableAllocationsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllUsedAllocationsResponse proto.InternalMessageInfo -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +func (m *QueryAllUsedAllocationsResponse) GetUsedAllocations() []UsedAllocations { + if m != nil { + return m.UsedAllocations + } + return nil } -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{12} -} -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) +func (m *QueryAllUsedAllocationsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil } -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + +type QueryTotalAllocationsRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryTotalAllocationsRequest) Reset() { *m = QueryTotalAllocationsRequest{} } +func (m *QueryTotalAllocationsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalAllocationsRequest) ProtoMessage() {} +func (*QueryTotalAllocationsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{10} +} +func (m *QueryTotalAllocationsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalAllocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryTotalAllocationsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -607,35 +529,41 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) +func (m *QueryTotalAllocationsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalAllocationsRequest.Merge(m, src) } -func (m *QueryParamsRequest) XXX_Size() int { +func (m *QueryTotalAllocationsRequest) XXX_Size() int { return m.Size() } -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +func (m *QueryTotalAllocationsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalAllocationsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryTotalAllocationsRequest proto.InternalMessageInfo -// QueryParamsResponse is response type for the Query/Params RPC method. -type QueryParamsResponse struct { - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +func (m *QueryTotalAllocationsRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" } -func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } -func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryParamsResponse) ProtoMessage() {} -func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2821ae6aa6f9b98e, []int{13} +type QueryTotalAllocationsResponse struct { + TotalAllocations cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=totalAllocations,proto3,customtype=cosmossdk.io/math.Int" json:"totalAllocations"` } -func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + +func (m *QueryTotalAllocationsResponse) Reset() { *m = QueryTotalAllocationsResponse{} } +func (m *QueryTotalAllocationsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalAllocationsResponse) ProtoMessage() {} +func (*QueryTotalAllocationsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{11} +} +func (m *QueryTotalAllocationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryTotalAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryTotalAllocationsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -645,100 +573,177 @@ func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsResponse.Merge(m, src) +func (m *QueryTotalAllocationsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalAllocationsResponse.Merge(m, src) } -func (m *QueryParamsResponse) XXX_Size() int { +func (m *QueryTotalAllocationsResponse) XXX_Size() int { return m.Size() } -func (m *QueryParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +func (m *QueryTotalAllocationsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalAllocationsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryTotalAllocationsResponse proto.InternalMessageInfo -func (m *QueryParamsResponse) GetParams() Params { +type QueryAvailableAllocationsRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryAvailableAllocationsRequest) Reset() { *m = QueryAvailableAllocationsRequest{} } +func (m *QueryAvailableAllocationsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAvailableAllocationsRequest) ProtoMessage() {} +func (*QueryAvailableAllocationsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{12} +} +func (m *QueryAvailableAllocationsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAvailableAllocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAvailableAllocationsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAvailableAllocationsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAvailableAllocationsRequest.Merge(m, src) +} +func (m *QueryAvailableAllocationsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAvailableAllocationsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAvailableAllocationsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAvailableAllocationsRequest proto.InternalMessageInfo + +func (m *QueryAvailableAllocationsRequest) GetAddress() string { if m != nil { - return m.Params + return m.Address } - return Params{} + return "" +} + +type QueryAvailableAllocationsResponse struct { + AvailableAllocations cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=availableAllocations,proto3,customtype=cosmossdk.io/math.Int" json:"availableAllocations"` +} + +func (m *QueryAvailableAllocationsResponse) Reset() { *m = QueryAvailableAllocationsResponse{} } +func (m *QueryAvailableAllocationsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAvailableAllocationsResponse) ProtoMessage() {} +func (*QueryAvailableAllocationsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5aee62a5a3af97b8, []int{13} +} +func (m *QueryAvailableAllocationsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAvailableAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAvailableAllocationsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAvailableAllocationsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAvailableAllocationsResponse.Merge(m, src) +} +func (m *QueryAvailableAllocationsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAvailableAllocationsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAvailableAllocationsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAvailableAllocationsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "network.participation.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "network.participation.v1.QueryParamsResponse") + proto.RegisterType((*QueryGetAuctionUsedAllocationsRequest)(nil), "network.participation.v1.QueryGetAuctionUsedAllocationsRequest") + proto.RegisterType((*QueryGetAuctionUsedAllocationsResponse)(nil), "network.participation.v1.QueryGetAuctionUsedAllocationsResponse") + proto.RegisterType((*QueryAllAuctionUsedAllocationsRequest)(nil), "network.participation.v1.QueryAllAuctionUsedAllocationsRequest") + proto.RegisterType((*QueryAllAuctionUsedAllocationsResponse)(nil), "network.participation.v1.QueryAllAuctionUsedAllocationsResponse") + proto.RegisterType((*QueryGetUsedAllocationsRequest)(nil), "network.participation.v1.QueryGetUsedAllocationsRequest") + proto.RegisterType((*QueryGetUsedAllocationsResponse)(nil), "network.participation.v1.QueryGetUsedAllocationsResponse") + proto.RegisterType((*QueryAllUsedAllocationsRequest)(nil), "network.participation.v1.QueryAllUsedAllocationsRequest") + proto.RegisterType((*QueryAllUsedAllocationsResponse)(nil), "network.participation.v1.QueryAllUsedAllocationsResponse") + proto.RegisterType((*QueryTotalAllocationsRequest)(nil), "network.participation.v1.QueryTotalAllocationsRequest") + proto.RegisterType((*QueryTotalAllocationsResponse)(nil), "network.participation.v1.QueryTotalAllocationsResponse") + proto.RegisterType((*QueryAvailableAllocationsRequest)(nil), "network.participation.v1.QueryAvailableAllocationsRequest") + proto.RegisterType((*QueryAvailableAllocationsResponse)(nil), "network.participation.v1.QueryAvailableAllocationsResponse") } func init() { - proto.RegisterType((*QueryGetUsedAllocationsRequest)(nil), "spn.participation.QueryGetUsedAllocationsRequest") - proto.RegisterType((*QueryGetUsedAllocationsResponse)(nil), "spn.participation.QueryGetUsedAllocationsResponse") - proto.RegisterType((*QueryAllUsedAllocationsRequest)(nil), "spn.participation.QueryAllUsedAllocationsRequest") - proto.RegisterType((*QueryAllUsedAllocationsResponse)(nil), "spn.participation.QueryAllUsedAllocationsResponse") - proto.RegisterType((*QueryGetAuctionUsedAllocationsRequest)(nil), "spn.participation.QueryGetAuctionUsedAllocationsRequest") - proto.RegisterType((*QueryGetAuctionUsedAllocationsResponse)(nil), "spn.participation.QueryGetAuctionUsedAllocationsResponse") - proto.RegisterType((*QueryAllAuctionUsedAllocationsRequest)(nil), "spn.participation.QueryAllAuctionUsedAllocationsRequest") - proto.RegisterType((*QueryAllAuctionUsedAllocationsResponse)(nil), "spn.participation.QueryAllAuctionUsedAllocationsResponse") - proto.RegisterType((*QueryGetTotalAllocationsRequest)(nil), "spn.participation.QueryGetTotalAllocationsRequest") - proto.RegisterType((*QueryGetTotalAllocationsResponse)(nil), "spn.participation.QueryGetTotalAllocationsResponse") - proto.RegisterType((*QueryGetAvailableAllocationsRequest)(nil), "spn.participation.QueryGetAvailableAllocationsRequest") - proto.RegisterType((*QueryGetAvailableAllocationsResponse)(nil), "spn.participation.QueryGetAvailableAllocationsResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "spn.participation.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "spn.participation.QueryParamsResponse") -} - -func init() { proto.RegisterFile("spn/participation/query.proto", fileDescriptor_2821ae6aa6f9b98e) } - -var fileDescriptor_2821ae6aa6f9b98e = []byte{ - // 856 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x4f, 0x13, 0x41, - 0x14, 0xee, 0x00, 0x62, 0x18, 0x0f, 0xe0, 0xd8, 0x10, 0x68, 0x70, 0x21, 0x2b, 0x54, 0x34, 0xb2, - 0x0b, 0x25, 0xe1, 0x87, 0x3f, 0x22, 0x6d, 0x14, 0x6c, 0x62, 0x08, 0x56, 0x38, 0xe8, 0x85, 0x4c, - 0xdb, 0xc9, 0xb2, 0x71, 0xbb, 0xbb, 0x74, 0xa7, 0x44, 0x42, 0xb8, 0x98, 0x78, 0xf3, 0xa0, 0xf1, - 0xe2, 0xdd, 0x3f, 0x41, 0x4e, 0x1e, 0x38, 0x73, 0x32, 0x04, 0x0f, 0x1a, 0x0e, 0xc4, 0x50, 0xff, - 0x10, 0xd3, 0xd9, 0x57, 0x4a, 0xb7, 0xbb, 0x5b, 0x0b, 0x3d, 0x2d, 0xec, 0x7b, 0xf3, 0xcd, 0xf7, - 0xbd, 0xf7, 0xf6, 0x7b, 0x80, 0x6f, 0x3a, 0xb6, 0xa9, 0xda, 0xb4, 0xc8, 0xf5, 0x9c, 0x6e, 0x53, - 0xae, 0x5b, 0xa6, 0xba, 0x59, 0x62, 0xc5, 0x6d, 0xc5, 0x2e, 0x5a, 0xdc, 0x22, 0xd7, 0x1d, 0xdb, - 0x54, 0xea, 0xc2, 0xb1, 0xa8, 0x66, 0x69, 0x96, 0x88, 0xaa, 0x95, 0x9f, 0xdc, 0xc4, 0xd8, 0x90, - 0x66, 0x59, 0x9a, 0xc1, 0x54, 0x6a, 0xeb, 0x2a, 0x35, 0x4d, 0x8b, 0x8b, 0x64, 0x07, 0xa2, 0x77, - 0x73, 0x96, 0x53, 0xb0, 0x1c, 0x35, 0x4b, 0x1d, 0xe6, 0xe2, 0xab, 0x5b, 0x53, 0x59, 0xc6, 0xe9, - 0x94, 0x6a, 0x53, 0x4d, 0x37, 0x45, 0x32, 0xe4, 0x0e, 0xba, 0xb9, 0xeb, 0xee, 0x15, 0xee, 0x2f, - 0x10, 0x92, 0x1a, 0xc9, 0xda, 0xb4, 0x48, 0x0b, 0xd5, 0xf8, 0x78, 0x63, 0xbc, 0xe4, 0xb0, 0xfc, - 0x3a, 0x35, 0x0c, 0x2b, 0x57, 0x47, 0x68, 0xb2, 0x31, 0x93, 0x96, 0x72, 0x95, 0xe7, 0xba, 0xff, - 0x09, 0x79, 0x15, 0x4b, 0x2f, 0x2a, 0xc4, 0x97, 0x18, 0x5f, 0x73, 0x58, 0x3e, 0x59, 0x4b, 0xc8, - 0xb0, 0xcd, 0x12, 0x73, 0x38, 0x49, 0xe0, 0xab, 0x34, 0x9f, 0x2f, 0x32, 0xc7, 0x19, 0x40, 0x23, - 0x68, 0xbc, 0x27, 0x35, 0x70, 0xb4, 0x37, 0x11, 0x05, 0x01, 0x49, 0x37, 0xf2, 0x92, 0x17, 0x75, - 0x53, 0xcb, 0x54, 0x13, 0xe5, 0x12, 0x1e, 0x0e, 0x44, 0x75, 0x6c, 0xcb, 0x74, 0x18, 0xc9, 0xe0, - 0xde, 0x52, 0x7d, 0x48, 0xc0, 0x5f, 0x4b, 0xc8, 0x4a, 0x43, 0x73, 0x14, 0x0f, 0x48, 0xaa, 0xeb, - 0xe0, 0x64, 0x38, 0x92, 0xf1, 0x02, 0xc8, 0x1b, 0x20, 0x26, 0x69, 0x18, 0x01, 0x62, 0x16, 0x31, - 0xae, 0x75, 0x06, 0x2e, 0x8c, 0x2b, 0x20, 0xa6, 0xd2, 0x46, 0xc5, 0x1d, 0x13, 0x68, 0xa3, 0xb2, - 0x42, 0x35, 0x06, 0x67, 0x33, 0xe7, 0x4e, 0xca, 0xfb, 0x08, 0x14, 0xfa, 0x5d, 0x15, 0xa6, 0xb0, - 0xf3, 0x52, 0x0a, 0xc9, 0x52, 0x1d, 0xff, 0x0e, 0xc1, 0xff, 0x76, 0x53, 0xfe, 0x2e, 0xa1, 0x3a, - 0x01, 0xdb, 0x78, 0xac, 0xda, 0xa1, 0xa4, 0x3b, 0x21, 0xed, 0x6b, 0x3f, 0x19, 0xc2, 0x3d, 0x30, - 0x76, 0xe9, 0x27, 0x82, 0x64, 0x57, 0xa6, 0xf6, 0x42, 0xfe, 0x84, 0x70, 0xbc, 0xd9, 0xdd, 0x50, - 0x42, 0x0d, 0xf7, 0x53, 0xdf, 0x0c, 0x68, 0xdd, 0x1d, 0x9f, 0x4a, 0xfa, 0x43, 0x42, 0x41, 0x03, - 0xe0, 0xe4, 0xaf, 0x08, 0xea, 0x91, 0x34, 0x8c, 0xf6, 0xd7, 0x63, 0xd1, 0xa7, 0x6b, 0x17, 0x99, - 0xba, 0xe3, 0x6a, 0xe5, 0x42, 0x58, 0xfe, 0x47, 0xe5, 0x3a, 0xdb, 0x58, 0xb9, 0xf6, 0x4d, 0xe4, - 0x5a, 0xcd, 0x33, 0x56, 0x2d, 0x4e, 0x8d, 0x36, 0x59, 0xd1, 0x07, 0x84, 0x47, 0x82, 0x71, 0xa1, - 0x5a, 0x1b, 0xb8, 0x8f, 0x7b, 0x62, 0x70, 0xc3, 0xc3, 0x8a, 0xf8, 0xe3, 0x93, 0xe1, 0xb8, 0xa6, - 0xf3, 0x8d, 0x52, 0x56, 0xc9, 0x59, 0x05, 0x30, 0x6f, 0x78, 0x4c, 0x38, 0xf9, 0x37, 0x2a, 0xdf, - 0xb6, 0x99, 0xa3, 0xa4, 0x4d, 0x7e, 0xb4, 0x37, 0x81, 0x81, 0x4f, 0xda, 0xe4, 0x99, 0x06, 0x54, - 0xf9, 0x15, 0xbe, 0x75, 0x36, 0xfb, 0x5b, 0x54, 0x37, 0x68, 0xd6, 0x60, 0x6d, 0x52, 0xfa, 0x05, - 0xe1, 0xd1, 0x70, 0x6c, 0x50, 0x6b, 0xe3, 0x28, 0xf5, 0x89, 0xb7, 0x45, 0xb1, 0x2f, 0xb2, 0x1c, - 0xc5, 0x44, 0x30, 0x5b, 0x11, 0x6b, 0x0d, 0x44, 0xca, 0xcb, 0xf8, 0x46, 0xdd, 0x5b, 0xa0, 0x37, - 0x8b, 0xbb, 0xdd, 0xf5, 0x07, 0x1f, 0xf9, 0xa0, 0xcf, 0xa8, 0xba, 0x47, 0x60, 0x34, 0x21, 0x3d, - 0xf1, 0x0b, 0xe3, 0x2b, 0x02, 0x90, 0x7c, 0x47, 0xb8, 0xd7, 0x3b, 0xa8, 0x53, 0x3e, 0x30, 0xe1, - 0xab, 0x2f, 0x96, 0x68, 0xe5, 0x88, 0xcb, 0x5e, 0x5e, 0x78, 0xf7, 0xf3, 0xef, 0xe7, 0x8e, 0xfb, - 0x64, 0x4e, 0xe5, 0xcc, 0xcc, 0xb3, 0x62, 0x41, 0x37, 0xb9, 0xda, 0x7c, 0x81, 0xab, 0x3b, 0xd0, - 0xc6, 0x5d, 0xf2, 0x0d, 0x61, 0xe2, 0x41, 0x4f, 0x1a, 0x46, 0x30, 0xff, 0xc0, 0x6d, 0x17, 0xcc, - 0x3f, 0x78, 0x6b, 0xc9, 0x33, 0x82, 0xff, 0x24, 0x51, 0x5a, 0xe3, 0x4f, 0xca, 0x08, 0xf7, 0xfb, - 0x1b, 0x08, 0x99, 0x0b, 0x29, 0x63, 0xa8, 0xd9, 0xc6, 0xe6, 0x2f, 0x70, 0x12, 0x74, 0xac, 0x0a, - 0x1d, 0xcb, 0xe4, 0x79, 0xb8, 0x8e, 0xa0, 0x3f, 0x8f, 0x6a, 0xfd, 0x50, 0x77, 0xce, 0x56, 0xd7, - 0x2e, 0x39, 0x46, 0x78, 0xd0, 0xff, 0xe2, 0x4a, 0x8b, 0xe6, 0x42, 0xea, 0x7d, 0x41, 0xa1, 0x4d, - 0x9d, 0x5e, 0x7e, 0x26, 0x84, 0xa6, 0xc8, 0xc2, 0x65, 0x85, 0x92, 0x7d, 0x84, 0xfb, 0xbc, 0x16, - 0x49, 0xc2, 0xbe, 0x81, 0x00, 0x9f, 0x8e, 0x4d, 0xb7, 0x74, 0x06, 0x74, 0x24, 0x85, 0x8e, 0x07, - 0x64, 0x3e, 0x5c, 0x87, 0x70, 0xd4, 0x00, 0x01, 0x3f, 0x10, 0x8e, 0xfa, 0x39, 0x1f, 0x99, 0x09, - 0x9b, 0xa3, 0x60, 0x1b, 0x8e, 0xcd, 0xb6, 0x7c, 0x0e, 0xc4, 0x3c, 0x15, 0x62, 0x1e, 0x93, 0x47, - 0x4d, 0x9a, 0x52, 0xc5, 0x08, 0x10, 0xf4, 0x1e, 0xe1, 0x6e, 0xd7, 0xea, 0xc8, 0x58, 0x10, 0x95, - 0x3a, 0x4f, 0x8d, 0xc5, 0x9b, 0xa5, 0x01, 0xc1, 0x7b, 0x82, 0x60, 0x9c, 0x8c, 0x86, 0x13, 0x74, - 0x9d, 0x35, 0x95, 0x3e, 0x38, 0x95, 0xd0, 0xe1, 0xa9, 0x84, 0xfe, 0x9c, 0x4a, 0xe8, 0x63, 0x59, - 0x8a, 0x1c, 0x96, 0xa5, 0xc8, 0xef, 0xb2, 0x14, 0x79, 0xad, 0x9e, 0xdb, 0x12, 0x1e, 0xa4, 0xb7, - 0xde, 0xce, 0x55, 0x56, 0x46, 0xb6, 0x5b, 0xfc, 0xdf, 0x31, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, - 0xac, 0xec, 0x1b, 0xe2, 0xa2, 0x0d, 0x00, 0x00, + proto.RegisterFile("network/participation/v1/query.proto", fileDescriptor_5aee62a5a3af97b8) +} + +var fileDescriptor_5aee62a5a3af97b8 = []byte{ + // 871 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x97, 0x5d, 0x4f, 0x63, 0x45, + 0x18, 0xc7, 0x3b, 0x80, 0x18, 0x86, 0x0b, 0x71, 0xa8, 0xa6, 0x34, 0x58, 0xea, 0x89, 0xbc, 0x2a, + 0x67, 0x68, 0x4d, 0x78, 0x8d, 0x42, 0xeb, 0x0b, 0x36, 0xf1, 0x02, 0x8f, 0xa8, 0x91, 0x9b, 0x66, + 0xda, 0x4e, 0x0e, 0x27, 0x9c, 0x9e, 0x39, 0xf4, 0x4c, 0x2b, 0x44, 0xbd, 0x31, 0x7e, 0x00, 0x13, + 0x13, 0xe3, 0xb5, 0xde, 0x78, 0xe9, 0x05, 0x9f, 0xc0, 0x44, 0x43, 0xe2, 0x0d, 0x61, 0x93, 0xcd, + 0x66, 0x2f, 0xd8, 0x5d, 0xd8, 0x64, 0xf7, 0x63, 0x6c, 0x3a, 0x33, 0x0d, 0xdb, 0x72, 0xa6, 0x07, + 0x9a, 0xde, 0x90, 0x76, 0xe6, 0x79, 0xfb, 0xfd, 0xe7, 0x99, 0x79, 0x28, 0x7c, 0xc7, 0xa3, 0xfc, + 0x3b, 0x56, 0x3b, 0xc0, 0x3e, 0xa9, 0x71, 0xa7, 0xec, 0xf8, 0x84, 0x3b, 0xcc, 0xc3, 0x8d, 0x0c, + 0x3e, 0xac, 0xd3, 0xda, 0xb1, 0xe9, 0xd7, 0x18, 0x67, 0x28, 0xa1, 0xac, 0xcc, 0x36, 0x2b, 0xb3, + 0x91, 0x49, 0xbe, 0x4e, 0xaa, 0x8e, 0xc7, 0xb0, 0xf8, 0x2b, 0x8d, 0x93, 0x0b, 0x65, 0x16, 0x54, + 0x59, 0x80, 0x4b, 0x24, 0xa0, 0x32, 0x0a, 0x6e, 0x64, 0x4a, 0x94, 0x93, 0x0c, 0xf6, 0x89, 0xed, + 0x78, 0xd2, 0x57, 0xda, 0x4e, 0x48, 0xdb, 0xa2, 0xf8, 0x86, 0xe5, 0x17, 0xb5, 0x15, 0xb7, 0x99, + 0xcd, 0xe4, 0x7a, 0xf3, 0x93, 0x5a, 0x9d, 0xb4, 0x19, 0xb3, 0x5d, 0x8a, 0x89, 0xef, 0x60, 0xe2, + 0x79, 0x8c, 0x8b, 0x68, 0x2d, 0x9f, 0x15, 0x2d, 0x0d, 0xa9, 0x97, 0x9b, 0x1f, 0x8b, 0xf5, 0x80, + 0x56, 0x8a, 0xc4, 0x75, 0x59, 0xb9, 0xcd, 0x71, 0x5a, 0xeb, 0xe8, 0x93, 0x1a, 0xa9, 0xb6, 0xcc, + 0xb0, 0xd6, 0x2c, 0x3c, 0xae, 0x11, 0x87, 0xe8, 0x8b, 0xa6, 0x02, 0x3b, 0x22, 0x8a, 0x45, 0x0f, + 0xeb, 0x34, 0xe0, 0xc6, 0x1e, 0x1c, 0x6f, 0x5b, 0x0d, 0x7c, 0xe6, 0x05, 0x14, 0x7d, 0x04, 0x87, + 0x65, 0xb6, 0x04, 0x48, 0x83, 0xb9, 0xd1, 0x6c, 0xda, 0xd4, 0xc9, 0x6e, 0x4a, 0xcf, 0xfc, 0xc8, + 0xe9, 0xc5, 0x54, 0xec, 0xaf, 0x67, 0x7f, 0x2f, 0x00, 0x4b, 0xb9, 0x1a, 0xc7, 0x70, 0x5a, 0xc4, + 0xde, 0xa6, 0x3c, 0x27, 0x99, 0xbf, 0x0a, 0x68, 0x25, 0x77, 0x5d, 0x99, 0x2a, 0x02, 0x65, 0xe1, + 0xab, 0xa4, 0x52, 0xa9, 0xd1, 0x40, 0xa6, 0x1b, 0xc9, 0x27, 0xce, 0x4f, 0x16, 0xe3, 0xea, 0x08, + 0x72, 0x72, 0xe7, 0x4b, 0x5e, 0x73, 0x3c, 0xdb, 0x6a, 0x19, 0xa2, 0x49, 0x38, 0xa2, 0x84, 0x2c, + 0x7c, 0x9c, 0x18, 0x48, 0x83, 0xb9, 0x21, 0xeb, 0x7a, 0xc1, 0xf8, 0x1d, 0xc0, 0x99, 0xa8, 0xdc, + 0x0a, 0xd5, 0x83, 0x6f, 0x92, 0x50, 0x0b, 0x85, 0xbe, 0xa4, 0x47, 0x0f, 0x8f, 0x9c, 0x1f, 0x6a, + 0x4a, 0x61, 0x69, 0xa2, 0x1a, 0x7f, 0x02, 0x25, 0x4b, 0xce, 0x75, 0xfb, 0x2f, 0xcb, 0xa7, 0x10, + 0x5e, 0x77, 0xb6, 0xd0, 0x65, 0x34, 0x3b, 0x63, 0x2a, 0x9f, 0xe6, 0x35, 0x30, 0xe5, 0x65, 0x52, + 0xd7, 0xc0, 0xdc, 0x21, 0x36, 0x55, 0xf9, 0xac, 0x97, 0x3c, 0x8d, 0x27, 0x2d, 0x01, 0xbb, 0x54, + 0x79, 0x0b, 0x01, 0x07, 0xfb, 0x2f, 0x20, 0xda, 0x0e, 0x41, 0x9c, 0x8d, 0x44, 0x94, 0xc5, 0xb6, + 0x31, 0xee, 0xc2, 0x54, 0xab, 0x47, 0xfa, 0x77, 0x02, 0xc6, 0x0f, 0x70, 0x4a, 0x1b, 0x55, 0x29, + 0xf6, 0x2d, 0x7c, 0xad, 0x1e, 0xda, 0x6b, 0xf3, 0x7a, 0xa9, 0xc2, 0x35, 0xea, 0x8c, 0x63, 0xec, + 0x2b, 0xa6, 0x9c, 0xeb, 0x6a, 0x98, 0xda, 0x3b, 0x04, 0xf4, 0xdc, 0x21, 0xff, 0x02, 0x05, 0x1a, + 0x96, 0xaa, 0x1b, 0xe8, 0x60, 0x3f, 0x40, 0xfb, 0xd7, 0x05, 0x16, 0x9c, 0x14, 0x18, 0xbb, 0x8c, + 0x13, 0xb7, 0x4f, 0x3d, 0x70, 0x04, 0xdf, 0xd2, 0xc4, 0x54, 0xc2, 0x7c, 0x03, 0xc7, 0x78, 0xc7, + 0x9e, 0x8a, 0xfe, 0x6e, 0x13, 0xf7, 0xe1, 0xc5, 0xd4, 0x1b, 0x32, 0x43, 0x50, 0x39, 0x30, 0x1d, + 0x86, 0xab, 0x84, 0xef, 0x9b, 0x05, 0x8f, 0x9f, 0x9f, 0x2c, 0x42, 0x95, 0xba, 0xe0, 0x71, 0xeb, + 0x46, 0x10, 0xe3, 0x6b, 0x98, 0x96, 0x87, 0xd2, 0x20, 0x8e, 0x4b, 0x4a, 0x2e, 0xed, 0x13, 0xd1, + 0xcf, 0x00, 0xbe, 0xdd, 0x25, 0xb0, 0xc2, 0x2a, 0xc2, 0x38, 0x09, 0xd9, 0xef, 0x05, 0x2d, 0x34, + 0x50, 0xf6, 0x8f, 0x51, 0xf8, 0x8a, 0x28, 0x03, 0xfd, 0x06, 0xe0, 0xb0, 0x1c, 0x3d, 0xe8, 0x3d, + 0x7d, 0x33, 0xdd, 0x9c, 0x78, 0xc9, 0xc5, 0x5b, 0x5a, 0x4b, 0x24, 0x03, 0xff, 0x74, 0xef, 0xe9, + 0xaf, 0x03, 0xf3, 0x68, 0x16, 0x3b, 0xb6, 0xe7, 0x70, 0x8a, 0x23, 0xc6, 0x33, 0x7a, 0x0e, 0xe0, + 0x84, 0x76, 0xea, 0xa0, 0xcd, 0x88, 0xec, 0x51, 0xb3, 0x32, 0xb9, 0xd5, 0x7b, 0x00, 0x45, 0xf4, + 0x99, 0x20, 0xca, 0xa3, 0xad, 0xee, 0x44, 0xba, 0x7f, 0x53, 0xf0, 0xf7, 0xaa, 0x27, 0x7e, 0x44, + 0x8f, 0x00, 0x4c, 0x7e, 0xee, 0x04, 0xbd, 0xb2, 0x46, 0x0d, 0xc0, 0x48, 0xd6, 0xc8, 0xd9, 0x64, + 0x7c, 0x28, 0x58, 0x57, 0xd1, 0x72, 0x6f, 0xac, 0xe8, 0x7f, 0x00, 0xd1, 0xcd, 0x87, 0x1c, 0xad, + 0x46, 0x1f, 0x82, 0x06, 0x69, 0xad, 0x07, 0x4f, 0xc5, 0xb2, 0x25, 0x58, 0xd6, 0xd1, 0x6a, 0x77, + 0x96, 0x2e, 0xe7, 0xf5, 0x0f, 0x80, 0xe3, 0xcd, 0xf3, 0xba, 0x2b, 0x8e, 0x76, 0x98, 0x44, 0xe2, + 0xe8, 0x67, 0x83, 0xb1, 0x2c, 0x70, 0x96, 0x90, 0x79, 0x37, 0x1c, 0xf4, 0x1f, 0x80, 0x63, 0x9d, + 0xef, 0x2a, 0x5a, 0x8e, 0xa8, 0x43, 0xf3, 0xb8, 0x27, 0x57, 0xee, 0xec, 0xa7, 0xaa, 0xcf, 0x89, + 0xea, 0x37, 0xd0, 0x5a, 0xf7, 0xea, 0xc5, 0xfb, 0xac, 0x39, 0x8d, 0xfb, 0x00, 0xc6, 0xc3, 0x5e, + 0x53, 0xb4, 0x1e, 0x25, 0xaa, 0xfe, 0x6d, 0x4f, 0x6e, 0xf4, 0xe4, 0xab, 0xa0, 0x3e, 0x11, 0x50, + 0x9b, 0xe8, 0x83, 0x88, 0xdb, 0xd2, 0x8a, 0x11, 0x0e, 0x96, 0x2f, 0x9c, 0x5e, 0xa6, 0xc0, 0xd9, + 0x65, 0x0a, 0x3c, 0xbe, 0x4c, 0x81, 0x5f, 0xae, 0x52, 0xb1, 0xb3, 0xab, 0x54, 0xec, 0xc1, 0x55, + 0x2a, 0xb6, 0x87, 0x6d, 0x87, 0xef, 0xd7, 0x4b, 0x66, 0x99, 0x55, 0x3b, 0x53, 0x1c, 0x75, 0x2a, + 0x77, 0xec, 0xd3, 0xa0, 0x34, 0x2c, 0x7e, 0xbb, 0xbc, 0xff, 0x22, 0x00, 0x00, 0xff, 0xff, 0x0e, + 0x5b, 0x78, 0xcf, 0x1c, 0x0e, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -753,20 +758,18 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { - // Queries a UsedAllocations by address. - UsedAllocations(ctx context.Context, in *QueryGetUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetUsedAllocationsResponse, error) - // Queries a list of UsedAllocations items. - UsedAllocationsAll(ctx context.Context, in *QueryAllUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllUsedAllocationsResponse, error) - // Queries a AuctionUsedAllocations by address and auctionID. - AuctionUsedAllocations(ctx context.Context, in *QueryGetAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetAuctionUsedAllocationsResponse, error) - // Queries a list of AuctionUsedAllocations items. - AuctionUsedAllocationsAll(ctx context.Context, in *QueryAllAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllAuctionUsedAllocationsResponse, error) - // Queries a TotalAllocation of address. - TotalAllocations(ctx context.Context, in *QueryGetTotalAllocationsRequest, opts ...grpc.CallOption) (*QueryGetTotalAllocationsResponse, error) - // Queries the AvailableAllocation of address. - AvailableAllocations(ctx context.Context, in *QueryGetAvailableAllocationsRequest, opts ...grpc.CallOption) (*QueryGetAvailableAllocationsResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of AuctionUsedAllocations items. + GetAuctionUsedAllocations(ctx context.Context, in *QueryGetAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetAuctionUsedAllocationsResponse, error) + ListAuctionUsedAllocations(ctx context.Context, in *QueryAllAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllAuctionUsedAllocationsResponse, error) + // Queries a list of UsedAllocations items. + GetUsedAllocations(ctx context.Context, in *QueryGetUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetUsedAllocationsResponse, error) + ListUsedAllocations(ctx context.Context, in *QueryAllUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllUsedAllocationsResponse, error) + // Queries a list of TotalAllocations items. + TotalAllocations(ctx context.Context, in *QueryTotalAllocationsRequest, opts ...grpc.CallOption) (*QueryTotalAllocationsResponse, error) + // Queries a list of AvailableAllocations items. + AvailableAllocations(ctx context.Context, in *QueryAvailableAllocationsRequest, opts ...grpc.CallOption) (*QueryAvailableAllocationsResponse, error) } type queryClient struct { @@ -777,63 +780,63 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) UsedAllocations(ctx context.Context, in *QueryGetUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetUsedAllocationsResponse, error) { - out := new(QueryGetUsedAllocationsResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Query/UsedAllocations", in, out, opts...) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/network.participation.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) UsedAllocationsAll(ctx context.Context, in *QueryAllUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllUsedAllocationsResponse, error) { - out := new(QueryAllUsedAllocationsResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Query/UsedAllocationsAll", in, out, opts...) +func (c *queryClient) GetAuctionUsedAllocations(ctx context.Context, in *QueryGetAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetAuctionUsedAllocationsResponse, error) { + out := new(QueryGetAuctionUsedAllocationsResponse) + err := c.cc.Invoke(ctx, "/network.participation.v1.Query/GetAuctionUsedAllocations", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) AuctionUsedAllocations(ctx context.Context, in *QueryGetAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetAuctionUsedAllocationsResponse, error) { - out := new(QueryGetAuctionUsedAllocationsResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Query/AuctionUsedAllocations", in, out, opts...) +func (c *queryClient) ListAuctionUsedAllocations(ctx context.Context, in *QueryAllAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllAuctionUsedAllocationsResponse, error) { + out := new(QueryAllAuctionUsedAllocationsResponse) + err := c.cc.Invoke(ctx, "/network.participation.v1.Query/ListAuctionUsedAllocations", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) AuctionUsedAllocationsAll(ctx context.Context, in *QueryAllAuctionUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllAuctionUsedAllocationsResponse, error) { - out := new(QueryAllAuctionUsedAllocationsResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Query/AuctionUsedAllocationsAll", in, out, opts...) +func (c *queryClient) GetUsedAllocations(ctx context.Context, in *QueryGetUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryGetUsedAllocationsResponse, error) { + out := new(QueryGetUsedAllocationsResponse) + err := c.cc.Invoke(ctx, "/network.participation.v1.Query/GetUsedAllocations", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) TotalAllocations(ctx context.Context, in *QueryGetTotalAllocationsRequest, opts ...grpc.CallOption) (*QueryGetTotalAllocationsResponse, error) { - out := new(QueryGetTotalAllocationsResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Query/TotalAllocations", in, out, opts...) +func (c *queryClient) ListUsedAllocations(ctx context.Context, in *QueryAllUsedAllocationsRequest, opts ...grpc.CallOption) (*QueryAllUsedAllocationsResponse, error) { + out := new(QueryAllUsedAllocationsResponse) + err := c.cc.Invoke(ctx, "/network.participation.v1.Query/ListUsedAllocations", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) AvailableAllocations(ctx context.Context, in *QueryGetAvailableAllocationsRequest, opts ...grpc.CallOption) (*QueryGetAvailableAllocationsResponse, error) { - out := new(QueryGetAvailableAllocationsResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Query/AvailableAllocations", in, out, opts...) +func (c *queryClient) TotalAllocations(ctx context.Context, in *QueryTotalAllocationsRequest, opts ...grpc.CallOption) (*QueryTotalAllocationsResponse, error) { + out := new(QueryTotalAllocationsResponse) + err := c.cc.Invoke(ctx, "/network.participation.v1.Query/TotalAllocations", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Query/Params", in, out, opts...) +func (c *queryClient) AvailableAllocations(ctx context.Context, in *QueryAvailableAllocationsRequest, opts ...grpc.CallOption) (*QueryAvailableAllocationsResponse, error) { + out := new(QueryAvailableAllocationsResponse) + err := c.cc.Invoke(ctx, "/network.participation.v1.Query/AvailableAllocations", in, out, opts...) if err != nil { return nil, err } @@ -842,197 +845,199 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . // QueryServer is the server API for Query service. type QueryServer interface { - // Queries a UsedAllocations by address. - UsedAllocations(context.Context, *QueryGetUsedAllocationsRequest) (*QueryGetUsedAllocationsResponse, error) - // Queries a list of UsedAllocations items. - UsedAllocationsAll(context.Context, *QueryAllUsedAllocationsRequest) (*QueryAllUsedAllocationsResponse, error) - // Queries a AuctionUsedAllocations by address and auctionID. - AuctionUsedAllocations(context.Context, *QueryGetAuctionUsedAllocationsRequest) (*QueryGetAuctionUsedAllocationsResponse, error) - // Queries a list of AuctionUsedAllocations items. - AuctionUsedAllocationsAll(context.Context, *QueryAllAuctionUsedAllocationsRequest) (*QueryAllAuctionUsedAllocationsResponse, error) - // Queries a TotalAllocation of address. - TotalAllocations(context.Context, *QueryGetTotalAllocationsRequest) (*QueryGetTotalAllocationsResponse, error) - // Queries the AvailableAllocation of address. - AvailableAllocations(context.Context, *QueryGetAvailableAllocationsRequest) (*QueryGetAvailableAllocationsResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of AuctionUsedAllocations items. + GetAuctionUsedAllocations(context.Context, *QueryGetAuctionUsedAllocationsRequest) (*QueryGetAuctionUsedAllocationsResponse, error) + ListAuctionUsedAllocations(context.Context, *QueryAllAuctionUsedAllocationsRequest) (*QueryAllAuctionUsedAllocationsResponse, error) + // Queries a list of UsedAllocations items. + GetUsedAllocations(context.Context, *QueryGetUsedAllocationsRequest) (*QueryGetUsedAllocationsResponse, error) + ListUsedAllocations(context.Context, *QueryAllUsedAllocationsRequest) (*QueryAllUsedAllocationsResponse, error) + // Queries a list of TotalAllocations items. + TotalAllocations(context.Context, *QueryTotalAllocationsRequest) (*QueryTotalAllocationsResponse, error) + // Queries a list of AvailableAllocations items. + AvailableAllocations(context.Context, *QueryAvailableAllocationsRequest) (*QueryAvailableAllocationsResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) UsedAllocations(ctx context.Context, req *QueryGetUsedAllocationsRequest) (*QueryGetUsedAllocationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UsedAllocations not implemented") +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) GetAuctionUsedAllocations(ctx context.Context, req *QueryGetAuctionUsedAllocationsRequest) (*QueryGetAuctionUsedAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAuctionUsedAllocations not implemented") } -func (*UnimplementedQueryServer) UsedAllocationsAll(ctx context.Context, req *QueryAllUsedAllocationsRequest) (*QueryAllUsedAllocationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UsedAllocationsAll not implemented") +func (*UnimplementedQueryServer) ListAuctionUsedAllocations(ctx context.Context, req *QueryAllAuctionUsedAllocationsRequest) (*QueryAllAuctionUsedAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListAuctionUsedAllocations not implemented") } -func (*UnimplementedQueryServer) AuctionUsedAllocations(ctx context.Context, req *QueryGetAuctionUsedAllocationsRequest) (*QueryGetAuctionUsedAllocationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AuctionUsedAllocations not implemented") +func (*UnimplementedQueryServer) GetUsedAllocations(ctx context.Context, req *QueryGetUsedAllocationsRequest) (*QueryGetUsedAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetUsedAllocations not implemented") } -func (*UnimplementedQueryServer) AuctionUsedAllocationsAll(ctx context.Context, req *QueryAllAuctionUsedAllocationsRequest) (*QueryAllAuctionUsedAllocationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AuctionUsedAllocationsAll not implemented") +func (*UnimplementedQueryServer) ListUsedAllocations(ctx context.Context, req *QueryAllUsedAllocationsRequest) (*QueryAllUsedAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListUsedAllocations not implemented") } -func (*UnimplementedQueryServer) TotalAllocations(ctx context.Context, req *QueryGetTotalAllocationsRequest) (*QueryGetTotalAllocationsResponse, error) { +func (*UnimplementedQueryServer) TotalAllocations(ctx context.Context, req *QueryTotalAllocationsRequest) (*QueryTotalAllocationsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TotalAllocations not implemented") } -func (*UnimplementedQueryServer) AvailableAllocations(ctx context.Context, req *QueryGetAvailableAllocationsRequest) (*QueryGetAvailableAllocationsResponse, error) { +func (*UnimplementedQueryServer) AvailableAllocations(ctx context.Context, req *QueryAvailableAllocationsRequest) (*QueryAvailableAllocationsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AvailableAllocations not implemented") } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") -} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } -func _Query_UsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetUsedAllocationsRequest) +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).UsedAllocations(ctx, in) + return srv.(QueryServer).Params(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Query/UsedAllocations", + FullMethod: "/network.participation.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).UsedAllocations(ctx, req.(*QueryGetUsedAllocationsRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_UsedAllocationsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllUsedAllocationsRequest) +func _Query_GetAuctionUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetAuctionUsedAllocationsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).UsedAllocationsAll(ctx, in) + return srv.(QueryServer).GetAuctionUsedAllocations(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Query/UsedAllocationsAll", + FullMethod: "/network.participation.v1.Query/GetAuctionUsedAllocations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).UsedAllocationsAll(ctx, req.(*QueryAllUsedAllocationsRequest)) + return srv.(QueryServer).GetAuctionUsedAllocations(ctx, req.(*QueryGetAuctionUsedAllocationsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_AuctionUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetAuctionUsedAllocationsRequest) +func _Query_ListAuctionUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllAuctionUsedAllocationsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).AuctionUsedAllocations(ctx, in) + return srv.(QueryServer).ListAuctionUsedAllocations(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Query/AuctionUsedAllocations", + FullMethod: "/network.participation.v1.Query/ListAuctionUsedAllocations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AuctionUsedAllocations(ctx, req.(*QueryGetAuctionUsedAllocationsRequest)) + return srv.(QueryServer).ListAuctionUsedAllocations(ctx, req.(*QueryAllAuctionUsedAllocationsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_AuctionUsedAllocationsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllAuctionUsedAllocationsRequest) +func _Query_GetUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetUsedAllocationsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).AuctionUsedAllocationsAll(ctx, in) + return srv.(QueryServer).GetUsedAllocations(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Query/AuctionUsedAllocationsAll", + FullMethod: "/network.participation.v1.Query/GetUsedAllocations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AuctionUsedAllocationsAll(ctx, req.(*QueryAllAuctionUsedAllocationsRequest)) + return srv.(QueryServer).GetUsedAllocations(ctx, req.(*QueryGetUsedAllocationsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_TotalAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetTotalAllocationsRequest) +func _Query_ListUsedAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllUsedAllocationsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).TotalAllocations(ctx, in) + return srv.(QueryServer).ListUsedAllocations(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Query/TotalAllocations", + FullMethod: "/network.participation.v1.Query/ListUsedAllocations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).TotalAllocations(ctx, req.(*QueryGetTotalAllocationsRequest)) + return srv.(QueryServer).ListUsedAllocations(ctx, req.(*QueryAllUsedAllocationsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_AvailableAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetAvailableAllocationsRequest) +func _Query_TotalAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalAllocationsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).AvailableAllocations(ctx, in) + return srv.(QueryServer).TotalAllocations(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Query/AvailableAllocations", + FullMethod: "/network.participation.v1.Query/TotalAllocations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AvailableAllocations(ctx, req.(*QueryGetAvailableAllocationsRequest)) + return srv.(QueryServer).TotalAllocations(ctx, req.(*QueryTotalAllocationsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) +func _Query_AvailableAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAvailableAllocationsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) + return srv.(QueryServer).AvailableAllocations(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Query/Params", + FullMethod: "/network.participation.v1.Query/AvailableAllocations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).AvailableAllocations(ctx, req.(*QueryAvailableAllocationsRequest)) } return interceptor(ctx, in, info, handler) } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.participation.Query", + ServiceName: "network.participation.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "UsedAllocations", - Handler: _Query_UsedAllocations_Handler, + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetAuctionUsedAllocations", + Handler: _Query_GetAuctionUsedAllocations_Handler, }, { - MethodName: "UsedAllocationsAll", - Handler: _Query_UsedAllocationsAll_Handler, + MethodName: "ListAuctionUsedAllocations", + Handler: _Query_ListAuctionUsedAllocations_Handler, }, { - MethodName: "AuctionUsedAllocations", - Handler: _Query_AuctionUsedAllocations_Handler, + MethodName: "GetUsedAllocations", + Handler: _Query_GetUsedAllocations_Handler, }, { - MethodName: "AuctionUsedAllocationsAll", - Handler: _Query_AuctionUsedAllocationsAll_Handler, + MethodName: "ListUsedAllocations", + Handler: _Query_ListUsedAllocations_Handler, }, { MethodName: "TotalAllocations", @@ -1042,16 +1047,12 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "AvailableAllocations", Handler: _Query_AvailableAllocations_Handler, }, - { - MethodName: "Params", - Handler: _Query_Params_Handler, - }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/participation/query.proto", + Metadata: "network/participation/v1/query.proto", } -func (m *QueryGetUsedAllocationsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1061,27 +1062,20 @@ func (m *QueryGetUsedAllocationsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetUsedAllocationsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetUsedAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } return len(dAtA) - i, nil } -func (m *QueryGetUsedAllocationsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1091,18 +1085,18 @@ func (m *QueryGetUsedAllocationsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetUsedAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetUsedAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.UsedAllocations.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1114,90 +1108,6 @@ func (m *QueryGetUsedAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *QueryAllUsedAllocationsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryAllUsedAllocationsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllUsedAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryAllUsedAllocationsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryAllUsedAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllUsedAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.UsedAllocations) > 0 { - for iNdEx := len(m.UsedAllocations) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.UsedAllocations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - func (m *QueryGetAuctionUsedAllocationsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1357,7 +1267,7 @@ func (m *QueryAllAuctionUsedAllocationsResponse) MarshalToSizedBuffer(dAtA []byt return len(dAtA) - i, nil } -func (m *QueryGetTotalAllocationsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetUsedAllocationsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1367,12 +1277,12 @@ func (m *QueryGetTotalAllocationsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetTotalAllocationsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetUsedAllocationsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetTotalAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetUsedAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1387,7 +1297,7 @@ func (m *QueryGetTotalAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *QueryGetTotalAllocationsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetUsedAllocationsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1397,22 +1307,22 @@ func (m *QueryGetTotalAllocationsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetTotalAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetUsedAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetTotalAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetUsedAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size := m.TotalAllocations.Size() - i -= size - if _, err := m.TotalAllocations.MarshalTo(dAtA[i:]); err != nil { + size, err := m.UsedAllocations.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { return 0, err } + i -= size i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- @@ -1420,7 +1330,91 @@ func (m *QueryGetTotalAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } -func (m *QueryGetAvailableAllocationsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllUsedAllocationsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllUsedAllocationsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllUsedAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllUsedAllocationsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllUsedAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllUsedAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.UsedAllocations) > 0 { + for iNdEx := len(m.UsedAllocations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.UsedAllocations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalAllocationsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1430,12 +1424,12 @@ func (m *QueryGetAvailableAllocationsRequest) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryGetAvailableAllocationsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryTotalAllocationsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetAvailableAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryTotalAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1450,7 +1444,7 @@ func (m *QueryGetAvailableAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *QueryGetAvailableAllocationsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryTotalAllocationsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1460,20 +1454,20 @@ func (m *QueryGetAvailableAllocationsResponse) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *QueryGetAvailableAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryTotalAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetAvailableAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryTotalAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size := m.AvailableAllocations.Size() + size := m.TotalAllocations.Size() i -= size - if _, err := m.AvailableAllocations.MarshalTo(dAtA[i:]); err != nil { + if _, err := m.TotalAllocations.MarshalTo(dAtA[i:]); err != nil { return 0, err } i = encodeVarintQuery(dAtA, i, uint64(size)) @@ -1483,7 +1477,7 @@ func (m *QueryGetAvailableAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAvailableAllocationsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1493,20 +1487,27 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAvailableAllocationsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAvailableAllocationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAvailableAllocationsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1516,22 +1517,22 @@ func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAvailableAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAvailableAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { + size := m.AvailableAllocations.Size() + i -= size + if _, err := m.AvailableAllocations.MarshalTo(dAtA[i:]); err != nil { return 0, err } - i -= size i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- @@ -1550,7 +1551,27 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryGetUsedAllocationsRequest) Size() (n int) { +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryGetAuctionUsedAllocationsRequest) Size() (n int) { if m == nil { return 0 } @@ -1560,26 +1581,33 @@ func (m *QueryGetUsedAllocationsRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + if m.AuctionID != 0 { + n += 1 + sovQuery(uint64(m.AuctionID)) + } return n } -func (m *QueryGetUsedAllocationsResponse) Size() (n int) { +func (m *QueryGetAuctionUsedAllocationsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.UsedAllocations.Size() + l = m.AuctionUsedAllocations.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllUsedAllocationsRequest) Size() (n int) { +func (m *QueryAllAuctionUsedAllocationsRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } if m.Pagination != nil { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) @@ -1587,14 +1615,14 @@ func (m *QueryAllUsedAllocationsRequest) Size() (n int) { return n } -func (m *QueryAllUsedAllocationsResponse) Size() (n int) { +func (m *QueryAllAuctionUsedAllocationsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.UsedAllocations) > 0 { - for _, e := range m.UsedAllocations { + if len(m.AuctionUsedAllocations) > 0 { + for _, e := range m.AuctionUsedAllocations { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -1606,7 +1634,7 @@ func (m *QueryAllUsedAllocationsResponse) Size() (n int) { return n } -func (m *QueryGetAuctionUsedAllocationsRequest) Size() (n int) { +func (m *QueryGetUsedAllocationsRequest) Size() (n int) { if m == nil { return 0 } @@ -1616,33 +1644,26 @@ func (m *QueryGetAuctionUsedAllocationsRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - if m.AuctionID != 0 { - n += 1 + sovQuery(uint64(m.AuctionID)) - } return n } -func (m *QueryGetAuctionUsedAllocationsResponse) Size() (n int) { +func (m *QueryGetUsedAllocationsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.AuctionUsedAllocations.Size() + l = m.UsedAllocations.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllAuctionUsedAllocationsRequest) Size() (n int) { +func (m *QueryAllUsedAllocationsRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } if m.Pagination != nil { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) @@ -1650,14 +1671,14 @@ func (m *QueryAllAuctionUsedAllocationsRequest) Size() (n int) { return n } -func (m *QueryAllAuctionUsedAllocationsResponse) Size() (n int) { +func (m *QueryAllUsedAllocationsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.AuctionUsedAllocations) > 0 { - for _, e := range m.AuctionUsedAllocations { + if len(m.UsedAllocations) > 0 { + for _, e := range m.UsedAllocations { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -1669,7 +1690,7 @@ func (m *QueryAllAuctionUsedAllocationsResponse) Size() (n int) { return n } -func (m *QueryGetTotalAllocationsRequest) Size() (n int) { +func (m *QueryTotalAllocationsRequest) Size() (n int) { if m == nil { return 0 } @@ -1682,7 +1703,7 @@ func (m *QueryGetTotalAllocationsRequest) Size() (n int) { return n } -func (m *QueryGetTotalAllocationsResponse) Size() (n int) { +func (m *QueryTotalAllocationsResponse) Size() (n int) { if m == nil { return 0 } @@ -1693,7 +1714,7 @@ func (m *QueryGetTotalAllocationsResponse) Size() (n int) { return n } -func (m *QueryGetAvailableAllocationsRequest) Size() (n int) { +func (m *QueryAvailableAllocationsRequest) Size() (n int) { if m == nil { return 0 } @@ -1706,7 +1727,7 @@ func (m *QueryGetAvailableAllocationsRequest) Size() (n int) { return n } -func (m *QueryGetAvailableAllocationsResponse) Size() (n int) { +func (m *QueryAvailableAllocationsResponse) Size() (n int) { if m == nil { return 0 } @@ -1717,33 +1738,13 @@ func (m *QueryGetAvailableAllocationsResponse) Size() (n int) { return n } -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryGetUsedAllocationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1766,10 +1767,143 @@ func (m *QueryGetUsedAllocationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetUsedAllocationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetAuctionUsedAllocationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetAuctionUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1804,6 +1938,25 @@ func (m *QueryGetUsedAllocationsRequest) Unmarshal(dAtA []byte) error { } m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) + } + m.AuctionID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.AuctionID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1825,7 +1978,7 @@ func (m *QueryGetUsedAllocationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetUsedAllocationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1848,15 +2001,15 @@ func (m *QueryGetUsedAllocationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetUsedAllocationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetAuctionUsedAllocationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetAuctionUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UsedAllocations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AuctionUsedAllocations", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1883,7 +2036,7 @@ func (m *QueryGetUsedAllocationsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UsedAllocations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.AuctionUsedAllocations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1908,7 +2061,7 @@ func (m *QueryGetUsedAllocationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllUsedAllocationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1918,26 +2071,58 @@ func (m *QueryAllUsedAllocationsRequest) Unmarshal(dAtA []byte) error { if shift >= 64 { return ErrIntOverflowQuery } - if iNdEx >= l { - return io.ErrUnexpectedEOF + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllAuctionUsedAllocationsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllAuctionUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + if postIndex > l { + return io.ErrUnexpectedEOF } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryAllUsedAllocationsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } @@ -1994,7 +2179,7 @@ func (m *QueryAllUsedAllocationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllUsedAllocationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2017,15 +2202,15 @@ func (m *QueryAllUsedAllocationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllUsedAllocationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllAuctionUsedAllocationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllAuctionUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UsedAllocations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AuctionUsedAllocations", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2052,8 +2237,8 @@ func (m *QueryAllUsedAllocationsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.UsedAllocations = append(m.UsedAllocations, UsedAllocations{}) - if err := m.UsedAllocations[len(m.UsedAllocations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.AuctionUsedAllocations = append(m.AuctionUsedAllocations, AuctionUsedAllocations{}) + if err := m.AuctionUsedAllocations[len(m.AuctionUsedAllocations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2114,7 +2299,7 @@ func (m *QueryAllUsedAllocationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetUsedAllocationsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2137,10 +2322,10 @@ func (m *QueryGetAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetAuctionUsedAllocationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetUsedAllocationsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetAuctionUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2175,25 +2360,6 @@ func (m *QueryGetAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { } m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AuctionID", wireType) - } - m.AuctionID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.AuctionID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2215,7 +2381,7 @@ func (m *QueryGetAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetUsedAllocationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2238,15 +2404,15 @@ func (m *QueryGetAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetAuctionUsedAllocationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetUsedAllocationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetAuctionUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuctionUsedAllocations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UsedAllocations", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2273,7 +2439,7 @@ func (m *QueryGetAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.AuctionUsedAllocations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.UsedAllocations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2298,7 +2464,7 @@ func (m *QueryGetAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllUsedAllocationsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2321,45 +2487,13 @@ func (m *QueryAllAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllAuctionUsedAllocationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllUsedAllocationsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllAuctionUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllUsedAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } @@ -2416,7 +2550,7 @@ func (m *QueryAllAuctionUsedAllocationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllUsedAllocationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2439,15 +2573,15 @@ func (m *QueryAllAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllAuctionUsedAllocationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllUsedAllocationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllAuctionUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllUsedAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuctionUsedAllocations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UsedAllocations", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2474,8 +2608,8 @@ func (m *QueryAllAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AuctionUsedAllocations = append(m.AuctionUsedAllocations, AuctionUsedAllocations{}) - if err := m.AuctionUsedAllocations[len(m.AuctionUsedAllocations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.UsedAllocations = append(m.UsedAllocations, UsedAllocations{}) + if err := m.UsedAllocations[len(m.UsedAllocations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2536,7 +2670,7 @@ func (m *QueryAllAuctionUsedAllocationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetTotalAllocationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryTotalAllocationsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2559,10 +2693,10 @@ func (m *QueryGetTotalAllocationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetTotalAllocationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTotalAllocationsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetTotalAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTotalAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2618,7 +2752,7 @@ func (m *QueryGetTotalAllocationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetTotalAllocationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryTotalAllocationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2641,10 +2775,10 @@ func (m *QueryGetTotalAllocationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetTotalAllocationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryTotalAllocationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetTotalAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryTotalAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2702,7 +2836,7 @@ func (m *QueryGetTotalAllocationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetAvailableAllocationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAvailableAllocationsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2725,10 +2859,10 @@ func (m *QueryGetAvailableAllocationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetAvailableAllocationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAvailableAllocationsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetAvailableAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAvailableAllocationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2784,7 +2918,7 @@ func (m *QueryGetAvailableAllocationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetAvailableAllocationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAvailableAllocationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2807,10 +2941,10 @@ func (m *QueryGetAvailableAllocationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetAvailableAllocationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAvailableAllocationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetAvailableAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAvailableAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2868,139 +3002,6 @@ func (m *QueryGetAvailableAllocationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func skipQuery(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/participation/types/query.pb.gw.go b/x/participation/types/query.pb.gw.go index ca1ce70c..0e387a98 100644 --- a/x/participation/types/query.pb.gw.go +++ b/x/participation/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: spn/participation/query.proto +// source: network/participation/v1/query.proto /* Package types is a reverse proxy. @@ -33,8 +33,30 @@ var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage var _ = metadata.Join -func request_Query_UsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetUsedAllocationsRequest +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_GetAuctionUsedAllocations_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_GetAuctionUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetAuctionUsedAllocationsRequest var metadata runtime.ServerMetadata var ( @@ -55,13 +77,20 @@ func request_Query_UsedAllocations_0(ctx context.Context, marshaler runtime.Mars return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.UsedAllocations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_GetAuctionUsedAllocations_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetAuctionUsedAllocations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_UsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetUsedAllocationsRequest +func local_request_Query_GetAuctionUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetAuctionUsedAllocationsRequest var metadata runtime.ServerMetadata var ( @@ -82,49 +111,56 @@ func local_request_Query_UsedAllocations_0(ctx context.Context, marshaler runtim return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.UsedAllocations(ctx, &protoReq) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_GetAuctionUsedAllocations_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetAuctionUsedAllocations(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_UsedAllocationsAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_ListAuctionUsedAllocations_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_UsedAllocationsAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllUsedAllocationsRequest +func request_Query_ListAuctionUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllAuctionUsedAllocationsRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UsedAllocationsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListAuctionUsedAllocations_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.UsedAllocationsAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListAuctionUsedAllocations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_UsedAllocationsAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllUsedAllocationsRequest +func local_request_Query_ListAuctionUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllAuctionUsedAllocationsRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UsedAllocationsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListAuctionUsedAllocations_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.UsedAllocationsAll(ctx, &protoReq) + msg, err := server.ListAuctionUsedAllocations(ctx, &protoReq) return msg, metadata, err } -func request_Query_AuctionUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetAuctionUsedAllocationsRequest +func request_Query_GetUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetUsedAllocationsRequest var metadata runtime.ServerMetadata var ( @@ -145,24 +181,13 @@ func request_Query_AuctionUsedAllocations_0(ctx context.Context, marshaler runti return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - val, ok = pathParams["auctionID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "auctionID") - } - - protoReq.AuctionID, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "auctionID", err) - } - - msg, err := client.AuctionUsedAllocations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetUsedAllocations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_AuctionUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetAuctionUsedAllocationsRequest +func local_request_Query_GetUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetUsedAllocationsRequest var metadata runtime.ServerMetadata var ( @@ -183,96 +208,49 @@ func local_request_Query_AuctionUsedAllocations_0(ctx context.Context, marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - val, ok = pathParams["auctionID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "auctionID") - } - - protoReq.AuctionID, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "auctionID", err) - } - - msg, err := server.AuctionUsedAllocations(ctx, &protoReq) + msg, err := server.GetUsedAllocations(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_AuctionUsedAllocationsAll_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_ListUsedAllocations_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_AuctionUsedAllocationsAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllAuctionUsedAllocationsRequest +func request_Query_ListUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllUsedAllocationsRequest var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") - } - - protoReq.Address, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) - } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AuctionUsedAllocationsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListUsedAllocations_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.AuctionUsedAllocationsAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListUsedAllocations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_AuctionUsedAllocationsAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllAuctionUsedAllocationsRequest +func local_request_Query_ListUsedAllocations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllUsedAllocationsRequest var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") - } - - protoReq.Address, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) - } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AuctionUsedAllocationsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListUsedAllocations_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.AuctionUsedAllocationsAll(ctx, &protoReq) + msg, err := server.ListUsedAllocations(ctx, &protoReq) return msg, metadata, err } func request_Query_TotalAllocations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetTotalAllocationsRequest + var protoReq QueryTotalAllocationsRequest var metadata runtime.ServerMetadata var ( @@ -299,7 +277,7 @@ func request_Query_TotalAllocations_0(ctx context.Context, marshaler runtime.Mar } func local_request_Query_TotalAllocations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetTotalAllocationsRequest + var protoReq QueryTotalAllocationsRequest var metadata runtime.ServerMetadata var ( @@ -326,7 +304,7 @@ func local_request_Query_TotalAllocations_0(ctx context.Context, marshaler runti } func request_Query_AvailableAllocations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetAvailableAllocationsRequest + var protoReq QueryAvailableAllocationsRequest var metadata runtime.ServerMetadata var ( @@ -353,7 +331,7 @@ func request_Query_AvailableAllocations_0(ctx context.Context, marshaler runtime } func local_request_Query_AvailableAllocations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetAvailableAllocationsRequest + var protoReq QueryAvailableAllocationsRequest var metadata runtime.ServerMetadata var ( @@ -379,31 +357,13 @@ func local_request_Query_AvailableAllocations_0(ctx context.Context, marshaler r } -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata - - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata - - msg, err := server.Params(ctx, &protoReq) - return msg, metadata, err - -} - // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - mux.Handle("GET", pattern_Query_UsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -414,7 +374,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_UsedAllocations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -422,11 +382,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_UsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_UsedAllocationsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetAuctionUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -437,7 +397,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_UsedAllocationsAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetAuctionUsedAllocations_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -445,11 +405,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_UsedAllocationsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetAuctionUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_AuctionUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListAuctionUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -460,7 +420,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_AuctionUsedAllocations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListAuctionUsedAllocations_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -468,11 +428,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_AuctionUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListAuctionUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_AuctionUsedAllocationsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -483,7 +443,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_AuctionUsedAllocationsAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetUsedAllocations_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -491,11 +451,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_AuctionUsedAllocationsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_TotalAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -506,7 +466,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_TotalAllocations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListUsedAllocations_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -514,11 +474,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_TotalAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_AvailableAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_TotalAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -529,7 +489,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_AvailableAllocations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_TotalAllocations_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -537,11 +497,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_AvailableAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_TotalAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AvailableAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -552,7 +512,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AvailableAllocations_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -560,7 +520,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AvailableAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -605,7 +565,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - mux.Handle("GET", pattern_Query_UsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -614,18 +574,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_UsedAllocations_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_UsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_UsedAllocationsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetAuctionUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -634,18 +594,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_UsedAllocationsAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetAuctionUsedAllocations_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_UsedAllocationsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetAuctionUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_AuctionUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListAuctionUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -654,18 +614,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_AuctionUsedAllocations_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListAuctionUsedAllocations_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_AuctionUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListAuctionUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_AuctionUsedAllocationsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -674,18 +634,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_AuctionUsedAllocationsAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetUsedAllocations_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_AuctionUsedAllocationsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_TotalAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListUsedAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -694,18 +654,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_TotalAllocations_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListUsedAllocations_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_TotalAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListUsedAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_AvailableAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_TotalAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -714,18 +674,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_AvailableAllocations_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_TotalAllocations_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_AvailableAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_TotalAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AvailableAllocations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -734,14 +694,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AvailableAllocations_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AvailableAllocations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -749,33 +709,33 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_UsedAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "participation", "used_allocations", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ignite", "network", "participation", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_UsedAllocationsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "participation", "used_allocations"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetAuctionUsedAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "participation", "auction_used_allocations", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AuctionUsedAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"tendermint", "spn", "participation", "auction_used_allocations", "address", "auctionID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListAuctionUsedAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "participation", "auction_used_allocations"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AuctionUsedAllocationsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "participation", "auction_used_allocations", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetUsedAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "participation", "used_allocations", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_TotalAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "participation", "total_allocations", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListUsedAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "participation", "used_allocations"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AvailableAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "participation", "available_allocations", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_TotalAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "participation", "total_allocations", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "participation", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AvailableAllocations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "participation", "available_allocations", "address"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( - forward_Query_UsedAllocations_0 = runtime.ForwardResponseMessage + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_GetAuctionUsedAllocations_0 = runtime.ForwardResponseMessage - forward_Query_UsedAllocationsAll_0 = runtime.ForwardResponseMessage + forward_Query_ListAuctionUsedAllocations_0 = runtime.ForwardResponseMessage - forward_Query_AuctionUsedAllocations_0 = runtime.ForwardResponseMessage + forward_Query_GetUsedAllocations_0 = runtime.ForwardResponseMessage - forward_Query_AuctionUsedAllocationsAll_0 = runtime.ForwardResponseMessage + forward_Query_ListUsedAllocations_0 = runtime.ForwardResponseMessage forward_Query_TotalAllocations_0 = runtime.ForwardResponseMessage forward_Query_AvailableAllocations_0 = runtime.ForwardResponseMessage - - forward_Query_Params_0 = runtime.ForwardResponseMessage ) diff --git a/x/participation/types/tier_test.go b/x/participation/types/tier_test.go deleted file mode 100644 index 3b481c29..00000000 --- a/x/participation/types/tier_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/x/participation/types" -) - -func TestGetTierFromID(t *testing.T) { - list := types.DefaultParticipationTierList - - tests := []struct { - name string - id uint64 - found bool - }{ - { - name: "should find tier id 1", - id: 1, - found: true, - }, - { - name: "should find tier id 2", - id: 2, - found: true, - }, - { - name: "should not find tier", - id: 111111, - found: false, - }, - } - - for _, tt := range tests { - _, found := types.GetTierFromID(list, tt.id) - require.Equal(t, tt.found, found) - } -} diff --git a/x/participation/types/tx.pb.go b/x/participation/types/tx.pb.go index 8e3186b9..fdb96a60 100644 --- a/x/participation/types/tx.pb.go +++ b/x/participation/types/tx.pb.go @@ -1,11 +1,15 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/participation/tx.proto +// source: network/participation/v1/tx.proto package types import ( context "context" fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" @@ -27,6 +31,99 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_cc7372c08281af20, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cc7372c08281af20, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + type MsgParticipate struct { Participant string `protobuf:"bytes,1,opt,name=participant,proto3" json:"participant,omitempty"` AuctionID uint64 `protobuf:"varint,2,opt,name=auctionID,proto3" json:"auctionID,omitempty"` @@ -37,7 +134,7 @@ func (m *MsgParticipate) Reset() { *m = MsgParticipate{} } func (m *MsgParticipate) String() string { return proto.CompactTextString(m) } func (*MsgParticipate) ProtoMessage() {} func (*MsgParticipate) Descriptor() ([]byte, []int) { - return fileDescriptor_5b65e821df43f277, []int{0} + return fileDescriptor_cc7372c08281af20, []int{2} } func (m *MsgParticipate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -94,7 +191,7 @@ func (m *MsgParticipateResponse) Reset() { *m = MsgParticipateResponse{} func (m *MsgParticipateResponse) String() string { return proto.CompactTextString(m) } func (*MsgParticipateResponse) ProtoMessage() {} func (*MsgParticipateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5b65e821df43f277, []int{1} + return fileDescriptor_cc7372c08281af20, []int{3} } func (m *MsgParticipateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -132,7 +229,7 @@ func (m *MsgWithdrawAllocations) Reset() { *m = MsgWithdrawAllocations{} func (m *MsgWithdrawAllocations) String() string { return proto.CompactTextString(m) } func (*MsgWithdrawAllocations) ProtoMessage() {} func (*MsgWithdrawAllocations) Descriptor() ([]byte, []int) { - return fileDescriptor_5b65e821df43f277, []int{2} + return fileDescriptor_cc7372c08281af20, []int{4} } func (m *MsgWithdrawAllocations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -182,7 +279,7 @@ func (m *MsgWithdrawAllocationsResponse) Reset() { *m = MsgWithdrawAlloc func (m *MsgWithdrawAllocationsResponse) String() string { return proto.CompactTextString(m) } func (*MsgWithdrawAllocationsResponse) ProtoMessage() {} func (*MsgWithdrawAllocationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5b65e821df43f277, []int{3} + return fileDescriptor_cc7372c08281af20, []int{5} } func (m *MsgWithdrawAllocationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -212,34 +309,50 @@ func (m *MsgWithdrawAllocationsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgWithdrawAllocationsResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgParticipate)(nil), "spn.participation.MsgParticipate") - proto.RegisterType((*MsgParticipateResponse)(nil), "spn.participation.MsgParticipateResponse") - proto.RegisterType((*MsgWithdrawAllocations)(nil), "spn.participation.MsgWithdrawAllocations") - proto.RegisterType((*MsgWithdrawAllocationsResponse)(nil), "spn.participation.MsgWithdrawAllocationsResponse") -} - -func init() { proto.RegisterFile("spn/participation/tx.proto", fileDescriptor_5b65e821df43f277) } - -var fileDescriptor_5b65e821df43f277 = []byte{ - // 283 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2a, 0x2e, 0xc8, 0xd3, - 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x2f, 0xa9, - 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x2c, 0x2e, 0xc8, 0xd3, 0x43, 0x91, 0x53, 0xca, - 0xe0, 0xe2, 0xf3, 0x2d, 0x4e, 0x0f, 0x80, 0x8b, 0xa5, 0x0a, 0x29, 0x70, 0x71, 0xc3, 0x95, 0xe4, - 0x95, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x21, 0x0b, 0x09, 0xc9, 0x70, 0x71, 0x26, 0x96, - 0x26, 0x83, 0xb4, 0x7b, 0xba, 0x48, 0x30, 0x29, 0x30, 0x6a, 0xb0, 0x04, 0x21, 0x04, 0x84, 0xc4, - 0xb8, 0xd8, 0x4a, 0x32, 0x53, 0x8b, 0x3c, 0x5d, 0x24, 0x98, 0xc1, 0x52, 0x50, 0x9e, 0x92, 0x04, - 0x97, 0x18, 0xaa, 0x4d, 0x41, 0xa9, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x4a, 0x11, 0x60, 0x99, - 0xf0, 0xcc, 0x92, 0x8c, 0x94, 0xa2, 0xc4, 0x72, 0xc7, 0x9c, 0x9c, 0xfc, 0x64, 0xb0, 0xe3, 0x8a, - 0x29, 0x75, 0x8b, 0x92, 0x02, 0x97, 0x1c, 0x76, 0x93, 0x61, 0x76, 0x1b, 0x5d, 0x67, 0xe4, 0x62, - 0xf6, 0x2d, 0x4e, 0x17, 0x8a, 0xe6, 0xe2, 0x46, 0x0e, 0x04, 0x45, 0x3d, 0x8c, 0xa0, 0xd2, 0x43, - 0x75, 0xbd, 0x94, 0x26, 0x41, 0x25, 0x30, 0x4b, 0x84, 0x8a, 0xb9, 0x84, 0xb1, 0xf9, 0x0e, 0x87, - 0x09, 0x58, 0x94, 0x4a, 0x19, 0x12, 0xad, 0x14, 0x66, 0xa9, 0x93, 0xe7, 0x89, 0x47, 0x72, 0x8c, - 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, - 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0xe9, 0xa7, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, - 0xe7, 0xea, 0x97, 0xa4, 0xe6, 0xa5, 0xa4, 0x16, 0xe5, 0x66, 0xe6, 0x95, 0xe8, 0x83, 0x12, 0x4e, - 0x05, 0x7a, 0xd2, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x27, 0x1f, 0x63, 0x40, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x1e, 0x1d, 0x9e, 0xa3, 0x5c, 0x02, 0x00, 0x00, + proto.RegisterType((*MsgUpdateParams)(nil), "network.participation.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "network.participation.v1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgParticipate)(nil), "network.participation.v1.MsgParticipate") + proto.RegisterType((*MsgParticipateResponse)(nil), "network.participation.v1.MsgParticipateResponse") + proto.RegisterType((*MsgWithdrawAllocations)(nil), "network.participation.v1.MsgWithdrawAllocations") + proto.RegisterType((*MsgWithdrawAllocationsResponse)(nil), "network.participation.v1.MsgWithdrawAllocationsResponse") +} + +func init() { proto.RegisterFile("network/participation/v1/tx.proto", fileDescriptor_cc7372c08281af20) } + +var fileDescriptor_cc7372c08281af20 = []byte{ + // 497 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcc, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, + 0xcf, 0xd3, 0x2f, 0x33, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x80, + 0x2a, 0xd1, 0x43, 0x51, 0xa2, 0x57, 0x66, 0x28, 0x25, 0x98, 0x98, 0x9b, 0x99, 0x97, 0xaf, 0x0f, + 0x26, 0x21, 0x8a, 0xa5, 0xc4, 0x93, 0xf3, 0x8b, 0x73, 0xf3, 0x8b, 0xf5, 0x73, 0x8b, 0xd3, 0x41, + 0x86, 0xe4, 0x16, 0xa7, 0x43, 0x25, 0x24, 0x21, 0x12, 0xf1, 0x60, 0x9e, 0x3e, 0x84, 0x03, 0x95, + 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x87, 0x88, 0x83, 0x58, 0x50, 0x51, 0x55, 0x9c, 0x2e, 0x2b, 0x48, + 0x2c, 0x4a, 0xcc, 0x85, 0x6a, 0x56, 0x3a, 0xc5, 0xc8, 0xc5, 0xef, 0x5b, 0x9c, 0x1e, 0x5a, 0x90, + 0x92, 0x58, 0x92, 0x1a, 0x00, 0x96, 0x11, 0x32, 0xe3, 0xe2, 0x4c, 0x2c, 0x2d, 0xc9, 0xc8, 0x2f, + 0xca, 0x2c, 0xa9, 0x94, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xb8, 0xb4, 0x45, 0x57, 0x04, + 0x6a, 0xab, 0x63, 0x4a, 0x4a, 0x51, 0x6a, 0x71, 0x71, 0x70, 0x49, 0x51, 0x66, 0x5e, 0x7a, 0x10, + 0x42, 0xa9, 0x90, 0x33, 0x17, 0x1b, 0xc4, 0x6c, 0x09, 0x26, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x05, + 0x3d, 0x5c, 0x5e, 0xd7, 0x83, 0xd8, 0xe4, 0xc4, 0x79, 0xe2, 0x9e, 0x3c, 0xc3, 0x8a, 0xe7, 0x1b, + 0xb4, 0x18, 0x83, 0xa0, 0x5a, 0xad, 0xac, 0x9a, 0x9e, 0x6f, 0xd0, 0x42, 0x18, 0xda, 0xf5, 0x7c, + 0x83, 0x96, 0x3a, 0xcc, 0x2b, 0x15, 0x68, 0x9e, 0x41, 0x73, 0xb8, 0x92, 0x24, 0x97, 0x38, 0x9a, + 0x50, 0x50, 0x6a, 0x71, 0x41, 0x7e, 0x5e, 0x71, 0xaa, 0xd2, 0x14, 0x46, 0x2e, 0x3e, 0xdf, 0xe2, + 0xf4, 0x00, 0xb8, 0xfe, 0x54, 0x21, 0x2b, 0x2e, 0x6e, 0xb8, 0x71, 0x79, 0x25, 0x04, 0x3d, 0x8a, + 0xac, 0x58, 0x48, 0x06, 0x14, 0x44, 0xc9, 0x20, 0x47, 0x78, 0xba, 0x80, 0x7d, 0xcb, 0x12, 0x84, + 0x10, 0x10, 0x12, 0xe3, 0x62, 0x2b, 0xc9, 0x4c, 0x2d, 0xf2, 0x74, 0x91, 0x60, 0x06, 0x4b, 0x41, + 0x79, 0x56, 0x02, 0x20, 0xbf, 0x21, 0x9b, 0xa3, 0x24, 0xc1, 0x25, 0x86, 0xea, 0x2a, 0xb8, 0x83, + 0x5b, 0x18, 0xc1, 0x52, 0xe1, 0x99, 0x25, 0x19, 0x29, 0x45, 0x89, 0xe5, 0x8e, 0x39, 0x39, 0xf9, + 0xc9, 0x60, 0x5f, 0x17, 0xd3, 0xce, 0xe1, 0x58, 0x1c, 0xa8, 0xc0, 0x25, 0x87, 0xdd, 0x15, 0x30, + 0x87, 0x1a, 0xbd, 0x64, 0xe2, 0x62, 0xf6, 0x2d, 0x4e, 0x17, 0xca, 0xe1, 0xe2, 0x41, 0x49, 0x45, + 0x9a, 0xb8, 0x63, 0x1f, 0x2d, 0x92, 0xa4, 0x0c, 0x89, 0x56, 0x0a, 0xb3, 0x55, 0x28, 0x93, 0x8b, + 0x1b, 0x39, 0x2e, 0x35, 0xf0, 0x9a, 0x80, 0xa4, 0x52, 0xca, 0x80, 0x58, 0x95, 0x70, 0xab, 0x1a, + 0x19, 0xb9, 0x84, 0xb1, 0x45, 0x03, 0x7e, 0x93, 0xb0, 0xe8, 0x90, 0xb2, 0x20, 0x55, 0x07, 0xcc, + 0x0d, 0x52, 0xac, 0x0d, 0xa0, 0x4c, 0xe2, 0xe4, 0x79, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, + 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, + 0x72, 0x0c, 0x51, 0xfa, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x99, + 0xe9, 0x79, 0x99, 0x25, 0xa9, 0xfa, 0xb8, 0x72, 0x4d, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, + 0x38, 0xff, 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xd9, 0x56, 0x22, 0xc2, 0x04, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -254,6 +367,9 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) Participate(ctx context.Context, in *MsgParticipate, opts ...grpc.CallOption) (*MsgParticipateResponse, error) WithdrawAllocations(ctx context.Context, in *MsgWithdrawAllocations, opts ...grpc.CallOption) (*MsgWithdrawAllocationsResponse, error) } @@ -266,9 +382,18 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/network.participation.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) Participate(ctx context.Context, in *MsgParticipate, opts ...grpc.CallOption) (*MsgParticipateResponse, error) { out := new(MsgParticipateResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Msg/Participate", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.participation.v1.Msg/Participate", in, out, opts...) if err != nil { return nil, err } @@ -277,7 +402,7 @@ func (c *msgClient) Participate(ctx context.Context, in *MsgParticipate, opts .. func (c *msgClient) WithdrawAllocations(ctx context.Context, in *MsgWithdrawAllocations, opts ...grpc.CallOption) (*MsgWithdrawAllocationsResponse, error) { out := new(MsgWithdrawAllocationsResponse) - err := c.cc.Invoke(ctx, "/spn.participation.Msg/WithdrawAllocations", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.participation.v1.Msg/WithdrawAllocations", in, out, opts...) if err != nil { return nil, err } @@ -286,6 +411,9 @@ func (c *msgClient) WithdrawAllocations(ctx context.Context, in *MsgWithdrawAllo // MsgServer is the server API for Msg service. type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) Participate(context.Context, *MsgParticipate) (*MsgParticipateResponse, error) WithdrawAllocations(context.Context, *MsgWithdrawAllocations) (*MsgWithdrawAllocationsResponse, error) } @@ -294,6 +422,9 @@ type MsgServer interface { type UnimplementedMsgServer struct { } +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} func (*UnimplementedMsgServer) Participate(ctx context.Context, req *MsgParticipate) (*MsgParticipateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Participate not implemented") } @@ -305,6 +436,24 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/network.participation.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_Participate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgParticipate) if err := dec(in); err != nil { @@ -315,7 +464,7 @@ func _Msg_Participate_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Msg/Participate", + FullMethod: "/network.participation.v1.Msg/Participate", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).Participate(ctx, req.(*MsgParticipate)) @@ -333,7 +482,7 @@ func _Msg_WithdrawAllocations_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.participation.Msg/WithdrawAllocations", + FullMethod: "/network.participation.v1.Msg/WithdrawAllocations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).WithdrawAllocations(ctx, req.(*MsgWithdrawAllocations)) @@ -342,9 +491,13 @@ func _Msg_WithdrawAllocations_Handler(srv interface{}, ctx context.Context, dec } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.participation.Msg", + ServiceName: "network.participation.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, { MethodName: "Participate", Handler: _Msg_Participate_Handler, @@ -355,7 +508,70 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/participation/tx.proto", + Metadata: "network/participation/v1/tx.proto", +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil } func (m *MsgParticipate) Marshal() (dAtA []byte, err error) { @@ -490,6 +706,30 @@ func encodeVarintTx(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgParticipate) Size() (n int) { if m == nil { return 0 @@ -549,6 +789,171 @@ func sovTx(x uint64) (n int) { func sozTx(x uint64) (n int) { return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgParticipate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/participation/types/types.go b/x/participation/types/types.go new file mode 100644 index 00000000..ab1254f4 --- /dev/null +++ b/x/participation/types/types.go @@ -0,0 +1 @@ +package types diff --git a/x/participation/types/types_test.go b/x/participation/types/types_test.go deleted file mode 100644 index a796ba8a..00000000 --- a/x/participation/types/types_test.go +++ /dev/null @@ -1,11 +0,0 @@ -package types_test - -import "math/rand" - -var r *rand.Rand - -// initialize random generator -func init() { - s := rand.NewSource(1) - r = rand.New(s) -} diff --git a/x/participation/types/used_allocations.pb.go b/x/participation/types/used_allocations.pb.go index 12251e81..dc7195b7 100644 --- a/x/participation/types/used_allocations.pb.go +++ b/x/participation/types/used_allocations.pb.go @@ -1,12 +1,12 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/participation/used_allocations.proto +// source: network/participation/v1/used_allocations.proto package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,17 +25,16 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// Describes the number of allocations already used by a user for existing auctions type UsedAllocations struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - NumAllocations github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=numAllocations,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"numAllocations"` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + NumAllocations cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=numAllocations,proto3,customtype=cosmossdk.io/math.Int" json:"numAllocations"` } func (m *UsedAllocations) Reset() { *m = UsedAllocations{} } func (m *UsedAllocations) String() string { return proto.CompactTextString(m) } func (*UsedAllocations) ProtoMessage() {} func (*UsedAllocations) Descriptor() ([]byte, []int) { - return fileDescriptor_a15f80de3e5567dd, []int{0} + return fileDescriptor_ed6b595845e1f190, []int{0} } func (m *UsedAllocations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -72,32 +71,32 @@ func (m *UsedAllocations) GetAddress() string { } func init() { - proto.RegisterType((*UsedAllocations)(nil), "spn.participation.UsedAllocations") + proto.RegisterType((*UsedAllocations)(nil), "network.participation.v1.UsedAllocations") } func init() { - proto.RegisterFile("spn/participation/used_allocations.proto", fileDescriptor_a15f80de3e5567dd) + proto.RegisterFile("network/participation/v1/used_allocations.proto", fileDescriptor_ed6b595845e1f190) } -var fileDescriptor_a15f80de3e5567dd = []byte{ - // 267 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x28, 0x2e, 0xc8, 0xd3, - 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x2f, 0x2d, - 0x4e, 0x4d, 0x89, 0x4f, 0xcc, 0xc9, 0xc9, 0x4f, 0x06, 0xf3, 0x8b, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, - 0xf2, 0x85, 0x04, 0x8b, 0x0b, 0xf2, 0xf4, 0x50, 0x54, 0x4a, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, - 0x65, 0xf5, 0x41, 0x2c, 0x88, 0x42, 0x29, 0xc9, 0xe4, 0xfc, 0xe2, 0xdc, 0xfc, 0xe2, 0x78, 0x88, - 0x04, 0x84, 0x03, 0x91, 0x52, 0x5a, 0xcd, 0xc8, 0xc5, 0x1f, 0x5a, 0x9c, 0x9a, 0xe2, 0x88, 0x30, - 0x5d, 0xc8, 0x88, 0x8b, 0x3d, 0x31, 0x25, 0xa5, 0x28, 0xb5, 0xb8, 0x58, 0x82, 0x51, 0x81, 0x51, - 0x83, 0xd3, 0x49, 0xe2, 0xd2, 0x16, 0x5d, 0x11, 0xa8, 0x36, 0x47, 0x88, 0x4c, 0x70, 0x49, 0x51, - 0x66, 0x5e, 0x7a, 0x10, 0x4c, 0xa1, 0x50, 0x0a, 0x17, 0x5f, 0x5e, 0x69, 0x2e, 0x92, 0x29, 0x12, - 0x4c, 0x60, 0xad, 0x36, 0x27, 0xee, 0xc9, 0x33, 0xdc, 0xba, 0x27, 0xaf, 0x96, 0x9e, 0x59, 0x92, - 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0x0b, 0x75, 0x00, 0x94, 0xd2, 0x2d, 0x4e, 0xc9, 0xd6, 0x2f, - 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0xf3, 0xcc, 0x2b, 0xb9, 0xb4, 0x45, 0x97, 0x0b, 0x6a, 0x91, 0x67, - 0x5e, 0x49, 0x10, 0x9a, 0x99, 0x4e, 0x9e, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, - 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, - 0x10, 0xa5, 0x8f, 0x64, 0x7e, 0x49, 0x6a, 0x5e, 0x4a, 0x6a, 0x51, 0x6e, 0x66, 0x5e, 0x89, 0x3e, - 0x28, 0x2c, 0x2b, 0xd0, 0x42, 0x13, 0x6c, 0x59, 0x12, 0x1b, 0xd8, 0xff, 0xc6, 0x80, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xb2, 0x02, 0x57, 0x2a, 0x6f, 0x01, 0x00, 0x00, +var fileDescriptor_ed6b595845e1f190 = []byte{ + // 272 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x48, 0x2c, 0x2a, 0xc9, 0x4c, 0xce, 0x2c, 0x48, 0x2c, 0xc9, 0xcc, + 0xcf, 0xd3, 0x2f, 0x33, 0xd4, 0x2f, 0x2d, 0x4e, 0x4d, 0x89, 0x4f, 0xcc, 0xc9, 0xc9, 0x4f, 0x06, + 0x0b, 0x15, 0xeb, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0x49, 0x40, 0x35, 0xe8, 0xa1, 0x68, 0xd0, + 0x2b, 0x33, 0x94, 0x92, 0x4c, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0x8e, 0x07, 0xab, 0xd3, 0x87, 0x70, + 0x20, 0x9a, 0xa4, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0x21, 0xe2, 0x20, 0x16, 0x44, 0x54, 0x69, 0x16, + 0x23, 0x17, 0x7f, 0x68, 0x71, 0x6a, 0x8a, 0x23, 0xc2, 0x12, 0x21, 0x23, 0x2e, 0xf6, 0xc4, 0x94, + 0x94, 0xa2, 0xd4, 0xe2, 0x62, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x4e, 0x27, 0x89, 0x4b, 0x5b, 0x74, + 0x45, 0xa0, 0x86, 0x39, 0x42, 0x64, 0x82, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, 0x83, 0x60, 0x0a, 0x85, + 0x82, 0xb9, 0xf8, 0xf2, 0x4a, 0x73, 0x91, 0x4c, 0x91, 0x60, 0x02, 0x6b, 0xd5, 0x3e, 0x71, 0x4f, + 0x9e, 0xe1, 0xd6, 0x3d, 0x79, 0x51, 0x88, 0xf6, 0xe2, 0x94, 0x6c, 0xbd, 0xcc, 0x7c, 0xfd, 0xdc, + 0xc4, 0x92, 0x0c, 0x3d, 0xcf, 0xbc, 0x92, 0x4b, 0x5b, 0x74, 0xb9, 0xa0, 0xe6, 0x7a, 0xe6, 0x95, + 0x04, 0xa1, 0x19, 0xe1, 0xe4, 0x79, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, + 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, + 0xfa, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x99, 0xe9, 0x79, 0x99, + 0x25, 0xa9, 0xf0, 0x40, 0xac, 0x40, 0x0b, 0xc6, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, + 0x77, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xce, 0x1d, 0x2b, 0x11, 0x6c, 0x01, 0x00, 0x00, } func (m *UsedAllocations) Marshal() (dAtA []byte, err error) { diff --git a/x/profile/client/cli/query.go b/x/profile/client/cli/query.go deleted file mode 100644 index 20e01432..00000000 --- a/x/profile/client/cli/query.go +++ /dev/null @@ -1,35 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -// GetQueryCmd returns the cli query commands for this module -func GetQueryCmd(queryRoute string) *cobra.Command { - // Group profile queries under a subcommand - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdShowValidator(), - CmdListValidator(), - CmdShowValidatorByOperatorAddress(), - CmdShowCoordinator(), - CmdListCoordinator(), - CmdShowCoordinatorByAddress(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/profile/client/cli/query_coordinator.go b/x/profile/client/cli/query_coordinator.go deleted file mode 100644 index 0c5b38d5..00000000 --- a/x/profile/client/cli/query_coordinator.go +++ /dev/null @@ -1,78 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -func CmdListCoordinator() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-coordinator", - Short: "List all coordinators", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllCoordinatorRequest{ - Pagination: pageReq, - } - - res, err := queryClient.CoordinatorAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowCoordinator() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-coordinator [coordinator-id]", - Short: "Shows a coordinator", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - coordinatorID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryGetCoordinatorRequest{ - CoordinatorID: coordinatorID, - } - - res, err := queryClient.Coordinator(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/client/cli/query_coordinator_by_address.go b/x/profile/client/cli/query_coordinator_by_address.go deleted file mode 100644 index c30283d2..00000000 --- a/x/profile/client/cli/query_coordinator_by_address.go +++ /dev/null @@ -1,38 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -func CmdShowCoordinatorByAddress() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-coordinator-by-address [address]", - Short: "Shows a coordinator by its address", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryGetCoordinatorByAddressRequest{ - Address: args[0], - } - - res, err := queryClient.CoordinatorByAddress(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/client/cli/query_coordinator_by_address_test.go b/x/profile/client/cli/query_coordinator_by_address_test.go deleted file mode 100644 index e469a9e3..00000000 --- a/x/profile/client/cli/query_coordinator_by_address_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package cli_test - -import ( - "fmt" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/profile/client/cli" - "github.com/tendermint/spn/x/profile/types" -) - -func (suite *QueryTestSuite) TestShowCoordinatorByAddress() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ProfileState.CoordinatorsByAddress - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - id string - args []string - err error - obj types.CoordinatorByAddress - }{ - { - desc: "should show an existing coordinator from address", - id: objs[0].Address, - args: common, - obj: objs[0], - }, - { - desc: "should send error for a non existing coordinator", - id: "not_found", - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{tc.id} - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowCoordinatorByAddress(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetCoordinatorByAddressResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.CoordinatorByAddress) - require.Equal(t, tc.obj, resp.CoordinatorByAddress) - } - }) - } -} diff --git a/x/profile/client/cli/query_coordinator_test.go b/x/profile/client/cli/query_coordinator_test.go deleted file mode 100644 index 29398fed..00000000 --- a/x/profile/client/cli/query_coordinator_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package cli_test - -import ( - "fmt" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/profile/client/cli" - "github.com/tendermint/spn/x/profile/types" -) - -func (suite *QueryTestSuite) TestShowCoordinator() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ProfileState.Coordinators - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - id string - args []string - err error - obj types.Coordinator - }{ - { - desc: "should show an existing coordinator", - id: fmt.Sprintf("%d", objs[0].CoordinatorID), - args: common, - obj: objs[0], - }, - { - desc: "should send error for a non existing coordinator", - id: "not_found", - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{tc.id} - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowCoordinator(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetCoordinatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.Coordinator) - require.Equal(t, tc.obj, resp.Coordinator) - } - }) - } -} - -func (suite *QueryTestSuite) TestListCoordinator() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ProfileState.Coordinators - - request := func(next []byte, offset, limit uint64, total bool) []string { - args := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should allow listing coordinators by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(objs); i += step { - args := request(nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListCoordinator(), args) - require.NoError(t, err) - var resp types.QueryAllCoordinatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Coordinator), step) - require.Subset(t, objs, resp.Coordinator) - } - }) - suite.T().Run("should allow listing coordinators by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(objs); i += step { - args := request(next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListCoordinator(), args) - require.NoError(t, err) - var resp types.QueryAllCoordinatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Coordinator), step) - require.Subset(t, objs, resp.Coordinator) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should allow listing all coordinators", func(t *testing.T) { - args := request(nil, 0, uint64(len(objs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListCoordinator(), args) - require.NoError(t, err) - var resp types.QueryAllCoordinatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(objs), int(resp.Pagination.Total)) - require.ElementsMatch(t, objs, resp.Coordinator) - }) -} diff --git a/x/profile/client/cli/query_test.go b/x/profile/client/cli/query_test.go deleted file mode 100644 index d7b54620..00000000 --- a/x/profile/client/cli/query_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package cli_test - -import ( - "testing" - - "github.com/stretchr/testify/suite" - - "github.com/tendermint/spn/testutil/networksuite" -) - -// QueryTestSuite is a test suite for query tests -type QueryTestSuite struct { - networksuite.NetworkTestSuite -} - -// TestQueryTestSuite runs test of the query suite -func TestQueryTestSuite(t *testing.T) { - suite.Run(t, new(QueryTestSuite)) -} diff --git a/x/profile/client/cli/query_validator.go b/x/profile/client/cli/query_validator.go deleted file mode 100644 index 6a644234..00000000 --- a/x/profile/client/cli/query_validator.go +++ /dev/null @@ -1,69 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -func CmdListValidator() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-validator", - Short: "List all validators", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllValidatorRequest{ - Pagination: pageReq, - } - - res, err := queryClient.ValidatorAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowValidator() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-validator [address]", - Short: "Shows a validator", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryGetValidatorRequest{Address: args[0]} - - res, err := queryClient.Validator(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/client/cli/query_validator_by_operator_address.go b/x/profile/client/cli/query_validator_by_operator_address.go deleted file mode 100644 index 80124824..00000000 --- a/x/profile/client/cli/query_validator_by_operator_address.go +++ /dev/null @@ -1,41 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -func CmdShowValidatorByOperatorAddress() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-validator-by-operator-address [operator-address]", - Short: "Shows a validator address by an associated operator address", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - opAddr := args[0] - - params := &types.QueryGetValidatorByOperatorAddressRequest{ - OperatorAddress: opAddr, - } - - res, err := queryClient.ValidatorByOperatorAddress(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/client/cli/query_validator_test.go b/x/profile/client/cli/query_validator_test.go deleted file mode 100644 index 33c6945d..00000000 --- a/x/profile/client/cli/query_validator_test.go +++ /dev/null @@ -1,127 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - "github.com/tendermint/spn/testutil/nullify" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/profile/client/cli" - "github.com/tendermint/spn/x/profile/types" -) - -func (suite *QueryTestSuite) TestShowValidator() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ProfileState.Validators - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - desc string - idAddress string - - args []string - err error - obj types.Validator - }{ - { - desc: "should show an existing validator", - idAddress: objs[0].Address, - - args: common, - obj: objs[0], - }, - { - desc: "should send error for a non existing validator", - idAddress: strconv.Itoa(100000), - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.desc, func(t *testing.T) { - args := []string{ - tc.idAddress, - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowValidator(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetValidatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.Validator) - require.Equal(t, nullify.Fill(&tc.obj), nullify.Fill(&resp.Validator)) - } - }) - } -} - -func (suite *QueryTestSuite) TestListValidator() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ProfileState.Validators - - request := func(next []byte, offset, limit uint64, total bool) []string { - args := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should allow listing validators by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(objs); i += step { - args := request(nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListValidator(), args) - require.NoError(t, err) - var resp types.QueryAllValidatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Validator), step) - require.Subset(t, nullify.Fill(objs), nullify.Fill(resp.Validator)) - } - }) - suite.T().Run("should allow listing validators by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(objs); i += step { - args := request(next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListValidator(), args) - require.NoError(t, err) - var resp types.QueryAllValidatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Validator), step) - require.Subset(t, nullify.Fill(objs), nullify.Fill(resp.Validator)) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should allow listing all validators", func(t *testing.T) { - args := request(nil, 0, uint64(len(objs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListValidator(), args) - require.NoError(t, err) - var resp types.QueryAllValidatorResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(objs), int(resp.Pagination.Total)) - require.ElementsMatch(t, nullify.Fill(objs), nullify.Fill(resp.Validator)) - }) -} diff --git a/x/profile/client/cli/tx.go b/x/profile/client/cli/tx.go deleted file mode 100644 index c4745c4e..00000000 --- a/x/profile/client/cli/tx.go +++ /dev/null @@ -1,34 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -// GetTxCmd returns the transaction commands for this module -func GetTxCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdUpdateValidatorDescription(), - CmdAddValidatorOperatorAddress(), - CmdCreateCoordinator(), - CmdUpdateCoordinatorDescription(), - CmdUpdateCoordinatorAddress(), - CmdDisableCoordinator(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/profile/client/cli/tx_add_validator_operator_address.go b/x/profile/client/cli/tx_add_validator_operator_address.go deleted file mode 100644 index 2d079609..00000000 --- a/x/profile/client/cli/tx_add_validator_operator_address.go +++ /dev/null @@ -1,101 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -func CmdAddValidatorOperatorAddress() *cobra.Command { - cmd := &cobra.Command{ - Use: "add-validator-operator-address [operator-address]", - Short: "Associate an validator operator address to a validator on SPN", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - validatorAddr := clientCtx.GetFromAddress().String() - operatorAddr := args[0] - - msg := types.NewMsgSAddValidatorOperatorAddress( - validatorAddr, - operatorAddr, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - - // initialize tx - txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) - if err != nil { - return err - } - - txBuilder, err := txf.BuildUnsignedTx(msg) - if err != nil { - return err - } - - // double sign with the operator address - if err := addSignature(clientCtx, txf, txBuilder, validatorAddr); err != nil { - return err - } - if operatorAddr != validatorAddr { - if err := addSignature(clientCtx, txf, txBuilder, operatorAddr); err != nil { - return err - } - } - - // encode tx - encoder := clientCtx.TxConfig.TxEncoder() - encodedTx, err := encoder(txBuilder.GetTx()) - if err != nil { - return err - } - - // broadcast tx - resp, err := clientCtx.BroadcastTxSync(encodedTx) - if err != nil { - return err - } - fmt.Print(resp.String()) - - return nil - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} - -// addSignature add a signature to the tx builder -func addSignature( - clientCtx client.Context, - txf tx.Factory, - txBuilder client.TxBuilder, - addr string, -) error { - fromAddr, fromName, _, err := client.GetFromFields(clientCtx, clientCtx.Keyring, addr) - if err != nil { - return err - } - clientCtx = clientCtx.WithFrom(addr).WithFromAddress(fromAddr).WithFromName(fromName) - - num, seq, err := txf.AccountRetriever().GetAccountNumberSequence(clientCtx, clientCtx.FromAddress) - if err != nil { - return err - } - txf = txf.WithAccountNumber(num) - txf = txf.WithSequence(seq) - - return tx.Sign(txf, clientCtx.FromName, txBuilder, false) -} diff --git a/x/profile/client/cli/tx_create_coordinator.go b/x/profile/client/cli/tx_create_coordinator.go deleted file mode 100644 index 1055725d..00000000 --- a/x/profile/client/cli/tx_create_coordinator.go +++ /dev/null @@ -1,63 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -const ( - flagIdentity = "identity" - flagWebsite = "website" - flagDetails = "details" -) - -func CmdCreateCoordinator() *cobra.Command { - cmd := &cobra.Command{ - Use: "create-coordinator", - Short: "Create a new coordinator profile", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - identity, err := cmd.Flags().GetString(flagIdentity) - if err != nil { - return err - } - - website, err := cmd.Flags().GetString(flagWebsite) - if err != nil { - return err - } - - details, err := cmd.Flags().GetString(flagDetails) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgCreateCoordinator( - clientCtx.GetFromAddress().String(), - identity, - website, - details, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagIdentity, "", "coordinator identity") - cmd.Flags().String(flagWebsite, "", "coordinator website url") - cmd.Flags().String(flagDetails, "", "coordinator details") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/client/cli/tx_disable_coordinator.go b/x/profile/client/cli/tx_disable_coordinator.go deleted file mode 100644 index dfa97716..00000000 --- a/x/profile/client/cli/tx_disable_coordinator.go +++ /dev/null @@ -1,34 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -func CmdDisableCoordinator() *cobra.Command { - cmd := &cobra.Command{ - Use: "disable-coordinator", - Short: "Disable the coordinator profile associated to the sender address", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgDisableCoordinator(clientCtx.GetFromAddress().String()) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/client/cli/tx_update_coordinator_address.go b/x/profile/client/cli/tx_update_coordinator_address.go deleted file mode 100644 index b04d8bda..00000000 --- a/x/profile/client/cli/tx_update_coordinator_address.go +++ /dev/null @@ -1,34 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -func CmdUpdateCoordinatorAddress() *cobra.Command { - cmd := &cobra.Command{ - Use: "update-coordinator-address [new-address]", - Short: "Update a coordinator address", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgUpdateCoordinatorAddress(clientCtx.GetFromAddress().String(), args[0]) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/client/cli/tx_update_coordinator_description.go b/x/profile/client/cli/tx_update_coordinator_description.go deleted file mode 100644 index a4c85cde..00000000 --- a/x/profile/client/cli/tx_update_coordinator_description.go +++ /dev/null @@ -1,57 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -func CmdUpdateCoordinatorDescription() *cobra.Command { - cmd := &cobra.Command{ - Use: "update-coordinator-description", - Short: "Update a coordinator description", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - identity, err := cmd.Flags().GetString(flagIdentity) - if err != nil { - return err - } - - website, err := cmd.Flags().GetString(flagWebsite) - if err != nil { - return err - } - - details, err := cmd.Flags().GetString(flagDetails) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgUpdateCoordinatorDescription( - clientCtx.GetFromAddress().String(), - identity, - website, - details, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagIdentity, "", "coordinator identity") - cmd.Flags().String(flagWebsite, "", "coordinator website url") - cmd.Flags().String(flagDetails, "", "coordinator details") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/client/cli/tx_update_validator_description.go b/x/profile/client/cli/tx_update_validator_description.go deleted file mode 100644 index a3332961..00000000 --- a/x/profile/client/cli/tx_update_validator_description.go +++ /dev/null @@ -1,76 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/profile/types" -) - -const ( - flagMoniker = "validator-moniker" - flagSecurityContact = "security-contact" -) - -func CmdUpdateValidatorDescription() *cobra.Command { - cmd := &cobra.Command{ - Use: "update-validator-description", - Short: "Update a validator description", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - identity, err := cmd.Flags().GetString(flagIdentity) - if err != nil { - return err - } - - website, err := cmd.Flags().GetString(flagWebsite) - if err != nil { - return err - } - - details, err := cmd.Flags().GetString(flagDetails) - if err != nil { - return err - } - - moniker, err := cmd.Flags().GetString(flagMoniker) - if err != nil { - return err - } - - securityContact, err := cmd.Flags().GetString(flagSecurityContact) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgUpdateValidatorDescription( - clientCtx.GetFromAddress().String(), - identity, - moniker, - website, - securityContact, - details, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagIdentity, "", "validator identity") - cmd.Flags().String(flagWebsite, "", "validator website url") - cmd.Flags().String(flagDetails, "", "validator details") - cmd.Flags().String(flagMoniker, "", "validator moniker") - cmd.Flags().String(flagSecurityContact, "", "validator security contact") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/profile/genesis.go b/x/profile/genesis.go deleted file mode 100644 index 0510f0cf..00000000 --- a/x/profile/genesis.go +++ /dev/null @@ -1,51 +0,0 @@ -package profile - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -// InitGenesis initializes the profile module's state from a provided genesis -// state. -func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { - // this line is used by starport scaffolding # genesis/module/init - - // Set all the validator - for _, elem := range genState.Validators { - k.SetValidator(ctx, elem) - } - - // Set all the validatorByOperatorAddress - for _, elem := range genState.ValidatorsByOperatorAddress { - k.SetValidatorByOperatorAddress(ctx, elem) - } - - // Set all the coordinator - for _, elem := range genState.Coordinators { - k.SetCoordinator(ctx, elem) - } - - // Set coordinator counter - k.SetCoordinatorCounter(ctx, genState.CoordinatorCounter) - - // Set all the coordinatorByAddress - for _, elem := range genState.CoordinatorsByAddress { - k.SetCoordinatorByAddress(ctx, elem) - } -} - -// ExportGenesis returns the profile module's exported genesis. -func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - genesis := types.DefaultGenesis() - - genesis.Coordinators = k.GetAllCoordinator(ctx) - genesis.CoordinatorCounter = k.GetCoordinatorCounter(ctx) - genesis.CoordinatorsByAddress = k.GetAllCoordinatorByAddress(ctx) - genesis.Validators = k.GetAllValidator(ctx) - genesis.ValidatorsByOperatorAddress = k.GetAllValidatorByOperatorAddress(ctx) - // this line is used by starport scaffolding # genesis/module/export - - return genesis -} diff --git a/x/profile/genesis_test.go b/x/profile/genesis_test.go deleted file mode 100644 index d449b7b9..00000000 --- a/x/profile/genesis_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package profile_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile" -) - -/* -// We use a genesis template from sample package, therefore this placeholder is not used -// this line is used by starport scaffolding # genesis/test/state -*/ - -func TestGenesis(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - r := sample.Rand() - - t.Run("should allow import and export the genesis state", func(t *testing.T) { - genesisState := sample.ProfileGenesisState(r) - profile.InitGenesis(ctx, *tk.ProfileKeeper, genesisState) - got := profile.ExportGenesis(ctx, *tk.ProfileKeeper) - - // Compare lists - require.ElementsMatch(t, genesisState.Validators, got.Validators) - require.ElementsMatch(t, genesisState.ValidatorsByOperatorAddress, got.ValidatorsByOperatorAddress) - require.ElementsMatch(t, genesisState.Coordinators, got.Coordinators) - require.ElementsMatch(t, genesisState.CoordinatorsByAddress, got.CoordinatorsByAddress) - require.Equal(t, genesisState.CoordinatorCounter, got.CoordinatorCounter) - }) - - // this line is used by starport scaffolding # genesis/test/assert -} diff --git a/x/profile/keeper/coordinator.go b/x/profile/keeper/coordinator.go index dffb14d2..c7cfda24 100644 --- a/x/profile/keeper/coordinator.go +++ b/x/profile/keeper/coordinator.go @@ -1,101 +1,106 @@ package keeper import ( - "encoding/binary" + "context" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/collections" + sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pkg/errors" - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/profile/types" + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/profile/types" ) -// GetCoordinatorCounter get the total number of Coordinators -func (k Keeper) GetCoordinatorCounter(ctx sdk.Context) uint64 { - store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) - byteKey := types.KeyPrefix(types.CoordinatorCounterKey) - bz := store.Get(byteKey) - - // Counter doesn't exist: no element - if bz == nil { - return 0 +// AppendCoordinator appends a coordinator in the store with a new coordinator id and update the count +func (k Keeper) AppendCoordinator(ctx context.Context, coordinator types.Coordinator) (uint64, error) { + cordinatorID, err := k.CoordinatorSeq.Next(ctx) + if err != nil { + return 0, ignterrors.Criticalf("failed to get next coordinator sequence %s", err.Error()) } - - // Parse bytes - return binary.BigEndian.Uint64(bz) -} - -// SetCoordinatorCounter set the total number of coordinator -func (k Keeper) SetCoordinatorCounter(ctx sdk.Context, counter uint64) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) - byteKey := types.KeyPrefix(types.CoordinatorCounterKey) - bz := make([]byte, 8) - binary.BigEndian.PutUint64(bz, counter) - store.Set(byteKey, bz) -} - -// AppendCoordinator appends a coordinator in the store with a new id and update the counter -func (k Keeper) AppendCoordinator( - ctx sdk.Context, - coordinator types.Coordinator, -) uint64 { - // Create the coordinator - counter := k.GetCoordinatorCounter(ctx) - - // Set the ID of the appended value - coordinator.CoordinatorID = counter - - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorKey)) - appendedValue := k.cdc.MustMarshal(&coordinator) - store.Set(GetCoordinatorIDBytes(coordinator.CoordinatorID), appendedValue) - - // Update coordinator counter - k.SetCoordinatorCounter(ctx, counter+1) - - return counter + coordinator.CoordinatorID = cordinatorID + if err := k.Coordinator.Set(ctx, cordinatorID, coordinator); err != nil { + return 0, ignterrors.Criticalf("coordinator not set %s", err.Error()) + } + return cordinatorID, nil } -// SetCoordinator set a specific coordinator in the store -func (k Keeper) SetCoordinator(ctx sdk.Context, coordinator types.Coordinator) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorKey)) - b := k.cdc.MustMarshal(&coordinator) - store.Set(GetCoordinatorIDBytes(coordinator.CoordinatorID), b) +func (k Keeper) CoordinatorIDFromAddress(ctx context.Context, address sdk.AccAddress) (uint64, error) { + coordinatorByAddress, err := k.CoordinatorByAddress.Get(ctx, address) + if errors.Is(err, collections.ErrNotFound) { + return 0, types.ErrCoordinatorAddressNotFound + } + return coordinatorByAddress.CoordinatorID, err } -// GetCoordinator returns a coordinator from its id -func (k Keeper) GetCoordinator(ctx sdk.Context, id uint64) (val types.Coordinator, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorKey)) - b := store.Get(GetCoordinatorIDBytes(id)) - if b == nil { - return val, false +func (k Keeper) GetCoordinator(ctx context.Context, coordinatorID uint64) (types.Coordinator, error) { + acc, err := k.Coordinator.Get(ctx, coordinatorID) + if errors.Is(err, collections.ErrNotFound) { + return types.Coordinator{}, types.ErrCoordinatorNotFound } - k.cdc.MustUnmarshal(b, &val) - return val, true + return acc, err } -// RemoveCoordinator removes a coordinator from the store -func (k Keeper) RemoveCoordinator(ctx sdk.Context, id uint64) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorKey)) - store.Delete(GetCoordinatorIDBytes(id)) +// Coordinators returns all Coordinator. +func (k Keeper) Coordinators(ctx context.Context) ([]types.Coordinator, error) { + coordinators := make([]types.Coordinator, 0) + err := k.Coordinator.Walk(ctx, nil, func(_ uint64, coordinator types.Coordinator) (bool, error) { + coordinators = append(coordinators, coordinator) + return false, nil + }) + return coordinators, err } -// GetAllCoordinator returns all coordinator -func (k Keeper) GetAllCoordinator(ctx sdk.Context) (list []types.Coordinator) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorKey)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) +// GetCoordinatorByAddress returns the CoordinatorByAddress associated to an address +// returns ErrCoordAddressNotFound if not found in the store +// if the corresponding Coordinator is not found or is inactive, returns ErrCritical +func (k Keeper) GetCoordinatorByAddress(ctx context.Context, address sdk.AccAddress) (types.CoordinatorByAddress, error) { + coordinatorByAddress, err := k.CoordinatorByAddress.Get(ctx, address) + if errors.Is(err, collections.ErrNotFound) { + return types.CoordinatorByAddress{}, sdkerrors.Wrapf(types.ErrCoordinatorAddressNotFound, "address: %s", address) + } else if err != nil { + return types.CoordinatorByAddress{}, err + } - defer iterator.Close() + coordinator, err := k.GetCoordinator(ctx, coordinatorByAddress.CoordinatorID) + if errors.Is(err, types.ErrCoordinatorNotFound) { + // return critical error + return types.CoordinatorByAddress{}, ignterrors.Criticalf("a coordinator address is associated to a non-existent coordinator ID: %d", + coordinatorByAddress.CoordinatorID) + } else if err != nil { + return types.CoordinatorByAddress{}, err + } - for ; iterator.Valid(); iterator.Next() { - var val types.Coordinator - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) + if !coordinator.Active { + // return critical error + return types.CoordinatorByAddress{}, ignterrors.Criticalf("a coordinator address is inactive and should not exist in the store: ID: %d", + coordinatorByAddress.CoordinatorID) } - return + return coordinatorByAddress, nil } -// GetCoordinatorIDBytes returns the byte representation of the ID -func GetCoordinatorIDBytes(id uint64) []byte { - return spntypes.UintBytes(id) +// CoordinatorByAddresses returns all CoordinatorByAddress. +func (k Keeper) CoordinatorByAddresses(ctx context.Context) ([]types.CoordinatorByAddress, error) { + coordinatorByAddresses := make([]types.CoordinatorByAddress, 0) + err := k.CoordinatorByAddress.Walk(ctx, nil, func(_ sdk.AccAddress, coordinatorByAddress types.CoordinatorByAddress) (bool, error) { + coordinator, err := k.GetCoordinator(ctx, coordinatorByAddress.CoordinatorID) + if errors.Is(err, types.ErrCoordinatorNotFound) { + // return critical error + return true, ignterrors.Criticalf("a coordinator address is associated to a non-existent coordinator ID: %d", + coordinatorByAddress.CoordinatorID) + } else if err != nil { + return true, err + } + + if !coordinator.Active { + // return critical error + return true, ignterrors.Criticalf("a coordinator address is inactive and should not exist in the store: ID: %d", + coordinatorByAddress.CoordinatorID) + } + + coordinatorByAddresses = append(coordinatorByAddresses, coordinatorByAddress) + return false, nil + }) + return coordinatorByAddresses, err } diff --git a/x/profile/keeper/coordinator_by_address.go b/x/profile/keeper/coordinator_by_address.go deleted file mode 100644 index e5a322a1..00000000 --- a/x/profile/keeper/coordinator_by_address.go +++ /dev/null @@ -1,92 +0,0 @@ -package keeper - -import ( - sdkerrors "cosmossdk.io/errors" - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/profile/types" - - ignterrors "github.com/ignite/modules/pkg/errors" -) - -// SetCoordinatorByAddress set a specific coordinatorByAddress in the store from its index -func (k Keeper) SetCoordinatorByAddress(ctx sdk.Context, coordinatorByAddress types.CoordinatorByAddress) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorByAddressKeyPrefix)) - b := k.cdc.MustMarshal(&coordinatorByAddress) - store.Set(types.CoordinatorByAddressKey( - coordinatorByAddress.Address, - ), b) -} - -// GetCoordinatorByAddress returns a coordinatorByAddress from its index -func (k Keeper) getCoordinatorByAddress( - ctx sdk.Context, - address string, -) (val types.CoordinatorByAddress, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorByAddressKeyPrefix)) - - b := store.Get(types.CoordinatorByAddressKey( - address, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveCoordinatorByAddress removes a coordinatorByAddress from the store -func (k Keeper) RemoveCoordinatorByAddress(ctx sdk.Context, address string) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorByAddressKeyPrefix)) - store.Delete(types.CoordinatorByAddressKey( - address, - )) -} - -// GetAllCoordinatorByAddress returns all coordinatorByAddress -func (k Keeper) GetAllCoordinatorByAddress(ctx sdk.Context) (list []types.CoordinatorByAddress) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CoordinatorByAddressKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.CoordinatorByAddress - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} - -// CoordinatorIDFromAddress returns the coordinator id associated to an address -func (k Keeper) CoordinatorIDFromAddress(ctx sdk.Context, address string) (id uint64, err error) { - coord, err := k.GetCoordinatorByAddress(ctx, address) - return coord.CoordinatorID, err -} - -// GetCoordinatorByAddress returns the CoordinatorByAddress associated to an address -// returns ErrCoordAddressNotFound if not found in the store -// if the corresponding Coordinator is not found or is inactive, returns ErrCritical -func (k Keeper) GetCoordinatorByAddress(ctx sdk.Context, address string) (types.CoordinatorByAddress, error) { - coordByAddress, found := k.getCoordinatorByAddress(ctx, address) - if !found { - return types.CoordinatorByAddress{}, sdkerrors.Wrapf(types.ErrCoordAddressNotFound, "address: %s", address) - } - - coord, found := k.GetCoordinator(ctx, coordByAddress.CoordinatorID) - if !found { - // return critical error - return types.CoordinatorByAddress{}, ignterrors.Criticalf("a coordinator address is associated to a non-existent coordinator ID: %d", - coordByAddress.CoordinatorID) - } - - if !coord.Active { - // return critical error - return types.CoordinatorByAddress{}, ignterrors.Criticalf("a coordinator address is inactive and should not exist in the store: ID: %d", - coordByAddress.CoordinatorID) - } - - return coordByAddress, nil -} diff --git a/x/profile/keeper/coordinator_by_address_test.go b/x/profile/keeper/coordinator_by_address_test.go deleted file mode 100644 index 264134f7..00000000 --- a/x/profile/keeper/coordinator_by_address_test.go +++ /dev/null @@ -1,149 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" - - ignterrors "github.com/ignite/modules/pkg/errors" -) - -func createNCoordinatorByAddress(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.CoordinatorByAddress { - items := make([]types.CoordinatorByAddress, n) - for i := range items { - items[i].Address = sample.Address(r) - keeper.SetCoordinatorByAddress(ctx, items[i]) - } - return items -} - -func createNCoordinatorBoth(keeper *keeper.Keeper, ctx sdk.Context, n int) ([]types.CoordinatorByAddress, []types.Coordinator) { - coordsByAddr := make([]types.CoordinatorByAddress, n) - coords := make([]types.Coordinator, n) - for i := range coords { - coordsByAddr[i].Address = sample.Address(r) - keeper.SetCoordinatorByAddress(ctx, coordsByAddr[i]) - - coords[i].Address = coordsByAddr[i].Address - coords[i].Active = true - keeper.SetCoordinator(ctx, coords[i]) - } - return coordsByAddr, coords -} - -func TestCoordinatorByAddressGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items, _ := createNCoordinatorBoth(tk.ProfileKeeper, ctx, 10) - - t.Run("should allow getting coordinator by address", func(t *testing.T) { - for _, item := range items { - rst, err := tk.ProfileKeeper.GetCoordinatorByAddress(ctx, item.Address) - require.NoError(t, err) - require.Equal(t, item, rst) - } - }) -} - -func TestCoordinatorByAddressInvalid(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNCoordinatorByAddress(tk.ProfileKeeper, ctx, 10) - - t.Run("should prevent finding coordinator by address if no associated coordinator exist", func(t *testing.T) { - for _, item := range items { - _, err := tk.ProfileKeeper.GetCoordinatorByAddress(ctx, item.Address) - require.ErrorIs(t, err, ignterrors.ErrCritical) - } - }) -} - -func TestCoordinatorByAddressRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNCoordinatorByAddress(tk.ProfileKeeper, ctx, 10) - - t.Run("should allow removing coordinator by address", func(t *testing.T) { - for _, item := range items { - tk.ProfileKeeper.RemoveCoordinatorByAddress(ctx, item.Address) - _, err := tk.ProfileKeeper.GetCoordinatorByAddress(ctx, item.Address) - require.ErrorIs(t, err, types.ErrCoordAddressNotFound) - } - }) -} - -func TestCoordinatorByAddressGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNCoordinatorByAddress(tk.ProfileKeeper, ctx, 10) - - t.Run("should allow getting all coordinator by address", func(t *testing.T) { - require.ElementsMatch(t, items, tk.ProfileKeeper.GetAllCoordinatorByAddress(ctx)) - }) -} - -func TestCoordinatorIDFromAddress(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - address := sample.Address(r) - tk.ProfileKeeper.SetCoordinatorByAddress(ctx, types.CoordinatorByAddress{ - Address: address, - CoordinatorID: 10, - }) - tk.ProfileKeeper.SetCoordinator(ctx, types.Coordinator{ - Address: address, - CoordinatorID: 10, - Active: true, - }) - - t.Run("should allow retrieving coordinator ID from address", func(t *testing.T) { - id, err := tk.ProfileKeeper.CoordinatorIDFromAddress(ctx, address) - require.NoError(t, err) - require.Equal(t, uint64(10), id) - }) - - t.Run("should prevent retrieving coordinator ID if address doesn't exist", func(t *testing.T) { - _, err := tk.ProfileKeeper.CoordinatorIDFromAddress(ctx, sample.Address(r)) - require.ErrorIs(t, err, types.ErrCoordAddressNotFound) - }) -} - -func TestActiveCoordinatorByAddressGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - address := sample.Address(r) - - // set initial valid state - tk.ProfileKeeper.SetCoordinatorByAddress(ctx, types.CoordinatorByAddress{ - Address: address, - CoordinatorID: 10, - }) - tk.ProfileKeeper.SetCoordinator(ctx, types.Coordinator{ - Address: address, - CoordinatorID: 10, - Active: true, - }) - - t.Run("should allow getting active validator by address", func(t *testing.T) { - rst, err := tk.ProfileKeeper.GetCoordinatorByAddress(ctx, address) - require.NoError(t, err) - require.Equal(t, uint64(10), rst.CoordinatorID) - require.Equal(t, address, rst.Address) - }) - - // set invalid critical error state - tk.ProfileKeeper.SetCoordinator(ctx, types.Coordinator{ - Address: address, - CoordinatorID: 10, - Active: false, - }) - - t.Run("should prevent getting inactive validator by address", func(t *testing.T) { - _, err := tk.ProfileKeeper.GetCoordinatorByAddress(ctx, address) - require.ErrorIs(t, err, ignterrors.ErrCritical) - - // set valid state where coordinator is disabled - tk.ProfileKeeper.RemoveCoordinatorByAddress(ctx, address) - _, err = tk.ProfileKeeper.GetCoordinatorByAddress(ctx, address) - require.ErrorIs(t, err, types.ErrCoordAddressNotFound) - }) -} diff --git a/x/profile/keeper/coordinator_test.go b/x/profile/keeper/coordinator_test.go deleted file mode 100644 index db315859..00000000 --- a/x/profile/keeper/coordinator_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -func createNCoordinator(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.Coordinator { - items := make([]types.Coordinator, n) - for i := range items { - items[i] = sample.Coordinator(r, sample.Address(r)) - items[i].Active = true - items[i].CoordinatorID = keeper.AppendCoordinator(ctx, items[i]) - } - return items -} - -func TestCoordinatorGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNCoordinator(tk.ProfileKeeper, ctx, 10) - - t.Run("should allow getting coordinator", func(t *testing.T) { - for _, item := range items { - coord, found := tk.ProfileKeeper.GetCoordinator(ctx, item.CoordinatorID) - require.True(t, found) - require.Equal(t, item, coord) - } - }) -} - -func TestCoordinatorRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNCoordinator(tk.ProfileKeeper, ctx, 10) - for _, item := range items { - tk.ProfileKeeper.RemoveCoordinator(ctx, item.CoordinatorID) - _, found := tk.ProfileKeeper.GetCoordinator(ctx, item.CoordinatorID) - require.False(t, found) - } -} - -func TestCoordinatorGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNCoordinator(tk.ProfileKeeper, ctx, 10) - - t.Run("should allow getting all coordinators", func(t *testing.T) { - require.ElementsMatch(t, items, tk.ProfileKeeper.GetAllCoordinator(ctx)) - }) -} - -func TestCoordinatorCounter(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNCoordinator(tk.ProfileKeeper, ctx, 10) - counter := uint64(len(items)) - - t.Run("should allow getting coordinator counter", func(t *testing.T) { - require.Equal(t, counter, tk.ProfileKeeper.GetCoordinatorCounter(ctx)) - }) -} diff --git a/x/profile/keeper/grpc.go b/x/profile/keeper/grpc.go deleted file mode 100644 index ea21fc3a..00000000 --- a/x/profile/keeper/grpc.go +++ /dev/null @@ -1,7 +0,0 @@ -package keeper - -import ( - "github.com/tendermint/spn/x/profile/types" -) - -var _ types.QueryServer = Keeper{} diff --git a/x/profile/keeper/grpc_coordinator.go b/x/profile/keeper/grpc_coordinator.go deleted file mode 100644 index 84aaeeb9..00000000 --- a/x/profile/keeper/grpc_coordinator.go +++ /dev/null @@ -1,53 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/profile/types" -) - -func (k Keeper) CoordinatorAll(c context.Context, req *types.QueryAllCoordinatorRequest) (*types.QueryAllCoordinatorResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var coordinators []types.Coordinator - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - coordinatorStore := prefix.NewStore(store, types.KeyPrefix(types.CoordinatorKey)) - - pageRes, err := query.Paginate(coordinatorStore, req.Pagination, func(key []byte, value []byte) error { - var coordinator types.Coordinator - if err := k.cdc.Unmarshal(value, &coordinator); err != nil { - return err - } - - coordinators = append(coordinators, coordinator) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllCoordinatorResponse{Coordinator: coordinators, Pagination: pageRes}, nil -} - -func (k Keeper) Coordinator(c context.Context, req *types.QueryGetCoordinatorRequest) (*types.QueryGetCoordinatorResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - ctx := sdk.UnwrapSDKContext(c) - coordinator, found := k.GetCoordinator(ctx, req.CoordinatorID) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - return &types.QueryGetCoordinatorResponse{Coordinator: coordinator}, nil -} diff --git a/x/profile/keeper/grpc_coordinator_by_address.go b/x/profile/keeper/grpc_coordinator_by_address.go deleted file mode 100644 index dfa23445..00000000 --- a/x/profile/keeper/grpc_coordinator_by_address.go +++ /dev/null @@ -1,29 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/profile/types" -) - -func (k Keeper) CoordinatorByAddress(c context.Context, req *types.QueryGetCoordinatorByAddressRequest) (*types.QueryGetCoordinatorByAddressResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.getCoordinatorByAddress( - ctx, - req.Address, - ) - - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetCoordinatorByAddressResponse{CoordinatorByAddress: val}, nil -} diff --git a/x/profile/keeper/grpc_coordinator_by_address_test.go b/x/profile/keeper/grpc_coordinator_by_address_test.go deleted file mode 100644 index d2ecfe69..00000000 --- a/x/profile/keeper/grpc_coordinator_by_address_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -func TestCoordinatorByAddressQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNCoordinatorByAddress(tk.ProfileKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetCoordinatorByAddressRequest - response *types.QueryGetCoordinatorByAddressResponse - err error - }{ - { - desc: "should allow querying first coordinator by address", - request: &types.QueryGetCoordinatorByAddressRequest{Address: msgs[0].Address}, - response: &types.QueryGetCoordinatorByAddressResponse{CoordinatorByAddress: msgs[0]}, - }, - { - desc: "should allow querying second coordinator by address", - request: &types.QueryGetCoordinatorByAddressRequest{Address: msgs[1].Address}, - response: &types.QueryGetCoordinatorByAddressResponse{CoordinatorByAddress: msgs[1]}, - }, - { - desc: "should prevent querying non existing coordinator by address", - request: &types.QueryGetCoordinatorByAddressRequest{Address: "missing"}, - err: status.Error(codes.NotFound, "not found"), - }, - { - desc: "should prevent querying with invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.ProfileKeeper.CoordinatorByAddress(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.Equal(t, tc.response, response) - } - }) - } -} diff --git a/x/profile/keeper/grpc_coordinator_test.go b/x/profile/keeper/grpc_coordinator_test.go deleted file mode 100644 index 3e6e8b40..00000000 --- a/x/profile/keeper/grpc_coordinator_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -func TestCoordinatorQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNCoordinator(tk.ProfileKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetCoordinatorRequest - response *types.QueryGetCoordinatorResponse - err error - }{ - { - desc: "should allow querying first coordinator", - request: &types.QueryGetCoordinatorRequest{CoordinatorID: msgs[0].CoordinatorID}, - response: &types.QueryGetCoordinatorResponse{Coordinator: msgs[0]}, - }, - { - desc: "should allow querying second coordinator", - request: &types.QueryGetCoordinatorRequest{CoordinatorID: msgs[1].CoordinatorID}, - response: &types.QueryGetCoordinatorResponse{Coordinator: msgs[1]}, - }, - { - desc: "should prevent querying non existing coordinator", - request: &types.QueryGetCoordinatorRequest{CoordinatorID: uint64(len(msgs))}, - err: status.Error(codes.NotFound, "not found"), - }, - { - desc: "should prevent querying with invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.ProfileKeeper.Coordinator(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestCoordinatorQueryPaginated(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNCoordinator(tk.ProfileKeeper, ctx, 5) - - request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllCoordinatorRequest { - return &types.QueryAllCoordinatorRequest{ - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("should allow querying coordinators by offsets", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProfileKeeper.CoordinatorAll(wctx, request(nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Coordinator), step) - require.Subset(t, msgs, resp.Coordinator) - } - }) - t.Run("should allow querying coordinators by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProfileKeeper.CoordinatorAll(wctx, request(next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Coordinator), step) - require.Subset(t, msgs, resp.Coordinator) - next = resp.Pagination.NextKey - } - }) - t.Run("should allow querying all coordinators", func(t *testing.T) { - resp, err := tk.ProfileKeeper.CoordinatorAll(wctx, request(nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.Coordinator) - }) - t.Run("should prevent querying with invalid request", func(t *testing.T) { - _, err := tk.ProfileKeeper.CoordinatorAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} diff --git a/x/profile/keeper/grpc_validator.go b/x/profile/keeper/grpc_validator.go deleted file mode 100644 index ceae4f3a..00000000 --- a/x/profile/keeper/grpc_validator.go +++ /dev/null @@ -1,57 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/profile/types" -) - -func (k Keeper) ValidatorAll(c context.Context, req *types.QueryAllValidatorRequest) (*types.QueryAllValidatorResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var validators []types.Validator - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - validatorStore := prefix.NewStore(store, types.KeyPrefix(types.ValidatorKeyPrefix)) - - pageRes, err := query.Paginate(validatorStore, req.Pagination, func(key []byte, value []byte) error { - var validator types.Validator - if err := k.cdc.Unmarshal(value, &validator); err != nil { - return err - } - - validators = append(validators, validator) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllValidatorResponse{Validator: validators, Pagination: pageRes}, nil -} - -func (k Keeper) Validator(c context.Context, req *types.QueryGetValidatorRequest) (*types.QueryGetValidatorResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetValidator( - ctx, - req.Address, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetValidatorResponse{Validator: val}, nil -} diff --git a/x/profile/keeper/grpc_validator_by_operator_address.go b/x/profile/keeper/grpc_validator_by_operator_address.go deleted file mode 100644 index afa399ed..00000000 --- a/x/profile/keeper/grpc_validator_by_operator_address.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/profile/types" -) - -func (k Keeper) ValidatorByOperatorAddress(c context.Context, req *types.QueryGetValidatorByOperatorAddressRequest) ( - *types.QueryGetValidatorByOperatorAddressResponse, - error, -) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetValidatorByOperatorAddress(ctx, req.OperatorAddress) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetValidatorByOperatorAddressResponse{ValidatorByOperatorAddress: val}, nil -} diff --git a/x/profile/keeper/grpc_validator_by_operator_address_test.go b/x/profile/keeper/grpc_validator_by_operator_address_test.go deleted file mode 100644 index 64be8add..00000000 --- a/x/profile/keeper/grpc_validator_by_operator_address_test.go +++ /dev/null @@ -1,66 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" -) - -func TestValidatorByOperatorAddressQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNValidatorByOperatorAddress(tk.ProfileKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetValidatorByOperatorAddressRequest - response *types.QueryGetValidatorByOperatorAddressResponse - err error - }{ - { - desc: "should allow querying first validator by operator address", - request: &types.QueryGetValidatorByOperatorAddressRequest{ - OperatorAddress: msgs[0].OperatorAddress, - }, - response: &types.QueryGetValidatorByOperatorAddressResponse{ValidatorByOperatorAddress: msgs[0]}, - }, - { - desc: "should allow querying second validator by operator address", - request: &types.QueryGetValidatorByOperatorAddressRequest{ - OperatorAddress: msgs[1].OperatorAddress, - }, - response: &types.QueryGetValidatorByOperatorAddressResponse{ValidatorByOperatorAddress: msgs[1]}, - }, - { - desc: "should prevent querying non existing validator by operator address", - request: &types.QueryGetValidatorByOperatorAddressRequest{ - OperatorAddress: sample.Address(r), - }, - err: status.Error(codes.NotFound, "not found"), - }, - { - desc: "should prevent querying with invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.ProfileKeeper.ValidatorByOperatorAddress(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, - nullify.Fill(tc.response), - nullify.Fill(response), - ) - } - }) - } -} diff --git a/x/profile/keeper/grpc_validator_test.go b/x/profile/keeper/grpc_validator_test.go deleted file mode 100644 index baadf6bc..00000000 --- a/x/profile/keeper/grpc_validator_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package keeper_test - -import ( - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -func TestValidatorQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNValidator(tk.ProfileKeeper, ctx, 2) - for _, tc := range []struct { - desc string - request *types.QueryGetValidatorRequest - response *types.QueryGetValidatorResponse - err error - }{ - { - desc: "should allow querying first validator", - request: &types.QueryGetValidatorRequest{ - Address: msgs[0].Address, - }, - response: &types.QueryGetValidatorResponse{Validator: msgs[0]}, - }, - { - desc: "should allow querying second validator", - request: &types.QueryGetValidatorRequest{ - Address: msgs[1].Address, - }, - response: &types.QueryGetValidatorResponse{Validator: msgs[1]}, - }, - { - desc: "should prevent querying non existing validator", - request: &types.QueryGetValidatorRequest{ - Address: strconv.Itoa(100000), - }, - err: status.Error(codes.NotFound, "not found"), - }, - { - desc: "should prevent querying with invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.ProfileKeeper.Validator(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestValidatorQueryPaginated(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNValidator(tk.ProfileKeeper, ctx, 5) - - request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllValidatorRequest { - return &types.QueryAllValidatorRequest{ - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("should allow querying validators by offsets", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProfileKeeper.ValidatorAll(wctx, request(nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Validator), step) - require.Subset(t, msgs, resp.Validator) - } - }) - t.Run("should allow querying validators by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProfileKeeper.ValidatorAll(wctx, request(next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Validator), step) - require.Subset(t, msgs, resp.Validator) - next = resp.Pagination.NextKey - } - }) - t.Run("should allow querying all validators", func(t *testing.T) { - resp, err := tk.ProfileKeeper.ValidatorAll(wctx, request(nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.Validator) - }) - t.Run("should prevent querying with invalid request", func(t *testing.T) { - _, err := tk.ProfileKeeper.ValidatorAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} diff --git a/x/profile/keeper/invariants.go b/x/profile/keeper/invariants.go index 64b0ab1d..764dca56 100644 --- a/x/profile/keeper/invariants.go +++ b/x/profile/keeper/invariants.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/profile/types" + "github.com/ignite/network/x/profile/types" ) const coordinatorIDNotFoundRoute = "coordinator-id-not-found" @@ -20,13 +20,15 @@ func RegisterInvariants(ir sdk.InvariantRegistry, k Keeper) { // the `CoordinateByAddress` is associated with a coordinator func CoordinatorAddrNotFoundInvariant(k Keeper) sdk.Invariant { return func(ctx sdk.Context) (string, bool) { - all := k.GetAllCoordinatorByAddress(ctx) - for _, coordByAddr := range all { - _, found := k.GetCoordinator(ctx, coordByAddr.CoordinatorID) - if !found { + all, err := k.CoordinatorByAddresses(ctx) + if err != nil { + return sdk.FormatInvariant(types.ModuleName, coordinatorIDNotFoundRoute, err.Error()), true + } + for _, coordinatorByAddres := range all { + if _, err := k.GetCoordinator(ctx, coordinatorByAddres.CoordinatorID); err != nil { return sdk.FormatInvariant( types.ModuleName, coordinatorIDNotFoundRoute, - fmt.Sprintf("%s: %d", types.ErrCoordAddressNotFound, coordByAddr.CoordinatorID), + fmt.Sprintf("%s: %d", err, coordinatorByAddres.CoordinatorID), ), true } } diff --git a/x/profile/keeper/invariants_test.go b/x/profile/keeper/invariants_test.go index bb9c7c86..77bf683f 100644 --- a/x/profile/keeper/invariants_test.go +++ b/x/profile/keeper/invariants_test.go @@ -4,31 +4,38 @@ import ( "testing" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" + + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" ) func TestCoordinatorAddrNotFoundInvariant(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) t.Run("should not break with valid state", func(t *testing.T) { - coord := sample.Coordinator(r, sample.Address(r)) - coord.CoordinatorID = tk.ProfileKeeper.AppendCoordinator(ctx, coord) - tk.ProfileKeeper.SetCoordinatorByAddress(ctx, types.CoordinatorByAddress{ - Address: sample.Address(r), - CoordinatorID: coord.CoordinatorID, + var err error + coordinator := sample.Coordinator(r, sample.Address(r)) + coordinator.CoordinatorID, err = tk.ProfileKeeper.AppendCoordinator(ctx, coordinator) + require.NoError(t, err) + acc := sample.AccAddress(r) + err = tk.ProfileKeeper.CoordinatorByAddress.Set(ctx, acc, types.CoordinatorByAddress{ + Address: acc.String(), + CoordinatorID: coordinator.CoordinatorID, }) - msg, broken := keeper.CoordinatorAddrNotFoundInvariant(*tk.ProfileKeeper)(ctx) + require.NoError(t, err) + msg, broken := keeper.CoordinatorAddrNotFoundInvariant(tk.ProfileKeeper)(ctx) require.False(t, broken, msg) }) t.Run("should not break with coordinator not found from coordinator by address", func(t *testing.T) { - tk.ProfileKeeper.SetCoordinatorByAddress(ctx, types.CoordinatorByAddress{ - Address: sample.Address(r), + acc := sample.AccAddress(r) + err := tk.ProfileKeeper.CoordinatorByAddress.Set(ctx, acc, types.CoordinatorByAddress{ + Address: acc.String(), CoordinatorID: 10, }) - msg, broken := keeper.CoordinatorAddrNotFoundInvariant(*tk.ProfileKeeper)(ctx) + require.NoError(t, err) + msg, broken := keeper.CoordinatorAddrNotFoundInvariant(tk.ProfileKeeper)(ctx) require.True(t, broken, msg) }) } diff --git a/x/profile/keeper/keeper.go b/x/profile/keeper/keeper.go index 786dfd68..8bfab8c7 100644 --- a/x/profile/keeper/keeper.go +++ b/x/profile/keeper/keeper.go @@ -3,34 +3,86 @@ package keeper import ( "fmt" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + "cosmossdk.io/core/store" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/profile/types" + "github.com/ignite/network/x/profile/types" ) type ( Keeper struct { - cdc codec.BinaryCodec - storeKey storetypes.StoreKey - memKey storetypes.StoreKey + cdc codec.BinaryCodec + addressCodec address.Codec + storeService store.KVStoreService + logger log.Logger + + // the address capable of executing a MsgUpdateParams message. + // Typically, this should be the x/gov module account. + authority string + + Schema collections.Schema + Params collections.Item[types.Params] + CoordinatorSeq collections.Sequence + Coordinator collections.Map[uint64, types.Coordinator] + CoordinatorByAddress collections.Map[sdk.AccAddress, types.CoordinatorByAddress] + Validator collections.Map[string, types.Validator] + ValidatorByOperatorAddress collections.Map[string, types.ValidatorByOperatorAddress] + // this line is used by starport scaffolding # collection/type } ) func NewKeeper( cdc codec.BinaryCodec, - storeKey, - memKey storetypes.StoreKey, -) *Keeper { - return &Keeper{ - cdc: cdc, - storeKey: storeKey, - memKey: memKey, + addressCodec address.Codec, + storeService store.KVStoreService, + logger log.Logger, + authority string, +) Keeper { + if _, err := addressCodec.StringToBytes(authority); err != nil { + panic(fmt.Sprintf("invalid authority address %s: %s", authority, err)) + } + + sb := collections.NewSchemaBuilder(storeService) + + k := Keeper{ + cdc: cdc, + addressCodec: addressCodec, + storeService: storeService, + authority: authority, + logger: logger, + Params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + CoordinatorSeq: collections.NewSequence(sb, types.CoordinatorCountKey, "coordinator_seq"), + Coordinator: collections.NewMap(sb, types.CoordinatorKey, "coordinator", collections.Uint64Key, codec.CollValue[types.Coordinator](cdc)), + CoordinatorByAddress: collections.NewMap(sb, types.CoordinatorByAddressKey, "coordinator_by_address", sdk.LengthPrefixedAddressKey(sdk.AccAddressKey), codec.CollValue[types.CoordinatorByAddress](cdc)), + Validator: collections.NewMap(sb, types.ValidatorKey, "validator", collections.StringKey, codec.CollValue[types.Validator](cdc)), + ValidatorByOperatorAddress: collections.NewMap(sb, types.ValidatorByOperatorAddressKey, "validator_by_operator_address", collections.StringKey, codec.CollValue[types.ValidatorByOperatorAddress](cdc)), + // this line is used by starport scaffolding # collection/instantiate + } + + schema, err := sb.Build() + if err != nil { + panic(err) } + k.Schema = schema + + return k +} + +// GetAuthority returns the module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger() log.Logger { + return k.logger.With("module", fmt.Sprintf("x/%s", types.ModuleName)) } -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +// AddressCodec returns the address codec. +func (k Keeper) AddressCodec() address.Codec { + return k.addressCodec } diff --git a/x/profile/keeper/msg_add_validator_operator_address.go b/x/profile/keeper/msg_add_validator_operator_address.go deleted file mode 100644 index 96a892ef..00000000 --- a/x/profile/keeper/msg_add_validator_operator_address.go +++ /dev/null @@ -1,55 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/profile/types" -) - -func (k msgServer) AddValidatorOperatorAddress( - goCtx context.Context, - msg *types.MsgAddValidatorOperatorAddress, -) (*types.MsgAddValidatorOperatorAddressResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - valAddr := msg.ValidatorAddress - opAddr := msg.OperatorAddress - - validator := types.Validator{ - Address: valAddr, - OperatorAddresses: []string{opAddr}, - Description: types.ValidatorDescription{}, - } - - // get the current validator to eventually overwrite description and add opAddr - validatorStore, valFound := k.GetValidator(ctx, valAddr) - if valFound { - validator.Description = validatorStore.Description - validator = validatorStore.AddValidatorOperatorAddress(opAddr) - } - - // store validator information - k.SetValidator(ctx, validator) - k.SetValidatorByOperatorAddress(ctx, types.ValidatorByOperatorAddress{ - OperatorAddress: opAddr, - ValidatorAddress: valAddr, - }) - - var err error - if valFound { - err = ctx.EventManager().EmitTypedEvent( - &types.EventValidatorOperatorAddressesUpdated{ - Address: validator.Address, - OperatorAddresses: validator.OperatorAddresses, - }) - } else { - err = ctx.EventManager().EmitTypedEvent( - &types.EventValidatorCreated{ - Address: validator.Address, - OperatorAddresses: validator.OperatorAddresses, - }) - } - - return &types.MsgAddValidatorOperatorAddressResponse{}, err -} diff --git a/x/profile/keeper/msg_add_validator_operator_address_test.go b/x/profile/keeper/msg_add_validator_operator_address_test.go deleted file mode 100644 index d13feacb..00000000 --- a/x/profile/keeper/msg_add_validator_operator_address_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgAddValidatorOperatorAddress(t *testing.T) { - var ( - ctx, tk, ts = testkeeper.NewTestSetup(t) - wCtx = sdk.WrapSDKContext(ctx) - valAddr = sample.Address(r) - opAddr = sample.Address(r) - ) - - tk.ProfileKeeper.SetValidator(ctx, types.Validator{ - Address: valAddr, - Description: types.ValidatorDescription{}, - OperatorAddresses: []string{opAddr}, - }) - - tests := []struct { - name string - msg *types.MsgAddValidatorOperatorAddress - newVal bool - }{ - { - name: "should allow associating a new operator address to a validator", - msg: &types.MsgAddValidatorOperatorAddress{ - ValidatorAddress: valAddr, - OperatorAddress: sample.Address(r), - }, - }, - { - name: "should allow associating the same address", - msg: &types.MsgAddValidatorOperatorAddress{ - ValidatorAddress: valAddr, - OperatorAddress: valAddr, - }, - }, - { - name: "should allow creating a new validator if it doesn't exist", - msg: &types.MsgAddValidatorOperatorAddress{ - ValidatorAddress: sample.Address(r), - OperatorAddress: sample.Address(r), - }, - newVal: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - _, err := ts.ProfileSrv.AddValidatorOperatorAddress(wCtx, tt.msg) - require.NoError(t, err) - - validator, found := tk.ProfileKeeper.GetValidator(ctx, tt.msg.ValidatorAddress) - require.True(t, found, "validator was not saved") - require.Equal(t, tt.msg.ValidatorAddress, validator.Address) - require.True(t, validator.HasOperatorAddress(tt.msg.OperatorAddress)) - - // check that original address still exists if we appended to existing validator - if !tt.newVal { - require.True(t, validator.HasOperatorAddress(opAddr)) - } - - valByOpAddr, found := tk.ProfileKeeper.GetValidatorByOperatorAddress(ctx, tt.msg.OperatorAddress) - require.True(t, found, "validator by operator address was not saved") - require.Equal(t, tt.msg.ValidatorAddress, valByOpAddr.ValidatorAddress) - require.Equal(t, tt.msg.OperatorAddress, valByOpAddr.OperatorAddress) - }) - } -} diff --git a/x/profile/keeper/msg_create_coordinator.go b/x/profile/keeper/msg_create_coordinator.go deleted file mode 100644 index 20b739db..00000000 --- a/x/profile/keeper/msg_create_coordinator.go +++ /dev/null @@ -1,44 +0,0 @@ -package keeper - -import ( - "context" - "fmt" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/profile/types" -) - -func (k msgServer) CreateCoordinator( - goCtx context.Context, - msg *types.MsgCreateCoordinator, -) (*types.MsgCreateCoordinatorResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - // Check if the coordinator address is already in the store - coordByAddr, found := k.getCoordinatorByAddress(ctx, msg.Address) - if found { - return &types.MsgCreateCoordinatorResponse{}, - sdkerrors.Wrap(types.ErrCoordAlreadyExist, - fmt.Sprintf("coordinatorId: %d", coordByAddr.CoordinatorID)) - } - - coordID := k.AppendCoordinator(ctx, types.Coordinator{ - Address: msg.Address, - Description: msg.Description, - Active: true, - }) - k.SetCoordinatorByAddress(ctx, types.CoordinatorByAddress{ - Address: msg.Address, - CoordinatorID: coordID, - }) - - return &types.MsgCreateCoordinatorResponse{ - CoordinatorID: coordID, - }, ctx.EventManager().EmitTypedEvent( - &types.EventCoordinatorCreated{ - CoordinatorID: coordID, - Address: msg.Address, - }) -} diff --git a/x/profile/keeper/msg_create_coordinator_test.go b/x/profile/keeper/msg_create_coordinator_test.go deleted file mode 100644 index 699b4243..00000000 --- a/x/profile/keeper/msg_create_coordinator_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgCreateCoordinator(t *testing.T) { - var ( - msg1 = sample.MsgCreateCoordinator(sample.Address(r)) - msg2 = sample.MsgCreateCoordinator(sample.Address(r)) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) - ) - tests := []struct { - name string - msg types.MsgCreateCoordinator - wantId uint64 - err error - }{ - { - name: "should allow creating a coordinator", - msg: msg1, - wantId: 0, - }, - { - name: "should allow creating a second coordinator", - msg: msg2, - wantId: 1, - }, - { - name: "should prevent creating with an existing coordinator address", - msg: msg2, - err: types.ErrCoordAlreadyExist, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := ts.ProfileSrv.CreateCoordinator(ctx, &tt.msg) - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - coordByAddr, err := tk.ProfileKeeper.GetCoordinatorByAddress(sdkCtx, tt.msg.Address) - require.NoError(t, err) - require.EqualValues(t, tt.wantId, coordByAddr.CoordinatorID) - require.EqualValues(t, tt.wantId, got.CoordinatorID) - - coord, found := tk.ProfileKeeper.GetCoordinator(sdkCtx, coordByAddr.CoordinatorID) - require.True(t, found, "coordinator id not found") - require.EqualValues(t, tt.msg.Address, coord.Address) - require.EqualValues(t, tt.msg.Description, coord.Description) - require.EqualValues(t, coordByAddr.CoordinatorID, coord.CoordinatorID) - require.EqualValues(t, true, coord.Active) - }) - } -} diff --git a/x/profile/keeper/msg_disable_coordinator.go b/x/profile/keeper/msg_disable_coordinator.go deleted file mode 100644 index 1eebd831..00000000 --- a/x/profile/keeper/msg_disable_coordinator.go +++ /dev/null @@ -1,52 +0,0 @@ -package keeper - -import ( - "context" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/profile/types" - - ignterrors "github.com/ignite/modules/pkg/errors" -) - -func (k msgServer) DisableCoordinator( - goCtx context.Context, - msg *types.MsgDisableCoordinator, -) (*types.MsgDisableCoordinatorResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - // Check if the coordinator address is already in the store - coordByAddress, found := k.getCoordinatorByAddress(ctx, msg.Address) - if !found { - return &types.MsgDisableCoordinatorResponse{}, - sdkerrors.Wrapf(types.ErrCoordAddressNotFound, "coordinator address %s not found", msg.Address) - } - - coord, found := k.GetCoordinator(ctx, coordByAddress.CoordinatorID) - if !found { - return &types.MsgDisableCoordinatorResponse{}, - ignterrors.Criticalf("a coordinator address is associated to a non-existent coordinator ID: %d", - coordByAddress.CoordinatorID) - } - - // Check if the coordinator is inactive - if !coord.Active { - return &types.MsgDisableCoordinatorResponse{}, - ignterrors.Criticalf("inactive coordinator address should not exist in store, ID: %d", - coordByAddress.CoordinatorID) - } - - // disable by setting to inactive and remove CoordByAddress - coord.Active = false - k.SetCoordinator(ctx, coord) - k.RemoveCoordinatorByAddress(ctx, msg.Address) - - return &types.MsgDisableCoordinatorResponse{ - CoordinatorID: coord.CoordinatorID, - }, ctx.EventManager().EmitTypedEvent( - &types.EventCoordinatorDisabled{ - CoordinatorID: coord.CoordinatorID, - Address: msg.Address, - }) -} diff --git a/x/profile/keeper/msg_disable_coordinator_test.go b/x/profile/keeper/msg_disable_coordinator_test.go deleted file mode 100644 index 687061b3..00000000 --- a/x/profile/keeper/msg_disable_coordinator_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgDisableCoordinator(t *testing.T) { - var ( - addr = sample.Address(r) - msgCoord = sample.MsgCreateCoordinator(sample.Address(r)) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - wCtx = sdk.WrapSDKContext(sdkCtx) - ) - _, err := ts.ProfileSrv.CreateCoordinator(wCtx, &msgCoord) - require.NoError(t, err) - - tests := []struct { - name string - msg types.MsgDisableCoordinator - err error - }{ - { - name: "should prevent disabling a non existing coordinator", - msg: types.MsgDisableCoordinator{Address: addr}, - err: types.ErrCoordAddressNotFound, - }, - { - name: "should allow disabling an active coordinator", - msg: types.MsgDisableCoordinator{Address: msgCoord.Address}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := ts.ProfileSrv.DisableCoordinator(wCtx, &tt.msg) - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - _, err = tk.ProfileKeeper.GetCoordinatorByAddress(sdkCtx, tt.msg.Address) - require.ErrorIs(t, err, types.ErrCoordAddressNotFound) - - coord, found := tk.ProfileKeeper.GetCoordinator(sdkCtx, got.CoordinatorID) - require.True(t, found) - require.EqualValues(t, false, coord.Active) - }) - } -} diff --git a/x/profile/keeper/msg.go b/x/profile/keeper/msg_server.go similarity index 86% rename from x/profile/keeper/msg.go rename to x/profile/keeper/msg_server.go index f2b66cc4..6869467c 100644 --- a/x/profile/keeper/msg.go +++ b/x/profile/keeper/msg_server.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/tendermint/spn/x/profile/types" + "github.com/ignite/network/x/profile/types" ) type msgServer struct { diff --git a/x/profile/keeper/msg_server_coordinator.go b/x/profile/keeper/msg_server_coordinator.go new file mode 100644 index 00000000..84acdef7 --- /dev/null +++ b/x/profile/keeper/msg_server_coordinator.go @@ -0,0 +1,209 @@ +package keeper + +import ( + "context" + "fmt" + + "cosmossdk.io/collections" + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) CreateCoordinator(ctx context.Context, msg *types.MsgCreateCoordinator) (*types.MsgCreateCoordinatorResponse, error) { + address, err := k.addressCodec.StringToBytes(msg.Address) + if err != nil { + return nil, errorsmod.Wrap(err, "invalid address") + } + + if coordinator, err := k.CoordinatorByAddress.Get(ctx, address); err != nil { + return nil, errorsmod.Wrapf(types.ErrCoordinatorAlreadyExist, "coordinatorID: %d", coordinator.CoordinatorID) + } + + nextID, err := k.CoordinatorSeq.Next(ctx) + if err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "failed to get next id") + } + + coordinator := types.Coordinator{ + CoordinatorID: nextID, + Address: msg.Address, + Description: msg.Description, + Active: true, + } + + if err = k.Coordinator.Set(ctx, nextID, coordinator); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to set coordinator") + } + + if err = k.CoordinatorByAddress.Set(ctx, address, types.CoordinatorByAddress{ + Address: msg.Address, + CoordinatorID: nextID, + }); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to set coordinator by address") + } + + return &types.MsgCreateCoordinatorResponse{CoordinatorID: nextID}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent( + &types.EventCoordinatorCreated{ + CoordinatorID: nextID, + Address: msg.Address, + }) +} + +func (k msgServer) UpdateCoordinatorDescription(ctx context.Context, msg *types.MsgUpdateCoordinatorDescription) (*types.MsgUpdateCoordinatorDescriptionResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + address, err := k.addressCodec.StringToBytes(msg.Address) + if err != nil { + return nil, errorsmod.Wrap(err, "invalid address") + } + + coordByAddress, err := k.CoordinatorByAddress.Get(ctx, address) + if !errors.IsOf(err, collections.ErrNotFound) { + return nil, errorsmod.Wrapf(types.ErrCoordinatorAddressNotFound, "coordinator address %s not found", msg.Address) + } + + coordinator, err := k.Coordinator.Get(ctx, coordByAddress.CoordinatorID) + if err != nil { + if errors.IsOf(err, collections.ErrNotFound) { + return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, fmt.Sprintf("key %d doesn't exist", 10)) // TODO + } + + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to get coordinator") + } + + // Checks if the msg address is the same as the current owner + if msg.Address != coordinator.Address { + return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "incorrect owner") + } + + if len(msg.Description.Identity) > 0 { + coordinator.Description.Identity = msg.Description.Identity + } + if len(msg.Description.Website) > 0 { + coordinator.Description.Website = msg.Description.Website + } + if len(msg.Description.Details) > 0 { + coordinator.Description.Details = msg.Description.Details + } + + if err := k.Coordinator.Set(ctx, coordByAddress.CoordinatorID, coordinator); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to update coordinator") + } + + return &types.MsgUpdateCoordinatorDescriptionResponse{}, nil +} + +func (k msgServer) UpdateCoordinatorAddress(ctx context.Context, msg *types.MsgUpdateCoordinatorAddress) (*types.MsgUpdateCoordinatorAddressResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + address, err := k.addressCodec.StringToBytes(msg.Address) + if err != nil { + return nil, errorsmod.Wrap(err, "invalid address") + } + coordByAddress, err := k.CoordinatorByAddress.Get(ctx, address) + if !errors.IsOf(err, collections.ErrNotFound) { + return nil, errorsmod.Wrapf(types.ErrCoordinatorAddressNotFound, "coordinator address %s not found", msg.Address) + } + + newAddress, err := k.addressCodec.StringToBytes(msg.NewAddress) + if err != nil { + return nil, errorsmod.Wrap(err, "invalid new address") + } + if newCoord, err := k.CoordinatorByAddress.Get(ctx, newAddress); err != nil { + return nil, errorsmod.Wrapf(types.ErrCoordinatorAlreadyExist, "new address already have a coordinator: %d", newCoord.CoordinatorID) + } + + coordinator, err := k.Coordinator.Get(ctx, coordByAddress.CoordinatorID) + if err != nil { + if errors.IsOf(err, collections.ErrNotFound) { + return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, fmt.Sprintf("key %d doesn't exist", 10)) // TODO + } + + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to get coordinator") + } + + // Check if the coordinator is inactive + if !coordinator.Active { + return nil, errors.Criticalf("inactive coordinator address should not exist in store, ID: %d", coordByAddress.CoordinatorID) + } + + coordinator.Address = msg.NewAddress + + // Remove the old coordinator by addrless and create a new one + if err = k.CoordinatorByAddress.Remove(ctx, address); err != nil { + return nil, errorsmod.Wrapf(sdkerrors.ErrLogic, "failed to remove coordinator by address %s", msg.Address) + } + if err = k.CoordinatorByAddress.Set(ctx, newAddress, types.CoordinatorByAddress{ + Address: msg.NewAddress, + CoordinatorID: coordByAddress.CoordinatorID, + }); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to set coordinator by address") + } + if err := k.Coordinator.Set(ctx, coordByAddress.CoordinatorID, coordinator); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to update coordinator address") + } + + return &types.MsgUpdateCoordinatorAddressResponse{}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent( + &types.EventCoordinatorAddressUpdated{ + CoordinatorID: coordByAddress.CoordinatorID, + NewAddress: msg.NewAddress, + }) +} + +func (k msgServer) DisableCoordinator(ctx context.Context, msg *types.MsgDisableCoordinator) (*types.MsgDisableCoordinatorResponse, error) { + address, err := k.addressCodec.StringToBytes(msg.Address) + if err != nil { + return nil, errorsmod.Wrap(err, "invalid address") + } + + coordByAddress, err := k.CoordinatorByAddress.Get(ctx, address) + if !errors.IsOf(err, collections.ErrNotFound) { + return nil, errorsmod.Wrapf(types.ErrCoordinatorAddressNotFound, "coordinator address %s not found", msg.Address) + } + + // Checks that the element exists + coordinator, err := k.Coordinator.Get(ctx, coordByAddress.CoordinatorID) + if err != nil { + if errors.IsOf(err, collections.ErrNotFound) { + return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, fmt.Sprintf("key %d doesn't exist", coordByAddress.CoordinatorID)) + } + + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to get coordinator") + } + + // Checks if the msg address is the same as the current owner + if msg.Address != coordinator.Address { + return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "incorrect owner") + } + + // Check if the coordinator is inactive + if !coordinator.Active { + return nil, + errors.Criticalf("inactive coordinator address should not exist in store, ID: %d", + coordByAddress.CoordinatorID) + } + + // disable by setting to inactive and remove CoordByAddress + coordinator.Active = false + if err := k.Coordinator.Set(ctx, coordinator.CoordinatorID, coordinator); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to set coordinator") + } + + if err := k.CoordinatorByAddress.Remove(ctx, address); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to delete coordinator") + } + + return &types.MsgDisableCoordinatorResponse{}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent( + &types.EventCoordinatorDisabled{ + CoordinatorID: coordByAddress.CoordinatorID, + Address: msg.Address, + }) +} diff --git a/x/profile/keeper/msg_server_coordinator_test.go b/x/profile/keeper/msg_server_coordinator_test.go new file mode 100644 index 00000000..328c5d89 --- /dev/null +++ b/x/profile/keeper/msg_server_coordinator_test.go @@ -0,0 +1,130 @@ +package keeper_test + +import ( + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" +) + +func TestCoordinatorMsgServerCreate(t *testing.T) { + k, ctx, addressCodec := keepertest.ProfileKeeper(t) + srv := keeper.NewMsgServerImpl(k) + + address, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + for i := 0; i < 5; i++ { + resp, err := srv.CreateCoordinator(ctx, &types.MsgCreateCoordinator{Address: address}) + require.NoError(t, err) + require.Equal(t, i, int(resp.CoordinatorID)) + } +} + +func TestCoordinatorMsgServerUpdate(t *testing.T) { + k, ctx, addressCodec := keepertest.ProfileKeeper(t) + srv := keeper.NewMsgServerImpl(k) + + address, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + unauthorizedAddr, err := addressCodec.BytesToString([]byte("unauthorizedAddr___________")) + require.NoError(t, err) + + _, err = srv.CreateCoordinator(ctx, &types.MsgCreateCoordinator{Address: address}) + require.NoError(t, err) + + tests := []struct { + desc string + request *types.MsgUpdateCoordinatorDescription + err error + }{ + { + desc: "invalid address", + request: &types.MsgUpdateCoordinatorDescription{Address: "invalid"}, + err: sdkerrors.ErrInvalidAddress, + }, + { + desc: "unauthorized", + request: &types.MsgUpdateCoordinatorDescription{Address: unauthorizedAddr}, + err: sdkerrors.ErrUnauthorized, + }, + { + desc: "key not found", + request: &types.MsgUpdateCoordinatorDescription{Address: address, Description: types.CoordinatorDescription{ + Identity: "id", + Website: "wb", + Details: "dt", + }}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "completed", + request: &types.MsgUpdateCoordinatorDescription{Address: address}, + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + _, err = srv.UpdateCoordinatorDescription(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestCoordinatorMsgServerDelete(t *testing.T) { + k, ctx, addressCodec := keepertest.ProfileKeeper(t) + srv := keeper.NewMsgServerImpl(k) + + address, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + unauthorizedAddr, err := addressCodec.BytesToString([]byte("unauthorizedAddr___________")) + require.NoError(t, err) + + _, err = srv.CreateCoordinator(ctx, &types.MsgCreateCoordinator{Address: address}) + require.NoError(t, err) + + tests := []struct { + desc string + request *types.MsgDisableCoordinator + err error + }{ + { + desc: "invalid address", + request: &types.MsgDisableCoordinator{Address: "invalid"}, + err: sdkerrors.ErrInvalidAddress, + }, + { + desc: "unauthorized", + request: &types.MsgDisableCoordinator{Address: unauthorizedAddr}, + err: sdkerrors.ErrUnauthorized, + }, + { + desc: "key not found", + request: &types.MsgDisableCoordinator{Address: address}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "completed", + request: &types.MsgDisableCoordinator{Address: address}, + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + _, err = srv.DisableCoordinator(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/profile/keeper/msg_server_validator.go b/x/profile/keeper/msg_server_validator.go new file mode 100644 index 00000000..5c9d1a13 --- /dev/null +++ b/x/profile/keeper/msg_server_validator.go @@ -0,0 +1,118 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/collections" + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) UpdateValidatorDescription(ctx context.Context, msg *types.MsgUpdateValidatorDescription) (*types.MsgUpdateValidatorDescriptionResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + if _, err := k.addressCodec.StringToBytes(msg.Address); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + // Check if the validator address is already in the store + validator, err := k.Validator.Get(ctx, msg.Address) + if errors.IsOf(err, collections.ErrNotFound) { + validator = types.Validator{ + Address: msg.Address, + Description: types.ValidatorDescription{}, + } + } else if err != nil { + return nil, err + } + + if len(msg.Description.Identity) > 0 { + validator.Description.Identity = msg.Description.Identity + } + if len(msg.Description.Website) > 0 { + validator.Description.Website = msg.Description.Website + } + if len(msg.Description.Details) > 0 { + validator.Description.Details = msg.Description.Details + } + if len(msg.Description.Moniker) > 0 { + validator.Description.Moniker = msg.Description.Moniker + } + if len(msg.Description.SecurityContact) > 0 { + validator.Description.SecurityContact = msg.Description.SecurityContact + } + + if errors.IsOf(err, collections.ErrNotFound) { + err = sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent( + &types.EventValidatorCreated{ + Address: validator.Address, + OperatorAddresses: validator.OperatorAddresses, + }) + } + + if err := k.Validator.Set(ctx, validator.Address, validator); err != nil { + return nil, err + } + + return &types.MsgUpdateValidatorDescriptionResponse{}, nil +} + +func (k msgServer) AddValidatorOperatorAddress(ctx context.Context, msg *types.MsgAddValidatorOperatorAddress) (*types.MsgAddValidatorOperatorAddressResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + if _, err := k.addressCodec.StringToBytes(msg.ValidatorAddress); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + valAddr := msg.ValidatorAddress + opAddr := msg.OperatorAddress + + validator := types.Validator{ + Address: valAddr, + OperatorAddresses: []string{opAddr}, + Description: types.ValidatorDescription{}, + } + + // get the current validator to eventually overwrite description and add opAddr + validatorStore, err := k.Validator.Get(ctx, valAddr) + if !errors.IsOf(err, collections.ErrNotFound) { + validator.Description = validatorStore.Description + validator = validatorStore.AddValidatorOperatorAddress(opAddr) + } + + // store validator information + if err := k.Validator.Set(ctx, validator.Address, validator); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to set validator") + } + if err := k.ValidatorByOperatorAddress.Set(ctx, opAddr, types.ValidatorByOperatorAddress{ + OperatorAddress: opAddr, + ValidatorAddress: valAddr, + }); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "failed to set validator by operator") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + if !errors.IsOf(err, collections.ErrNotFound) { + err = sdkCtx.EventManager().EmitTypedEvent( + &types.EventValidatorOperatorAddressesUpdated{ + Address: validator.Address, + OperatorAddresses: validator.OperatorAddresses, + }) + } else { + err = sdkCtx.EventManager().EmitTypedEvent( + &types.EventValidatorCreated{ + Address: validator.Address, + OperatorAddresses: validator.OperatorAddresses, + }) + } + + return &types.MsgAddValidatorOperatorAddressResponse{}, nil +} diff --git a/x/profile/keeper/msg_update_coordinator_address.go b/x/profile/keeper/msg_update_coordinator_address.go deleted file mode 100644 index 25550b5f..00000000 --- a/x/profile/keeper/msg_update_coordinator_address.go +++ /dev/null @@ -1,65 +0,0 @@ -package keeper - -import ( - "context" - "fmt" - - sdkerrors "cosmossdk.io/errors" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/profile/types" - - ignterrors "github.com/ignite/modules/pkg/errors" -) - -func (k msgServer) UpdateCoordinatorAddress( - goCtx context.Context, - msg *types.MsgUpdateCoordinatorAddress, -) (*types.MsgUpdateCoordinatorAddressResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - coordByAddress, found := k.getCoordinatorByAddress(ctx, msg.Address) - if !found { - return &types.MsgUpdateCoordinatorAddressResponse{}, - sdkerrors.Wrap(types.ErrCoordAddressNotFound, msg.Address) - } - - // Check if the new coordinator address is already in the store - newCoordAddr, found := k.getCoordinatorByAddress(ctx, msg.NewAddress) - if found { - return &types.MsgUpdateCoordinatorAddressResponse{}, - sdkerrors.Wrap(types.ErrCoordAlreadyExist, - fmt.Sprintf("new address already have a coordinator: %d", newCoordAddr.CoordinatorID)) - } - - coord, found := k.GetCoordinator(ctx, coordByAddress.CoordinatorID) - if !found { - return &types.MsgUpdateCoordinatorAddressResponse{}, - ignterrors.Criticalf("a coordinator address is associated to a non-existent coordinator ID: %d", - coordByAddress.CoordinatorID) - } - - // Check if the coordinator is inactive - if !coord.Active { - return &types.MsgUpdateCoordinatorAddressResponse{}, - ignterrors.Criticalf("inactive coordinator address should not exist in store, ID: %d", - coordByAddress.CoordinatorID) - } - - coord.Address = msg.NewAddress - - // Remove the old coordinator by address and create a new one - k.RemoveCoordinatorByAddress(ctx, msg.Address) - k.SetCoordinatorByAddress(ctx, types.CoordinatorByAddress{ - Address: msg.NewAddress, - CoordinatorID: coord.CoordinatorID, - }) - k.SetCoordinator(ctx, coord) - - return &types.MsgUpdateCoordinatorAddressResponse{}, - ctx.EventManager().EmitTypedEvent( - &types.EventCoordinatorAddressUpdated{ - CoordinatorID: coord.CoordinatorID, - NewAddress: msg.NewAddress, - }) -} diff --git a/x/profile/keeper/msg_update_coordinator_address_test.go b/x/profile/keeper/msg_update_coordinator_address_test.go deleted file mode 100644 index 05ad4b12..00000000 --- a/x/profile/keeper/msg_update_coordinator_address_test.go +++ /dev/null @@ -1,88 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgUpdateCoordinatorAddress(t *testing.T) { - var ( - addr = sample.Address(r) - coord1 = sample.MsgCreateCoordinator(sample.Address(r)) - coord2 = sample.MsgCreateCoordinator(sample.Address(r)) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) - ) - _, err := ts.ProfileSrv.CreateCoordinator(ctx, &coord1) - require.NoError(t, err) - _, err = ts.ProfileSrv.CreateCoordinator(ctx, &coord2) - require.NoError(t, err) - - tests := []struct { - name string - msg types.MsgUpdateCoordinatorAddress - err error - }{ - { - name: "should prevent updating a non existing coordinator", - msg: types.MsgUpdateCoordinatorAddress{ - Address: addr, - NewAddress: addr, - }, - err: types.ErrCoordAddressNotFound, - }, { - name: "should prevent updating with an address already associated to a coordinator", - msg: types.MsgUpdateCoordinatorAddress{ - Address: coord1.Address, - NewAddress: coord2.Address, - }, - err: types.ErrCoordAlreadyExist, - }, { - name: "should allow updating coordinator address", - msg: types.MsgUpdateCoordinatorAddress{ - Address: coord1.Address, - NewAddress: addr, - }, - }, { - name: "should allow updating coordinator address a second time", - msg: types.MsgUpdateCoordinatorAddress{ - Address: coord2.Address, - NewAddress: coord1.Address, - }, - }, { - name: "should prevent updating from previous coordinator address", - msg: types.MsgUpdateCoordinatorAddress{ - Address: addr, - NewAddress: coord1.Address, - }, - err: types.ErrCoordAlreadyExist, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - _, err := ts.ProfileSrv.UpdateCoordinatorAddress(ctx, &tt.msg) - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - - _, err = tk.ProfileKeeper.GetCoordinatorByAddress(sdkCtx, tt.msg.Address) - require.ErrorIs(t, err, types.ErrCoordAddressNotFound, "old coordinator address was not removed") - - coordByAddr, err := tk.ProfileKeeper.GetCoordinatorByAddress(sdkCtx, tt.msg.NewAddress) - require.NoError(t, err, "coordinator by address not found") - require.EqualValues(t, tt.msg.NewAddress, coordByAddr.Address) - - coord, found := tk.ProfileKeeper.GetCoordinator(sdkCtx, coordByAddr.CoordinatorID) - require.True(t, found, "coordinator id not found") - require.EqualValues(t, tt.msg.NewAddress, coord.Address) - require.EqualValues(t, coordByAddr.CoordinatorID, coord.CoordinatorID) - }) - } -} diff --git a/x/profile/keeper/msg_update_coordinator_description.go b/x/profile/keeper/msg_update_coordinator_description.go deleted file mode 100644 index c4d9b6c7..00000000 --- a/x/profile/keeper/msg_update_coordinator_description.go +++ /dev/null @@ -1,53 +0,0 @@ -package keeper - -import ( - "context" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/profile/types" - - ignterrors "github.com/ignite/modules/pkg/errors" -) - -func (k msgServer) UpdateCoordinatorDescription( - goCtx context.Context, - msg *types.MsgUpdateCoordinatorDescription, -) (*types.MsgUpdateCoordinatorDescriptionResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - // Check if the coordinator address is already in the store - coordByAddress, found := k.getCoordinatorByAddress(ctx, msg.Address) - if !found { - return &types.MsgUpdateCoordinatorDescriptionResponse{}, - sdkerrors.Wrap(types.ErrCoordAddressNotFound, msg.Address) - } - - coord, found := k.GetCoordinator(ctx, coordByAddress.CoordinatorID) - if !found { - return &types.MsgUpdateCoordinatorDescriptionResponse{}, - ignterrors.Criticalf("a coordinator address is associated to a non-existent coordinator ID: %d", - coordByAddress.CoordinatorID) - } - - // Check if the coordinator is inactive - if !coord.Active { - return &types.MsgUpdateCoordinatorDescriptionResponse{}, - ignterrors.Criticalf("inactive coordinator address should not exist in store, ID: %d", - coordByAddress.CoordinatorID) - } - - if len(msg.Description.Identity) > 0 { - coord.Description.Identity = msg.Description.Identity - } - if len(msg.Description.Website) > 0 { - coord.Description.Website = msg.Description.Website - } - if len(msg.Description.Details) > 0 { - coord.Description.Details = msg.Description.Details - } - - k.SetCoordinator(ctx, coord) - - return &types.MsgUpdateCoordinatorDescriptionResponse{}, nil -} diff --git a/x/profile/keeper/msg_update_coordinator_description_test.go b/x/profile/keeper/msg_update_coordinator_description_test.go deleted file mode 100644 index 2b01d0a6..00000000 --- a/x/profile/keeper/msg_update_coordinator_description_test.go +++ /dev/null @@ -1,92 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgUpdateCoordinatorDescription(t *testing.T) { - var ( - addr = sample.Address(r) - msgCoord = sample.MsgCreateCoordinator(sample.Address(r)) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) - ) - _, err := ts.ProfileSrv.CreateCoordinator(ctx, &msgCoord) - require.NoError(t, err) - - tests := []struct { - name string - msg types.MsgUpdateCoordinatorDescription - err error - }{ - { - name: "should prevent updating description of non existing coordinator", - msg: sample.MsgUpdateCoordinatorDescription(addr), - err: types.ErrCoordAddressNotFound, - }, - { - name: "should allow updating one value of coordinator description", - msg: types.MsgUpdateCoordinatorDescription{ - Address: msgCoord.Address, - Description: types.CoordinatorDescription{ - Identity: "update", - }, - }, - }, - { - name: "should allow updating all values of coordinator description", - msg: sample.MsgUpdateCoordinatorDescription(msgCoord.Address), - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - var oldCoord types.Coordinator - var found bool - if tt.err == nil { - coordByAddr, err := tk.ProfileKeeper.GetCoordinatorByAddress(sdkCtx, tt.msg.Address) - require.NoError(t, err, "coordinator by address not found") - oldCoord, found = tk.ProfileKeeper.GetCoordinator(sdkCtx, coordByAddr.CoordinatorID) - require.True(t, found, "coordinator not found") - } - - _, err := ts.ProfileSrv.UpdateCoordinatorDescription(ctx, &tt.msg) - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - - coordByAddr, err := tk.ProfileKeeper.GetCoordinatorByAddress(sdkCtx, tt.msg.Address) - require.NoError(t, err, "coordinator by address not found") - coord, found := tk.ProfileKeeper.GetCoordinator(sdkCtx, coordByAddr.CoordinatorID) - require.True(t, found, "coordinator not found") - require.EqualValues(t, tt.msg.Address, coord.Address) - require.EqualValues(t, coordByAddr.CoordinatorID, coord.CoordinatorID) - - if len(tt.msg.Description.Identity) > 0 { - require.EqualValues(t, tt.msg.Description.Identity, coord.Description.Identity) - } else { - require.EqualValues(t, oldCoord.Description.Identity, coord.Description.Identity) - } - - if len(tt.msg.Description.Website) > 0 { - require.EqualValues(t, tt.msg.Description.Website, coord.Description.Website) - } else { - require.EqualValues(t, oldCoord.Description.Website, coord.Description.Website) - } - - if len(tt.msg.Description.Details) > 0 { - require.EqualValues(t, tt.msg.Description.Details, coord.Description.Details) - } else { - require.EqualValues(t, oldCoord.Description.Details, coord.Description.Details) - } - }) - } -} diff --git a/x/profile/keeper/msg_update_params.go b/x/profile/keeper/msg_update_params.go new file mode 100644 index 00000000..a5007f3f --- /dev/null +++ b/x/profile/keeper/msg_update_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + + "github.com/ignite/network/x/profile/types" +) + +func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if _, err := k.addressCodec.StringToBytes(req.Authority); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + if k.GetAuthority() != req.Authority { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) + } + + if err := req.Params.Validate(); err != nil { + return nil, err + } + + if err := k.Params.Set(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/profile/keeper/msg_update_params_test.go b/x/profile/keeper/msg_update_params_test.go new file mode 100644 index 00000000..88f6f42e --- /dev/null +++ b/x/profile/keeper/msg_update_params_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" +) + +func TestMsgUpdateParams(t *testing.T) { + k, ctx, _ := keepertest.ProfileKeeper(t) + ms := keeper.NewMsgServerImpl(k) + + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + // default params + testCases := []struct { + name string + input *types.MsgUpdateParams + expErr bool + expErrMsg string + }{ + { + name: "invalid authority", + input: &types.MsgUpdateParams{ + Authority: "invalid", + Params: params, + }, + expErr: true, + expErrMsg: "invalid authority", + }, + { + name: "send enabled param", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: types.Params{}, + }, + expErr: false, + }, + { + name: "all good", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: params, + }, + expErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, err := ms.UpdateParams(ctx, tc.input) + + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expErrMsg) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/profile/keeper/msg_update_validator_description.go b/x/profile/keeper/msg_update_validator_description.go deleted file mode 100644 index 0b0abf91..00000000 --- a/x/profile/keeper/msg_update_validator_description.go +++ /dev/null @@ -1,52 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/profile/types" -) - -func (k msgServer) UpdateValidatorDescription( - goCtx context.Context, - msg *types.MsgUpdateValidatorDescription, -) (*types.MsgUpdateValidatorDescriptionResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - // Check if the validator address is already in the store - validator, valfound := k.GetValidator(ctx, msg.Address) - if !valfound { - validator = types.Validator{ - Address: msg.Address, - Description: types.ValidatorDescription{}, - } - } - - if len(msg.Description.Identity) > 0 { - validator.Description.Identity = msg.Description.Identity - } - if len(msg.Description.Website) > 0 { - validator.Description.Website = msg.Description.Website - } - if len(msg.Description.Details) > 0 { - validator.Description.Details = msg.Description.Details - } - if len(msg.Description.Moniker) > 0 { - validator.Description.Moniker = msg.Description.Moniker - } - if len(msg.Description.SecurityContact) > 0 { - validator.Description.SecurityContact = msg.Description.SecurityContact - } - - k.SetValidator(ctx, validator) - var err error - if !valfound { - err = ctx.EventManager().EmitTypedEvent( - &types.EventValidatorCreated{ - Address: validator.Address, - OperatorAddresses: validator.OperatorAddresses, - }) - } - - return &types.MsgUpdateValidatorDescriptionResponse{}, err -} diff --git a/x/profile/keeper/msg_update_validator_description_test.go b/x/profile/keeper/msg_update_validator_description_test.go deleted file mode 100644 index 71c9ebd3..00000000 --- a/x/profile/keeper/msg_update_validator_description_test.go +++ /dev/null @@ -1,91 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgUpdateValidatorDescription(t *testing.T) { - var ( - addr1 = sample.Address(r) - addr2 = sample.Address(r) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) - ) - tests := []struct { - name string - msg types.MsgUpdateValidatorDescription - err error - }{ - { - name: "should allow creating a new validator if doesn't exist", - msg: types.MsgUpdateValidatorDescription{ - Address: addr1, - Description: sample.ValidatorDescription(addr1), - }, - }, { - name: "should allow updating an existing validator", - msg: types.MsgUpdateValidatorDescription{ - Address: addr1, - Description: sample.ValidatorDescription(addr2), - }, - }, { - name: "should allow creating a second validator", - msg: types.MsgUpdateValidatorDescription{ - Address: addr2, - Description: sample.ValidatorDescription(addr2), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - oldValidator, oldFound := tk.ProfileKeeper.GetValidator(sdkCtx, tt.msg.Address) - - _, err := ts.ProfileSrv.UpdateValidatorDescription(ctx, &tt.msg) - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - - validator, found := tk.ProfileKeeper.GetValidator(sdkCtx, tt.msg.Address) - require.True(t, found, "validator not found") - require.EqualValues(t, tt.msg.Address, validator.Address) - - if len(tt.msg.Description.Identity) > 0 { - require.EqualValues(t, tt.msg.Description.Identity, validator.Description.Identity) - } else if oldFound { - require.EqualValues(t, oldValidator.Description.Identity, oldValidator.Description.Identity) - } - - if len(tt.msg.Description.Website) > 0 { - require.EqualValues(t, tt.msg.Description.Website, validator.Description.Website) - } else if oldFound { - require.EqualValues(t, oldValidator.Description.Website, oldValidator.Description.Website) - } - - if len(tt.msg.Description.Details) > 0 { - require.EqualValues(t, tt.msg.Description.Details, validator.Description.Details) - } else if oldFound { - require.EqualValues(t, oldValidator.Description.Details, oldValidator.Description.Details) - } - - if len(tt.msg.Description.Moniker) > 0 { - require.EqualValues(t, tt.msg.Description.Moniker, validator.Description.Moniker) - } else if oldFound { - require.EqualValues(t, oldValidator.Description.Moniker, oldValidator.Description.Moniker) - } - - if len(tt.msg.Description.SecurityContact) > 0 { - require.EqualValues(t, tt.msg.Description.SecurityContact, validator.Description.SecurityContact) - } else if oldFound { - require.EqualValues(t, oldValidator.Description.SecurityContact, oldValidator.Description.SecurityContact) - } - }) - } -} diff --git a/x/profile/keeper/query.go b/x/profile/keeper/query.go new file mode 100644 index 00000000..2add579a --- /dev/null +++ b/x/profile/keeper/query.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "github.com/ignite/network/x/profile/types" +) + +var _ types.QueryServer = queryServer{} + +// NewQueryServerImpl returns an implementation of the QueryServer interface +// for the provided Keeper. +func NewQueryServerImpl(k Keeper) types.QueryServer { + return queryServer{k} +} + +type queryServer struct { + k Keeper +} diff --git a/x/profile/keeper/query_coordinator.go b/x/profile/keeper/query_coordinator.go new file mode 100644 index 00000000..4add4dc1 --- /dev/null +++ b/x/profile/keeper/query_coordinator.go @@ -0,0 +1,82 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/profile/types" +) + +func (q queryServer) ListCoordinator(ctx context.Context, req *types.QueryAllCoordinatorRequest) (*types.QueryAllCoordinatorResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + coordinators, pageRes, err := query.CollectionPaginate( + ctx, + q.k.Coordinator, + req.Pagination, + func(_ uint64, value types.Coordinator) (types.Coordinator, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllCoordinatorResponse{Coordinator: coordinators, Pagination: pageRes}, nil +} + +func (q queryServer) GetCoordinator(ctx context.Context, req *types.QueryGetCoordinatorRequest) (*types.QueryGetCoordinatorResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + coordinator, err := q.k.Coordinator.Get(ctx, req.ID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, sdkerrors.ErrKeyNotFound + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetCoordinatorResponse{Coordinator: coordinator}, nil +} + +func (q queryServer) GetCoordinatorByAddress(ctx context.Context, req *types.QueryGetCoordinatorByAddressRequest) (*types.QueryGetCoordinatorByAddressResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + address, err := q.k.addressCodec.StringToBytes(req.Address) + if err != nil { + return nil, status.Error(codes.Internal, "internal error") + } + + coordinatorByAddress, err := q.k.CoordinatorByAddress.Get(ctx, address) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, sdkerrors.ErrKeyNotFound + } + + return nil, status.Error(codes.Internal, "internal error") + } + + coordinator, err := q.k.Coordinator.Get(ctx, coordinatorByAddress.CoordinatorID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, sdkerrors.ErrKeyNotFound + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetCoordinatorByAddressResponse{Coordinator: coordinator}, nil +} diff --git a/x/profile/keeper/query_coordinator_test.go b/x/profile/keeper/query_coordinator_test.go new file mode 100644 index 00000000..88240c65 --- /dev/null +++ b/x/profile/keeper/query_coordinator_test.go @@ -0,0 +1,191 @@ +package keeper_test + +import ( + "context" + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" +) + +func createNCoordinator(keeper keeper.Keeper, ctx context.Context, n int) []types.Coordinator { + items := make([]types.Coordinator, n) + for i := range items { + iu := uint64(i) + items[i].CoordinatorID = iu + _ = keeper.Coordinator.Set(ctx, iu, items[i]) + _ = keeper.CoordinatorSeq.Set(ctx, iu) + } + return items +} + +func TestCoordinatorQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.ProfileKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNCoordinator(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetCoordinatorRequest + response *types.QueryGetCoordinatorResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetCoordinatorRequest{ID: msgs[0].CoordinatorID}, + response: &types.QueryGetCoordinatorResponse{Coordinator: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetCoordinatorRequest{ID: msgs[1].CoordinatorID}, + response: &types.QueryGetCoordinatorResponse{Coordinator: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetCoordinatorRequest{ID: uint64(len(msgs))}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetCoordinator(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestCoordinatorQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.ProfileKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNCoordinator(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllCoordinatorRequest { + return &types.QueryAllCoordinatorRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListCoordinator(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Coordinator), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Coordinator), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListCoordinator(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Coordinator), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Coordinator), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListCoordinator(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.Coordinator), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListCoordinator(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} + +func createNCoordinatorByAddress(keeper keeper.Keeper, ctx context.Context, n int) []types.Coordinator { + coordByAddress := make([]types.CoordinatorByAddress, n) + coordinators := make([]types.Coordinator, n) + for i := range coordByAddress { + address := sample.AccAddress(r) + iu := uint64(i) + coordinators[i].CoordinatorID = iu + coordinators[i].Address = address.String() + _ = keeper.Coordinator.Set(ctx, iu, coordinators[i]) + _ = keeper.CoordinatorSeq.Set(ctx, iu) + + coordByAddress[i].CoordinatorID = iu + coordByAddress[i].Address = address.String() + _ = keeper.CoordinatorByAddress.Set(ctx, address, coordByAddress[i]) + + } + return coordinators +} + +func TestCoordinatorByAddressQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.ProfileKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNCoordinatorByAddress(k, ctx, 2) + for _, tc := range []struct { + desc string + request *types.QueryGetCoordinatorByAddressRequest + response *types.QueryGetCoordinatorByAddressResponse + err error + }{ + { + desc: "should allow querying first coordinator by address", + request: &types.QueryGetCoordinatorByAddressRequest{Address: msgs[0].Address}, + response: &types.QueryGetCoordinatorByAddressResponse{Coordinator: msgs[0]}, + }, + { + desc: "should allow querying second coordinator by address", + request: &types.QueryGetCoordinatorByAddressRequest{Address: msgs[1].Address}, + response: &types.QueryGetCoordinatorByAddressResponse{Coordinator: msgs[1]}, + }, + { + desc: "should prevent querying non existing coordinator by address", + request: &types.QueryGetCoordinatorByAddressRequest{Address: "missing"}, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "should prevent querying with invalid request", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetCoordinatorByAddress(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.Equal(t, tc.response, response) + } + }) + } +} diff --git a/x/profile/keeper/query_params.go b/x/profile/keeper/query_params.go new file mode 100644 index 00000000..e0fc2707 --- /dev/null +++ b/x/profile/keeper/query_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/profile/types" +) + +func (q queryServer) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + params, err := q.k.Params.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/x/profile/keeper/query_params_test.go b/x/profile/keeper/query_params_test.go new file mode 100644 index 00000000..b74d7f48 --- /dev/null +++ b/x/profile/keeper/query_params_test.go @@ -0,0 +1,23 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" +) + +func TestParamsQuery(t *testing.T) { + k, ctx, _ := keepertest.ProfileKeeper(t) + + qs := keeper.NewQueryServerImpl(k) + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + response, err := qs.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/profile/keeper/query_validator.go b/x/profile/keeper/query_validator.go new file mode 100644 index 00000000..1e67231c --- /dev/null +++ b/x/profile/keeper/query_validator.go @@ -0,0 +1,76 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/profile/types" +) + +func (q queryServer) ListValidator(ctx context.Context, req *types.QueryAllValidatorRequest) (*types.QueryAllValidatorResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + validators, pageRes, err := query.CollectionPaginate( + ctx, + q.k.Validator, + req.Pagination, + func(_ string, value types.Validator) (types.Validator, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllValidatorResponse{Validator: validators, Pagination: pageRes}, nil +} + +func (q queryServer) GetValidator(ctx context.Context, req *types.QueryGetValidatorRequest) (*types.QueryGetValidatorResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.Validator.Get(ctx, req.Address) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetValidatorResponse{Validator: val}, nil +} + +func (q queryServer) GetValidatorByOperatorAddress(ctx context.Context, req *types.QueryGetValidatorByOperatorAddressRequest) (*types.QueryGetValidatorByOperatorAddressResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + operator, err := q.k.ValidatorByOperatorAddress.Get(ctx, req.Address) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + val, err := q.k.Validator.Get(ctx, operator.ValidatorAddress) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetValidatorByOperatorAddressResponse{Validator: val}, nil +} diff --git a/x/profile/keeper/query_validator_test.go b/x/profile/keeper/query_validator_test.go new file mode 100644 index 00000000..e0fd2369 --- /dev/null +++ b/x/profile/keeper/query_validator_test.go @@ -0,0 +1,205 @@ +package keeper_test + +import ( + "context" + "strconv" + "testing" + + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNValidator(keeper keeper.Keeper, ctx context.Context, n int) []types.Validator { + items := make([]types.Validator, n) + for i := range items { + items[i].Address = sample.Address(r) + _ = keeper.Validator.Set(ctx, items[i].Address, items[i]) + } + return items +} + +func TestValidatorQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.ProfileKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNValidator(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetValidatorRequest + response *types.QueryGetValidatorResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetValidatorRequest{ + Address: msgs[0].Address, + }, + response: &types.QueryGetValidatorResponse{Validator: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetValidatorRequest{ + Address: msgs[1].Address, + }, + response: &types.QueryGetValidatorResponse{Validator: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetValidatorRequest{ + Address: strconv.Itoa(100000), + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetValidator(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestValidatorQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.ProfileKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNValidator(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllValidatorRequest { + return &types.QueryAllValidatorRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListValidator(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Validator), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Validator), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListValidator(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Validator), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Validator), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListValidator(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.Validator), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListValidator(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} + +func createNValidatorByOperatorAddress(keeper keeper.Keeper, ctx context.Context, n int) []types.Validator { + valByOp := make([]types.ValidatorByOperatorAddress, n) + validators := make([]types.Validator, n) + for i := range valByOp { + valAddress := sample.Address(r) + opAddress := sample.Address(r) + valByOp[i].ValidatorAddress = valAddress + valByOp[i].OperatorAddress = opAddress + _ = keeper.ValidatorByOperatorAddress.Set(ctx, opAddress, valByOp[i]) + + validators[i].Address = valAddress + _ = keeper.Validator.Set(ctx, valAddress, validators[i]) + } + return validators +} + +func TestValidatorByOperatorAddressQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.ProfileKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNValidatorByOperatorAddress(k, ctx, 2) + for _, tc := range []struct { + desc string + request *types.QueryGetValidatorByOperatorAddressRequest + response *types.QueryGetValidatorByOperatorAddressResponse + err error + }{ + { + desc: "should allow querying first validator by operator address", + request: &types.QueryGetValidatorByOperatorAddressRequest{ + Address: msgs[0].Address, + }, + response: &types.QueryGetValidatorByOperatorAddressResponse{Validator: msgs[0]}, + }, + { + desc: "should allow querying second validator by operator address", + request: &types.QueryGetValidatorByOperatorAddressRequest{ + Address: msgs[1].Address, + }, + response: &types.QueryGetValidatorByOperatorAddressResponse{Validator: msgs[1]}, + }, + { + desc: "should prevent querying non existing validator by operator address", + request: &types.QueryGetValidatorByOperatorAddressRequest{ + Address: sample.Address(r), + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "should prevent querying with invalid request", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetValidatorByOperatorAddress(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} diff --git a/x/profile/keeper/validator.go b/x/profile/keeper/validator.go index 014c96e5..01d0b8b2 100644 --- a/x/profile/keeper/validator.go +++ b/x/profile/keeper/validator.go @@ -1,48 +1,36 @@ package keeper import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" + "context" - "github.com/tendermint/spn/x/profile/types" -) - -// SetValidator set a specific validator in the store from its index -func (k Keeper) SetValidator(ctx sdk.Context, validator types.Validator) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ValidatorKeyPrefix)) - b := k.cdc.MustMarshal(&validator) - store.Set(types.ValidatorKey( - validator.Address, - ), b) -} + "cosmossdk.io/collections" + "github.com/pkg/errors" -// GetValidator returns a validator from its index -func (k Keeper) GetValidator(ctx sdk.Context, address string) (val types.Validator, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ValidatorKeyPrefix)) + "github.com/ignite/network/x/profile/types" +) - b := store.Get(types.ValidatorKey( - address, - )) - if b == nil { - return val, false +func (k Keeper) GetValidatorByOperatorAddress(ctx context.Context, operatorAddress string) (types.ValidatorByOperatorAddress, error) { + val, err := k.ValidatorByOperatorAddress.Get(ctx, operatorAddress) + if errors.Is(err, collections.ErrNotFound) { + return types.ValidatorByOperatorAddress{}, types.ErrValidatorByOperatorAddressNotFound } - - k.cdc.MustUnmarshal(b, &val) - return val, true + return val, err } -// GetAllValidator returns all validator -func (k Keeper) GetAllValidator(ctx sdk.Context) (list []types.Validator) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ValidatorKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.Validator - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) +func (k Keeper) GetValidator(ctx context.Context, address string) (types.Validator, error) { + acc, err := k.Validator.Get(ctx, address) + if errors.Is(err, collections.ErrNotFound) { + return types.Validator{}, types.ErrValidatorNotFound } + return acc, err +} - return +// ListValidator returns all Validator. +func (k Keeper) ListValidator(ctx context.Context) ([]types.Validator, error) { + validators := make([]types.Validator, 0) + err := k.Validator.Walk(ctx, nil, func(_ string, validator types.Validator) (bool, error) { + validators = append(validators, validator) + return false, nil + }) + return validators, err } diff --git a/x/profile/keeper/validator_by_operator_address.go b/x/profile/keeper/validator_by_operator_address.go deleted file mode 100644 index abf711c4..00000000 --- a/x/profile/keeper/validator_by_operator_address.go +++ /dev/null @@ -1,54 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/profile/types" -) - -// SetValidatorByOperatorAddress set a specific validatorByOperatorAddress in the store from its index -func (k Keeper) SetValidatorByOperatorAddress(ctx sdk.Context, validatorByOperatorAddress types.ValidatorByOperatorAddress) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ValidatorByOperatorAddressKeyPrefix)) - b := k.cdc.MustMarshal(&validatorByOperatorAddress) - store.Set(types.ValidatorByOperatorAddressKey( - validatorByOperatorAddress.OperatorAddress, - ), b) -} - -// GetValidatorByOperatorAddress returns a validatorByOperatorAddress from its index -func (k Keeper) GetValidatorByOperatorAddress( - ctx sdk.Context, - operatorAddress string, -) (val types.ValidatorByOperatorAddress, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ValidatorByOperatorAddressKeyPrefix)) - - b := store.Get(types.ValidatorByOperatorAddressKey(operatorAddress)) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveValidatorByOperatorAddress removes a validatorByOperatorAddress from the store -func (k Keeper) RemoveValidatorByOperatorAddress(ctx sdk.Context, operatorAddress string) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ValidatorByOperatorAddressKeyPrefix)) - store.Delete(types.ValidatorByOperatorAddressKey(operatorAddress)) -} - -// GetAllValidatorByOperatorAddress returns all validatorByOperatorAddress -func (k Keeper) GetAllValidatorByOperatorAddress(ctx sdk.Context) (list []types.ValidatorByOperatorAddress) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ValidatorByOperatorAddressKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.ValidatorByOperatorAddress - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/profile/keeper/validator_by_operator_address_test.go b/x/profile/keeper/validator_by_operator_address_test.go deleted file mode 100644 index 58aa8404..00000000 --- a/x/profile/keeper/validator_by_operator_address_test.go +++ /dev/null @@ -1,69 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -func createNValidatorByOperatorAddress(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.ValidatorByOperatorAddress { - items := make([]types.ValidatorByOperatorAddress, n) - for i := range items { - items[i].OperatorAddress = sample.Address(r) - keeper.SetValidatorByOperatorAddress(ctx, items[i]) - } - return items -} - -func TestValidatorByOperatorAddressGet(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - items := createNValidatorByOperatorAddress(tk.ProfileKeeper, sdkCtx, 10) - - t.Run("should allow getting validator by operator address", func(t *testing.T) { - for _, item := range items { - rst, found := tk.ProfileKeeper.GetValidatorByOperatorAddress(sdkCtx, - item.OperatorAddress, - ) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } - }) -} - -func TestValidatorByOperatorAddressRemove(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - items := createNValidatorByOperatorAddress(tk.ProfileKeeper, sdkCtx, 10) - - t.Run("should allow removing validator by operator address", func(t *testing.T) { - for _, item := range items { - tk.ProfileKeeper.RemoveValidatorByOperatorAddress(sdkCtx, - item.OperatorAddress, - ) - _, found := tk.ProfileKeeper.GetValidatorByOperatorAddress(sdkCtx, - item.OperatorAddress, - ) - require.False(t, found) - } - }) -} - -func TestValidatorByOperatorAddressGetAll(t *testing.T) { - sdkCtx, tk, _ := testkeeper.NewTestSetup(t) - items := createNValidatorByOperatorAddress(tk.ProfileKeeper, sdkCtx, 10) - - t.Run("should allow getting all validator by operator address", func(t *testing.T) { - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.ProfileKeeper.GetAllValidatorByOperatorAddress(sdkCtx)), - ) - }) -} diff --git a/x/profile/keeper/validator_test.go b/x/profile/keeper/validator_test.go deleted file mode 100644 index b5b1d496..00000000 --- a/x/profile/keeper/validator_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -func createNValidator(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.Validator { - items := make([]types.Validator, n) - for i := range items { - items[i].Address = sample.Address(r) - keeper.SetValidator(ctx, items[i]) - } - return items -} - -func TestValidatorGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNValidator(tk.ProfileKeeper, ctx, 10) - - t.Run("should allow getting validator", func(t *testing.T) { - for _, item := range items { - rst, found := tk.ProfileKeeper.GetValidator(ctx, - item.Address, - ) - require.True(t, found) - require.Equal(t, item, rst) - } - }) -} - -func TestValidatorGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNValidator(tk.ProfileKeeper, ctx, 10) - - t.Run("should allow getting all validators", func(t *testing.T) { - require.ElementsMatch(t, items, tk.ProfileKeeper.GetAllValidator(ctx)) - }) -} diff --git a/x/profile/module.go b/x/profile/module.go deleted file mode 100644 index 442955d7..00000000 --- a/x/profile/module.go +++ /dev/null @@ -1,171 +0,0 @@ -package profile - -import ( - "context" - "encoding/json" - "fmt" - - // this line is used by starport scaffolding # 1 - - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - - abci "github.com/cometbft/cometbft/abci/types" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - - "github.com/tendermint/spn/x/profile/client/cli" - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} -) - -// ---------------------------------------------------------------------------- -// AppModuleBasic -// ---------------------------------------------------------------------------- - -// AppModuleBasic implements the AppModuleBasic interface for the profile module. -type AppModuleBasic struct { - cdc codec.Codec -} - -func NewAppModuleBasic(cdc codec.Codec) AppModuleBasic { - return AppModuleBasic{cdc: cdc} -} - -// Name returns the profile module's name. -func (AppModuleBasic) Name() string { - return types.ModuleName -} - -func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -// RegisterInterfaces registers the profile module's interface types -func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { - types.RegisterInterfaces(reg) -} - -// DefaultGenesis returns the profile module's default genesis state. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesis()) -} - -// ValidateGenesis performs genesis state validation for the profile module. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - var genState types.GenesisState - if err := cdc.UnmarshalJSON(bz, &genState); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - return genState.Validate() -} - -// RegisterRESTRoutes registers the profile module's REST service handlers. -func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { -} - -// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the profile module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint -} - -// GetTxCmd returns the profile module's root tx command. -func (a AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() -} - -// GetQueryCmd returns the profile module's root query command. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd(types.StoreKey) -} - -// ---------------------------------------------------------------------------- -// AppModule -// ---------------------------------------------------------------------------- - -// AppModule implements the AppModule interface for the profile module. -type AppModule struct { - AppModuleBasic - - keeper keeper.Keeper - accountKeeper types.AccountKeeper - bankKeeper types.BankKeeper -} - -func NewAppModule( - cdc codec.Codec, - keeper keeper.Keeper, - accountKeeper types.AccountKeeper, - bankKeeper types.BankKeeper, -) AppModule { - return AppModule{ - AppModuleBasic: NewAppModuleBasic(cdc), - keeper: keeper, - accountKeeper: accountKeeper, - bankKeeper: bankKeeper, - } -} - -// Name returns the profile module's name. -func (am AppModule) Name() string { - return am.AppModuleBasic.Name() -} - -// QuerierRoute returns the profile module's query routing key. -func (AppModule) QuerierRoute() string { return types.QuerierRoute } - -// RegisterServices registers a GRPC query service to respond to the -// module-specific GRPC queries. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) -} - -// RegisterInvariants registers the profile module's invariants. -func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { - keeper.RegisterInvariants(ir, am.keeper) -} - -// InitGenesis performs the profile module's genesis initialization It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { - var genState types.GenesisState - // Initialize global index to index in genesis state - cdc.MustUnmarshalJSON(gs, &genState) - - InitGenesis(ctx, am.keeper, genState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the profile module's exported genesis state as raw JSON bytes. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - genState := ExportGenesis(ctx, am.keeper) - return cdc.MustMarshalJSON(genState) -} - -// ConsensusVersion implements ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 1 } - -// BeginBlock executes all ABCI BeginBlock logic respective to the profile module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock executes all ABCI EndBlock logic respective to the profile module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} diff --git a/x/profile/module/autocli.go b/x/profile/module/autocli.go new file mode 100644 index 00000000..83182b56 --- /dev/null +++ b/x/profile/module/autocli.go @@ -0,0 +1,97 @@ +package profile + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + + modulev1 "github.com/ignite/network/api/network/profile/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Query_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Shows the parameters of the module", + }, + { + RpcMethod: "ListCoordinator", + Use: "list-coordinator", + Short: "List all Coordinator", + }, + { + RpcMethod: "GetCoordinator", + Use: "get-coordinator [id]", + Short: "Gets a Coordinator by id", + Alias: []string{"show-coordinator"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "ID"}}, + }, + { + RpcMethod: "ListValidator", + Use: "list-validator", + Short: "List all Validator", + }, + { + RpcMethod: "GetValidator", + Use: "get-validator [id]", + Short: "Gets a Validator", + Alias: []string{"show-validator"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "address"}}, + }, + { + RpcMethod: "GetCoordinatorByAddress", + Use: "get-coordinator-by-address [address]", + Short: "Query GetCoordinatorByAddress", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "address"}}, + }, + + { + RpcMethod: "GetValidatorByOperatorAddress", + Use: "get-validator-by-operator-address [address]", + Short: "Query GetValidatorByOperatorAddress", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "address"}}, + }, + + // this line is used by ignite scaffolding # autocli/query + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, // only required if you want to use the custom command + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "UpdateParams", + Skip: true, // skipped because authority gated + }, + { + RpcMethod: "CreateCoordinator", + Use: "create-coordinator [description] [active]", + Short: "Create Coordinator", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "description"}, {ProtoField: "active"}}, + }, + { + RpcMethod: "UpdateCoordinatorDescription", + Use: "update-coordinator [id] [description] [active]", + Short: "Update Coordinator", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "ID"}, {ProtoField: "description"}, {ProtoField: "active"}}, + }, + { + RpcMethod: "DisableCoordinator", + Use: "delete-coordinator [id]", + Short: "Delete Coordinator", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "ID"}}, + }, + { + RpcMethod: "UpdateCoordinatorAddress", + Use: "update-coordinator-address [new-address]", + Short: "Send a UpdateCoordinatorAddress tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "newAddress"}}, + }, + // this line is used by ignite scaffolding # autocli/tx + }, + }, + } +} diff --git a/x/profile/module/genesis.go b/x/profile/module/genesis.go new file mode 100644 index 00000000..5b78b5a2 --- /dev/null +++ b/x/profile/module/genesis.go @@ -0,0 +1,104 @@ +package profile + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) error { + // Set all the validator + for _, elem := range genState.ValidatorList { + if err := k.Validator.Set(ctx, elem.Address, elem); err != nil { + return err + } + } + + // Set all the validatorByOperatorAddress + for _, elem := range genState.ValidatorsByOperatorAddress { + if err := k.ValidatorByOperatorAddress.Set(ctx, elem.OperatorAddress, elem); err != nil { + return err + } + } + + // Set all the coordinator + for _, elem := range genState.CoordinatorList { + if err := k.Coordinator.Set(ctx, elem.CoordinatorID, elem); err != nil { + return err + } + } + + // Set coordinator count + if err := k.CoordinatorSeq.Set(ctx, genState.CoordinatorCount); err != nil { + return err + } + + // Set all the coordinatorByAddress + for _, elem := range genState.CoordinatorsByAddress { + address, err := k.AddressCodec().StringToBytes(elem.Address) + if err != nil { + return err + } + if err := k.CoordinatorByAddress.Set(ctx, address, elem); err != nil { + return err + } + } + + // this line is used by starport scaffolding # genesis/module/init + + return k.Params.Set(ctx, genState.Params) +} + +// ExportGenesis returns the module's exported genesis. +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) { + var err error + + genesis := types.DefaultGenesis() + genesis.Params, err = k.Params.Get(ctx) + if err != nil { + return nil, err + } + + // Cordinators + err = k.Coordinator.Walk(ctx, nil, func(key uint64, elem types.Coordinator) (bool, error) { + genesis.CoordinatorList = append(genesis.CoordinatorList, elem) + return false, nil + }) + if err != nil { + return nil, err + } + + genesis.CoordinatorCount, err = k.CoordinatorSeq.Peek(ctx) + if err != nil { + return nil, err + } + + err = k.CoordinatorByAddress.Walk(ctx, nil, func(key sdk.AccAddress, elem types.CoordinatorByAddress) (bool, error) { + genesis.CoordinatorsByAddress = append(genesis.CoordinatorsByAddress, elem) + return false, nil + }) + if err != nil { + return nil, err + } + + // ListValidator + if err := k.Validator.Walk(ctx, nil, func(_ string, val types.Validator) (stop bool, err error) { + genesis.ValidatorList = append(genesis.ValidatorList, val) + return false, nil + }); err != nil { + return nil, err + } + + if err := k.ValidatorByOperatorAddress.Walk(ctx, nil, func(_ string, val types.ValidatorByOperatorAddress) (stop bool, err error) { + genesis.ValidatorsByOperatorAddress = append(genesis.ValidatorsByOperatorAddress, val) + return false, nil + }); err != nil { + return nil, err + } + + // this line is used by starport scaffolding # genesis/module/export + + return genesis, nil +} diff --git a/x/profile/module/genesis_test.go b/x/profile/module/genesis_test.go new file mode 100644 index 00000000..990f0e32 --- /dev/null +++ b/x/profile/module/genesis_test.go @@ -0,0 +1,52 @@ +package profile_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + profile "github.com/ignite/network/x/profile/module" + "github.com/ignite/network/x/profile/types" +) + +func TestGenesis(t *testing.T) { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + + CoordinatorList: []types.Coordinator{ + { + CoordinatorID: 0, + }, + { + CoordinatorID: 1, + }, + }, + CoordinatorCount: 2, + ValidatorList: []types.Validator{ + { + Address: "0", + }, + { + Address: "1", + }, + }, + // this line is used by starport scaffolding # genesis/test/state + } + + k, ctx, _ := keepertest.ProfileKeeper(t) + err := profile.InitGenesis(ctx, k, genesisState) + require.NoError(t, err) + got, err := profile.ExportGenesis(ctx, k) + require.NoError(t, err) + require.NotNil(t, got) + + nullify.Fill(&genesisState) + nullify.Fill(got) + + require.ElementsMatch(t, genesisState.CoordinatorList, got.CoordinatorList) + require.Equal(t, genesisState.CoordinatorCount, got.CoordinatorCount) + require.ElementsMatch(t, genesisState.ValidatorList, got.ValidatorList) + // this line is used by starport scaffolding # genesis/test/assert +} diff --git a/x/profile/module/module.go b/x/profile/module/module.go new file mode 100644 index 00000000..68395ba4 --- /dev/null +++ b/x/profile/module/module.go @@ -0,0 +1,223 @@ +package profile + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + + // this line is used by starport scaffolding # 1 + + modulev1 "github.com/ignite/network/api/network/profile/module/v1" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasInvariants = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface that defines the +// independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module, which is used +// to marshal and unmarshal structs to/from []byte in order to persist them in the module's KVStore. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers a module's interface types and their concrete implementations as proto.Message. +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns a default GenesisState for the module, marshalled to json.RawMessage. +// The default GenesisState need to be defined by the module developer and is primarily used for testing. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis used to validate the GenesisState, given in its json.RawMessage form. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper)) +} + +// RegisterInvariants registers the invariants of the module. If an invariant deviates from its predicted value, the InvariantRegistry triggers appropriate logic (most often the chain will be halted) +func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { + keeper.RegisterInvariants(ir, am.keeper) +} + +// InitGenesis performs the module's genesis initialization. It returns no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + if err := InitGenesis(ctx, am.keeper, genState); err != nil { + panic(err) + } +} + +// ExportGenesis returns the module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState, err := ExportGenesis(ctx, am.keeper) + if err != nil { + panic(err) + } + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion is a sequence number for state-breaking change of the module. +// It should be incremented on each consensus-breaking change introduced by the module. +// To avoid wrong/empty versions, the initial version should be set to 1. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block. +// The end block implementation is optional. +func (am AppModule) EndBlock(_ context.Context) error { + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// ---------------------------------------------------------------------------- +// App Wiring Setup +// ---------------------------------------------------------------------------- + +func init() { + appmodule.Register( + &modulev1.Module{}, + appmodule.Provide(ProvideModule), + ) +} + +type ModuleInputs struct { + depinject.In + + AddressCodec address.Codec + StoreService store.KVStoreService + Cdc codec.Codec + Config *modulev1.Module + Logger log.Logger + + AccountKeeper types.AccountKeeper + BankKeeper types.BankKeeper +} + +type ModuleOutputs struct { + depinject.Out + + ProfileKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + k := keeper.NewKeeper( + in.Cdc, + in.AddressCodec, + in.StoreService, + in.Logger, + authority.String(), + ) + m := NewAppModule( + in.Cdc, + k, + in.AccountKeeper, + in.BankKeeper, + ) + + return ModuleOutputs{ProfileKeeper: k, Module: m} +} diff --git a/x/profile/module/simulation.go b/x/profile/module/simulation.go new file mode 100644 index 00000000..087ad1ce --- /dev/null +++ b/x/profile/module/simulation.go @@ -0,0 +1,175 @@ +package profile + +import ( + "math/rand" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + profilesimulation "github.com/ignite/network/x/profile/simulation" + "github.com/ignite/network/x/profile/types" +) + +const ( + defaultWeightMsgUpdateValidatorDescription = 50 + defaultWeightMsgAddValidatorOperatorAddress = 50 + defaultWeightMsgCreateCoordinator = 50 + defaultWeightMsgUpdateCoordinatorDescription = 20 + defaultWeightMsgUpdateCoordinatorAddress = 20 + defaultWeightMsgDisableCoordinator = 5 + + opWeightMsgUpdateValidatorDescription = "op_weight_msg_update_validator_description" + opWeightMsgAddValidatorOperatorAddress = "op_weight_msg_add_vaildator_operator_address" + opWeightMsgCreateCoordinator = "op_weight_msg_create_coordinator" + opWeightMsgUpdateCoordinatorDescription = "op_weight_msg_update_coordinator_description" + opWeightMsgUpdateCoordinatorAddress = "op_weight_msg_update_coordinator_address" + opWeightMsgDisableCoordinator = "op_weight_msg_disable_coordinator" + + // this line is used by starport scaffolding # simapp/module/const +) + +// GenerateGenesisState creates a randomized GenState of the module +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + accs := make([]string, len(simState.Accounts)) + for i, acc := range simState.Accounts { + accs[i] = acc.Address.String() + } + profileGenesis := sample.ProfileGenesisState(simState.Rand, accs...) + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&profileGenesis) +} + +// RegisterStoreDecoder registers a decoder. +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { + operations := make([]simtypes.WeightedOperation, 0) + + var weightMsgCreateCoordinator int + simState.AppParams.GetOrGenerate(opWeightMsgCreateCoordinator, &weightMsgCreateCoordinator, nil, + func(_ *rand.Rand) { + weightMsgCreateCoordinator = defaultWeightMsgCreateCoordinator + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgCreateCoordinator, + profilesimulation.SimulateMsgCreateCoordinator(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgUpdateCoordinatorDescription int + simState.AppParams.GetOrGenerate(opWeightMsgUpdateCoordinatorDescription, &weightMsgUpdateCoordinatorDescription, nil, + func(_ *rand.Rand) { + weightMsgUpdateCoordinatorDescription = defaultWeightMsgUpdateCoordinatorDescription + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgUpdateCoordinatorDescription, + profilesimulation.SimulateMsgUpdateCoordinatorDescription(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgDisableCoordinator int + simState.AppParams.GetOrGenerate(opWeightMsgDisableCoordinator, &weightMsgDisableCoordinator, nil, + func(_ *rand.Rand) { + weightMsgDisableCoordinator = defaultWeightMsgDisableCoordinator + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgDisableCoordinator, + profilesimulation.SimulateMsgDisableCoordinator(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgUpdateCoordinatorAddress int + simState.AppParams.GetOrGenerate(opWeightMsgUpdateCoordinatorAddress, &weightMsgUpdateCoordinatorAddress, nil, + func(_ *rand.Rand) { + weightMsgUpdateCoordinatorAddress = defaultWeightMsgUpdateCoordinatorAddress + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgUpdateCoordinatorAddress, + profilesimulation.SimulateMsgUpdateCoordinatorAddress(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgUpdateValidatorDescription int + simState.AppParams.GetOrGenerate(opWeightMsgUpdateValidatorDescription, &weightMsgUpdateValidatorDescription, nil, + func(_ *rand.Rand) { + weightMsgUpdateValidatorDescription = defaultWeightMsgUpdateValidatorDescription + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgUpdateValidatorDescription, + profilesimulation.SimulateMsgUpdateValidatorDescription(am.accountKeeper, am.bankKeeper, simState.TxConfig), + )) + + var weightMsgAddValidatorOperatorAddress int + simState.AppParams.GetOrGenerate(opWeightMsgAddValidatorOperatorAddress, &weightMsgAddValidatorOperatorAddress, nil, + func(_ *rand.Rand) { + weightMsgAddValidatorOperatorAddress = defaultWeightMsgAddValidatorOperatorAddress + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgAddValidatorOperatorAddress, + profilesimulation.SimulateMsgAddValidatorOperatorAddress(am.accountKeeper, am.bankKeeper, simState.TxConfig), + )) + + // this line is used by starport scaffolding # simapp/module/operation + + return operations +} + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + simulation.NewWeightedProposalMsg( + opWeightMsgCreateCoordinator, + defaultWeightMsgCreateCoordinator, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + profilesimulation.SimulateMsgCreateCoordinator(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgUpdateCoordinatorDescription, + defaultWeightMsgUpdateCoordinatorDescription, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + profilesimulation.SimulateMsgUpdateCoordinatorDescription(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgDisableCoordinator, + defaultWeightMsgDisableCoordinator, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + profilesimulation.SimulateMsgDisableCoordinator(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgUpdateCoordinatorAddress, + defaultWeightMsgUpdateCoordinatorAddress, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + profilesimulation.SimulateMsgUpdateCoordinatorAddress(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgUpdateValidatorDescription, + defaultWeightMsgUpdateValidatorDescription, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + profilesimulation.SimulateMsgUpdateValidatorDescription(am.accountKeeper, am.bankKeeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgAddValidatorOperatorAddress, + defaultWeightMsgAddValidatorOperatorAddress, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + profilesimulation.SimulateMsgAddValidatorOperatorAddress(am.accountKeeper, am.bankKeeper, simState.TxConfig) + return nil + }, + ), + // this line is used by starport scaffolding # simapp/module/OpMsg + } +} diff --git a/x/profile/module_simulation.go b/x/profile/module_simulation.go deleted file mode 100644 index 3f08bc29..00000000 --- a/x/profile/module_simulation.go +++ /dev/null @@ -1,125 +0,0 @@ -package profile - -import ( - "math/rand" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - - "github.com/tendermint/spn/testutil/sample" - profilesimulation "github.com/tendermint/spn/x/profile/simulation" - "github.com/tendermint/spn/x/profile/types" -) - -const ( - defaultWeightMsgUpdateValidatorDescription = 50 - defaultWeightMsgAddValidatorOperatorAddress = 50 - defaultWeightMsgCreateCoordinator = 50 - defaultWeightMsgUpdateCoordinatorDescription = 20 - defaultWeightMsgUpdateCoordinatorAddress = 20 - defaultWeightMsgDisableCoordinator = 5 - - opWeightMsgUpdateValidatorDescription = "op_weight_msg_update_validator_description" - opWeightMsgAddValidatorOperatorAddress = "op_weight_msg_add_vaildator_operator_address" - opWeightMsgCreateCoordinator = "op_weight_msg_create_coordinator" - opWeightMsgUpdateCoordinatorDescription = "op_weight_msg_update_coordinator_description" - opWeightMsgUpdateCoordinatorAddress = "op_weight_msg_update_coordinator_address" - opWeightMsgDisableCoordinator = "op_weight_msg_disable_coordinator" -) - -// GenerateGenesisState creates a randomized GenState of the module -func (AppModule) GenerateGenesisState(simState *module.SimulationState) { - accs := make([]string, len(simState.Accounts)) - for i, acc := range simState.Accounts { - accs[i] = acc.Address.String() - } - profileGenesis := sample.ProfileGenesisState(simState.Rand, accs...) - simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&profileGenesis) -} - -// ProposalContents doesn't return any content functions for governance proposals -func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { - return nil -} - -// RandomizedParams creates randomized param changes for the simulator -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { - return []simtypes.LegacyParamChange{} -} - -// RegisterStoreDecoder registers a decoder -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} - -// WeightedOperations returns the all the gov module operations with their respective weights. -func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { - var ( - weightMsgUpdateValidatorDescription int - weightMsgCreateCoordinator int - weightMsgUpdateCoordinatorDescription int - weightMsgUpdateCoordinatorAddress int - weightMsgDisableCoordinator int - weightMsgAddValidatorOperatorAddress int - ) - - appParams := simState.AppParams - cdc := simState.Cdc - appParams.GetOrGenerate(cdc, opWeightMsgUpdateValidatorDescription, &weightMsgUpdateValidatorDescription, nil, - func(_ *rand.Rand) { - weightMsgUpdateValidatorDescription = defaultWeightMsgUpdateValidatorDescription - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgAddValidatorOperatorAddress, &weightMsgAddValidatorOperatorAddress, nil, - func(_ *rand.Rand) { - weightMsgAddValidatorOperatorAddress = defaultWeightMsgAddValidatorOperatorAddress - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgCreateCoordinator, &weightMsgCreateCoordinator, nil, - func(_ *rand.Rand) { - weightMsgCreateCoordinator = defaultWeightMsgCreateCoordinator - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgUpdateCoordinatorDescription, &weightMsgUpdateCoordinatorDescription, nil, - func(_ *rand.Rand) { - weightMsgUpdateCoordinatorDescription = defaultWeightMsgUpdateCoordinatorDescription - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgUpdateCoordinatorAddress, &weightMsgUpdateCoordinatorAddress, nil, - func(_ *rand.Rand) { - weightMsgUpdateCoordinatorAddress = defaultWeightMsgUpdateCoordinatorAddress - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgDisableCoordinator, &weightMsgDisableCoordinator, nil, - func(_ *rand.Rand) { - weightMsgDisableCoordinator = defaultWeightMsgDisableCoordinator - }, - ) - - return []simtypes.WeightedOperation{ - simulation.NewWeightedOperation( - weightMsgUpdateValidatorDescription, - profilesimulation.SimulateMsgUpdateValidatorDescription(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgAddValidatorOperatorAddress, - profilesimulation.SimulateMsgAddValidatorOperatorAddress(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgCreateCoordinator, - profilesimulation.SimulateMsgCreateCoordinator(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgUpdateCoordinatorDescription, - profilesimulation.SimulateMsgUpdateCoordinatorDescription(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgUpdateCoordinatorAddress, - profilesimulation.SimulateMsgUpdateCoordinatorAddress(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgDisableCoordinator, - profilesimulation.SimulateMsgDisableCoordinator(am.accountKeeper, am.bankKeeper, am.keeper), - ), - } -} diff --git a/x/profile/simulation/coordinator.go b/x/profile/simulation/coordinator.go new file mode 100644 index 00000000..9f1b3a7f --- /dev/null +++ b/x/profile/simulation/coordinator.go @@ -0,0 +1,200 @@ +package simulation + +import ( + "errors" + "math/rand" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/keeper" + "github.com/ignite/network/x/profile/types" +) + +// FindCoordinatorAccount find a sim account for a coordinator that exists or not +func FindCoordinatorAccount( + r *rand.Rand, + ctx sdk.Context, + k keeper.Keeper, + accs []simtypes.Account, + exist bool, +) (simtypes.Account, bool) { + // Randomize the set for coordinator operation entropy + r.Shuffle(len(accs), func(i, j int) { + accs[i], accs[j] = accs[j], accs[i] + }) + + for _, acc := range accs { + coordByAddress, err := k.CoordinatorByAddress.Get(ctx, acc.Address) + found := !errors.Is(err, collections.ErrNotFound) + if found == exist { + coord, err := k.Coordinator.Get(ctx, coordByAddress.CoordinatorID) + if err == nil && !coord.Active { + continue + } + return acc, true + } + } + return simtypes.Account{}, false +} + +func SimulateMsgCreateCoordinator( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgCreateCoordinator{} + + // Find an account with no coordinator + simAccount, found := FindCoordinatorAccount(r, ctx, k, accs, false) + if !found { + // No message if all coordinator created + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip coordinator creation"), nil, nil + } + + msg = types.NewMsgCreateCoordinator( + simAccount.Address.String(), + sample.String(r, 30), + sample.String(r, 30), + sample.String(r, 30), + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + AccountKeeper: ak, + Bankkeeper: bk, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +func SimulateMsgUpdateCoordinatorDescription( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgUpdateCoordinatorDescription{} + + // Find an account with coordinator associated + simAccount, found := FindCoordinatorAccount(r, ctx, k, accs, true) + if !found { + // No message if no coordinator + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip update coordinator description"), nil, nil + } + + desc := sample.CoordinatorDescription(r) + msg = types.NewMsgUpdateCoordinatorDescription( + simAccount.Address.String(), + desc.Identity, + desc.Website, + desc.Details, + ) + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + AccountKeeper: ak, + Bankkeeper: bk, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +func SimulateMsgUpdateCoordinatorAddress( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgUpdateCoordinatorAddress{} + + // Select a random account + coord, found := FindCoordinatorAccount(r, ctx, k, accs, true) + if !found { + // No message if no coordinator + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip update coordinator address"), nil, nil + } + simAccount, found := FindCoordinatorAccount(r, ctx, k, accs, false) + if !found && coord.Address.String() != simAccount.Address.String() { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip update coordinator address"), nil, nil + } + msg = types.NewMsgUpdateCoordinatorAddress(coord.Address.String(), simAccount.Address.String()) + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: coord, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} + +func SimulateMsgDisableCoordinator( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgDisableCoordinator{} + // Find an account with coordinator associated + // avoid delete coordinator associated a chain (id 0,1,2) + simAccount, found := FindCoordinatorAccount(r, ctx, k, accs[3:], true) + if !found { + // No message if no coordinator + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip update coordinator delete"), nil, nil + } + + msg = types.NewMsgDisableCoordinator(simAccount.Address.String()) + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/profile/simulation/helpers.go b/x/profile/simulation/helpers.go new file mode 100644 index 00000000..92c437c0 --- /dev/null +++ b/x/profile/simulation/helpers.go @@ -0,0 +1,15 @@ +package simulation + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" +) + +// FindAccount find a specific address from an account list +func FindAccount(accs []simtypes.Account, address string) (simtypes.Account, bool) { + creator, err := sdk.AccAddressFromBech32(address) + if err != nil { + panic(err) + } + return simtypes.FindAccount(accs, creator) +} diff --git a/x/profile/simulation/simulation.go b/x/profile/simulation/simulation.go deleted file mode 100644 index b6095ecc..00000000 --- a/x/profile/simulation/simulation.go +++ /dev/null @@ -1,278 +0,0 @@ -package simulation - -import ( - "math/rand" - - "github.com/cosmos/cosmos-sdk/baseapp" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - sdksimulation "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/tendermint/spn/testutil/encoding" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/testutil/simulation" - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -// generate a Tx with 2 signatures if validator account is not equal to operator address account -func genAndDeliverTxWithRandFeesAddOpAddr(txCtx sdksimulation.OperationInput, opSimAcc simtypes.Account) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - account := txCtx.AccountKeeper.GetAccount(txCtx.Context, txCtx.SimAccount.Address) - spendable := txCtx.Bankkeeper.SpendableCoins(txCtx.Context, account.GetAddress()) - opAccout := txCtx.AccountKeeper.GetAccount(txCtx.Context, opSimAcc.Address) - - accNumbers := []uint64{account.GetAccountNumber()} - accSequences := []uint64{account.GetSequence()} - privs := []cryptotypes.PrivKey{txCtx.SimAccount.PrivKey} - - if account != opAccout { - accNumbers = append(accNumbers, opAccout.GetAccountNumber()) - accSequences = append(accSequences, opAccout.GetSequence()) - privs = append(privs, opSimAcc.PrivKey) - } - - var fees sdk.Coins - var err error - - coins, hasNeg := spendable.SafeSub(txCtx.CoinsSpentInMsg...) - if hasNeg { - return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "message doesn't leave room for fees"), nil, err - } - - fees, err = sample.Fees(txCtx.R, coins) - if err != nil { - return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to generate fees"), nil, err - } - - tx, err := simtestutil.GenSignedMockTx( - txCtx.R, - txCtx.TxGen, - []sdk.Msg{txCtx.Msg}, - fees, - simtestutil.DefaultGenTxGas, - txCtx.Context.ChainID(), - accNumbers, - accSequences, - privs..., - ) - if err != nil { - return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to generate mock tx"), nil, err - } - - _, _, err = txCtx.App.SimDeliver(txCtx.TxGen.TxEncoder(), tx) - if err != nil { - return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to deliver tx"), nil, err - } - - return simtypes.NewOperationMsg(txCtx.Msg, true, "", txCtx.Cdc), nil, nil -} - -// SimulateMsgUpdateValidatorDescription simulates a MsgUpdateValidatorDescription message -func SimulateMsgUpdateValidatorDescription(ak types.AccountKeeper, bk types.BankKeeper, _ keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Select a random account - simAccount, _ := simtypes.RandomAcc(r, accs) - - desc := sample.ValidatorDescription(sample.String(r, 50)) - msg := types.NewMsgUpdateValidatorDescription( - simAccount.Address.String(), - desc.Identity, - desc.Moniker, - desc.Website, - desc.SecurityContact, - desc.Details, - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgAddValidatorOperatorAddress simulates a MsgAddValidatorOperatorAddress message -func SimulateMsgAddValidatorOperatorAddress(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // choose two addresses that are not equal - simAccount, _ := simtypes.RandomAcc(r, accs) - opAccount, _ := simtypes.RandomAcc(r, accs) - for simAccount.Address.Equals(opAccount.Address) { - opAccount, _ = simtypes.RandomAcc(r, accs) - } - - msg := &types.MsgAddValidatorOperatorAddress{ - ValidatorAddress: simAccount.Address.String(), - OperatorAddress: opAccount.Address.String(), - } - - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return genAndDeliverTxWithRandFeesAddOpAddr(txCtx, opAccount) - } -} - -// SimulateMsgCreateCoordinator simulates a MsgCreateCoordinator message -func SimulateMsgCreateCoordinator(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Find an account with no coordinator - simAccount, found := FindCoordinatorAccount(r, ctx, k, accs, false) - if !found { - // No message if all coordinator created - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateCoordinator, "skip coordinator creation"), nil, nil - } - - msg := types.NewMsgCreateCoordinator( - simAccount.Address.String(), - sample.String(r, 30), - sample.String(r, 30), - sample.String(r, 30), - ) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgUpdateCoordinatorDescription simulates a MsgUpdateCoordinatorDescription message -func SimulateMsgUpdateCoordinatorDescription(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Find an account with coordinator associated - simAccount, found := FindCoordinatorAccount(r, ctx, k, accs, true) - if !found { - // No message if no coordinator - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUpdateCoordinatorDescription, "skip update coordinator description"), nil, nil - } - - desc := sample.CoordinatorDescription(r) - msg := types.NewMsgUpdateCoordinatorDescription( - simAccount.Address.String(), - desc.Identity, - desc.Website, - desc.Details, - ) - - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgUpdateCoordinatorAddress simulates a MsgUpdateCoordinatorAddress message -func SimulateMsgUpdateCoordinatorAddress(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Select a random account - coord, found := FindCoordinatorAccount(r, ctx, k, accs, true) - if !found { - // No message if no coordinator - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUpdateCoordinatorAddress, "skip update coordinator address"), nil, nil - } - simAccount, found := FindCoordinatorAccount(r, ctx, k, accs, false) - if !found && coord.Address.String() != simAccount.Address.String() { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUpdateCoordinatorAddress, "skip update coordinator address"), nil, nil - } - msg := types.NewMsgUpdateCoordinatorAddress(coord.Address.String(), simAccount.Address.String()) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: coord, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} - -// SimulateMsgDisableCoordinator simulates a MsgDisableCoordinator message -func SimulateMsgDisableCoordinator(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Find an account with coordinator associated - // avoid delete coordinator associated a chain (id 0,1,2) - simAccount, found := FindCoordinatorAccount(r, ctx, k, accs[3:], true) - if !found { - // No message if no coordinator - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDisableCoordinator, "skip update coordinator delete"), nil, nil - } - - msg := types.NewMsgDisableCoordinator(simAccount.Address.String()) - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: sdk.NewCoins(), - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) - } -} diff --git a/x/profile/simulation/store.go b/x/profile/simulation/store.go deleted file mode 100644 index 4c571e27..00000000 --- a/x/profile/simulation/store.go +++ /dev/null @@ -1,38 +0,0 @@ -package simulation - -import ( - "errors" - "math/rand" - - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/tendermint/spn/x/profile/keeper" - "github.com/tendermint/spn/x/profile/types" -) - -// FindCoordinatorAccount find a sim account for a coordinator that exists or not -func FindCoordinatorAccount( - r *rand.Rand, - ctx sdk.Context, - k keeper.Keeper, - accs []simtypes.Account, - exist bool, -) (simtypes.Account, bool) { - // Randomize the set for coordinator operation entropy - r.Shuffle(len(accs), func(i, j int) { - accs[i], accs[j] = accs[j], accs[i] - }) - - for _, acc := range accs { - coordByAddress, err := k.GetCoordinatorByAddress(ctx, acc.Address.String()) - found := !errors.Is(err, types.ErrCoordAddressNotFound) - if found == exist { - coord, found := k.GetCoordinator(ctx, coordByAddress.CoordinatorID) - if found && !coord.Active { - continue - } - return acc, true - } - } - return simtypes.Account{}, false -} diff --git a/x/profile/simulation/store_test.go b/x/profile/simulation/store_test.go deleted file mode 100644 index ea915e39..00000000 --- a/x/profile/simulation/store_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package simulation_test - -import ( - "testing" - - "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - profilesim "github.com/tendermint/spn/x/profile/simulation" - "github.com/tendermint/spn/x/profile/types" -) - -func TestFindCoordinatorAccount(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - r = sample.Rand() - accs = simulation.RandomAccounts(r, 20) - ) - - t.Run("should prevent finding coordinator from empty account list", func(t *testing.T) { - _, found := profilesim.FindCoordinatorAccount(r, ctx, *tk.ProfileKeeper, []simulation.Account{}, false) - require.False(t, found) - _, found = profilesim.FindCoordinatorAccount(r, ctx, *tk.ProfileKeeper, []simulation.Account{}, true) - require.False(t, found) - }) - - t.Run("should prevent finding coordinator if no coordinator in store", func(t *testing.T) { - _, found := profilesim.FindCoordinatorAccount(r, ctx, *tk.ProfileKeeper, accs, true) - require.False(t, found) - - acc, found := profilesim.FindCoordinatorAccount(r, ctx, *tk.ProfileKeeper, accs, false) - require.True(t, found) - require.Contains(t, accs, acc) - }) - - // Set ccordinator to a random account - acc, _ := simulation.RandomAcc(r, accs) - tk.ProfileKeeper.SetCoordinatorByAddress(ctx, types.CoordinatorByAddress{ - Address: acc.Address.String(), - CoordinatorID: sample.Uint64(r), - }) - - t.Run("should allow finding one coordinator", func(t *testing.T) { - acc, found := profilesim.FindCoordinatorAccount(r, ctx, *tk.ProfileKeeper, accs, true) - require.True(t, found) - require.Contains(t, accs, acc) - - acc, found = profilesim.FindCoordinatorAccount(r, ctx, *tk.ProfileKeeper, accs, false) - require.True(t, found) - require.Contains(t, accs, acc) - }) - - t.Run("should allow finding all coordinators", func(t *testing.T) { - _, found := profilesim.FindCoordinatorAccount(r, ctx, *tk.ProfileKeeper, []simulation.Account{acc}, false) - require.False(t, found) - - acc, found := profilesim.FindCoordinatorAccount(r, ctx, *tk.ProfileKeeper, []simulation.Account{acc}, true) - require.True(t, found) - require.Contains(t, accs, acc) - }) -} diff --git a/x/profile/simulation/validator.go b/x/profile/simulation/validator.go new file mode 100644 index 00000000..2d26034a --- /dev/null +++ b/x/profile/simulation/validator.go @@ -0,0 +1,139 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/types" +) + +// generate a Tx with 2 signatures if validator account is not equal to operator address account +func genAndDeliverTxWithRandFeesAddOpAddr(txCtx simulation.OperationInput, opSimAcc simtypes.Account) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + account := txCtx.AccountKeeper.GetAccount(txCtx.Context, txCtx.SimAccount.Address) + spendable := txCtx.Bankkeeper.SpendableCoins(txCtx.Context, account.GetAddress()) + opAccout := txCtx.AccountKeeper.GetAccount(txCtx.Context, opSimAcc.Address) + + accNumbers := []uint64{account.GetAccountNumber()} + accSequences := []uint64{account.GetSequence()} + privs := []cryptotypes.PrivKey{txCtx.SimAccount.PrivKey} + if account != opAccout { + accNumbers = append(accNumbers, opAccout.GetAccountNumber()) + accSequences = append(accSequences, opAccout.GetSequence()) + privs = append(privs, opSimAcc.PrivKey) + } + + var fees sdk.Coins + var err error + + coins, hasNeg := spendable.SafeSub(txCtx.CoinsSpentInMsg...) + if hasNeg { + return simtypes.NoOpMsg(txCtx.ModuleName, sdk.MsgTypeURL(txCtx.Msg), "message doesn't leave room for fees"), nil, err + } + + fees, err = sample.Fees(txCtx.R, coins) + if err != nil { + return simtypes.NoOpMsg(txCtx.ModuleName, sdk.MsgTypeURL(txCtx.Msg), "unable to generate fees"), nil, err + } + + tx, err := simtestutil.GenSignedMockTx( + txCtx.R, + txCtx.TxGen, + []sdk.Msg{txCtx.Msg}, + fees, + simtestutil.DefaultGenTxGas, + txCtx.Context.ChainID(), + accNumbers, + accSequences, + privs..., + ) + if err != nil { + return simtypes.NoOpMsg(txCtx.ModuleName, sdk.MsgTypeURL(txCtx.Msg), "unable to generate mock tx"), nil, err + } + + _, _, err = txCtx.App.SimDeliver(txCtx.TxGen.TxEncoder(), tx) + if err != nil { + return simtypes.NoOpMsg(txCtx.ModuleName, sdk.MsgTypeURL(txCtx.Msg), "unable to deliver tx"), nil, err + } + + return simtypes.NewOperationMsg(txCtx.Msg, true, ""), nil, nil +} + +func SimulateMsgAddValidatorOperatorAddress( + ak types.AccountKeeper, + bk types.BankKeeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + simAccount, _ := simtypes.RandomAcc(r, accs) + + // choose two addresses that are not equal + opAccount, _ := simtypes.RandomAcc(r, accs) + for simAccount.Address.Equals(opAccount.Address) { + opAccount, _ = simtypes.RandomAcc(r, accs) + } + + msg := &types.MsgAddValidatorOperatorAddress{ + ValidatorAddress: simAccount.Address.String(), + OperatorAddress: opAccount.Address.String(), + } + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return genAndDeliverTxWithRandFeesAddOpAddr(txCtx, opAccount) + } +} + +func SimulateMsgUpdateValidatorDescription( + ak types.AccountKeeper, + bk types.BankKeeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + simAccount, _ := simtypes.RandomAcc(r, accs) + + desc := sample.ValidatorDescription(sample.String(r, 50)) + msg := types.NewMsgUpdateValidatorDescription( + simAccount.Address.String(), + desc.Identity, + desc.Moniker, + desc.Website, + desc.SecurityContact, + desc.Details, + ) + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: sdk.NewCoins(), + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) + } +} diff --git a/x/profile/types/codec.go b/x/profile/types/codec.go index 2d5a428d..72e5b194 100644 --- a/x/profile/types/codec.go +++ b/x/profile/types/codec.go @@ -1,38 +1,23 @@ package types import ( - "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - - // this line is used by starport scaffolding # 1 "github.com/cosmos/cosmos-sdk/types/msgservice" + // this line is used by starport scaffolding # 1 ) -func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgUpdateValidatorDescription{}, "profile/UpdateValidatorDescription", nil) - cdc.RegisterConcrete(&MsgAddValidatorOperatorAddress{}, "profile/AddValidatorOperatorAddress", nil) - cdc.RegisterConcrete(&MsgCreateCoordinator{}, "profile/CreateCoordinator", nil) - cdc.RegisterConcrete(&MsgUpdateCoordinatorDescription{}, "profile/UpdateCoordinatorDescription", nil) - cdc.RegisterConcrete(&MsgUpdateCoordinatorAddress{}, "profile/UpdateCoordinatorAddress", nil) - cdc.RegisterConcrete(&MsgDisableCoordinator{}, "profile/DisableCoordinator", nil) - // this line is used by starport scaffolding # 2 -} - func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateParams{}, + &MsgCreateCoordinator{}, + &MsgDisableCoordinator{}, + &MsgUpdateCoordinatorAddress{}, &MsgUpdateValidatorDescription{}, &MsgAddValidatorOperatorAddress{}, - &MsgCreateCoordinator{}, &MsgUpdateCoordinatorDescription{}, - &MsgUpdateCoordinatorAddress{}, - &MsgDisableCoordinator{}, ) // this line is used by starport scaffolding # 3 + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } - -var ( - Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) -) diff --git a/x/profile/types/coordinator.pb.go b/x/profile/types/coordinator.pb.go index 12fc8a25..79ddc4cc 100644 --- a/x/profile/types/coordinator.pb.go +++ b/x/profile/types/coordinator.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/profile/coordinator.proto +// source: network/profile/v1/coordinator.proto package types @@ -35,7 +35,7 @@ func (m *Coordinator) Reset() { *m = Coordinator{} } func (m *Coordinator) String() string { return proto.CompactTextString(m) } func (*Coordinator) ProtoMessage() {} func (*Coordinator) Descriptor() ([]byte, []int) { - return fileDescriptor_f7929f77698b58d3, []int{0} + return fileDescriptor_896796aabe30d397, []int{0} } func (m *Coordinator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -102,7 +102,7 @@ func (m *CoordinatorDescription) Reset() { *m = CoordinatorDescription{} func (m *CoordinatorDescription) String() string { return proto.CompactTextString(m) } func (*CoordinatorDescription) ProtoMessage() {} func (*CoordinatorDescription) Descriptor() ([]byte, []int) { - return fileDescriptor_f7929f77698b58d3, []int{1} + return fileDescriptor_896796aabe30d397, []int{1} } func (m *CoordinatorDescription) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -161,7 +161,7 @@ func (m *CoordinatorByAddress) Reset() { *m = CoordinatorByAddress{} } func (m *CoordinatorByAddress) String() string { return proto.CompactTextString(m) } func (*CoordinatorByAddress) ProtoMessage() {} func (*CoordinatorByAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_f7929f77698b58d3, []int{2} + return fileDescriptor_896796aabe30d397, []int{2} } func (m *CoordinatorByAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -205,37 +205,40 @@ func (m *CoordinatorByAddress) GetCoordinatorID() uint64 { } func init() { - proto.RegisterType((*Coordinator)(nil), "spn.profile.Coordinator") - proto.RegisterType((*CoordinatorDescription)(nil), "spn.profile.CoordinatorDescription") - proto.RegisterType((*CoordinatorByAddress)(nil), "spn.profile.CoordinatorByAddress") -} - -func init() { proto.RegisterFile("spn/profile/coordinator.proto", fileDescriptor_f7929f77698b58d3) } - -var fileDescriptor_f7929f77698b58d3 = []byte{ - // 350 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xbb, 0x4e, 0xc3, 0x30, - 0x14, 0x8d, 0x4b, 0xd5, 0x87, 0x23, 0x16, 0xab, 0xaa, 0x42, 0x25, 0x42, 0x54, 0x18, 0xc2, 0x40, - 0x22, 0x95, 0x2f, 0x20, 0xed, 0x82, 0xd8, 0xcc, 0xc6, 0x82, 0xd2, 0xd8, 0xa4, 0x96, 0x5a, 0xdb, - 0xb2, 0xcd, 0xa3, 0x7f, 0xc1, 0xc7, 0xf0, 0x11, 0x1d, 0x18, 0x2a, 0x26, 0x26, 0x84, 0xda, 0x1f, - 0x41, 0xcd, 0xa3, 0x0d, 0xa2, 0x03, 0x5b, 0xce, 0x3d, 0x37, 0xf7, 0x9e, 0x73, 0x7c, 0xe1, 0xb1, - 0x96, 0x3c, 0x94, 0x4a, 0x3c, 0xb0, 0x29, 0x0d, 0x13, 0x21, 0x14, 0x61, 0x3c, 0x36, 0x42, 0x05, - 0x52, 0x09, 0x23, 0x90, 0xad, 0x25, 0x0f, 0x0a, 0xba, 0xd7, 0x49, 0x45, 0x2a, 0xb2, 0x7a, 0xb8, - 0xf9, 0xca, 0x5b, 0x7a, 0x47, 0x89, 0xd0, 0x33, 0xa1, 0xef, 0x73, 0x22, 0x07, 0x39, 0xd5, 0x7f, - 0x07, 0xd0, 0x1e, 0xee, 0x66, 0xa2, 0x33, 0x78, 0x58, 0x59, 0x71, 0x3d, 0x72, 0x80, 0x07, 0xfc, - 0x3a, 0xfe, 0x5d, 0x44, 0x03, 0xd8, 0x8c, 0x09, 0x51, 0x54, 0x6b, 0xa7, 0xe6, 0x01, 0xbf, 0x1d, - 0x39, 0x1f, 0x6f, 0x17, 0x9d, 0x62, 0xf0, 0x55, 0xce, 0xdc, 0x1a, 0xc5, 0x78, 0x8a, 0xcb, 0x46, - 0x74, 0x03, 0x6d, 0x42, 0x75, 0xa2, 0x98, 0x34, 0x4c, 0x70, 0xe7, 0xc0, 0x03, 0xbe, 0x3d, 0x38, - 0x0d, 0x2a, 0xea, 0x83, 0x8a, 0x90, 0xd1, 0xae, 0x35, 0xaa, 0x2f, 0xbe, 0x4e, 0x2c, 0x5c, 0xfd, - 0x1b, 0x75, 0x61, 0x23, 0x4e, 0x0c, 0x7b, 0xa2, 0x4e, 0xdd, 0x03, 0x7e, 0x0b, 0x17, 0xa8, 0x3f, - 0x81, 0xdd, 0xfd, 0x43, 0x50, 0x0f, 0xb6, 0x18, 0xa1, 0xdc, 0x30, 0x33, 0xcf, 0x3c, 0xb5, 0xf1, - 0x16, 0x23, 0x07, 0x36, 0x9f, 0xe9, 0x58, 0x33, 0x43, 0x73, 0x3b, 0xb8, 0x84, 0x1b, 0x86, 0x50, - 0x13, 0xb3, 0xa9, 0xce, 0x04, 0xb7, 0x71, 0x09, 0xfb, 0x12, 0x76, 0x2a, 0x9b, 0xa2, 0x79, 0xe1, - 0xba, 0x1a, 0x0d, 0xf8, 0x6f, 0x34, 0x7f, 0x42, 0xaf, 0xed, 0x09, 0x3d, 0x1a, 0x2e, 0x56, 0x2e, - 0x58, 0xae, 0x5c, 0xf0, 0xbd, 0x72, 0xc1, 0xeb, 0xda, 0xb5, 0x96, 0x6b, 0xd7, 0xfa, 0x5c, 0xbb, - 0xd6, 0xdd, 0x79, 0xca, 0xcc, 0xe4, 0x71, 0x1c, 0x24, 0x62, 0x16, 0x1a, 0xca, 0x09, 0x55, 0x33, - 0xc6, 0x4d, 0xb8, 0xb9, 0x9b, 0x97, 0xed, 0xe5, 0x98, 0xb9, 0xa4, 0x7a, 0xdc, 0xc8, 0x9e, 0xfd, - 0xf2, 0x27, 0x00, 0x00, 0xff, 0xff, 0x4b, 0xec, 0xd7, 0x45, 0x55, 0x02, 0x00, 0x00, + proto.RegisterType((*Coordinator)(nil), "network.profile.v1.Coordinator") + proto.RegisterType((*CoordinatorDescription)(nil), "network.profile.v1.CoordinatorDescription") + proto.RegisterType((*CoordinatorByAddress)(nil), "network.profile.v1.CoordinatorByAddress") +} + +func init() { + proto.RegisterFile("network/profile/v1/coordinator.proto", fileDescriptor_896796aabe30d397) +} + +var fileDescriptor_896796aabe30d397 = []byte{ + // 355 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcd, 0x4e, 0xf2, 0x40, + 0x14, 0xed, 0xf0, 0x11, 0x7e, 0x86, 0x7c, 0x9b, 0x09, 0x21, 0x95, 0x45, 0x6d, 0x08, 0x8b, 0x6a, + 0x62, 0x1b, 0xf0, 0x09, 0x2c, 0x6c, 0xdc, 0x8e, 0x3b, 0x37, 0xa6, 0xb4, 0x63, 0x99, 0x08, 0x9d, + 0x66, 0xe6, 0x0a, 0xf2, 0x16, 0x3e, 0x8c, 0x0f, 0xc1, 0x92, 0xe8, 0xc6, 0x95, 0x31, 0xf4, 0x45, + 0x0c, 0xfd, 0x81, 0x1a, 0x58, 0xb8, 0xeb, 0xb9, 0xf7, 0xf4, 0x9e, 0x7b, 0xce, 0x5c, 0xdc, 0x8f, + 0x18, 0x2c, 0x85, 0x7c, 0x72, 0x62, 0x29, 0x1e, 0xf9, 0x8c, 0x39, 0x8b, 0x81, 0xe3, 0x0b, 0x21, + 0x03, 0x1e, 0x79, 0x20, 0xa4, 0x1d, 0x4b, 0x01, 0x82, 0x90, 0x9c, 0x65, 0xe7, 0x2c, 0x7b, 0x31, + 0xe8, 0x9e, 0xf9, 0x42, 0xcd, 0x85, 0x7a, 0x48, 0x19, 0x4e, 0x06, 0x32, 0x7a, 0xb7, 0x1d, 0x8a, + 0x50, 0x64, 0xf5, 0xdd, 0x57, 0x56, 0xed, 0x7d, 0x20, 0xdc, 0x1a, 0x1d, 0x46, 0x93, 0x3e, 0xfe, + 0x5f, 0x52, 0xba, 0x1d, 0xeb, 0xc8, 0x44, 0x56, 0x95, 0xfe, 0x2e, 0x92, 0x21, 0xae, 0x7b, 0x41, + 0x20, 0x99, 0x52, 0x7a, 0xc5, 0x44, 0x56, 0xd3, 0xd5, 0xdf, 0xdf, 0xae, 0xda, 0xb9, 0xdc, 0x4d, + 0xd6, 0xb9, 0x03, 0xc9, 0xa3, 0x90, 0x16, 0x44, 0x42, 0x71, 0x2b, 0x60, 0xca, 0x97, 0x3c, 0x06, + 0x2e, 0x22, 0xfd, 0x9f, 0x89, 0xac, 0xd6, 0xf0, 0xd2, 0x3e, 0x36, 0x61, 0x97, 0xf6, 0x19, 0x1f, + 0xfe, 0x70, 0xab, 0xeb, 0xaf, 0x73, 0x8d, 0x96, 0x87, 0x90, 0x0e, 0xae, 0x79, 0x3e, 0xf0, 0x05, + 0xd3, 0xab, 0x26, 0xb2, 0x1a, 0x34, 0x47, 0xbd, 0x29, 0xee, 0x9c, 0x1e, 0x42, 0xba, 0xb8, 0xc1, + 0x03, 0x16, 0x01, 0x87, 0x55, 0x6a, 0xad, 0x49, 0xf7, 0x98, 0xe8, 0xb8, 0xbe, 0x64, 0x13, 0xc5, + 0x81, 0x65, 0xae, 0x68, 0x01, 0x77, 0x9d, 0x80, 0x81, 0xc7, 0x67, 0x2a, 0xdd, 0xbb, 0x49, 0x0b, + 0xd8, 0x8b, 0x71, 0xbb, 0xa4, 0xe4, 0xae, 0x72, 0xf3, 0xe5, 0x84, 0xd0, 0x5f, 0x13, 0x3a, 0xca, + 0xbe, 0x72, 0x22, 0x7b, 0x77, 0xb4, 0xde, 0x1a, 0x68, 0xb3, 0x35, 0xd0, 0xf7, 0xd6, 0x40, 0xaf, + 0x89, 0xa1, 0x6d, 0x12, 0x43, 0xfb, 0x4c, 0x0c, 0xed, 0xfe, 0x22, 0xe4, 0x30, 0x7d, 0x9e, 0xd8, + 0xbe, 0x98, 0x3b, 0x3c, 0x8c, 0x38, 0x30, 0xa7, 0x38, 0xa4, 0x97, 0xfd, 0x29, 0xc1, 0x2a, 0x66, + 0x6a, 0x52, 0x4b, 0x5f, 0xff, 0xfa, 0x27, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x5c, 0x1d, 0xd9, 0x6a, + 0x02, 0x00, 0x00, } func (m *Coordinator) Marshal() (dAtA []byte, err error) { diff --git a/x/profile/types/errors.go b/x/profile/types/errors.go index 785ef444..7ac03418 100644 --- a/x/profile/types/errors.go +++ b/x/profile/types/errors.go @@ -8,13 +8,17 @@ import ( // x/profile module sentinel errors var ( - ErrCoordAlreadyExist = sdkerrors.Register(ModuleName, 2, "coordinator address already exist") - ErrCoordAddressNotFound = sdkerrors.Register(ModuleName, 3, "coordinator address not found") - ErrCoordInvalid = sdkerrors.Register(ModuleName, 4, "invalid coordinator") - ErrEmptyDescription = sdkerrors.Register(ModuleName, 5, "you must provide at least one description parameter") - ErrDupAddress = sdkerrors.Register(ModuleName, 6, "address is duplicated") - ErrCoordInactive = sdkerrors.Register(ModuleName, 7, "inactive coordinator") - ErrInvalidCoordAddress = sdkerrors.Register(ModuleName, 8, "invalid coordinator address") - ErrInvalidValAddress = sdkerrors.Register(ModuleName, 9, "invalid validator address") - ErrInvalidOpAddress = sdkerrors.Register(ModuleName, 10, "invalid operator address") + ErrInvalidSigner = sdkerrors.Register(ModuleName, 1101, "expected gov account as only signer for proposal message") + ErrCoordinatorAlreadyExist = sdkerrors.Register(ModuleName, 1102, "coordinator address already exist") + ErrCoordinatorAddressNotFound = sdkerrors.Register(ModuleName, 1103, "coordinator address not found") + ErrCoordinatorInvalid = sdkerrors.Register(ModuleName, 1104, "invalid coordinator") + ErrEmptyDescription = sdkerrors.Register(ModuleName, 1105, "you must provide at least one description parameter") + ErrDupAddress = sdkerrors.Register(ModuleName, 1106, "address is duplicated") + ErrCoordinatorInactive = sdkerrors.Register(ModuleName, 1107, "inactive coordinator") + ErrInvalidCoordinatorAddress = sdkerrors.Register(ModuleName, 1108, "invalid coordinator address") + ErrInvalidValidatorAddress = sdkerrors.Register(ModuleName, 1109, "invalid validator address") + ErrInvalidOperatorAddress = sdkerrors.Register(ModuleName, 1110, "invalid operator address") + ErrValidatorNotFound = sdkerrors.Register(ModuleName, 1111, "validator not found") + ErrValidatorByOperatorAddressNotFound = sdkerrors.Register(ModuleName, 1112, "validator by operator address not found") + ErrCoordinatorNotFound = sdkerrors.Register(ModuleName, 1113, "coordinator not found") ) diff --git a/x/profile/types/events.pb.go b/x/profile/types/events.pb.go index efdb795a..00171b25 100644 --- a/x/profile/types/events.pb.go +++ b/x/profile/types/events.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/profile/events.proto +// source: network/profile/v1/events.proto package types @@ -33,7 +33,7 @@ func (m *EventCoordinatorCreated) Reset() { *m = EventCoordinatorCreated func (m *EventCoordinatorCreated) String() string { return proto.CompactTextString(m) } func (*EventCoordinatorCreated) ProtoMessage() {} func (*EventCoordinatorCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_ff5cd48d62823f5f, []int{0} + return fileDescriptor_f4dd72d622555348, []int{0} } func (m *EventCoordinatorCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -85,7 +85,7 @@ func (m *EventCoordinatorAddressUpdated) Reset() { *m = EventCoordinator func (m *EventCoordinatorAddressUpdated) String() string { return proto.CompactTextString(m) } func (*EventCoordinatorAddressUpdated) ProtoMessage() {} func (*EventCoordinatorAddressUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_ff5cd48d62823f5f, []int{1} + return fileDescriptor_f4dd72d622555348, []int{1} } func (m *EventCoordinatorAddressUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -137,7 +137,7 @@ func (m *EventCoordinatorDisabled) Reset() { *m = EventCoordinatorDisabl func (m *EventCoordinatorDisabled) String() string { return proto.CompactTextString(m) } func (*EventCoordinatorDisabled) ProtoMessage() {} func (*EventCoordinatorDisabled) Descriptor() ([]byte, []int) { - return fileDescriptor_ff5cd48d62823f5f, []int{2} + return fileDescriptor_f4dd72d622555348, []int{2} } func (m *EventCoordinatorDisabled) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -189,7 +189,7 @@ func (m *EventValidatorCreated) Reset() { *m = EventValidatorCreated{} } func (m *EventValidatorCreated) String() string { return proto.CompactTextString(m) } func (*EventValidatorCreated) ProtoMessage() {} func (*EventValidatorCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_ff5cd48d62823f5f, []int{3} + return fileDescriptor_f4dd72d622555348, []int{3} } func (m *EventValidatorCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -243,7 +243,7 @@ func (m *EventValidatorOperatorAddressesUpdated) Reset() { func (m *EventValidatorOperatorAddressesUpdated) String() string { return proto.CompactTextString(m) } func (*EventValidatorOperatorAddressesUpdated) ProtoMessage() {} func (*EventValidatorOperatorAddressesUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_ff5cd48d62823f5f, []int{4} + return fileDescriptor_f4dd72d622555348, []int{4} } func (m *EventValidatorOperatorAddressesUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -287,39 +287,39 @@ func (m *EventValidatorOperatorAddressesUpdated) GetOperatorAddresses() []string } func init() { - proto.RegisterType((*EventCoordinatorCreated)(nil), "spn.profile.EventCoordinatorCreated") - proto.RegisterType((*EventCoordinatorAddressUpdated)(nil), "spn.profile.EventCoordinatorAddressUpdated") - proto.RegisterType((*EventCoordinatorDisabled)(nil), "spn.profile.EventCoordinatorDisabled") - proto.RegisterType((*EventValidatorCreated)(nil), "spn.profile.EventValidatorCreated") - proto.RegisterType((*EventValidatorOperatorAddressesUpdated)(nil), "spn.profile.EventValidatorOperatorAddressesUpdated") + proto.RegisterType((*EventCoordinatorCreated)(nil), "network.profile.v1.EventCoordinatorCreated") + proto.RegisterType((*EventCoordinatorAddressUpdated)(nil), "network.profile.v1.EventCoordinatorAddressUpdated") + proto.RegisterType((*EventCoordinatorDisabled)(nil), "network.profile.v1.EventCoordinatorDisabled") + proto.RegisterType((*EventValidatorCreated)(nil), "network.profile.v1.EventValidatorCreated") + proto.RegisterType((*EventValidatorOperatorAddressesUpdated)(nil), "network.profile.v1.EventValidatorOperatorAddressesUpdated") } -func init() { proto.RegisterFile("spn/profile/events.proto", fileDescriptor_ff5cd48d62823f5f) } +func init() { proto.RegisterFile("network/profile/v1/events.proto", fileDescriptor_f4dd72d622555348) } -var fileDescriptor_ff5cd48d62823f5f = []byte{ - // 344 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x28, 0x2e, 0xc8, 0xd3, - 0x2f, 0x28, 0xca, 0x4f, 0xcb, 0xcc, 0x49, 0xd5, 0x4f, 0x2d, 0x4b, 0xcd, 0x2b, 0x29, 0xd6, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2e, 0x2e, 0xc8, 0xd3, 0x83, 0xca, 0x48, 0x89, 0xa4, 0xe7, - 0xa7, 0xe7, 0x83, 0xc5, 0xf5, 0x41, 0x2c, 0x88, 0x12, 0x29, 0xc9, 0xe4, 0xfc, 0xe2, 0xdc, 0xfc, - 0xe2, 0x78, 0x88, 0x04, 0x84, 0x03, 0x95, 0x92, 0x45, 0x36, 0x37, 0x39, 0x3f, 0xbf, 0x28, 0x25, - 0x33, 0x2f, 0xb1, 0x24, 0xbf, 0x08, 0x2a, 0x2d, 0x8d, 0x2c, 0x5d, 0x96, 0x98, 0x93, 0x99, 0x82, - 0x90, 0x54, 0x2a, 0xe6, 0x12, 0x77, 0x05, 0xb9, 0xc4, 0x19, 0xa1, 0xcd, 0xb9, 0x28, 0x35, 0xb1, - 0x24, 0x35, 0x45, 0x48, 0x85, 0x8b, 0x17, 0xc9, 0x30, 0x4f, 0x17, 0x09, 0x46, 0x05, 0x46, 0x0d, - 0x96, 0x20, 0x54, 0x41, 0x21, 0x23, 0x2e, 0xf6, 0xc4, 0x94, 0x94, 0xa2, 0xd4, 0xe2, 0x62, 0x09, - 0x26, 0x05, 0x46, 0x0d, 0x4e, 0x27, 0x89, 0x4b, 0x5b, 0x74, 0x45, 0xa0, 0xee, 0x73, 0x84, 0xc8, - 0x04, 0x97, 0x14, 0x65, 0xe6, 0xa5, 0x07, 0xc1, 0x14, 0x2a, 0x35, 0x30, 0x72, 0xc9, 0xa1, 0xdb, - 0x0a, 0x55, 0x1a, 0x5a, 0x90, 0x42, 0x82, 0xe5, 0x16, 0x5c, 0x5c, 0x79, 0xa9, 0xe5, 0x8e, 0x44, - 0xda, 0x8f, 0xa4, 0x56, 0xa9, 0x84, 0x4b, 0x02, 0xdd, 0x05, 0x2e, 0x99, 0xc5, 0x89, 0x49, 0x39, - 0x34, 0xf5, 0x78, 0x25, 0x97, 0x28, 0xd8, 0xd6, 0x30, 0x58, 0x2c, 0xc0, 0xc2, 0x1a, 0xc9, 0x30, - 0x46, 0x22, 0x0d, 0x13, 0xd2, 0xe1, 0x12, 0xcc, 0x2f, 0x48, 0x2d, 0x42, 0x0a, 0xbc, 0x54, 0x90, - 0x53, 0x98, 0x35, 0x38, 0x83, 0x30, 0x25, 0x94, 0xba, 0x18, 0xb9, 0xd4, 0x50, 0xed, 0xf6, 0x47, - 0x57, 0x03, 0x0b, 0x7b, 0x9a, 0x3b, 0xc6, 0xc9, 0xf9, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, - 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, - 0xe5, 0x18, 0xa2, 0x34, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x4b, - 0x52, 0xf3, 0x52, 0x52, 0x8b, 0x72, 0x33, 0xf3, 0x4a, 0xf4, 0x41, 0x49, 0xb8, 0x02, 0x9e, 0x88, - 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x29, 0xd8, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, - 0xad, 0xa7, 0x64, 0xec, 0x57, 0x03, 0x00, 0x00, +var fileDescriptor_f4dd72d622555348 = []byte{ + // 350 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x28, 0xca, 0x4f, 0xcb, 0xcc, 0x49, 0xd5, 0x2f, 0x33, 0xd4, 0x4f, + 0x2d, 0x4b, 0xcd, 0x2b, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0x2a, 0xd0, + 0x83, 0x2a, 0xd0, 0x2b, 0x33, 0x94, 0x92, 0x4c, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0x8e, 0x07, 0xab, + 0xd0, 0x87, 0x70, 0x20, 0xca, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0x21, 0xe2, 0x20, 0x16, 0x54, + 0x54, 0x05, 0x8b, 0x2d, 0xc9, 0xf9, 0xf9, 0x45, 0x29, 0x99, 0x79, 0x89, 0x25, 0xf9, 0x45, 0x50, + 0x55, 0x4a, 0x58, 0x54, 0x95, 0x25, 0xe6, 0x64, 0xa6, 0x20, 0xd4, 0x28, 0x15, 0x73, 0x89, 0xbb, + 0x82, 0x9c, 0xe7, 0x8c, 0xd0, 0xed, 0x5c, 0x94, 0x9a, 0x58, 0x92, 0x9a, 0x22, 0xa4, 0xc2, 0xc5, + 0x8b, 0x64, 0xa6, 0xa7, 0x8b, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x4b, 0x10, 0xaa, 0xa0, 0x90, 0x11, + 0x17, 0x7b, 0x62, 0x4a, 0x4a, 0x51, 0x6a, 0x71, 0xb1, 0x04, 0x93, 0x02, 0xa3, 0x06, 0xa7, 0x93, + 0xc4, 0xa5, 0x2d, 0xba, 0x22, 0x50, 0x3f, 0x38, 0x42, 0x64, 0x82, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, + 0x83, 0x60, 0x0a, 0x95, 0x1a, 0x18, 0xb9, 0xe4, 0xd0, 0x6d, 0x85, 0x2a, 0x0d, 0x2d, 0x48, 0x21, + 0xc1, 0x72, 0x0b, 0x2e, 0xae, 0xbc, 0xd4, 0x72, 0x47, 0x22, 0xed, 0x47, 0x52, 0xab, 0x54, 0xc2, + 0x25, 0x81, 0xee, 0x02, 0x97, 0xcc, 0xe2, 0xc4, 0xa4, 0x1c, 0x9a, 0x7a, 0xbc, 0x92, 0x4b, 0x14, + 0x6c, 0x6b, 0x18, 0x2c, 0x16, 0x60, 0x61, 0x8d, 0x64, 0x18, 0x23, 0x91, 0x86, 0x09, 0xe9, 0x70, + 0x09, 0xe6, 0x17, 0xa4, 0x16, 0x21, 0x05, 0x5e, 0x2a, 0xc8, 0x29, 0xcc, 0x1a, 0x9c, 0x41, 0x98, + 0x12, 0x4a, 0x5d, 0x8c, 0x5c, 0x6a, 0xa8, 0x76, 0xfb, 0xa3, 0xab, 0x81, 0x85, 0x3d, 0xcd, 0x1d, + 0xe3, 0xe4, 0x7c, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, + 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x9a, 0xe9, 0x99, + 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x99, 0xe9, 0x79, 0x99, 0x25, 0xa9, 0xfa, + 0xb0, 0x54, 0x5c, 0x01, 0x4f, 0xc7, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0x14, 0x6c, + 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x4a, 0x55, 0x78, 0x73, 0x03, 0x00, 0x00, } func (m *EventCoordinatorCreated) Marshal() (dAtA []byte, err error) { diff --git a/x/profile/types/expected_keepers.go b/x/profile/types/expected_keepers.go index ed31f0eb..1a57278a 100644 --- a/x/profile/types/expected_keepers.go +++ b/x/profile/types/expected_keepers.go @@ -1,14 +1,23 @@ package types import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) +// AccountKeeper defines the expected interface for the Account module. type AccountKeeper interface { - GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI // only used for simulation } +// BankKeeper defines the expected interface for the Bank module. type BankKeeper interface { - SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins + SpendableCoins(context.Context, sdk.AccAddress) sdk.Coins +} + +// ParamSubspace defines the expected Subspace interface for parameters. +type ParamSubspace interface { + Get(context.Context, []byte, interface{}) + Set(context.Context, []byte, interface{}) } diff --git a/x/profile/types/genesis.go b/x/profile/types/genesis.go index 493fdf19..7971d96b 100644 --- a/x/profile/types/genesis.go +++ b/x/profile/types/genesis.go @@ -1,39 +1,42 @@ package types import ( - "github.com/pkg/errors" - // this line is used by starport scaffolding # genesis/types/import + "errors" ) -// DefaultGenesis returns the default Capability genesis state +// DefaultGenesis returns the default genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ - // this line is used by starport scaffolding # genesis/types/default - Validators: []Validator{}, + Params: DefaultParams(), + ValidatorList: []Validator{}, ValidatorsByOperatorAddress: []ValidatorByOperatorAddress{}, - Coordinators: []Coordinator{}, - CoordinatorCounter: 1, + CoordinatorList: []Coordinator{}, CoordinatorsByAddress: []CoordinatorByAddress{}, + // this line is used by starport scaffolding # genesis/types/default } } // Validate performs basic genesis state validation returning an error upon any // failure. func (gs GenesisState) Validate() error { - // this line is used by starport scaffolding # genesis/types/validate - if err := gs.ValidateValidators(); err != nil { return err } - return gs.ValidateCoordinators() + if err := gs.ValidateCoordinators(); err != nil { + return err + } + + // this line is used by starport scaffolding # genesis/types/validate + + return gs.Params.Validate() } func (gs GenesisState) ValidateValidators() error { // Check for duplicated index in validator validatorIndexMap := make(map[string]Validator) - for _, elem := range gs.Validators { - valIndex := string(ValidatorKey(elem.Address)) + for _, elem := range gs.ValidatorList { + valIndex := elem.Address if _, ok := validatorIndexMap[valIndex]; ok { return errors.New("duplicated index for validator") } @@ -43,12 +46,12 @@ func (gs GenesisState) ValidateValidators() error { // Check for duplicated index in validatorByOperatorAddress validatorByOperatorAddressIndexMap := make(map[string]struct{}) for _, elem := range gs.ValidatorsByOperatorAddress { - index := string(CoordinatorByAddressKey(elem.OperatorAddress)) + index := elem.OperatorAddress if _, ok := validatorByOperatorAddressIndexMap[index]; ok { return errors.New("duplicated index for validatorByOperatorAddress") } - valIndex := ValidatorKey(elem.ValidatorAddress) - validator, ok := validatorIndexMap[string(valIndex)] + valIndex := elem.ValidatorAddress + validator, ok := validatorIndexMap[valIndex] if !ok { return errors.New("validator operator address not found for Validator") } @@ -65,7 +68,7 @@ func (gs GenesisState) ValidateCoordinators() error { // Check for duplicated index in coordinatorByAddress coordinatorByAddressIndexMap := make(map[string]uint64) for _, elem := range gs.CoordinatorsByAddress { - index := string(CoordinatorByAddressKey(elem.Address)) + index := elem.Address if _, ok := coordinatorByAddressIndexMap[index]; ok { return errors.New("duplicated index for coordinatorByAddress") } @@ -74,15 +77,15 @@ func (gs GenesisState) ValidateCoordinators() error { // Check for duplicated ID in coordinator or if coordinator is inactive coordinatorIDMap := make(map[uint64]bool) - counter := gs.GetCoordinatorCounter() - for _, elem := range gs.Coordinators { + counter := gs.CoordinatorCount + for _, elem := range gs.CoordinatorList { if _, ok := coordinatorIDMap[elem.CoordinatorID]; ok { return errors.New("duplicated id for coordinator") } if elem.CoordinatorID >= counter { return errors.New("coordinator id should be lower or equal than the last id") } - index := string(CoordinatorByAddressKey(elem.Address)) + index := elem.Address _, found := coordinatorByAddressIndexMap[index] switch { diff --git a/x/profile/types/genesis.pb.go b/x/profile/types/genesis.pb.go index d9335daa..dfa2eb62 100644 --- a/x/profile/types/genesis.pb.go +++ b/x/profile/types/genesis.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/profile/genesis.proto +// source: network/profile/v1/genesis.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,18 +26,20 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the profile module's genesis state. type GenesisState struct { - Validators []Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators"` - ValidatorsByOperatorAddress []ValidatorByOperatorAddress `protobuf:"bytes,2,rep,name=validatorsByOperatorAddress,proto3" json:"validatorsByOperatorAddress"` - Coordinators []Coordinator `protobuf:"bytes,3,rep,name=coordinators,proto3" json:"coordinators"` - CoordinatorCounter uint64 `protobuf:"varint,4,opt,name=coordinatorCounter,proto3" json:"coordinatorCounter,omitempty"` - CoordinatorsByAddress []CoordinatorByAddress `protobuf:"bytes,5,rep,name=coordinatorsByAddress,proto3" json:"coordinatorsByAddress"` + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + ValidatorList []Validator `protobuf:"bytes,2,rep,name=validatorList,proto3" json:"validatorList"` + ValidatorsByOperatorAddress []ValidatorByOperatorAddress `protobuf:"bytes,3,rep,name=validatorsByOperatorAddress,proto3" json:"validatorsByOperatorAddress"` + CoordinatorList []Coordinator `protobuf:"bytes,4,rep,name=coordinatorList,proto3" json:"coordinatorList"` + CoordinatorCount uint64 `protobuf:"varint,5,opt,name=coordinatorCount,proto3" json:"coordinatorCount,omitempty"` + CoordinatorsByAddress []CoordinatorByAddress `protobuf:"bytes,6,rep,name=coordinatorsByAddress,proto3" json:"coordinatorsByAddress"` } func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_54d8df4b0bb3c45a, []int{0} + return fileDescriptor_5e5783827df5aa8a, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -65,9 +68,16 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetValidators() []Validator { +func (m *GenesisState) GetParams() Params { if m != nil { - return m.Validators + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetValidatorList() []Validator { + if m != nil { + return m.ValidatorList } return nil } @@ -79,16 +89,16 @@ func (m *GenesisState) GetValidatorsByOperatorAddress() []ValidatorByOperatorAdd return nil } -func (m *GenesisState) GetCoordinators() []Coordinator { +func (m *GenesisState) GetCoordinatorList() []Coordinator { if m != nil { - return m.Coordinators + return m.CoordinatorList } return nil } -func (m *GenesisState) GetCoordinatorCounter() uint64 { +func (m *GenesisState) GetCoordinatorCount() uint64 { if m != nil { - return m.CoordinatorCounter + return m.CoordinatorCount } return 0 } @@ -101,33 +111,37 @@ func (m *GenesisState) GetCoordinatorsByAddress() []CoordinatorByAddress { } func init() { - proto.RegisterType((*GenesisState)(nil), "spn.profile.GenesisState") + proto.RegisterType((*GenesisState)(nil), "network.profile.v1.GenesisState") } -func init() { proto.RegisterFile("spn/profile/genesis.proto", fileDescriptor_54d8df4b0bb3c45a) } +func init() { proto.RegisterFile("network/profile/v1/genesis.proto", fileDescriptor_5e5783827df5aa8a) } -var fileDescriptor_54d8df4b0bb3c45a = []byte{ - // 312 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xb1, 0x4e, 0xfb, 0x30, - 0x10, 0xc6, 0x93, 0x7f, 0xfb, 0x67, 0x70, 0x3b, 0x59, 0x80, 0x42, 0x2b, 0x4c, 0x61, 0xa1, 0x2c, - 0x8e, 0x04, 0x2b, 0x0b, 0xc9, 0xc0, 0x88, 0x54, 0x24, 0x06, 0x24, 0x86, 0xb4, 0x31, 0xc1, 0x52, - 0xeb, 0xb3, 0x6c, 0x17, 0x91, 0xb7, 0xe8, 0x63, 0x75, 0xec, 0xc8, 0x84, 0x50, 0xf2, 0x22, 0x28, - 0x69, 0xda, 0x38, 0xa8, 0x65, 0xbb, 0xf3, 0xf7, 0xdd, 0xef, 0xf3, 0xe9, 0xd0, 0x89, 0x96, 0xc2, - 0x97, 0x0a, 0x5e, 0xf9, 0x94, 0xf9, 0x09, 0x13, 0x4c, 0x73, 0x4d, 0xa5, 0x02, 0x03, 0xb8, 0xa3, - 0xa5, 0xa0, 0x95, 0xd4, 0x3b, 0x4c, 0x20, 0x81, 0xf2, 0xdd, 0x2f, 0xaa, 0xb5, 0xa5, 0xd7, 0xb7, - 0xa7, 0xdf, 0xa3, 0x29, 0x8f, 0x23, 0x03, 0xaa, 0x12, 0x4f, 0x6d, 0x71, 0x02, 0xa0, 0x62, 0x2e, - 0x6a, 0xf9, 0x62, 0xd1, 0x42, 0xdd, 0xfb, 0x75, 0xe0, 0xa3, 0x89, 0x0c, 0xc3, 0xb7, 0x08, 0x6d, - 0x11, 0xda, 0x73, 0x07, 0xad, 0x61, 0xe7, 0xfa, 0x98, 0x5a, 0x9f, 0xa0, 0x4f, 0x1b, 0x39, 0x68, - 0x2f, 0xbf, 0xce, 0x9c, 0x91, 0xe5, 0xc7, 0x80, 0xfa, 0x75, 0x17, 0xa4, 0x0f, 0x92, 0xa9, 0xa2, - 0xbc, 0x8b, 0x63, 0xc5, 0xb4, 0xf6, 0xfe, 0x95, 0xb8, 0xcb, 0x3d, 0xb8, 0xdf, 0xf6, 0x8a, 0xff, - 0x17, 0x11, 0x07, 0xa8, 0x6b, 0x2d, 0xa5, 0xbd, 0x56, 0x99, 0xe0, 0x35, 0x12, 0xc2, 0xda, 0x50, - 0x21, 0x1b, 0x33, 0x98, 0x22, 0x6c, 0xf5, 0x21, 0xcc, 0x85, 0x61, 0xca, 0x6b, 0x0f, 0xdc, 0x61, - 0x7b, 0xb4, 0x43, 0xc1, 0x2f, 0xe8, 0xc8, 0x9e, 0x0f, 0xd2, 0xcd, 0x7a, 0xff, 0xcb, 0xf0, 0xf3, - 0xbd, 0xe1, 0x69, 0x73, 0xb1, 0xdd, 0x94, 0x20, 0x5c, 0x66, 0xc4, 0x5d, 0x65, 0xc4, 0xfd, 0xce, - 0x88, 0xbb, 0xc8, 0x89, 0xb3, 0xca, 0x89, 0xf3, 0x99, 0x13, 0xe7, 0xf9, 0x2a, 0xe1, 0xe6, 0x6d, - 0x3e, 0xa6, 0x13, 0x98, 0xf9, 0x86, 0x89, 0x98, 0xa9, 0x19, 0x17, 0xc6, 0x2f, 0x2e, 0xfc, 0xb1, - 0xbd, 0xb1, 0x49, 0x25, 0xd3, 0xe3, 0x83, 0xf2, 0xbc, 0x37, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, - 0x7f, 0xb6, 0x1b, 0x83, 0x5a, 0x02, 0x00, 0x00, +var fileDescriptor_5e5783827df5aa8a = []byte{ + // 377 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xc8, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x28, 0xca, 0x4f, 0xcb, 0xcc, 0x49, 0xd5, 0x2f, 0x33, 0xd4, 0x4f, + 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0xaa, + 0xd0, 0x83, 0xaa, 0xd0, 0x2b, 0x33, 0x94, 0x12, 0x4c, 0xcc, 0xcd, 0xcc, 0xcb, 0xd7, 0x07, 0x93, + 0x10, 0x65, 0x52, 0x22, 0xe9, 0xf9, 0xe9, 0xf9, 0x60, 0xa6, 0x3e, 0x88, 0x05, 0x15, 0x55, 0xc1, + 0x62, 0x7c, 0x72, 0x7e, 0x7e, 0x51, 0x4a, 0x66, 0x5e, 0x62, 0x49, 0x7e, 0x11, 0x54, 0x95, 0x3c, + 0x16, 0x55, 0x05, 0x89, 0x45, 0x89, 0xb9, 0x50, 0x37, 0x48, 0x29, 0x61, 0x51, 0x50, 0x96, 0x98, + 0x93, 0x99, 0x82, 0x30, 0x44, 0xe9, 0x33, 0x33, 0x17, 0x8f, 0x3b, 0xc4, 0xe5, 0xc1, 0x25, 0x89, + 0x25, 0xa9, 0x42, 0xb6, 0x5c, 0x6c, 0x10, 0x43, 0x24, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0xa4, + 0xf4, 0x30, 0x7d, 0xa2, 0x17, 0x00, 0x56, 0xe1, 0xc4, 0x79, 0xe2, 0x9e, 0x3c, 0xc3, 0x8a, 0xe7, + 0x1b, 0xb4, 0x18, 0x83, 0xa0, 0x9a, 0x84, 0x3c, 0xb9, 0x78, 0xe1, 0x56, 0xf8, 0x64, 0x16, 0x97, + 0x48, 0x30, 0x29, 0x30, 0x6b, 0x70, 0x1b, 0xc9, 0x62, 0x33, 0x25, 0x0c, 0xa6, 0xd0, 0x89, 0x05, + 0x64, 0x50, 0x10, 0xaa, 0x4e, 0xa1, 0x32, 0x2e, 0x69, 0xb8, 0x40, 0xb1, 0x53, 0xa5, 0x7f, 0x41, + 0x6a, 0x11, 0x88, 0xe9, 0x98, 0x92, 0x52, 0x94, 0x5a, 0x5c, 0x2c, 0xc1, 0x0c, 0x36, 0x58, 0x0f, + 0xbf, 0xc1, 0xe8, 0xba, 0xa0, 0x36, 0xe1, 0x33, 0x58, 0xc8, 0x9f, 0x8b, 0x1f, 0x29, 0xb0, 0xc1, + 0x9e, 0x60, 0x01, 0xdb, 0x25, 0x8f, 0xcd, 0x2e, 0x67, 0x84, 0x52, 0xa8, 0xe1, 0xe8, 0xba, 0x85, + 0xb4, 0xb8, 0x04, 0x90, 0x84, 0x9c, 0xf3, 0x4b, 0xf3, 0x4a, 0x24, 0x58, 0x15, 0x18, 0x35, 0x58, + 0x82, 0x30, 0xc4, 0x85, 0x52, 0xb8, 0x44, 0x91, 0xc4, 0x8a, 0x9d, 0x2a, 0x61, 0xde, 0x65, 0x03, + 0x3b, 0x41, 0x83, 0x90, 0x13, 0x2a, 0x51, 0x3d, 0x8a, 0xdd, 0x30, 0x27, 0xe7, 0x13, 0x8f, 0xe4, + 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, + 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xd2, 0x4c, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, + 0xce, 0xcf, 0xd5, 0xcf, 0x4c, 0xcf, 0xcb, 0x2c, 0x49, 0xd5, 0x87, 0xa5, 0xa2, 0x0a, 0x78, 0x3a, + 0x2a, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0xa7, 0x20, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x45, 0x58, 0xdb, 0x9e, 0x0d, 0x03, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -161,18 +175,18 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x32 } } - if m.CoordinatorCounter != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.CoordinatorCounter)) + if m.CoordinatorCount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.CoordinatorCount)) i-- - dAtA[i] = 0x20 + dAtA[i] = 0x28 } - if len(m.Coordinators) > 0 { - for iNdEx := len(m.Coordinators) - 1; iNdEx >= 0; iNdEx-- { + if len(m.CoordinatorList) > 0 { + for iNdEx := len(m.CoordinatorList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Coordinators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.CoordinatorList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -180,7 +194,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x22 } } if len(m.ValidatorsByOperatorAddress) > 0 { @@ -194,13 +208,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a } } - if len(m.Validators) > 0 { - for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ValidatorList) > 0 { + for iNdEx := len(m.ValidatorList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ValidatorList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -208,9 +222,19 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 + } + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -231,8 +255,10 @@ func (m *GenesisState) Size() (n int) { } var l int _ = l - if len(m.Validators) > 0 { - for _, e := range m.Validators { + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.ValidatorList) > 0 { + for _, e := range m.ValidatorList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } @@ -243,14 +269,14 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.Coordinators) > 0 { - for _, e := range m.Coordinators { + if len(m.CoordinatorList) > 0 { + for _, e := range m.CoordinatorList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if m.CoordinatorCounter != 0 { - n += 1 + sovGenesis(uint64(m.CoordinatorCounter)) + if m.CoordinatorCount != 0 { + n += 1 + sovGenesis(uint64(m.CoordinatorCount)) } if len(m.CoordinatorsByAddress) > 0 { for _, e := range m.CoordinatorsByAddress { @@ -298,7 +324,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -325,12 +351,45 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Validators = append(m.Validators, Validator{}) - if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorList = append(m.ValidatorList, Validator{}) + if err := m.ValidatorList[len(m.ValidatorList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ValidatorsByOperatorAddress", wireType) } @@ -364,9 +423,9 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Coordinators", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CoordinatorList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -393,16 +452,16 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Coordinators = append(m.Coordinators, Coordinator{}) - if err := m.Coordinators[len(m.Coordinators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.CoordinatorList = append(m.CoordinatorList, Coordinator{}) + if err := m.CoordinatorList[len(m.CoordinatorList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + case 5: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CoordinatorCounter", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CoordinatorCount", wireType) } - m.CoordinatorCounter = 0 + m.CoordinatorCount = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -412,12 +471,12 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.CoordinatorCounter |= uint64(b&0x7F) << shift + m.CoordinatorCount |= uint64(b&0x7F) << shift if b < 0x80 { break } } - case 5: + case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field CoordinatorsByAddress", wireType) } diff --git a/x/profile/types/genesis_test.go b/x/profile/types/genesis_test.go index b0a9d011..105a3c20 100644 --- a/x/profile/types/genesis_test.go +++ b/x/profile/types/genesis_test.go @@ -4,11 +4,10 @@ import ( "testing" "github.com/pkg/errors" - "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/types" ) func TestGenesisState_Validate(t *testing.T) { @@ -33,7 +32,7 @@ func TestGenesisState_Validate(t *testing.T) { { desc: "should validate valid genesis", genState: &types.GenesisState{ - Validators: []types.Validator{ + ValidatorList: []types.Validator{ {Address: addr1, OperatorAddresses: []string{opAddr1}}, {Address: addr2, OperatorAddresses: []string{opAddr2}}, {Address: addr3, OperatorAddresses: []string{opAddr3}}, @@ -48,12 +47,12 @@ func TestGenesisState_Validate(t *testing.T) { {CoordinatorID: 1, Address: addr2}, {CoordinatorID: 2, Address: addr3}, }, - Coordinators: []types.Coordinator{ + CoordinatorList: []types.Coordinator{ {CoordinatorID: 0, Address: addr1, Active: true}, {CoordinatorID: 1, Address: addr2, Active: true}, {CoordinatorID: 2, Address: addr3, Active: true}, }, - CoordinatorCounter: 4, + CoordinatorCount: 4, // this line is used by starport scaffolding # types/genesis/validField }, valid: true, @@ -61,7 +60,7 @@ func TestGenesisState_Validate(t *testing.T) { { desc: "should prevent validate an invalid genesis", genState: &types.GenesisState{ - Validators: []types.Validator{ + ValidatorList: []types.Validator{ {Address: addr1, OperatorAddresses: []string{opAddr1}}, }, ValidatorsByOperatorAddress: []types.ValidatorByOperatorAddress{ @@ -105,7 +104,7 @@ func TestGenesisStateValidateValidator(t *testing.T) { { name: "should validate genesis with valid validators", genState: &types.GenesisState{ - Validators: []types.Validator{ + ValidatorList: []types.Validator{ {Address: addr1, OperatorAddresses: []string{opAddr1}}, {Address: addr2, OperatorAddresses: []string{opAddr2}}, {Address: addr3, OperatorAddresses: []string{opAddr3}}, @@ -120,7 +119,7 @@ func TestGenesisStateValidateValidator(t *testing.T) { { name: "should prevent validate duplicated validators", genState: &types.GenesisState{ - Validators: []types.Validator{ + ValidatorList: []types.Validator{ {Address: addr1, OperatorAddresses: []string{opAddr1}}, {Address: addr1, OperatorAddresses: []string{opAddr1}}, }, @@ -134,7 +133,7 @@ func TestGenesisStateValidateValidator(t *testing.T) { { name: "should prevent validate duplicated validator by operator address", genState: &types.GenesisState{ - Validators: []types.Validator{ + ValidatorList: []types.Validator{ {Address: addr1, OperatorAddresses: []string{opAddr1}}, }, ValidatorsByOperatorAddress: []types.ValidatorByOperatorAddress{ @@ -147,7 +146,7 @@ func TestGenesisStateValidateValidator(t *testing.T) { { name: "should prevent validate missing validator address", genState: &types.GenesisState{ - Validators: []types.Validator{ + ValidatorList: []types.Validator{ {Address: addr1, OperatorAddresses: []string{opAddr1}}, }, ValidatorsByOperatorAddress: []types.ValidatorByOperatorAddress{ @@ -160,7 +159,7 @@ func TestGenesisStateValidateValidator(t *testing.T) { { name: "should prevent validator missing validator operator address", genState: &types.GenesisState{ - Validators: []types.Validator{ + ValidatorList: []types.Validator{ {Address: addr1, OperatorAddresses: []string{}}, {Address: addr2, OperatorAddresses: []string{opAddr2}}, }, @@ -212,13 +211,13 @@ func TestGenesisStateValidateCoordinator(t *testing.T) { {CoordinatorID: 2, Address: addr3}, {CoordinatorID: 3, Address: addr4}, }, - Coordinators: []types.Coordinator{ + CoordinatorList: []types.Coordinator{ {CoordinatorID: 0, Address: addr1, Active: true}, {CoordinatorID: 1, Address: addr2, Active: true}, {CoordinatorID: 2, Address: addr3, Active: true}, {CoordinatorID: 3, Address: addr4, Active: true}, }, - CoordinatorCounter: 4, + CoordinatorCount: 4, }, }, { @@ -227,11 +226,11 @@ func TestGenesisStateValidateCoordinator(t *testing.T) { CoordinatorsByAddress: []types.CoordinatorByAddress{ {CoordinatorID: 0, Address: addr1}, }, - Coordinators: []types.Coordinator{ + CoordinatorList: []types.Coordinator{ {CoordinatorID: 0, Address: addr1, Active: true}, {CoordinatorID: 1, Address: addr2, Active: false}, }, - CoordinatorCounter: 2, + CoordinatorCount: 2, }, }, { @@ -241,7 +240,7 @@ func TestGenesisStateValidateCoordinator(t *testing.T) { {CoordinatorID: 0, Address: addr1}, {CoordinatorID: 1, Address: addr1}, }, - CoordinatorCounter: 2, + CoordinatorCount: 2, }, err: errors.New("duplicated index for coordinatorByAddress"), }, @@ -252,11 +251,11 @@ func TestGenesisStateValidateCoordinator(t *testing.T) { {CoordinatorID: 0, Address: addr1}, {CoordinatorID: 0, Address: addr2}, }, - Coordinators: []types.Coordinator{ + CoordinatorList: []types.Coordinator{ {CoordinatorID: 0, Address: addr1, Active: true}, {CoordinatorID: 0, Address: addr2, Active: true}, }, - CoordinatorCounter: 2, + CoordinatorCount: 2, }, err: errors.New("duplicated id for coordinator"), }, @@ -266,11 +265,11 @@ func TestGenesisStateValidateCoordinator(t *testing.T) { CoordinatorsByAddress: []types.CoordinatorByAddress{ {CoordinatorID: 0, Address: addr1}, }, - Coordinators: []types.Coordinator{ + CoordinatorList: []types.Coordinator{ {CoordinatorID: 0, Address: addr1, Active: true}, {CoordinatorID: 1, Address: addr2, Active: true}, }, - CoordinatorCounter: 2, + CoordinatorCount: 2, }, err: errors.New("coordinator address not found for CoordinatorByAddress"), }, @@ -281,10 +280,10 @@ func TestGenesisStateValidateCoordinator(t *testing.T) { {CoordinatorID: 0, Address: addr1}, {CoordinatorID: 1, Address: addr2}, }, - Coordinators: []types.Coordinator{ + CoordinatorList: []types.Coordinator{ {CoordinatorID: 0, Address: addr1, Active: true}, }, - CoordinatorCounter: 2, + CoordinatorCount: 2, }, err: errors.New("coordinator address not found for coordinatorID"), }, @@ -295,11 +294,11 @@ func TestGenesisStateValidateCoordinator(t *testing.T) { {CoordinatorID: 0, Address: addr1}, {CoordinatorID: 133, Address: addr2}, }, - Coordinators: []types.Coordinator{ + CoordinatorList: []types.Coordinator{ {CoordinatorID: 0, Address: addr1, Active: true}, {CoordinatorID: 133, Address: addr2, Active: true}, }, - CoordinatorCounter: 2, + CoordinatorCount: 2, }, err: errors.New("coordinator id should be lower or equal than the last id"), }, @@ -310,11 +309,11 @@ func TestGenesisStateValidateCoordinator(t *testing.T) { {CoordinatorID: 0, Address: addr1}, {CoordinatorID: 1, Address: addr2}, }, - Coordinators: []types.Coordinator{ + CoordinatorList: []types.Coordinator{ {CoordinatorID: 0, Address: addr1, Active: true}, {CoordinatorID: 1, Address: addr2, Active: false}, }, - CoordinatorCounter: 2, + CoordinatorCount: 2, }, err: errors.New("coordinator found by CoordinatorByAddress should not be inactive"), }, diff --git a/x/profile/types/keys.go b/x/profile/types/keys.go index b0eef1a5..38b21f23 100644 --- a/x/profile/types/keys.go +++ b/x/profile/types/keys.go @@ -1,5 +1,7 @@ package types +import "cosmossdk.io/collections" + const ( // ModuleName defines the module name ModuleName = "profile" @@ -7,46 +9,24 @@ const ( // StoreKey defines the primary module store key StoreKey = ModuleName - // RouterKey is the message route for slashing - RouterKey = ModuleName - - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - // MemStoreKey defines the in-memory store key MemStoreKey = "mem_profile" - - // CoordinatorKey is the prefix to retrieve all Coordinator - CoordinatorKey = "Coordinator/value/" - - // CoordinatorCounterKey is the prefix to store coordinator counter - CoordinatorCounterKey = "Coordinator/count/" - - // CoordinatorByAddressKeyPrefix is the prefix to retrieve all CoordinatorByAddress - CoordinatorByAddressKeyPrefix = "CoordinatorByAddress/value/" - - // ValidatorKeyPrefix is the prefix to retrieve all Validator - ValidatorKeyPrefix = "Validator/value/" - - // ValidatorByOperatorAddressKeyPrefix is the prefix to retrieve all ValidatorByOperatorAddress - ValidatorByOperatorAddressKeyPrefix = "ValidatorByOperatorAddress/value/" ) -func KeyPrefix(p string) []byte { - return []byte(p) -} +var ( + // ParamsKey is the prefix to retrieve all Params + ParamsKey = collections.NewPrefix("p_profile") -// CoordinatorByAddressKey returns the store key to retrieve a CoordinatorByAddress from the index fields -func CoordinatorByAddressKey(address string) []byte { - return []byte(address + "/") -} + // CoordinatorKey is the prefix to retrieve all Coordinator + CoordinatorKey = collections.NewPrefix("coordinator/value/") + // CoordinatorCountKey is the prefix to retrieve all CoordinatorCount + CoordinatorCountKey = collections.NewPrefix("coordinator/count/") + // CoordinatorByAddressKey is the prefix to retrieve all CoordinatorByAddress + CoordinatorByAddressKey = collections.NewPrefix("coordinatorByAddress/value/") -// ValidatorKey returns the store key to retrieve a Validator from the index fields -func ValidatorKey(address string) []byte { - return []byte(address + "/") -} + // ValidatorKey is the prefix to retrieve all Validator + ValidatorKey = collections.NewPrefix("Validator/value/") -// ValidatorByOperatorAddressKey returns the store key to retrieve a ValidatorByOperatorAddress from the index fields -func ValidatorByOperatorAddressKey(operatorAddress string) []byte { - return []byte(operatorAddress + "/") -} + // ValidatorByOperatorAddressKey is the prefix to retrieve all ValidatorByOperatorAddress + ValidatorByOperatorAddressKey = collections.NewPrefix("ValidatorByOperatorAddress/value/") +) diff --git a/x/profile/types/message_validator.go b/x/profile/types/message_validator.go new file mode 100644 index 00000000..c33c20b7 --- /dev/null +++ b/x/profile/types/message_validator.go @@ -0,0 +1,76 @@ +package types + +import ( + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func NewMsgUpdateValidatorDescription( + address, + identity, + moniker, + website, + securityContact, + details string, +) *MsgUpdateValidatorDescription { + return &MsgUpdateValidatorDescription{ + Address: address, + Description: ValidatorDescription{ + Identity: identity, + Moniker: moniker, + Website: website, + SecurityContact: securityContact, + Details: details, + }, + } +} + +// Type returns the msg type. +func (msg *MsgUpdateValidatorDescription) Type() string { + return sdk.MsgTypeURL(msg) +} + +// TODO fixme +func (msg *MsgAddValidatorOperatorAddress) GetSigners() []sdk.AccAddress { + validatorAddress, err := sdk.AccAddressFromBech32(msg.ValidatorAddress) + if err != nil { + panic(err) + } + operatorAddress, err := sdk.AccAddressFromBech32(msg.OperatorAddress) + if err != nil { + panic(err) + } + + // validator must prove ownership of both address + return []sdk.AccAddress{validatorAddress, operatorAddress} +} + +func (msg *MsgAddValidatorOperatorAddress) ValidateBasic() error { + if msg.ValidatorAddress == msg.OperatorAddress { + return sdkerrors.Wrapf(ErrDupAddress, "validator profile address and operator address must be different") + } + return nil +} + +func NewMsgAddValidatorOperatorAddress(validatorAddress string, operatorAddress string) *MsgAddValidatorOperatorAddress { + return &MsgAddValidatorOperatorAddress{ + ValidatorAddress: validatorAddress, + OperatorAddress: operatorAddress, + } +} + +// Type returns the msg type. +func (msg *MsgAddValidatorOperatorAddress) Type() string { + return sdk.MsgTypeURL(msg) +} + +func (msg *MsgUpdateValidatorDescription) ValidateBasic() error { + if msg.Description.Details == "" && + msg.Description.Moniker == "" && + msg.Description.Identity == "" && + msg.Description.Website == "" && + msg.Description.SecurityContact == "" { + return sdkerrors.Wrap(ErrEmptyDescription, msg.Address) + } + return nil +} diff --git a/x/profile/types/msg_add_validator_operator_address_test.go b/x/profile/types/message_validator_test.go similarity index 57% rename from x/profile/types/msg_add_validator_operator_address_test.go rename to x/profile/types/message_validator_test.go index 35d90fa4..b747d570 100644 --- a/x/profile/types/msg_add_validator_operator_address_test.go +++ b/x/profile/types/message_validator_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/types" ) func TestMsgAddValidatorOperatorAddress_GetSigners(t *testing.T) { @@ -52,7 +52,7 @@ func TestMsgAddValidatorOperatorAddress_ValidateBasic(t *testing.T) { ValidatorAddress: "invalid_address", OperatorAddress: sample.Address(r), }, - err: types.ErrInvalidValAddress, + err: types.ErrInvalidValidatorAddress, }, { name: "should prevent validate invalid operator address", @@ -60,7 +60,53 @@ func TestMsgAddValidatorOperatorAddress_ValidateBasic(t *testing.T) { ValidatorAddress: sample.Address(r), OperatorAddress: "invalid_address", }, - err: types.ErrInvalidOpAddress, + err: types.ErrInvalidOperatorAddress, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} + +func TestMsgUpdateValidatorDescription_ValidateBasic(t *testing.T) { + addr := sample.Address(r) + tests := []struct { + name string + msg types.MsgUpdateValidatorDescription + err error + }{ + { + name: "should prevent validate invalid validator address", + msg: types.MsgUpdateValidatorDescription{ + Address: "invalid address", + }, + err: types.ErrInvalidValidatorAddress, + }, { + name: "should prevent validate emtpy description", + msg: types.MsgUpdateValidatorDescription{ + Address: addr, + Description: types.ValidatorDescription{}, + }, + err: types.ErrEmptyDescription, + }, { + name: "should validate valid message", + msg: types.MsgUpdateValidatorDescription{ + Address: sample.Address(r), + Description: types.ValidatorDescription{ + Identity: "identity", + Moniker: "moniker", + Website: "website", + SecurityContact: "security-contact", + Details: "details", + }, + }, }, } for _, tt := range tests { diff --git a/x/profile/types/messages_coordinator.go b/x/profile/types/messages_coordinator.go new file mode 100644 index 00000000..6e4029ca --- /dev/null +++ b/x/profile/types/messages_coordinator.go @@ -0,0 +1,78 @@ +package types + +import ( + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func NewMsgCreateCoordinator(address, identity, website, details string) *MsgCreateCoordinator { + return &MsgCreateCoordinator{ + Address: address, + Description: CoordinatorDescription{ + Identity: identity, + Website: website, + Details: details, + }, + } +} + +// Type returns the msg type. +func (msg *MsgCreateCoordinator) Type() string { + return sdk.MsgTypeURL(msg) +} + +func NewMsgUpdateCoordinatorDescription(address, identity, website, details string) *MsgUpdateCoordinatorDescription { + return &MsgUpdateCoordinatorDescription{ + Address: address, + Description: CoordinatorDescription{ + Identity: identity, + Website: website, + Details: details, + }, + } +} + +// Type returns the msg type. +func (msg *MsgUpdateCoordinatorDescription) Type() string { + return sdk.MsgTypeURL(msg) +} + +func (msg *MsgUpdateCoordinatorDescription) ValidateBasic() error { + if msg.Description.Details == "" && + msg.Description.Identity == "" && + msg.Description.Website == "" { + return sdkerrors.Wrap(ErrEmptyDescription, msg.Address) + } + return nil +} + +func NewMsgUpdateCoordinatorAddress(address string, newAddress string) *MsgUpdateCoordinatorAddress { + return &MsgUpdateCoordinatorAddress{ + Address: address, + NewAddress: newAddress, + } +} + +// Type returns the msg type. +func (msg *MsgUpdateCoordinatorAddress) Type() string { + return sdk.MsgTypeURL(msg) +} + +func (msg *MsgUpdateCoordinatorAddress) ValidateBasic() error { + if msg.Address == msg.NewAddress { + return sdkerrors.Wrapf(ErrDupAddress, + "address is equal to new address (%s)", msg.Address) + } + return nil +} + +func NewMsgDisableCoordinator(address string) *MsgDisableCoordinator { + return &MsgDisableCoordinator{ + Address: address, + } +} + +// Type returns the msg type. +func (msg *MsgDisableCoordinator) Type() string { + return sdk.MsgTypeURL(msg) +} diff --git a/x/profile/types/messages_coordinator_test.go b/x/profile/types/messages_coordinator_test.go new file mode 100644 index 00000000..c19ba66a --- /dev/null +++ b/x/profile/types/messages_coordinator_test.go @@ -0,0 +1,107 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/types" +) + +func TestMsgUpdateCoordinatorDescription_ValidateBasic(t *testing.T) { + addr := sample.Address(r) + tests := []struct { + name string + msg types.MsgUpdateCoordinatorDescription + err error + }{ + { + name: "should prevent validate invalid coordinator address", + msg: types.MsgUpdateCoordinatorDescription{ + Address: "invalid address", + }, + err: types.ErrInvalidCoordinatorAddress, + }, + { + name: "should prevent validate empty description", + msg: types.MsgUpdateCoordinatorDescription{ + Address: addr, + Description: types.CoordinatorDescription{}, + }, + err: types.ErrEmptyDescription, + }, + { + name: "should validate valid message", + msg: types.MsgUpdateCoordinatorDescription{ + Address: sample.Address(r), + Description: types.CoordinatorDescription{ + Identity: "identity", + Website: "website", + Details: "details", + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} + +func TestMsgUpdateCoordinatorAddress_ValidateBasic(t *testing.T) { + addr := sample.Address(r) + tests := []struct { + name string + msg types.MsgUpdateCoordinatorAddress + err error + }{ + { + name: "should prevent validate invalid coordinator address", + msg: types.MsgUpdateCoordinatorAddress{ + Address: "invalid address", + NewAddress: sample.Address(r), + }, + err: types.ErrInvalidCoordinatorAddress, + }, + { + name: "should prevent validate invalid new address", + msg: types.MsgUpdateCoordinatorAddress{ + Address: sample.Address(r), + NewAddress: "invalid address", + }, + err: types.ErrInvalidCoordinatorAddress, + }, + { + name: "should prevent validate similar new address", + msg: types.MsgUpdateCoordinatorAddress{ + Address: addr, + NewAddress: addr, + }, + err: types.ErrDupAddress, + }, + { + name: "should validate different addresses", + msg: types.MsgUpdateCoordinatorAddress{ + Address: sample.Address(r), + NewAddress: sample.Address(r), + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} diff --git a/x/profile/types/msg_add_validator_operator_address.go b/x/profile/types/msg_add_validator_operator_address.go deleted file mode 100644 index 72c6292a..00000000 --- a/x/profile/types/msg_add_validator_operator_address.go +++ /dev/null @@ -1,62 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgAddValidatorOperatorAddress = "add_validator_operator_address" - -var _ sdk.Msg = &MsgAddValidatorOperatorAddress{} - -func NewMsgSAddValidatorOperatorAddress( - validatorAddress, - operatorAddress string, -) *MsgAddValidatorOperatorAddress { - return &MsgAddValidatorOperatorAddress{ - ValidatorAddress: validatorAddress, - OperatorAddress: operatorAddress, - } -} - -func (msg *MsgAddValidatorOperatorAddress) Route() string { - return RouterKey -} - -func (msg *MsgAddValidatorOperatorAddress) Type() string { - return TypeMsgAddValidatorOperatorAddress -} - -func (msg *MsgAddValidatorOperatorAddress) GetSigners() []sdk.AccAddress { - validatorAddress, err := sdk.AccAddressFromBech32(msg.ValidatorAddress) - if err != nil { - panic(err) - } - operatorAddress, err := sdk.AccAddressFromBech32(msg.OperatorAddress) - if err != nil { - panic(err) - } - - // validator must prove ownership of both address - return []sdk.AccAddress{validatorAddress, operatorAddress} -} - -func (msg *MsgAddValidatorOperatorAddress) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgAddValidatorOperatorAddress) ValidateBasic() error { - if msg.ValidatorAddress == msg.OperatorAddress { - return sdkerrors.Wrapf(ErrDupAddress, "validator profile address and operator address must be different") - } - - if _, err := sdk.AccAddressFromBech32(msg.ValidatorAddress); err != nil { - return sdkerrors.Wrap(ErrInvalidValAddress, err.Error()) - } - if _, err := sdk.AccAddressFromBech32(msg.OperatorAddress); err != nil { - return sdkerrors.Wrap(ErrInvalidOpAddress, err.Error()) - } - - return nil -} diff --git a/x/profile/types/msg_create_coordinator.go b/x/profile/types/msg_create_coordinator.go deleted file mode 100644 index 070be736..00000000 --- a/x/profile/types/msg_create_coordinator.go +++ /dev/null @@ -1,50 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgCreateCoordinator = "create_coordinator" - -var _ sdk.Msg = &MsgCreateCoordinator{} - -func NewMsgCreateCoordinator(address, identity, website, details string) *MsgCreateCoordinator { - return &MsgCreateCoordinator{ - Address: address, - Description: CoordinatorDescription{ - Identity: identity, - Website: website, - Details: details, - }, - } -} - -func (msg *MsgCreateCoordinator) Route() string { - return RouterKey -} - -func (msg *MsgCreateCoordinator) Type() string { - return TypeMsgCreateCoordinator -} - -func (msg *MsgCreateCoordinator) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgCreateCoordinator) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgCreateCoordinator) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - return sdkerrors.Wrapf(ErrInvalidCoordAddress, err.Error()) - } - return nil -} diff --git a/x/profile/types/msg_create_coordinator_test.go b/x/profile/types/msg_create_coordinator_test.go deleted file mode 100644 index de3e7a49..00000000 --- a/x/profile/types/msg_create_coordinator_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgCreateCoordinator_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg profile.MsgCreateCoordinator - err error - }{ - { - name: "should prevent validate invalid coordinator address", - msg: profile.MsgCreateCoordinator{ - Address: "invalid address", - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should validate valid message", - msg: profile.MsgCreateCoordinator{ - Address: sample.Address(r), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/profile/types/msg_disable_coordinator.go b/x/profile/types/msg_disable_coordinator.go deleted file mode 100644 index 7f5f62ad..00000000 --- a/x/profile/types/msg_disable_coordinator.go +++ /dev/null @@ -1,45 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgDisableCoordinator = "disable_coordinator" - -var _ sdk.Msg = &MsgDisableCoordinator{} - -func NewMsgDisableCoordinator(address string) *MsgDisableCoordinator { - return &MsgDisableCoordinator{ - Address: address, - } -} - -func (msg *MsgDisableCoordinator) Route() string { - return RouterKey -} - -func (msg *MsgDisableCoordinator) Type() string { - return TypeMsgDisableCoordinator -} - -func (msg *MsgDisableCoordinator) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgDisableCoordinator) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgDisableCoordinator) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - return sdkerrors.Wrap(ErrInvalidCoordAddress, err.Error()) - } - return nil -} diff --git a/x/profile/types/msg_disable_coordinator_test.go b/x/profile/types/msg_disable_coordinator_test.go deleted file mode 100644 index 950b28df..00000000 --- a/x/profile/types/msg_disable_coordinator_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgDisableCoordinator_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg profile.MsgDisableCoordinator - err error - }{ - { - name: "should prevent validate invalid coordinator address", - msg: profile.MsgDisableCoordinator{ - Address: "invalid address", - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should validate valid message", - msg: profile.MsgDisableCoordinator{ - Address: sample.Address(r), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/profile/types/msg_update_coordinator_address.go b/x/profile/types/msg_update_coordinator_address.go deleted file mode 100644 index 9deab897..00000000 --- a/x/profile/types/msg_update_coordinator_address.go +++ /dev/null @@ -1,54 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgUpdateCoordinatorAddress = "update_coordinator_address" - -var _ sdk.Msg = &MsgUpdateCoordinatorAddress{} - -func NewMsgUpdateCoordinatorAddress(address, newAddress string) *MsgUpdateCoordinatorAddress { - return &MsgUpdateCoordinatorAddress{ - Address: address, - NewAddress: newAddress, - } -} - -func (msg *MsgUpdateCoordinatorAddress) Route() string { - return RouterKey -} - -func (msg *MsgUpdateCoordinatorAddress) Type() string { - return TypeMsgUpdateCoordinatorAddress -} - -func (msg *MsgUpdateCoordinatorAddress) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgUpdateCoordinatorAddress) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgUpdateCoordinatorAddress) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - return sdkerrors.Wrap(ErrInvalidCoordAddress, err.Error()) - } - _, err = sdk.AccAddressFromBech32(msg.NewAddress) - if err != nil { - return sdkerrors.Wrap(ErrInvalidCoordAddress, err.Error()) - } - if msg.Address == msg.NewAddress { - return sdkerrors.Wrapf(ErrDupAddress, - "address is equal to new address (%s)", msg.Address) - } - return nil -} diff --git a/x/profile/types/msg_update_coordinator_address_test.go b/x/profile/types/msg_update_coordinator_address_test.go deleted file mode 100644 index dff49765..00000000 --- a/x/profile/types/msg_update_coordinator_address_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgUpdateCoordinatorAddress_ValidateBasic(t *testing.T) { - addr := sample.Address(r) - tests := []struct { - name string - msg profile.MsgUpdateCoordinatorAddress - err error - }{ - { - name: "should prevent validate invalid coordinator address", - msg: profile.MsgUpdateCoordinatorAddress{ - Address: "invalid address", - NewAddress: sample.Address(r), - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validate invalid new address", - msg: profile.MsgUpdateCoordinatorAddress{ - Address: sample.Address(r), - NewAddress: "invalid address", - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validate similar new address", - msg: profile.MsgUpdateCoordinatorAddress{ - Address: addr, - NewAddress: addr, - }, - err: profile.ErrDupAddress, - }, - { - name: "should validate different addresses", - msg: profile.MsgUpdateCoordinatorAddress{ - Address: sample.Address(r), - NewAddress: sample.Address(r), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/profile/types/msg_update_coordinator_description.go b/x/profile/types/msg_update_coordinator_description.go deleted file mode 100644 index 70a72440..00000000 --- a/x/profile/types/msg_update_coordinator_description.go +++ /dev/null @@ -1,55 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgUpdateCoordinatorDescription = "update_coordinator_description" - -var _ sdk.Msg = &MsgUpdateCoordinatorDescription{} - -func NewMsgUpdateCoordinatorDescription(address, identity, website, details string) *MsgUpdateCoordinatorDescription { - return &MsgUpdateCoordinatorDescription{ - Address: address, - Description: CoordinatorDescription{ - Identity: identity, - Website: website, - Details: details, - }, - } -} - -func (msg *MsgUpdateCoordinatorDescription) Route() string { - return RouterKey -} - -func (msg *MsgUpdateCoordinatorDescription) Type() string { - return TypeMsgUpdateCoordinatorDescription -} - -func (msg *MsgUpdateCoordinatorDescription) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgUpdateCoordinatorDescription) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgUpdateCoordinatorDescription) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - return sdkerrors.Wrap(ErrInvalidCoordAddress, err.Error()) - } - if msg.Description.Details == "" && - msg.Description.Identity == "" && - msg.Description.Website == "" { - return sdkerrors.Wrap(ErrEmptyDescription, msg.Address) - } - return nil -} diff --git a/x/profile/types/msg_update_coordinator_description_test.go b/x/profile/types/msg_update_coordinator_description_test.go deleted file mode 100644 index 9a598de9..00000000 --- a/x/profile/types/msg_update_coordinator_description_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgUpdateCoordinatorDescription_ValidateBasic(t *testing.T) { - addr := sample.Address(r) - tests := []struct { - name string - msg profile.MsgUpdateCoordinatorDescription - err error - }{ - { - name: "should prevent validate invalid coordinator address", - msg: profile.MsgUpdateCoordinatorDescription{ - Address: "invalid address", - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validate empty description", - msg: profile.MsgUpdateCoordinatorDescription{ - Address: addr, - Description: profile.CoordinatorDescription{}, - }, - err: profile.ErrEmptyDescription, - }, - { - name: "should validate valid message", - msg: profile.MsgUpdateCoordinatorDescription{ - Address: sample.Address(r), - Description: profile.CoordinatorDescription{ - Identity: "identity", - Website: "website", - Details: "details", - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/profile/types/msg_update_validator_description.go b/x/profile/types/msg_update_validator_description.go deleted file mode 100644 index 699bf35e..00000000 --- a/x/profile/types/msg_update_validator_description.go +++ /dev/null @@ -1,66 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgUpdateValidatorDescription = "update_validator_description" - -var _ sdk.Msg = &MsgUpdateValidatorDescription{} - -func NewMsgUpdateValidatorDescription( - address, - identity, - moniker, - website, - securityContact, - details string, -) *MsgUpdateValidatorDescription { - return &MsgUpdateValidatorDescription{ - Address: address, - Description: ValidatorDescription{ - Identity: identity, - Moniker: moniker, - Website: website, - SecurityContact: securityContact, - Details: details, - }, - } -} - -func (msg *MsgUpdateValidatorDescription) Route() string { - return RouterKey -} - -func (msg *MsgUpdateValidatorDescription) Type() string { - return TypeMsgUpdateValidatorDescription -} - -func (msg *MsgUpdateValidatorDescription) GetSigners() []sdk.AccAddress { - address, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - panic(err) - } - return []sdk.AccAddress{address} -} - -func (msg *MsgUpdateValidatorDescription) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgUpdateValidatorDescription) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Address) - if err != nil { - return sdkerrors.Wrap(ErrInvalidValAddress, err.Error()) - } - if msg.Description.Details == "" && - msg.Description.Moniker == "" && - msg.Description.Identity == "" && - msg.Description.Website == "" && - msg.Description.SecurityContact == "" { - return sdkerrors.Wrap(ErrEmptyDescription, msg.Address) - } - return nil -} diff --git a/x/profile/types/msg_update_validator_description_test.go b/x/profile/types/msg_update_validator_description_test.go deleted file mode 100644 index 5c500c87..00000000 --- a/x/profile/types/msg_update_validator_description_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" -) - -func TestMsgUpdateValidatorDescription_ValidateBasic(t *testing.T) { - addr := sample.Address(r) - tests := []struct { - name string - msg profile.MsgUpdateValidatorDescription - err error - }{ - { - name: "should prevent validate invalid validator address", - msg: profile.MsgUpdateValidatorDescription{ - Address: "invalid address", - }, - err: profile.ErrInvalidValAddress, - }, { - name: "should prevent validate emtpy description", - msg: profile.MsgUpdateValidatorDescription{ - Address: addr, - Description: profile.ValidatorDescription{}, - }, - err: profile.ErrEmptyDescription, - }, { - name: "should validate valid message", - msg: profile.MsgUpdateValidatorDescription{ - Address: sample.Address(r), - Description: profile.ValidatorDescription{ - Identity: "identity", - Moniker: "moniker", - Website: "website", - SecurityContact: "security-contact", - Details: "details", - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/profile/types/params.go b/x/profile/types/params.go new file mode 100644 index 00000000..c81359ea --- /dev/null +++ b/x/profile/types/params.go @@ -0,0 +1,16 @@ +package types + +// NewParams creates a new Params instance. +func NewParams() Params { + return Params{} +} + +// DefaultParams returns a default set of parameters. +func DefaultParams() Params { + return NewParams() +} + +// Validate validates the set of params. +func (p Params) Validate() error { + return nil +} diff --git a/x/profile/types/params.pb.go b/x/profile/types/params.pb.go new file mode 100644 index 00000000..fec821c8 --- /dev/null +++ b/x/profile/types/params.pb.go @@ -0,0 +1,289 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: network/profile/v1/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the module. +type Params struct { +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_9a0674fccf5387c8, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Params)(nil), "network.profile.v1.Params") +} + +func init() { proto.RegisterFile("network/profile/v1/params.proto", fileDescriptor_9a0674fccf5387c8) } + +var fileDescriptor_9a0674fccf5387c8 = []byte{ + // 177 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x28, 0xca, 0x4f, 0xcb, 0xcc, 0x49, 0xd5, 0x2f, 0x33, 0xd4, 0x2f, + 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0x2a, 0xd0, + 0x83, 0x2a, 0xd0, 0x2b, 0x33, 0x94, 0x12, 0x4c, 0xcc, 0xcd, 0xcc, 0xcb, 0xd7, 0x07, 0x93, 0x10, + 0x65, 0x52, 0x22, 0xe9, 0xf9, 0xe9, 0xf9, 0x60, 0xa6, 0x3e, 0x88, 0x05, 0x11, 0x55, 0xd2, 0xe6, + 0x62, 0x0b, 0x00, 0x1b, 0x66, 0xa5, 0xf8, 0x62, 0x81, 0x3c, 0x63, 0xd7, 0xf3, 0x0d, 0x5a, 0x12, + 0x30, 0x0b, 0x2b, 0xe0, 0x56, 0x42, 0x94, 0x38, 0x39, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, + 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, + 0xb1, 0x1c, 0x43, 0x94, 0x66, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, + 0x66, 0x7a, 0x5e, 0x66, 0x49, 0xaa, 0x3e, 0xa6, 0x29, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, + 0x60, 0x8b, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x97, 0x7b, 0x9a, 0x0d, 0xd8, 0x00, 0x00, + 0x00, +} + +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + return true +} +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/profile/types/query.pb.go b/x/profile/types/query.pb.go index 9e1e075b..a72ba303 100644 --- a/x/profile/types/query.pb.go +++ b/x/profile/types/query.pb.go @@ -1,12 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/profile/query.proto +// source: network/profile/v1/query.proto package types import ( context "context" fmt "fmt" + _ "github.com/cosmos/cosmos-proto" query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -30,210 +32,22 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type QueryGetValidatorRequest struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` -} - -func (m *QueryGetValidatorRequest) Reset() { *m = QueryGetValidatorRequest{} } -func (m *QueryGetValidatorRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetValidatorRequest) ProtoMessage() {} -func (*QueryGetValidatorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{0} -} -func (m *QueryGetValidatorRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryGetValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryGetValidatorRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryGetValidatorRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetValidatorRequest.Merge(m, src) -} -func (m *QueryGetValidatorRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryGetValidatorRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetValidatorRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryGetValidatorRequest proto.InternalMessageInfo - -func (m *QueryGetValidatorRequest) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - -type QueryGetValidatorResponse struct { - Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"` -} - -func (m *QueryGetValidatorResponse) Reset() { *m = QueryGetValidatorResponse{} } -func (m *QueryGetValidatorResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetValidatorResponse) ProtoMessage() {} -func (*QueryGetValidatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{1} -} -func (m *QueryGetValidatorResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryGetValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryGetValidatorResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryGetValidatorResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetValidatorResponse.Merge(m, src) -} -func (m *QueryGetValidatorResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryGetValidatorResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetValidatorResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryGetValidatorResponse proto.InternalMessageInfo - -func (m *QueryGetValidatorResponse) GetValidator() Validator { - if m != nil { - return m.Validator - } - return Validator{} -} - -type QueryAllValidatorRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryAllValidatorRequest) Reset() { *m = QueryAllValidatorRequest{} } -func (m *QueryAllValidatorRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllValidatorRequest) ProtoMessage() {} -func (*QueryAllValidatorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{2} -} -func (m *QueryAllValidatorRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryAllValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryAllValidatorRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryAllValidatorRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllValidatorRequest.Merge(m, src) -} -func (m *QueryAllValidatorRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryAllValidatorRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllValidatorRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryAllValidatorRequest proto.InternalMessageInfo - -func (m *QueryAllValidatorRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryAllValidatorResponse struct { - Validator []Validator `protobuf:"bytes,1,rep,name=validator,proto3" json:"validator"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryAllValidatorResponse) Reset() { *m = QueryAllValidatorResponse{} } -func (m *QueryAllValidatorResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllValidatorResponse) ProtoMessage() {} -func (*QueryAllValidatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{3} -} -func (m *QueryAllValidatorResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryAllValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryAllValidatorResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryAllValidatorResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllValidatorResponse.Merge(m, src) -} -func (m *QueryAllValidatorResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryAllValidatorResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllValidatorResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryAllValidatorResponse proto.InternalMessageInfo - -func (m *QueryAllValidatorResponse) GetValidator() []Validator { - if m != nil { - return m.Validator - } - return nil -} - -func (m *QueryAllValidatorResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryGetValidatorByOperatorAddressRequest struct { - OperatorAddress string `protobuf:"bytes,1,opt,name=operatorAddress,proto3" json:"operatorAddress,omitempty"` +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { } -func (m *QueryGetValidatorByOperatorAddressRequest) Reset() { - *m = QueryGetValidatorByOperatorAddressRequest{} -} -func (m *QueryGetValidatorByOperatorAddressRequest) String() string { - return proto.CompactTextString(m) -} -func (*QueryGetValidatorByOperatorAddressRequest) ProtoMessage() {} -func (*QueryGetValidatorByOperatorAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{4} +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{0} } -func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetValidatorByOperatorAddressRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -243,45 +57,36 @@ func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Marshal(b []byte, determ return b[:n], nil } } -func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetValidatorByOperatorAddressRequest.Merge(m, src) +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) } -func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Size() int { +func (m *QueryParamsRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetValidatorByOperatorAddressRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetValidatorByOperatorAddressRequest.DiscardUnknown(m) +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetValidatorByOperatorAddressRequest proto.InternalMessageInfo - -func (m *QueryGetValidatorByOperatorAddressRequest) GetOperatorAddress() string { - if m != nil { - return m.OperatorAddress - } - return "" -} +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo -type QueryGetValidatorByOperatorAddressResponse struct { - ValidatorByOperatorAddress ValidatorByOperatorAddress `protobuf:"bytes,1,opt,name=validatorByOperatorAddress,proto3" json:"validatorByOperatorAddress"` +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` } -func (m *QueryGetValidatorByOperatorAddressResponse) Reset() { - *m = QueryGetValidatorByOperatorAddressResponse{} -} -func (m *QueryGetValidatorByOperatorAddressResponse) String() string { - return proto.CompactTextString(m) -} -func (*QueryGetValidatorByOperatorAddressResponse) ProtoMessage() {} -func (*QueryGetValidatorByOperatorAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{5} +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{1} } -func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetValidatorByOperatorAddressResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -291,34 +96,34 @@ func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Marshal(b []byte, deter return b[:n], nil } } -func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetValidatorByOperatorAddressResponse.Merge(m, src) +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) } -func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Size() int { +func (m *QueryParamsResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetValidatorByOperatorAddressResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetValidatorByOperatorAddressResponse.DiscardUnknown(m) +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetValidatorByOperatorAddressResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo -func (m *QueryGetValidatorByOperatorAddressResponse) GetValidatorByOperatorAddress() ValidatorByOperatorAddress { +func (m *QueryParamsResponse) GetParams() Params { if m != nil { - return m.ValidatorByOperatorAddress + return m.Params } - return ValidatorByOperatorAddress{} + return Params{} } type QueryGetCoordinatorRequest struct { - CoordinatorID uint64 `protobuf:"varint,1,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` } func (m *QueryGetCoordinatorRequest) Reset() { *m = QueryGetCoordinatorRequest{} } func (m *QueryGetCoordinatorRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetCoordinatorRequest) ProtoMessage() {} func (*QueryGetCoordinatorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{6} + return fileDescriptor_1177c96bbfcc68b5, []int{2} } func (m *QueryGetCoordinatorRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -347,22 +152,22 @@ func (m *QueryGetCoordinatorRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryGetCoordinatorRequest proto.InternalMessageInfo -func (m *QueryGetCoordinatorRequest) GetCoordinatorID() uint64 { +func (m *QueryGetCoordinatorRequest) GetID() uint64 { if m != nil { - return m.CoordinatorID + return m.ID } return 0 } type QueryGetCoordinatorResponse struct { - Coordinator Coordinator `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator"` + Coordinator Coordinator `protobuf:"bytes,1,opt,name=Coordinator,proto3" json:"Coordinator"` } func (m *QueryGetCoordinatorResponse) Reset() { *m = QueryGetCoordinatorResponse{} } func (m *QueryGetCoordinatorResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetCoordinatorResponse) ProtoMessage() {} func (*QueryGetCoordinatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{7} + return fileDescriptor_1177c96bbfcc68b5, []int{3} } func (m *QueryGetCoordinatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -406,7 +211,7 @@ func (m *QueryAllCoordinatorRequest) Reset() { *m = QueryAllCoordinatorR func (m *QueryAllCoordinatorRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllCoordinatorRequest) ProtoMessage() {} func (*QueryAllCoordinatorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{8} + return fileDescriptor_1177c96bbfcc68b5, []int{4} } func (m *QueryAllCoordinatorRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -443,7 +248,7 @@ func (m *QueryAllCoordinatorRequest) GetPagination() *query.PageRequest { } type QueryAllCoordinatorResponse struct { - Coordinator []Coordinator `protobuf:"bytes,1,rep,name=coordinator,proto3" json:"coordinator"` + Coordinator []Coordinator `protobuf:"bytes,1,rep,name=Coordinator,proto3" json:"Coordinator"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -451,7 +256,7 @@ func (m *QueryAllCoordinatorResponse) Reset() { *m = QueryAllCoordinator func (m *QueryAllCoordinatorResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllCoordinatorResponse) ProtoMessage() {} func (*QueryAllCoordinatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{9} + return fileDescriptor_1177c96bbfcc68b5, []int{5} } func (m *QueryAllCoordinatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -494,22 +299,22 @@ func (m *QueryAllCoordinatorResponse) GetPagination() *query.PageResponse { return nil } -type QueryGetCoordinatorByAddressRequest struct { +type QueryGetValidatorRequest struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryGetCoordinatorByAddressRequest) Reset() { *m = QueryGetCoordinatorByAddressRequest{} } -func (m *QueryGetCoordinatorByAddressRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetCoordinatorByAddressRequest) ProtoMessage() {} -func (*QueryGetCoordinatorByAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{10} +func (m *QueryGetValidatorRequest) Reset() { *m = QueryGetValidatorRequest{} } +func (m *QueryGetValidatorRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetValidatorRequest) ProtoMessage() {} +func (*QueryGetValidatorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{6} } -func (m *QueryGetCoordinatorByAddressRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetValidatorRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetCoordinatorByAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetCoordinatorByAddressRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetValidatorRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -519,34 +324,218 @@ func (m *QueryGetCoordinatorByAddressRequest) XXX_Marshal(b []byte, deterministi return b[:n], nil } } -func (m *QueryGetCoordinatorByAddressRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetCoordinatorByAddressRequest.Merge(m, src) +func (m *QueryGetValidatorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetValidatorRequest.Merge(m, src) } -func (m *QueryGetCoordinatorByAddressRequest) XXX_Size() int { +func (m *QueryGetValidatorRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetCoordinatorByAddressRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetCoordinatorByAddressRequest.DiscardUnknown(m) +func (m *QueryGetValidatorRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetValidatorRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetCoordinatorByAddressRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetValidatorRequest proto.InternalMessageInfo -func (m *QueryGetCoordinatorByAddressRequest) GetAddress() string { +func (m *QueryGetValidatorRequest) GetAddress() string { if m != nil { return m.Address } return "" } -type QueryGetCoordinatorByAddressResponse struct { - CoordinatorByAddress CoordinatorByAddress `protobuf:"bytes,1,opt,name=coordinatorByAddress,proto3" json:"coordinatorByAddress"` +type QueryGetValidatorResponse struct { + Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"` } -func (m *QueryGetCoordinatorByAddressResponse) Reset() { *m = QueryGetCoordinatorByAddressResponse{} } +func (m *QueryGetValidatorResponse) Reset() { *m = QueryGetValidatorResponse{} } +func (m *QueryGetValidatorResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetValidatorResponse) ProtoMessage() {} +func (*QueryGetValidatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{7} +} +func (m *QueryGetValidatorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetValidatorResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetValidatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetValidatorResponse.Merge(m, src) +} +func (m *QueryGetValidatorResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetValidatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetValidatorResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetValidatorResponse proto.InternalMessageInfo + +func (m *QueryGetValidatorResponse) GetValidator() Validator { + if m != nil { + return m.Validator + } + return Validator{} +} + +type QueryAllValidatorRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllValidatorRequest) Reset() { *m = QueryAllValidatorRequest{} } +func (m *QueryAllValidatorRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllValidatorRequest) ProtoMessage() {} +func (*QueryAllValidatorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{8} +} +func (m *QueryAllValidatorRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllValidatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllValidatorRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllValidatorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllValidatorRequest.Merge(m, src) +} +func (m *QueryAllValidatorRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllValidatorRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllValidatorRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllValidatorRequest proto.InternalMessageInfo + +func (m *QueryAllValidatorRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllValidatorResponse struct { + Validator []Validator `protobuf:"bytes,1,rep,name=validator,proto3" json:"validator"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllValidatorResponse) Reset() { *m = QueryAllValidatorResponse{} } +func (m *QueryAllValidatorResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllValidatorResponse) ProtoMessage() {} +func (*QueryAllValidatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{9} +} +func (m *QueryAllValidatorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllValidatorResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllValidatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllValidatorResponse.Merge(m, src) +} +func (m *QueryAllValidatorResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllValidatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllValidatorResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllValidatorResponse proto.InternalMessageInfo + +func (m *QueryAllValidatorResponse) GetValidator() []Validator { + if m != nil { + return m.Validator + } + return nil +} + +func (m *QueryAllValidatorResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryGetCoordinatorByAddressRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryGetCoordinatorByAddressRequest) Reset() { *m = QueryGetCoordinatorByAddressRequest{} } +func (m *QueryGetCoordinatorByAddressRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetCoordinatorByAddressRequest) ProtoMessage() {} +func (*QueryGetCoordinatorByAddressRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{10} +} +func (m *QueryGetCoordinatorByAddressRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetCoordinatorByAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetCoordinatorByAddressRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetCoordinatorByAddressRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetCoordinatorByAddressRequest.Merge(m, src) +} +func (m *QueryGetCoordinatorByAddressRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetCoordinatorByAddressRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetCoordinatorByAddressRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetCoordinatorByAddressRequest proto.InternalMessageInfo + +func (m *QueryGetCoordinatorByAddressRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +type QueryGetCoordinatorByAddressResponse struct { + Coordinator Coordinator `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator"` +} + +func (m *QueryGetCoordinatorByAddressResponse) Reset() { *m = QueryGetCoordinatorByAddressResponse{} } func (m *QueryGetCoordinatorByAddressResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetCoordinatorByAddressResponse) ProtoMessage() {} func (*QueryGetCoordinatorByAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_bddce98d1b665270, []int{11} + return fileDescriptor_1177c96bbfcc68b5, []int{11} } func (m *QueryGetCoordinatorByAddressResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -575,79 +564,182 @@ func (m *QueryGetCoordinatorByAddressResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryGetCoordinatorByAddressResponse proto.InternalMessageInfo -func (m *QueryGetCoordinatorByAddressResponse) GetCoordinatorByAddress() CoordinatorByAddress { +func (m *QueryGetCoordinatorByAddressResponse) GetCoordinator() Coordinator { if m != nil { - return m.CoordinatorByAddress + return m.Coordinator } - return CoordinatorByAddress{} + return Coordinator{} +} + +type QueryGetValidatorByOperatorAddressRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryGetValidatorByOperatorAddressRequest) Reset() { + *m = QueryGetValidatorByOperatorAddressRequest{} +} +func (m *QueryGetValidatorByOperatorAddressRequest) String() string { + return proto.CompactTextString(m) +} +func (*QueryGetValidatorByOperatorAddressRequest) ProtoMessage() {} +func (*QueryGetValidatorByOperatorAddressRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{12} +} +func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetValidatorByOperatorAddressRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetValidatorByOperatorAddressRequest.Merge(m, src) +} +func (m *QueryGetValidatorByOperatorAddressRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetValidatorByOperatorAddressRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetValidatorByOperatorAddressRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetValidatorByOperatorAddressRequest proto.InternalMessageInfo + +func (m *QueryGetValidatorByOperatorAddressRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +type QueryGetValidatorByOperatorAddressResponse struct { + Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"` +} + +func (m *QueryGetValidatorByOperatorAddressResponse) Reset() { + *m = QueryGetValidatorByOperatorAddressResponse{} +} +func (m *QueryGetValidatorByOperatorAddressResponse) String() string { + return proto.CompactTextString(m) +} +func (*QueryGetValidatorByOperatorAddressResponse) ProtoMessage() {} +func (*QueryGetValidatorByOperatorAddressResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_1177c96bbfcc68b5, []int{13} +} +func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetValidatorByOperatorAddressResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetValidatorByOperatorAddressResponse.Merge(m, src) +} +func (m *QueryGetValidatorByOperatorAddressResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetValidatorByOperatorAddressResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetValidatorByOperatorAddressResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetValidatorByOperatorAddressResponse proto.InternalMessageInfo + +func (m *QueryGetValidatorByOperatorAddressResponse) GetValidator() Validator { + if m != nil { + return m.Validator + } + return Validator{} } func init() { - proto.RegisterType((*QueryGetValidatorRequest)(nil), "spn.profile.QueryGetValidatorRequest") - proto.RegisterType((*QueryGetValidatorResponse)(nil), "spn.profile.QueryGetValidatorResponse") - proto.RegisterType((*QueryAllValidatorRequest)(nil), "spn.profile.QueryAllValidatorRequest") - proto.RegisterType((*QueryAllValidatorResponse)(nil), "spn.profile.QueryAllValidatorResponse") - proto.RegisterType((*QueryGetValidatorByOperatorAddressRequest)(nil), "spn.profile.QueryGetValidatorByOperatorAddressRequest") - proto.RegisterType((*QueryGetValidatorByOperatorAddressResponse)(nil), "spn.profile.QueryGetValidatorByOperatorAddressResponse") - proto.RegisterType((*QueryGetCoordinatorRequest)(nil), "spn.profile.QueryGetCoordinatorRequest") - proto.RegisterType((*QueryGetCoordinatorResponse)(nil), "spn.profile.QueryGetCoordinatorResponse") - proto.RegisterType((*QueryAllCoordinatorRequest)(nil), "spn.profile.QueryAllCoordinatorRequest") - proto.RegisterType((*QueryAllCoordinatorResponse)(nil), "spn.profile.QueryAllCoordinatorResponse") - proto.RegisterType((*QueryGetCoordinatorByAddressRequest)(nil), "spn.profile.QueryGetCoordinatorByAddressRequest") - proto.RegisterType((*QueryGetCoordinatorByAddressResponse)(nil), "spn.profile.QueryGetCoordinatorByAddressResponse") -} - -func init() { proto.RegisterFile("spn/profile/query.proto", fileDescriptor_bddce98d1b665270) } - -var fileDescriptor_bddce98d1b665270 = []byte{ - // 747 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x4b, 0x4f, 0xd4, 0x50, - 0x14, 0xc7, 0xe7, 0x02, 0x4a, 0x38, 0xe3, 0x23, 0xb9, 0x21, 0x3a, 0x16, 0x1d, 0xa5, 0x3c, 0x86, - 0x47, 0x6c, 0x05, 0x7c, 0x05, 0x17, 0x32, 0x83, 0x91, 0xb0, 0x42, 0x27, 0x51, 0x13, 0x5d, 0x4c, - 0x3a, 0x33, 0xd7, 0xda, 0xa4, 0xd3, 0x5b, 0xda, 0x42, 0x9c, 0x10, 0x36, 0xba, 0x71, 0x27, 0x89, - 0x4b, 0x63, 0xe2, 0xd2, 0x2f, 0xe1, 0x9e, 0x25, 0x89, 0x1b, 0x57, 0xc4, 0x80, 0x1f, 0xc2, 0xa5, - 0x69, 0xe7, 0x74, 0x68, 0xcb, 0xed, 0x3c, 0x12, 0x76, 0x43, 0xcf, 0x39, 0xff, 0xfb, 0x3b, 0xff, - 0x7b, 0xee, 0x09, 0x70, 0xd5, 0xb5, 0x2d, 0xd5, 0x76, 0xf8, 0x5b, 0xc3, 0x64, 0xea, 0xe6, 0x16, - 0x73, 0x9a, 0x8a, 0xed, 0x70, 0x8f, 0xd3, 0xac, 0x6b, 0x5b, 0x0a, 0x06, 0xa4, 0x51, 0x9d, 0xeb, - 0x3c, 0xf8, 0xae, 0xfa, 0xbf, 0x5a, 0x29, 0xd2, 0x75, 0x9d, 0x73, 0xdd, 0x64, 0xaa, 0x66, 0x1b, - 0xaa, 0x66, 0x59, 0xdc, 0xd3, 0x3c, 0x83, 0x5b, 0x2e, 0x46, 0xe7, 0x6a, 0xdc, 0x6d, 0x70, 0x57, - 0xad, 0x6a, 0x2e, 0x2a, 0xab, 0xdb, 0x0b, 0x55, 0xe6, 0x69, 0x0b, 0xaa, 0xad, 0xe9, 0x86, 0x15, - 0x24, 0x63, 0xee, 0x58, 0x94, 0x62, 0x5b, 0x33, 0x8d, 0xba, 0xe6, 0x71, 0x07, 0x83, 0x37, 0xa2, - 0xc1, 0x1a, 0xe7, 0x4e, 0xdd, 0x2f, 0x0e, 0xc3, 0xf2, 0x5d, 0xc8, 0x3d, 0xf7, 0xd5, 0xd7, 0x98, - 0xf7, 0x32, 0xac, 0x2c, 0xb3, 0xcd, 0x2d, 0xe6, 0x7a, 0x34, 0x07, 0xc3, 0x5a, 0xbd, 0xee, 0x30, - 0xd7, 0xcd, 0x91, 0x5b, 0x64, 0x66, 0xa4, 0x1c, 0xfe, 0x29, 0xbf, 0x82, 0x6b, 0x82, 0x2a, 0xd7, - 0xe6, 0x96, 0xcb, 0xe8, 0x32, 0x8c, 0xb4, 0x21, 0x82, 0xc2, 0xec, 0xe2, 0x15, 0x25, 0xe2, 0x87, - 0xd2, 0x2e, 0x29, 0x0d, 0xed, 0x1f, 0xde, 0xcc, 0x94, 0x4f, 0xd2, 0xe5, 0x2a, 0xe2, 0x14, 0x4d, - 0xf3, 0x14, 0xce, 0x53, 0x80, 0x93, 0xd6, 0x51, 0x78, 0x5a, 0x69, 0xf9, 0xa4, 0xf8, 0x3e, 0x29, - 0xad, 0x1b, 0x40, 0x9f, 0x94, 0x67, 0x9a, 0xce, 0xb0, 0xb6, 0x1c, 0xa9, 0x94, 0xbf, 0x13, 0xa4, - 0x8f, 0x1f, 0x22, 0xa6, 0x1f, 0xec, 0x83, 0x9e, 0xae, 0xc5, 0x08, 0x07, 0x02, 0xc2, 0x42, 0x57, - 0xc2, 0xd6, 0xc1, 0x31, 0xc4, 0x17, 0x30, 0x7b, 0xca, 0xdf, 0x52, 0x73, 0xc3, 0x66, 0x8e, 0xff, - 0xab, 0xd8, 0xba, 0x85, 0xd0, 0x97, 0x19, 0xb8, 0xcc, 0xe3, 0x11, 0xbc, 0xae, 0xe4, 0x67, 0xf9, - 0x2b, 0x81, 0xb9, 0x5e, 0x74, 0xd1, 0x8a, 0x06, 0x48, 0xdb, 0xa9, 0x59, 0x78, 0x01, 0x85, 0x14, - 0x6f, 0x92, 0xe9, 0x68, 0x56, 0x07, 0x41, 0xb9, 0x04, 0x52, 0x08, 0xb7, 0x7a, 0x32, 0xa7, 0x61, - 0x97, 0x93, 0x70, 0x31, 0x32, 0xbd, 0xeb, 0x4f, 0x82, 0xf3, 0x87, 0xca, 0xf1, 0x8f, 0x72, 0x05, - 0xc6, 0x84, 0x1a, 0xd8, 0xd1, 0x0a, 0x64, 0x23, 0xf9, 0xd8, 0x42, 0x2e, 0xd6, 0x42, 0xa4, 0x0c, - 0x99, 0xa3, 0x25, 0x72, 0x1d, 0x21, 0x8b, 0xa6, 0x29, 0x80, 0x3c, 0xab, 0x11, 0xfd, 0x41, 0xb0, - 0x8f, 0xe4, 0x31, 0x69, 0x7d, 0x0c, 0xf6, 0xd9, 0xc7, 0xd9, 0x8d, 0xea, 0x63, 0x98, 0x10, 0x38, - 0x5e, 0x6a, 0x26, 0x86, 0x34, 0x7d, 0x97, 0x7c, 0x24, 0x30, 0xd9, 0x59, 0x01, 0x9b, 0x7e, 0x03, - 0xa3, 0x35, 0x41, 0x1c, 0x6d, 0x1e, 0x4f, 0xed, 0xbe, 0x19, 0x1f, 0x41, 0xa1, 0xc8, 0xe2, 0xbf, - 0x61, 0x38, 0x17, 0x50, 0xd0, 0xcf, 0x04, 0x46, 0xda, 0x73, 0x4c, 0xa7, 0x62, 0xb2, 0x69, 0xab, - 0x52, 0x9a, 0xee, 0x96, 0xd6, 0xea, 0x41, 0x5e, 0xfa, 0xf0, 0xeb, 0xef, 0x97, 0x81, 0xdb, 0x74, - 0x5e, 0xf5, 0x98, 0x55, 0x67, 0x4e, 0xc3, 0xb0, 0x3c, 0x55, 0xb8, 0xbe, 0xd5, 0x1d, 0x34, 0x68, - 0x97, 0x7e, 0x22, 0x70, 0xa1, 0x2d, 0x55, 0x34, 0x4d, 0x11, 0x94, 0x60, 0x61, 0x8a, 0xa0, 0x44, - 0x2b, 0x4f, 0x9e, 0x0d, 0xa0, 0x26, 0xe8, 0x78, 0x57, 0x28, 0x7a, 0x48, 0x40, 0x4a, 0x7f, 0xe4, - 0xf4, 0x7e, 0x67, 0x1b, 0xd2, 0x56, 0x98, 0xf4, 0xa0, 0xef, 0x3a, 0x44, 0xdf, 0x08, 0xd0, 0xd7, - 0xe9, 0x5a, 0x57, 0xf4, 0x4a, 0xb5, 0x59, 0x09, 0xf7, 0x61, 0x05, 0xad, 0x55, 0x77, 0x12, 0x1b, - 0x72, 0x97, 0x7e, 0x23, 0x90, 0x8d, 0x0c, 0x0f, 0x2d, 0x08, 0xc9, 0x4e, 0x3f, 0x7d, 0x69, 0xa6, - 0x7b, 0x22, 0x32, 0x3f, 0x0a, 0x98, 0xef, 0xd1, 0xa5, 0x34, 0xe6, 0xc8, 0x80, 0xaa, 0x3b, 0xb1, - 0xfd, 0xb6, 0x4b, 0xf7, 0x08, 0x5c, 0x8a, 0x88, 0xfa, 0xd3, 0x50, 0x10, 0x5e, 0x73, 0x6f, 0x88, - 0xe2, 0xfd, 0x22, 0xcf, 0x07, 0x88, 0x53, 0x74, 0xa2, 0x07, 0x44, 0xfa, 0x93, 0xc0, 0xa8, 0xe8, - 0xbd, 0xd1, 0x3b, 0xdd, 0x2c, 0x49, 0x6e, 0x09, 0x69, 0xa1, 0x8f, 0x0a, 0x44, 0x5d, 0x09, 0x50, - 0x97, 0xe9, 0xc3, 0x1e, 0x50, 0xfd, 0x19, 0x68, 0x5f, 0x7d, 0xf8, 0xbc, 0x4a, 0xab, 0xfb, 0x47, - 0x79, 0x72, 0x70, 0x94, 0x27, 0x7f, 0x8e, 0xf2, 0x64, 0xef, 0x38, 0x9f, 0x39, 0x38, 0xce, 0x67, - 0x7e, 0x1f, 0xe7, 0x33, 0xaf, 0x67, 0x75, 0xc3, 0x7b, 0xb7, 0x55, 0x55, 0x6a, 0xbc, 0x91, 0x54, - 0x7f, 0xdf, 0xd6, 0xf7, 0x9a, 0x36, 0x73, 0xab, 0xe7, 0x83, 0x7f, 0xa7, 0x96, 0xfe, 0x07, 0x00, - 0x00, 0xff, 0xff, 0x1a, 0xba, 0x88, 0x6b, 0x12, 0x0a, 0x00, 0x00, + proto.RegisterType((*QueryParamsRequest)(nil), "network.profile.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "network.profile.v1.QueryParamsResponse") + proto.RegisterType((*QueryGetCoordinatorRequest)(nil), "network.profile.v1.QueryGetCoordinatorRequest") + proto.RegisterType((*QueryGetCoordinatorResponse)(nil), "network.profile.v1.QueryGetCoordinatorResponse") + proto.RegisterType((*QueryAllCoordinatorRequest)(nil), "network.profile.v1.QueryAllCoordinatorRequest") + proto.RegisterType((*QueryAllCoordinatorResponse)(nil), "network.profile.v1.QueryAllCoordinatorResponse") + proto.RegisterType((*QueryGetValidatorRequest)(nil), "network.profile.v1.QueryGetValidatorRequest") + proto.RegisterType((*QueryGetValidatorResponse)(nil), "network.profile.v1.QueryGetValidatorResponse") + proto.RegisterType((*QueryAllValidatorRequest)(nil), "network.profile.v1.QueryAllValidatorRequest") + proto.RegisterType((*QueryAllValidatorResponse)(nil), "network.profile.v1.QueryAllValidatorResponse") + proto.RegisterType((*QueryGetCoordinatorByAddressRequest)(nil), "network.profile.v1.QueryGetCoordinatorByAddressRequest") + proto.RegisterType((*QueryGetCoordinatorByAddressResponse)(nil), "network.profile.v1.QueryGetCoordinatorByAddressResponse") + proto.RegisterType((*QueryGetValidatorByOperatorAddressRequest)(nil), "network.profile.v1.QueryGetValidatorByOperatorAddressRequest") + proto.RegisterType((*QueryGetValidatorByOperatorAddressResponse)(nil), "network.profile.v1.QueryGetValidatorByOperatorAddressResponse") +} + +func init() { proto.RegisterFile("network/profile/v1/query.proto", fileDescriptor_1177c96bbfcc68b5) } + +var fileDescriptor_1177c96bbfcc68b5 = []byte{ + // 820 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x4d, 0x4f, 0x13, 0x5d, + 0x14, 0xc7, 0x3b, 0x85, 0x87, 0x27, 0xbd, 0x28, 0xc6, 0x2b, 0x89, 0x30, 0x4a, 0xd1, 0x01, 0x79, + 0x29, 0x30, 0xd7, 0xc2, 0x42, 0x17, 0x42, 0xd2, 0x52, 0x25, 0x44, 0xa3, 0x58, 0x8d, 0x89, 0x2e, + 0x6c, 0xa6, 0xed, 0x65, 0x9c, 0xd8, 0xce, 0x1d, 0x66, 0x86, 0x6a, 0x43, 0xd8, 0x18, 0x3f, 0x80, + 0x89, 0x0b, 0x97, 0x9a, 0xb8, 0xd0, 0x9d, 0x2e, 0xfc, 0x10, 0x2c, 0x09, 0x26, 0xc6, 0x95, 0x31, + 0x60, 0xe2, 0xc2, 0x2f, 0x61, 0x66, 0xe6, 0xb4, 0x9d, 0xb6, 0x77, 0xca, 0x80, 0xdd, 0x90, 0x99, + 0x7b, 0xcf, 0xcb, 0xef, 0x7f, 0xce, 0x99, 0x43, 0x51, 0x5c, 0xa7, 0xf6, 0x33, 0x66, 0x3e, 0x25, + 0x86, 0xc9, 0xd6, 0xb5, 0x12, 0x25, 0x95, 0x24, 0xd9, 0xd8, 0xa4, 0x66, 0x55, 0x36, 0x4c, 0x66, + 0x33, 0x8c, 0xe1, 0x5e, 0x86, 0x7b, 0xb9, 0x92, 0x14, 0x4f, 0x2b, 0x65, 0x4d, 0x67, 0xc4, 0xfd, + 0xeb, 0x99, 0x89, 0x89, 0x02, 0xb3, 0xca, 0xcc, 0x22, 0x79, 0xc5, 0xa2, 0x9e, 0x3f, 0xa9, 0x24, + 0xf3, 0xd4, 0x56, 0x92, 0xc4, 0x50, 0x54, 0x4d, 0x57, 0x6c, 0x8d, 0xe9, 0x60, 0x3b, 0xec, 0xd9, + 0xe6, 0xdc, 0x37, 0xe2, 0xbd, 0xc0, 0xd5, 0xa0, 0xca, 0x54, 0xe6, 0x9d, 0x3b, 0x4f, 0x70, 0x7a, + 0x5e, 0x65, 0x4c, 0x2d, 0x51, 0xa2, 0x18, 0x1a, 0x51, 0x74, 0x9d, 0xd9, 0x6e, 0xb4, 0x9a, 0xcf, + 0x38, 0x47, 0x41, 0x81, 0x31, 0xb3, 0xe8, 0x64, 0x65, 0x26, 0x58, 0x8d, 0x72, 0xac, 0x0c, 0xc5, + 0x54, 0xca, 0xb5, 0x30, 0x12, 0xc7, 0xa0, 0xa2, 0x94, 0xb4, 0x62, 0x23, 0x88, 0x34, 0x88, 0xf0, + 0x5d, 0x47, 0xdb, 0x9a, 0xeb, 0x98, 0xa5, 0x1b, 0x9b, 0xd4, 0xb2, 0xa5, 0xfb, 0xe8, 0x4c, 0xd3, + 0xa9, 0x65, 0x30, 0xdd, 0xa2, 0x78, 0x11, 0xf5, 0x79, 0x09, 0x86, 0x84, 0x0b, 0xc2, 0x54, 0xff, + 0xbc, 0x28, 0xb7, 0x97, 0x52, 0xf6, 0x7c, 0xd2, 0xb1, 0x9d, 0x1f, 0xa3, 0x91, 0x8f, 0xbf, 0x3f, + 0x27, 0x84, 0x2c, 0x38, 0x49, 0xb3, 0x48, 0x74, 0xa3, 0xae, 0x50, 0x7b, 0xb9, 0xa1, 0x06, 0x72, + 0xe2, 0x01, 0x14, 0x5d, 0xcd, 0xb8, 0x81, 0x7b, 0xb3, 0xd1, 0xd5, 0x8c, 0xb4, 0x8e, 0xce, 0x71, + 0xad, 0x81, 0x65, 0x05, 0xf5, 0xfb, 0x8e, 0x01, 0x68, 0x94, 0x07, 0xe4, 0x33, 0x4b, 0xf7, 0x3a, + 0x54, 0x59, 0xbf, 0xa7, 0x54, 0x04, 0xaa, 0x54, 0xa9, 0xc4, 0xa1, 0xba, 0x81, 0x50, 0xa3, 0xdb, + 0x90, 0x65, 0x42, 0x86, 0x0e, 0x3b, 0xa3, 0x21, 0x7b, 0xa3, 0x05, 0xa3, 0x21, 0xaf, 0x29, 0x2a, + 0x05, 0xdf, 0xac, 0xcf, 0x53, 0xfa, 0x24, 0x80, 0x9c, 0xd6, 0x34, 0x41, 0x72, 0x7a, 0x8e, 0x27, + 0x07, 0xaf, 0x34, 0x01, 0x47, 0x5d, 0xe0, 0xc9, 0x43, 0x81, 0x3d, 0x8a, 0x26, 0xe2, 0xdb, 0x68, + 0xa8, 0x56, 0xff, 0x07, 0xb5, 0xa1, 0xa9, 0x55, 0x65, 0x1e, 0xfd, 0xaf, 0x14, 0x8b, 0x26, 0xb5, + 0xbc, 0x49, 0x88, 0xa5, 0x87, 0xf6, 0xbe, 0xcc, 0x0d, 0x42, 0x92, 0x94, 0x77, 0x73, 0xcf, 0x36, + 0x35, 0x5d, 0xcd, 0xd6, 0x0c, 0xa5, 0xc7, 0x68, 0x98, 0x13, 0x0f, 0xe4, 0xa7, 0x50, 0xac, 0x3e, + 0x99, 0x50, 0xe5, 0x11, 0x9e, 0xf8, 0xba, 0x27, 0x48, 0x6f, 0x78, 0x49, 0x79, 0xe0, 0x4d, 0x95, + 0x4a, 0x6d, 0xbc, 0xdd, 0xea, 0xe2, 0x07, 0x01, 0x44, 0x34, 0x27, 0xe1, 0x8b, 0xe8, 0x39, 0xba, + 0x88, 0xee, 0x75, 0xef, 0x21, 0x1a, 0xe3, 0x7c, 0x3d, 0xe9, 0x2a, 0x34, 0xe7, 0x5f, 0x1a, 0xc9, + 0xd0, 0x78, 0xe7, 0xd0, 0x8d, 0x91, 0x2e, 0x1c, 0xfb, 0x0b, 0xf5, 0x79, 0x4a, 0x39, 0x34, 0xdd, + 0x36, 0x39, 0xe9, 0xea, 0x1d, 0x83, 0x9a, 0xce, 0x53, 0x57, 0x14, 0x25, 0xc2, 0x24, 0xe8, 0xda, + 0xac, 0xce, 0x7f, 0x8b, 0xa1, 0xff, 0xdc, 0x8c, 0xf8, 0xa5, 0x80, 0xfa, 0xbc, 0x8d, 0x89, 0x27, + 0x78, 0x41, 0xda, 0x97, 0xb3, 0x38, 0x79, 0xa8, 0x9d, 0x07, 0x2a, 0x4d, 0xbf, 0xf8, 0xfa, 0xeb, + 0x75, 0x74, 0x0c, 0x5f, 0x24, 0x9a, 0xaa, 0x6b, 0x36, 0x25, 0x81, 0xff, 0x30, 0xf0, 0x7b, 0x01, + 0x0d, 0x34, 0xf7, 0x13, 0xcb, 0x81, 0x69, 0xb8, 0xfb, 0x5b, 0x24, 0xa1, 0xed, 0x01, 0xef, 0xb2, + 0x8b, 0x97, 0xc0, 0x53, 0x41, 0x78, 0xbe, 0x19, 0x20, 0x5b, 0xab, 0x99, 0x6d, 0xfc, 0x56, 0x40, + 0xa7, 0x6e, 0x69, 0x56, 0x48, 0x4c, 0xee, 0x42, 0xef, 0x80, 0xc9, 0xdf, 0xcc, 0xd2, 0x8c, 0x8b, + 0x79, 0x09, 0x8f, 0x85, 0xc0, 0xc4, 0xef, 0x04, 0x74, 0xc2, 0x3f, 0x45, 0x78, 0xb6, 0x53, 0x55, + 0x5a, 0xf7, 0x94, 0x38, 0x17, 0xd2, 0x1a, 0xd0, 0x16, 0x5c, 0xb4, 0x39, 0x3c, 0x13, 0xd8, 0xe0, + 0x9a, 0x0b, 0xd9, 0x82, 0x59, 0xdf, 0xc6, 0x6f, 0x04, 0x74, 0xd2, 0x29, 0x62, 0x18, 0x46, 0xce, + 0x2e, 0xed, 0xc0, 0xc8, 0x5b, 0x8a, 0x21, 0x86, 0xb0, 0xce, 0xb1, 0x27, 0xa0, 0xb3, 0x01, 0x4b, + 0x05, 0x5f, 0x09, 0x39, 0x5d, 0xad, 0x1b, 0x4e, 0xbc, 0x7a, 0x74, 0x47, 0x20, 0xcf, 0xb8, 0xe4, + 0x4b, 0xf8, 0x5a, 0x10, 0xb9, 0x4a, 0xed, 0x9c, 0xaf, 0xf9, 0xb9, 0x7c, 0x35, 0x07, 0x55, 0xf6, + 0x95, 0xfb, 0x8f, 0x80, 0x46, 0x3a, 0xee, 0x15, 0xbc, 0x18, 0xaa, 0xe9, 0x41, 0x0b, 0x4f, 0x5c, + 0x3a, 0xae, 0x3b, 0xc8, 0xbc, 0xe9, 0xca, 0xbc, 0x8e, 0x97, 0x3b, 0xc9, 0xac, 0x37, 0xc9, 0x11, + 0xc9, 0x20, 0x52, 0xbb, 0xda, 0xf4, 0xf2, 0xce, 0x7e, 0x5c, 0xd8, 0xdd, 0x8f, 0x0b, 0x3f, 0xf7, + 0xe3, 0xc2, 0xab, 0x83, 0x78, 0x64, 0xf7, 0x20, 0x1e, 0xf9, 0x7e, 0x10, 0x8f, 0x3c, 0x9a, 0x56, + 0x35, 0xfb, 0xc9, 0x66, 0x5e, 0x2e, 0xb0, 0x72, 0x6b, 0xa2, 0xe7, 0xf5, 0x54, 0x76, 0xd5, 0xa0, + 0x56, 0xbe, 0xcf, 0xfd, 0x69, 0xba, 0xf0, 0x37, 0x00, 0x00, 0xff, 0xff, 0x40, 0xcb, 0xd0, 0x34, + 0xc9, 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -662,18 +754,18 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { - // Queries a validator by index. - Validator(ctx context.Context, in *QueryGetValidatorRequest, opts ...grpc.CallOption) (*QueryGetValidatorResponse, error) - // Queries a list of validator items. - ValidatorAll(ctx context.Context, in *QueryAllValidatorRequest, opts ...grpc.CallOption) (*QueryAllValidatorResponse, error) - // Queries a ValidatorByConsAddress by consensus address. - ValidatorByOperatorAddress(ctx context.Context, in *QueryGetValidatorByOperatorAddressRequest, opts ...grpc.CallOption) (*QueryGetValidatorByOperatorAddressResponse, error) - // Queries a coordinator by id. - Coordinator(ctx context.Context, in *QueryGetCoordinatorRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorResponse, error) - // Queries a list of coordinator items. - CoordinatorAll(ctx context.Context, in *QueryAllCoordinatorRequest, opts ...grpc.CallOption) (*QueryAllCoordinatorResponse, error) - // Queries a coordinatorByAddress by index. - CoordinatorByAddress(ctx context.Context, in *QueryGetCoordinatorByAddressRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorByAddressResponse, error) + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of Coordinator items. + GetCoordinator(ctx context.Context, in *QueryGetCoordinatorRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorResponse, error) + ListCoordinator(ctx context.Context, in *QueryAllCoordinatorRequest, opts ...grpc.CallOption) (*QueryAllCoordinatorResponse, error) + // Queries a list of Validator items. + GetValidator(ctx context.Context, in *QueryGetValidatorRequest, opts ...grpc.CallOption) (*QueryGetValidatorResponse, error) + ListValidator(ctx context.Context, in *QueryAllValidatorRequest, opts ...grpc.CallOption) (*QueryAllValidatorResponse, error) + // Queries a list of GetCoordinatorByAddress items. + GetCoordinatorByAddress(ctx context.Context, in *QueryGetCoordinatorByAddressRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorByAddressResponse, error) + // Queries a list of GetValidatorByOperatorAddress items. + GetValidatorByOperatorAddress(ctx context.Context, in *QueryGetValidatorByOperatorAddressRequest, opts ...grpc.CallOption) (*QueryGetValidatorByOperatorAddressResponse, error) } type queryClient struct { @@ -684,54 +776,63 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Validator(ctx context.Context, in *QueryGetValidatorRequest, opts ...grpc.CallOption) (*QueryGetValidatorResponse, error) { - out := new(QueryGetValidatorResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Query/Validator", in, out, opts...) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/network.profile.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ValidatorAll(ctx context.Context, in *QueryAllValidatorRequest, opts ...grpc.CallOption) (*QueryAllValidatorResponse, error) { - out := new(QueryAllValidatorResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Query/ValidatorAll", in, out, opts...) +func (c *queryClient) GetCoordinator(ctx context.Context, in *QueryGetCoordinatorRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorResponse, error) { + out := new(QueryGetCoordinatorResponse) + err := c.cc.Invoke(ctx, "/network.profile.v1.Query/GetCoordinator", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ValidatorByOperatorAddress(ctx context.Context, in *QueryGetValidatorByOperatorAddressRequest, opts ...grpc.CallOption) (*QueryGetValidatorByOperatorAddressResponse, error) { - out := new(QueryGetValidatorByOperatorAddressResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Query/ValidatorByOperatorAddress", in, out, opts...) +func (c *queryClient) ListCoordinator(ctx context.Context, in *QueryAllCoordinatorRequest, opts ...grpc.CallOption) (*QueryAllCoordinatorResponse, error) { + out := new(QueryAllCoordinatorResponse) + err := c.cc.Invoke(ctx, "/network.profile.v1.Query/ListCoordinator", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Coordinator(ctx context.Context, in *QueryGetCoordinatorRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorResponse, error) { - out := new(QueryGetCoordinatorResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Query/Coordinator", in, out, opts...) +func (c *queryClient) GetValidator(ctx context.Context, in *QueryGetValidatorRequest, opts ...grpc.CallOption) (*QueryGetValidatorResponse, error) { + out := new(QueryGetValidatorResponse) + err := c.cc.Invoke(ctx, "/network.profile.v1.Query/GetValidator", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) CoordinatorAll(ctx context.Context, in *QueryAllCoordinatorRequest, opts ...grpc.CallOption) (*QueryAllCoordinatorResponse, error) { - out := new(QueryAllCoordinatorResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Query/CoordinatorAll", in, out, opts...) +func (c *queryClient) ListValidator(ctx context.Context, in *QueryAllValidatorRequest, opts ...grpc.CallOption) (*QueryAllValidatorResponse, error) { + out := new(QueryAllValidatorResponse) + err := c.cc.Invoke(ctx, "/network.profile.v1.Query/ListValidator", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) CoordinatorByAddress(ctx context.Context, in *QueryGetCoordinatorByAddressRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorByAddressResponse, error) { +func (c *queryClient) GetCoordinatorByAddress(ctx context.Context, in *QueryGetCoordinatorByAddressRequest, opts ...grpc.CallOption) (*QueryGetCoordinatorByAddressResponse, error) { out := new(QueryGetCoordinatorByAddressResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Query/CoordinatorByAddress", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.profile.v1.Query/GetCoordinatorByAddress", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) GetValidatorByOperatorAddress(ctx context.Context, in *QueryGetValidatorByOperatorAddressRequest, opts ...grpc.CallOption) (*QueryGetValidatorByOperatorAddressResponse, error) { + out := new(QueryGetValidatorByOperatorAddressResponse) + err := c.cc.Invoke(ctx, "/network.profile.v1.Query/GetValidatorByOperatorAddress", in, out, opts...) if err != nil { return nil, err } @@ -740,189 +841,214 @@ func (c *queryClient) CoordinatorByAddress(ctx context.Context, in *QueryGetCoor // QueryServer is the server API for Query service. type QueryServer interface { - // Queries a validator by index. - Validator(context.Context, *QueryGetValidatorRequest) (*QueryGetValidatorResponse, error) - // Queries a list of validator items. - ValidatorAll(context.Context, *QueryAllValidatorRequest) (*QueryAllValidatorResponse, error) - // Queries a ValidatorByConsAddress by consensus address. - ValidatorByOperatorAddress(context.Context, *QueryGetValidatorByOperatorAddressRequest) (*QueryGetValidatorByOperatorAddressResponse, error) - // Queries a coordinator by id. - Coordinator(context.Context, *QueryGetCoordinatorRequest) (*QueryGetCoordinatorResponse, error) - // Queries a list of coordinator items. - CoordinatorAll(context.Context, *QueryAllCoordinatorRequest) (*QueryAllCoordinatorResponse, error) - // Queries a coordinatorByAddress by index. - CoordinatorByAddress(context.Context, *QueryGetCoordinatorByAddressRequest) (*QueryGetCoordinatorByAddressResponse, error) + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of Coordinator items. + GetCoordinator(context.Context, *QueryGetCoordinatorRequest) (*QueryGetCoordinatorResponse, error) + ListCoordinator(context.Context, *QueryAllCoordinatorRequest) (*QueryAllCoordinatorResponse, error) + // Queries a list of Validator items. + GetValidator(context.Context, *QueryGetValidatorRequest) (*QueryGetValidatorResponse, error) + ListValidator(context.Context, *QueryAllValidatorRequest) (*QueryAllValidatorResponse, error) + // Queries a list of GetCoordinatorByAddress items. + GetCoordinatorByAddress(context.Context, *QueryGetCoordinatorByAddressRequest) (*QueryGetCoordinatorByAddressResponse, error) + // Queries a list of GetValidatorByOperatorAddress items. + GetValidatorByOperatorAddress(context.Context, *QueryGetValidatorByOperatorAddressRequest) (*QueryGetValidatorByOperatorAddressResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Validator(ctx context.Context, req *QueryGetValidatorRequest) (*QueryGetValidatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Validator not implemented") +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) GetCoordinator(ctx context.Context, req *QueryGetCoordinatorRequest) (*QueryGetCoordinatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetCoordinator not implemented") } -func (*UnimplementedQueryServer) ValidatorAll(ctx context.Context, req *QueryAllValidatorRequest) (*QueryAllValidatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ValidatorAll not implemented") +func (*UnimplementedQueryServer) ListCoordinator(ctx context.Context, req *QueryAllCoordinatorRequest) (*QueryAllCoordinatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListCoordinator not implemented") } -func (*UnimplementedQueryServer) ValidatorByOperatorAddress(ctx context.Context, req *QueryGetValidatorByOperatorAddressRequest) (*QueryGetValidatorByOperatorAddressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ValidatorByOperatorAddress not implemented") +func (*UnimplementedQueryServer) GetValidator(ctx context.Context, req *QueryGetValidatorRequest) (*QueryGetValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetValidator not implemented") } -func (*UnimplementedQueryServer) Coordinator(ctx context.Context, req *QueryGetCoordinatorRequest) (*QueryGetCoordinatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Coordinator not implemented") +func (*UnimplementedQueryServer) ListValidator(ctx context.Context, req *QueryAllValidatorRequest) (*QueryAllValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListValidator not implemented") } -func (*UnimplementedQueryServer) CoordinatorAll(ctx context.Context, req *QueryAllCoordinatorRequest) (*QueryAllCoordinatorResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CoordinatorAll not implemented") +func (*UnimplementedQueryServer) GetCoordinatorByAddress(ctx context.Context, req *QueryGetCoordinatorByAddressRequest) (*QueryGetCoordinatorByAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetCoordinatorByAddress not implemented") } -func (*UnimplementedQueryServer) CoordinatorByAddress(ctx context.Context, req *QueryGetCoordinatorByAddressRequest) (*QueryGetCoordinatorByAddressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CoordinatorByAddress not implemented") +func (*UnimplementedQueryServer) GetValidatorByOperatorAddress(ctx context.Context, req *QueryGetValidatorByOperatorAddressRequest) (*QueryGetValidatorByOperatorAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetValidatorByOperatorAddress not implemented") } func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } -func _Query_Validator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetValidatorRequest) +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Validator(ctx, in) + return srv.(QueryServer).Params(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Query/Validator", + FullMethod: "/network.profile.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Validator(ctx, req.(*QueryGetValidatorRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ValidatorAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllValidatorRequest) +func _Query_GetCoordinator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetCoordinatorRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ValidatorAll(ctx, in) + return srv.(QueryServer).GetCoordinator(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Query/ValidatorAll", + FullMethod: "/network.profile.v1.Query/GetCoordinator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ValidatorAll(ctx, req.(*QueryAllValidatorRequest)) + return srv.(QueryServer).GetCoordinator(ctx, req.(*QueryGetCoordinatorRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ValidatorByOperatorAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetValidatorByOperatorAddressRequest) +func _Query_ListCoordinator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllCoordinatorRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ValidatorByOperatorAddress(ctx, in) + return srv.(QueryServer).ListCoordinator(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Query/ValidatorByOperatorAddress", + FullMethod: "/network.profile.v1.Query/ListCoordinator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ValidatorByOperatorAddress(ctx, req.(*QueryGetValidatorByOperatorAddressRequest)) + return srv.(QueryServer).ListCoordinator(ctx, req.(*QueryAllCoordinatorRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Coordinator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetCoordinatorRequest) +func _Query_GetValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetValidatorRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Coordinator(ctx, in) + return srv.(QueryServer).GetValidator(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Query/Coordinator", + FullMethod: "/network.profile.v1.Query/GetValidator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Coordinator(ctx, req.(*QueryGetCoordinatorRequest)) + return srv.(QueryServer).GetValidator(ctx, req.(*QueryGetValidatorRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_CoordinatorAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllCoordinatorRequest) +func _Query_ListValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllValidatorRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).CoordinatorAll(ctx, in) + return srv.(QueryServer).ListValidator(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Query/CoordinatorAll", + FullMethod: "/network.profile.v1.Query/ListValidator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CoordinatorAll(ctx, req.(*QueryAllCoordinatorRequest)) + return srv.(QueryServer).ListValidator(ctx, req.(*QueryAllValidatorRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_CoordinatorByAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_GetCoordinatorByAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryGetCoordinatorByAddressRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).CoordinatorByAddress(ctx, in) + return srv.(QueryServer).GetCoordinatorByAddress(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Query/CoordinatorByAddress", + FullMethod: "/network.profile.v1.Query/GetCoordinatorByAddress", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CoordinatorByAddress(ctx, req.(*QueryGetCoordinatorByAddressRequest)) + return srv.(QueryServer).GetCoordinatorByAddress(ctx, req.(*QueryGetCoordinatorByAddressRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_GetValidatorByOperatorAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetValidatorByOperatorAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GetValidatorByOperatorAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/network.profile.v1.Query/GetValidatorByOperatorAddress", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetValidatorByOperatorAddress(ctx, req.(*QueryGetValidatorByOperatorAddressRequest)) } return interceptor(ctx, in, info, handler) } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.profile.Query", + ServiceName: "network.profile.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "Validator", - Handler: _Query_Validator_Handler, + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "GetCoordinator", + Handler: _Query_GetCoordinator_Handler, }, { - MethodName: "ValidatorAll", - Handler: _Query_ValidatorAll_Handler, + MethodName: "ListCoordinator", + Handler: _Query_ListCoordinator_Handler, }, { - MethodName: "ValidatorByOperatorAddress", - Handler: _Query_ValidatorByOperatorAddress_Handler, + MethodName: "GetValidator", + Handler: _Query_GetValidator_Handler, }, { - MethodName: "Coordinator", - Handler: _Query_Coordinator_Handler, + MethodName: "ListValidator", + Handler: _Query_ListValidator_Handler, }, { - MethodName: "CoordinatorAll", - Handler: _Query_CoordinatorAll_Handler, + MethodName: "GetCoordinatorByAddress", + Handler: _Query_GetCoordinatorByAddress_Handler, }, { - MethodName: "CoordinatorByAddress", - Handler: _Query_CoordinatorByAddress_Handler, + MethodName: "GetValidatorByOperatorAddress", + Handler: _Query_GetValidatorByOperatorAddress_Handler, }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/profile/query.proto", + Metadata: "network/profile/v1/query.proto", } -func (m *QueryGetValidatorRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -932,27 +1058,81 @@ func (m *QueryGetValidatorRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetValidatorRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryGetCoordinatorRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetCoordinatorRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetCoordinatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ID != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.ID)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryGetValidatorResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetCoordinatorResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -962,18 +1142,18 @@ func (m *QueryGetValidatorResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetValidatorResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetCoordinatorResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetCoordinatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Coordinator.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -985,7 +1165,7 @@ func (m *QueryGetValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } -func (m *QueryAllValidatorRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllCoordinatorRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -995,12 +1175,12 @@ func (m *QueryAllValidatorRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllValidatorRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllCoordinatorRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllCoordinatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1020,7 +1200,7 @@ func (m *QueryAllValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *QueryAllValidatorResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllCoordinatorResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1030,12 +1210,12 @@ func (m *QueryAllValidatorResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllValidatorResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllCoordinatorResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllCoordinatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1052,10 +1232,10 @@ func (m *QueryAllValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro i-- dAtA[i] = 0x12 } - if len(m.Validator) > 0 { - for iNdEx := len(m.Validator) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Coordinator) > 0 { + for iNdEx := len(m.Coordinator) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Validator[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Coordinator[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1069,7 +1249,7 @@ func (m *QueryAllValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } -func (m *QueryGetValidatorByOperatorAddressRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetValidatorRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1079,27 +1259,27 @@ func (m *QueryGetValidatorByOperatorAddressRequest) Marshal() (dAtA []byte, err return dAtA[:n], nil } -func (m *QueryGetValidatorByOperatorAddressRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetValidatorRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetValidatorByOperatorAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.OperatorAddress) > 0 { - i -= len(m.OperatorAddress) - copy(dAtA[i:], m.OperatorAddress) - i = encodeVarintQuery(dAtA, i, uint64(len(m.OperatorAddress))) + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryGetValidatorByOperatorAddressResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetValidatorResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1109,18 +1289,18 @@ func (m *QueryGetValidatorByOperatorAddressResponse) Marshal() (dAtA []byte, err return dAtA[:n], nil } -func (m *QueryGetValidatorByOperatorAddressResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetValidatorResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetValidatorByOperatorAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.ValidatorByOperatorAddress.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1132,7 +1312,7 @@ func (m *QueryGetValidatorByOperatorAddressResponse) MarshalToSizedBuffer(dAtA [ return len(dAtA) - i, nil } -func (m *QueryGetCoordinatorRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllValidatorRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1142,25 +1322,32 @@ func (m *QueryGetCoordinatorRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetCoordinatorRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllValidatorRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetCoordinatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.CoordinatorID != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.CoordinatorID)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x8 + dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryGetCoordinatorResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllValidatorResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1170,30 +1357,46 @@ func (m *QueryGetCoordinatorResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetCoordinatorResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllValidatorResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetCoordinatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Coordinator.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Validator) > 0 { + for iNdEx := len(m.Validator) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validator[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryAllCoordinatorRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetCoordinatorByAddressRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1203,32 +1406,27 @@ func (m *QueryAllCoordinatorRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllCoordinatorRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetCoordinatorByAddressRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllCoordinatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetCoordinatorByAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAllCoordinatorResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetCoordinatorByAddressResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1238,46 +1436,30 @@ func (m *QueryAllCoordinatorResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllCoordinatorResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetCoordinatorByAddressResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllCoordinatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetCoordinatorByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Coordinator) > 0 { - for iNdEx := len(m.Coordinator) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Coordinator[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + { + size, err := m.Coordinator.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryGetCoordinatorByAddressRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetValidatorByOperatorAddressRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1287,12 +1469,12 @@ func (m *QueryGetCoordinatorByAddressRequest) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *QueryGetCoordinatorByAddressRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetValidatorByOperatorAddressRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetCoordinatorByAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetValidatorByOperatorAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1307,7 +1489,7 @@ func (m *QueryGetCoordinatorByAddressRequest) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *QueryGetCoordinatorByAddressResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetValidatorByOperatorAddressResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1317,18 +1499,18 @@ func (m *QueryGetCoordinatorByAddressResponse) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *QueryGetCoordinatorByAddressResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetValidatorByOperatorAddressResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetCoordinatorByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetValidatorByOperatorAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.CoordinatorByAddress.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1351,31 +1533,50 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryGetValidatorRequest) Size() (n int) { +func (m *QueryParamsRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryGetValidatorResponse) Size() (n int) { +func (m *QueryGetCoordinatorRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.Validator.Size() + if m.ID != 0 { + n += 1 + sovQuery(uint64(m.ID)) + } + return n +} + +func (m *QueryGetCoordinatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Coordinator.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllValidatorRequest) Size() (n int) { +func (m *QueryAllCoordinatorRequest) Size() (n int) { if m == nil { return 0 } @@ -1388,14 +1589,14 @@ func (m *QueryAllValidatorRequest) Size() (n int) { return n } -func (m *QueryAllValidatorResponse) Size() (n int) { +func (m *QueryAllCoordinatorResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Validator) > 0 { - for _, e := range m.Validator { + if len(m.Coordinator) > 0 { + for _, e := range m.Coordinator { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -1407,86 +1608,87 @@ func (m *QueryAllValidatorResponse) Size() (n int) { return n } -func (m *QueryGetValidatorByOperatorAddressRequest) Size() (n int) { +func (m *QueryGetValidatorRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.OperatorAddress) + l = len(m.Address) if l > 0 { n += 1 + l + sovQuery(uint64(l)) } return n } -func (m *QueryGetValidatorByOperatorAddressResponse) Size() (n int) { +func (m *QueryGetValidatorResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.ValidatorByOperatorAddress.Size() + l = m.Validator.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryGetCoordinatorRequest) Size() (n int) { +func (m *QueryAllValidatorRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.CoordinatorID != 0 { - n += 1 + sovQuery(uint64(m.CoordinatorID)) + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } return n } -func (m *QueryGetCoordinatorResponse) Size() (n int) { +func (m *QueryAllValidatorResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.Coordinator.Size() - n += 1 + l + sovQuery(uint64(l)) + if len(m.Validator) > 0 { + for _, e := range m.Validator { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } return n } -func (m *QueryAllCoordinatorRequest) Size() (n int) { +func (m *QueryGetCoordinatorByAddressRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Pagination != nil { - l = m.Pagination.Size() + l = len(m.Address) + if l > 0 { n += 1 + l + sovQuery(uint64(l)) } return n } -func (m *QueryAllCoordinatorResponse) Size() (n int) { +func (m *QueryGetCoordinatorByAddressResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Coordinator) > 0 { - for _, e := range m.Coordinator { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } + l = m.Coordinator.Size() + n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryGetCoordinatorByAddressRequest) Size() (n int) { +func (m *QueryGetValidatorByOperatorAddressRequest) Size() (n int) { if m == nil { return 0 } @@ -1496,27 +1698,160 @@ func (m *QueryGetCoordinatorByAddressRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - return n -} + return n +} + +func (m *QueryGetValidatorByOperatorAddressResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Validator.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } -func (m *QueryGetCoordinatorByAddressResponse) Size() (n int) { - if m == nil { - return 0 + if iNdEx > l { + return io.ErrUnexpectedEOF } - var l int - _ = l - l = m.CoordinatorByAddress.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return nil } -func (m *QueryGetValidatorRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetCoordinatorRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1539,17 +1874,17 @@ func (m *QueryGetValidatorRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetValidatorRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetCoordinatorRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetCoordinatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) } - var stringLen uint64 + m.ID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -1559,24 +1894,11 @@ func (m *QueryGetValidatorRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.ID |= uint64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1598,7 +1920,7 @@ func (m *QueryGetValidatorRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetValidatorResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetCoordinatorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1621,15 +1943,15 @@ func (m *QueryGetValidatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetValidatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetCoordinatorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1656,7 +1978,7 @@ func (m *QueryGetValidatorResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Coordinator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1681,7 +2003,7 @@ func (m *QueryGetValidatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllValidatorRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllCoordinatorRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1704,10 +2026,10 @@ func (m *QueryAllValidatorRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllValidatorRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllCoordinatorRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllCoordinatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1767,7 +2089,7 @@ func (m *QueryAllValidatorRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllValidatorResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllCoordinatorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1790,15 +2112,15 @@ func (m *QueryAllValidatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllValidatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllCoordinatorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1825,8 +2147,8 @@ func (m *QueryAllValidatorResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Validator = append(m.Validator, Validator{}) - if err := m.Validator[len(m.Validator)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Coordinator = append(m.Coordinator, Coordinator{}) + if err := m.Coordinator[len(m.Coordinator)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1887,7 +2209,7 @@ func (m *QueryAllValidatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetValidatorByOperatorAddressRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetValidatorRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1910,15 +2232,15 @@ func (m *QueryGetValidatorByOperatorAddressRequest) Unmarshal(dAtA []byte) error fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetValidatorByOperatorAddressRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetValidatorRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetValidatorByOperatorAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OperatorAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1946,7 +2268,7 @@ func (m *QueryGetValidatorByOperatorAddressRequest) Unmarshal(dAtA []byte) error if postIndex > l { return io.ErrUnexpectedEOF } - m.OperatorAddress = string(dAtA[iNdEx:postIndex]) + m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -1969,7 +2291,7 @@ func (m *QueryGetValidatorByOperatorAddressRequest) Unmarshal(dAtA []byte) error } return nil } -func (m *QueryGetValidatorByOperatorAddressResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetValidatorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1992,15 +2314,15 @@ func (m *QueryGetValidatorByOperatorAddressResponse) Unmarshal(dAtA []byte) erro fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetValidatorByOperatorAddressResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetValidatorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetValidatorByOperatorAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorByOperatorAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2027,7 +2349,7 @@ func (m *QueryGetValidatorByOperatorAddressResponse) Unmarshal(dAtA []byte) erro if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ValidatorByOperatorAddress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2052,7 +2374,7 @@ func (m *QueryGetValidatorByOperatorAddressResponse) Unmarshal(dAtA []byte) erro } return nil } -func (m *QueryGetCoordinatorRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllValidatorRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2075,17 +2397,17 @@ func (m *QueryGetCoordinatorRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetCoordinatorRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllValidatorRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetCoordinatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - m.CoordinatorID = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -2095,11 +2417,28 @@ func (m *QueryGetCoordinatorRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.CoordinatorID |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2121,7 +2460,7 @@ func (m *QueryGetCoordinatorRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetCoordinatorResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllValidatorResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2144,15 +2483,15 @@ func (m *QueryGetCoordinatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetCoordinatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllValidatorResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Coordinator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2179,7 +2518,44 @@ func (m *QueryGetCoordinatorResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Coordinator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Validator = append(m.Validator, Validator{}) + if err := m.Validator[len(m.Validator)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2204,7 +2580,7 @@ func (m *QueryGetCoordinatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllCoordinatorRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetCoordinatorByAddressRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2227,17 +2603,17 @@ func (m *QueryAllCoordinatorRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllCoordinatorRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetCoordinatorByAddressRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllCoordinatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetCoordinatorByAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -2247,27 +2623,23 @@ func (m *QueryAllCoordinatorRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2290,7 +2662,7 @@ func (m *QueryAllCoordinatorRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllCoordinatorResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetCoordinatorByAddressResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2313,10 +2685,10 @@ func (m *QueryAllCoordinatorResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllCoordinatorResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetCoordinatorByAddressResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetCoordinatorByAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2348,44 +2720,7 @@ func (m *QueryAllCoordinatorResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Coordinator = append(m.Coordinator, Coordinator{}) - if err := m.Coordinator[len(m.Coordinator)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Coordinator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2410,7 +2745,7 @@ func (m *QueryAllCoordinatorResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetCoordinatorByAddressRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetValidatorByOperatorAddressRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2433,10 +2768,10 @@ func (m *QueryGetCoordinatorByAddressRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetCoordinatorByAddressRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetValidatorByOperatorAddressRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetCoordinatorByAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetValidatorByOperatorAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2492,7 +2827,7 @@ func (m *QueryGetCoordinatorByAddressRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetCoordinatorByAddressResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetValidatorByOperatorAddressResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2515,15 +2850,15 @@ func (m *QueryGetCoordinatorByAddressResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetCoordinatorByAddressResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetValidatorByOperatorAddressResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetCoordinatorByAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetValidatorByOperatorAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CoordinatorByAddress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2550,7 +2885,7 @@ func (m *QueryGetCoordinatorByAddressResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.CoordinatorByAddress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/profile/types/query.pb.gw.go b/x/profile/types/query.pb.gw.go index e2c11cbc..66eddba0 100644 --- a/x/profile/types/query.pb.gw.go +++ b/x/profile/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: spn/profile/query.proto +// source: network/profile/v1/query.proto /* Package types is a reverse proxy. @@ -33,8 +33,26 @@ var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage var _ = metadata.Join -func request_Query_Validator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetValidatorRequest +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_GetCoordinator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetCoordinatorRequest var metadata runtime.ServerMetadata var ( @@ -44,24 +62,24 @@ func request_Query_Validator_0(ctx context.Context, marshaler runtime.Marshaler, _ = err ) - val, ok = pathParams["address"] + val, ok = pathParams["ID"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "ID") } - protoReq.Address, err = runtime.String(val) + protoReq.ID, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "ID", err) } - msg, err := client.Validator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetCoordinator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Validator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetValidatorRequest +func local_request_Query_GetCoordinator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetCoordinatorRequest var metadata runtime.ServerMetadata var ( @@ -71,60 +89,60 @@ func local_request_Query_Validator_0(ctx context.Context, marshaler runtime.Mars _ = err ) - val, ok = pathParams["address"] + val, ok = pathParams["ID"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "ID") } - protoReq.Address, err = runtime.String(val) + protoReq.ID, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "ID", err) } - msg, err := server.Validator(ctx, &protoReq) + msg, err := server.GetCoordinator(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ValidatorAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_ListCoordinator_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_ValidatorAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllValidatorRequest +func request_Query_ListCoordinator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllCoordinatorRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ValidatorAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListCoordinator_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ValidatorAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListCoordinator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ValidatorAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllValidatorRequest +func local_request_Query_ListCoordinator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllCoordinatorRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ValidatorAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListCoordinator_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ValidatorAll(ctx, &protoReq) + msg, err := server.ListCoordinator(ctx, &protoReq) return msg, metadata, err } -func request_Query_ValidatorByOperatorAddress_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetValidatorByOperatorAddressRequest +func request_Query_GetValidator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetValidatorRequest var metadata runtime.ServerMetadata var ( @@ -134,24 +152,24 @@ func request_Query_ValidatorByOperatorAddress_0(ctx context.Context, marshaler r _ = err ) - val, ok = pathParams["operatorAddress"] + val, ok = pathParams["address"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "operatorAddress") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") } - protoReq.OperatorAddress, err = runtime.String(val) + protoReq.Address, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "operatorAddress", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.ValidatorByOperatorAddress(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetValidator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ValidatorByOperatorAddress_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetValidatorByOperatorAddressRequest +func local_request_Query_GetValidator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetValidatorRequest var metadata runtime.ServerMetadata var ( @@ -161,51 +179,60 @@ func local_request_Query_ValidatorByOperatorAddress_0(ctx context.Context, marsh _ = err ) - val, ok = pathParams["operatorAddress"] + val, ok = pathParams["address"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "operatorAddress") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") } - protoReq.OperatorAddress, err = runtime.String(val) + protoReq.Address, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "operatorAddress", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.ValidatorByOperatorAddress(ctx, &protoReq) + msg, err := server.GetValidator(ctx, &protoReq) return msg, metadata, err } -func request_Query_Coordinator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetCoordinatorRequest - var metadata runtime.ServerMetadata +var ( + filter_Query_ListValidator_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) - var ( - val string - ok bool - err error - _ = err - ) +func request_Query_ListValidator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllValidatorRequest + var metadata runtime.ServerMetadata - val, ok = pathParams["coordinatorID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "coordinatorID") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListValidator_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - protoReq.CoordinatorID, err = runtime.Uint64(val) + msg, err := client.ListValidator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "coordinatorID", err) +} + +func local_request_Query_ListValidator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllValidatorRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListValidator_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Coordinator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := server.ListValidator(ctx, &protoReq) return msg, metadata, err } -func local_request_Query_Coordinator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetCoordinatorRequest +func request_Query_GetCoordinatorByAddress_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetCoordinatorByAddressRequest var metadata runtime.ServerMetadata var ( @@ -215,60 +242,51 @@ func local_request_Query_Coordinator_0(ctx context.Context, marshaler runtime.Ma _ = err ) - val, ok = pathParams["coordinatorID"] + val, ok = pathParams["address"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "coordinatorID") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") } - protoReq.CoordinatorID, err = runtime.Uint64(val) + protoReq.Address, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "coordinatorID", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.Coordinator(ctx, &protoReq) + msg, err := client.GetCoordinatorByAddress(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -var ( - filter_Query_CoordinatorAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Query_CoordinatorAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllCoordinatorRequest +func local_request_Query_GetCoordinatorByAddress_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetCoordinatorByAddressRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CoordinatorAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CoordinatorAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + var ( + val string + ok bool + err error + _ = err + ) -} + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } -func local_request_Query_CoordinatorAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllCoordinatorRequest - var metadata runtime.ServerMetadata + protoReq.Address, err = runtime.String(val) - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CoordinatorAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.CoordinatorAll(ctx, &protoReq) + msg, err := server.GetCoordinatorByAddress(ctx, &protoReq) return msg, metadata, err } -func request_Query_CoordinatorByAddress_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetCoordinatorByAddressRequest +func request_Query_GetValidatorByOperatorAddress_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetValidatorByOperatorAddressRequest var metadata runtime.ServerMetadata var ( @@ -289,13 +307,13 @@ func request_Query_CoordinatorByAddress_0(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.CoordinatorByAddress(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetValidatorByOperatorAddress(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_CoordinatorByAddress_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetCoordinatorByAddressRequest +func local_request_Query_GetValidatorByOperatorAddress_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetValidatorByOperatorAddressRequest var metadata runtime.ServerMetadata var ( @@ -316,7 +334,7 @@ func local_request_Query_CoordinatorByAddress_0(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.CoordinatorByAddress(ctx, &protoReq) + msg, err := server.GetValidatorByOperatorAddress(ctx, &protoReq) return msg, metadata, err } @@ -327,7 +345,30 @@ func local_request_Query_CoordinatorByAddress_0(ctx context.Context, marshaler r // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - mux.Handle("GET", pattern_Query_Validator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_GetCoordinator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -338,7 +379,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Validator_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetCoordinator_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -346,11 +387,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Validator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetCoordinator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ValidatorAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListCoordinator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -361,7 +402,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ValidatorAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListCoordinator_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -369,11 +410,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ValidatorAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListCoordinator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ValidatorByOperatorAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -384,7 +425,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ValidatorByOperatorAddress_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetValidator_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -392,11 +433,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ValidatorByOperatorAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Coordinator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -407,7 +448,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Coordinator_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListValidator_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -415,11 +456,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Coordinator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_CoordinatorAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetCoordinatorByAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -430,7 +471,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_CoordinatorAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetCoordinatorByAddress_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -438,11 +479,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_CoordinatorAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetCoordinatorByAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_CoordinatorByAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetValidatorByOperatorAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -453,7 +494,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_CoordinatorByAddress_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetValidatorByOperatorAddress_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -461,7 +502,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_CoordinatorByAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetValidatorByOperatorAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -506,7 +547,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - mux.Handle("GET", pattern_Query_Validator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -515,18 +556,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Validator_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Validator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ValidatorAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetCoordinator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -535,18 +576,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ValidatorAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetCoordinator_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ValidatorAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetCoordinator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ValidatorByOperatorAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListCoordinator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -555,18 +596,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ValidatorByOperatorAddress_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListCoordinator_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ValidatorByOperatorAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListCoordinator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Coordinator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -575,18 +616,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Coordinator_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetValidator_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Coordinator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_CoordinatorAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListValidator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -595,18 +636,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_CoordinatorAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListValidator_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_CoordinatorAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListValidator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_CoordinatorByAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetCoordinatorByAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -615,14 +656,34 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_CoordinatorByAddress_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetCoordinatorByAddress_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_CoordinatorByAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetCoordinatorByAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_GetValidatorByOperatorAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_GetValidatorByOperatorAddress_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_GetValidatorByOperatorAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -630,29 +691,33 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Validator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "profile", "validator", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ignite", "network", "profile", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ValidatorAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "profile", "validator"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetCoordinator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "profile", "coordinator", "ID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ValidatorByOperatorAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "profile", "validator_by_operator_address", "operatorAddress"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListCoordinator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "profile", "coordinator"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Coordinator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "profile", "coordinator", "coordinatorID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetValidator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "profile", "validator", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_CoordinatorAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "profile", "coordinator"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListValidator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "profile", "validator"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_CoordinatorByAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "profile", "coordinator_by_address", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetCoordinatorByAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "profile", "get_coordinator_by_address", "address"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_GetValidatorByOperatorAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "profile", "get_validator_by_operator_address", "address"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( - forward_Query_Validator_0 = runtime.ForwardResponseMessage + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_GetCoordinator_0 = runtime.ForwardResponseMessage - forward_Query_ValidatorAll_0 = runtime.ForwardResponseMessage + forward_Query_ListCoordinator_0 = runtime.ForwardResponseMessage - forward_Query_ValidatorByOperatorAddress_0 = runtime.ForwardResponseMessage + forward_Query_GetValidator_0 = runtime.ForwardResponseMessage - forward_Query_Coordinator_0 = runtime.ForwardResponseMessage + forward_Query_ListValidator_0 = runtime.ForwardResponseMessage - forward_Query_CoordinatorAll_0 = runtime.ForwardResponseMessage + forward_Query_GetCoordinatorByAddress_0 = runtime.ForwardResponseMessage - forward_Query_CoordinatorByAddress_0 = runtime.ForwardResponseMessage + forward_Query_GetValidatorByOperatorAddress_0 = runtime.ForwardResponseMessage ) diff --git a/x/profile/types/tx.pb.go b/x/profile/types/tx.pb.go index 5e3daa04..05c0211c 100644 --- a/x/profile/types/tx.pb.go +++ b/x/profile/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/profile/tx.proto +// source: network/profile/v1/tx.proto package types @@ -7,6 +7,8 @@ import ( context "context" fmt "fmt" _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -29,6 +31,99 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_5e5d2334a592d435, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5e5d2334a592d435, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + type MsgUpdateValidatorDescription struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` Description ValidatorDescription `protobuf:"bytes,2,opt,name=description,proto3" json:"description"` @@ -38,7 +133,7 @@ func (m *MsgUpdateValidatorDescription) Reset() { *m = MsgUpdateValidato func (m *MsgUpdateValidatorDescription) String() string { return proto.CompactTextString(m) } func (*MsgUpdateValidatorDescription) ProtoMessage() {} func (*MsgUpdateValidatorDescription) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{0} + return fileDescriptor_5e5d2334a592d435, []int{2} } func (m *MsgUpdateValidatorDescription) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -88,7 +183,7 @@ func (m *MsgUpdateValidatorDescriptionResponse) Reset() { *m = MsgUpdate func (m *MsgUpdateValidatorDescriptionResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateValidatorDescriptionResponse) ProtoMessage() {} func (*MsgUpdateValidatorDescriptionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{1} + return fileDescriptor_5e5d2334a592d435, []int{3} } func (m *MsgUpdateValidatorDescriptionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -126,7 +221,7 @@ func (m *MsgAddValidatorOperatorAddress) Reset() { *m = MsgAddValidatorO func (m *MsgAddValidatorOperatorAddress) String() string { return proto.CompactTextString(m) } func (*MsgAddValidatorOperatorAddress) ProtoMessage() {} func (*MsgAddValidatorOperatorAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{2} + return fileDescriptor_5e5d2334a592d435, []int{4} } func (m *MsgAddValidatorOperatorAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -178,7 +273,7 @@ func (m *MsgAddValidatorOperatorAddressResponse) Reset() { func (m *MsgAddValidatorOperatorAddressResponse) String() string { return proto.CompactTextString(m) } func (*MsgAddValidatorOperatorAddressResponse) ProtoMessage() {} func (*MsgAddValidatorOperatorAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{3} + return fileDescriptor_5e5d2334a592d435, []int{5} } func (m *MsgAddValidatorOperatorAddressResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -216,7 +311,7 @@ func (m *MsgCreateCoordinator) Reset() { *m = MsgCreateCoordinator{} } func (m *MsgCreateCoordinator) String() string { return proto.CompactTextString(m) } func (*MsgCreateCoordinator) ProtoMessage() {} func (*MsgCreateCoordinator) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{4} + return fileDescriptor_5e5d2334a592d435, []int{6} } func (m *MsgCreateCoordinator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -267,7 +362,7 @@ func (m *MsgCreateCoordinatorResponse) Reset() { *m = MsgCreateCoordinat func (m *MsgCreateCoordinatorResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateCoordinatorResponse) ProtoMessage() {} func (*MsgCreateCoordinatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{5} + return fileDescriptor_5e5d2334a592d435, []int{7} } func (m *MsgCreateCoordinatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -312,7 +407,7 @@ func (m *MsgUpdateCoordinatorDescription) Reset() { *m = MsgUpdateCoordi func (m *MsgUpdateCoordinatorDescription) String() string { return proto.CompactTextString(m) } func (*MsgUpdateCoordinatorDescription) ProtoMessage() {} func (*MsgUpdateCoordinatorDescription) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{6} + return fileDescriptor_5e5d2334a592d435, []int{8} } func (m *MsgUpdateCoordinatorDescription) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -364,7 +459,7 @@ func (m *MsgUpdateCoordinatorDescriptionResponse) Reset() { func (m *MsgUpdateCoordinatorDescriptionResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateCoordinatorDescriptionResponse) ProtoMessage() {} func (*MsgUpdateCoordinatorDescriptionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{7} + return fileDescriptor_5e5d2334a592d435, []int{9} } func (m *MsgUpdateCoordinatorDescriptionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -402,7 +497,7 @@ func (m *MsgUpdateCoordinatorAddress) Reset() { *m = MsgUpdateCoordinato func (m *MsgUpdateCoordinatorAddress) String() string { return proto.CompactTextString(m) } func (*MsgUpdateCoordinatorAddress) ProtoMessage() {} func (*MsgUpdateCoordinatorAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{8} + return fileDescriptor_5e5d2334a592d435, []int{10} } func (m *MsgUpdateCoordinatorAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -452,7 +547,7 @@ func (m *MsgUpdateCoordinatorAddressResponse) Reset() { *m = MsgUpdateCo func (m *MsgUpdateCoordinatorAddressResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateCoordinatorAddressResponse) ProtoMessage() {} func (*MsgUpdateCoordinatorAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{9} + return fileDescriptor_5e5d2334a592d435, []int{11} } func (m *MsgUpdateCoordinatorAddressResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -489,7 +584,7 @@ func (m *MsgDisableCoordinator) Reset() { *m = MsgDisableCoordinator{} } func (m *MsgDisableCoordinator) String() string { return proto.CompactTextString(m) } func (*MsgDisableCoordinator) ProtoMessage() {} func (*MsgDisableCoordinator) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{10} + return fileDescriptor_5e5d2334a592d435, []int{12} } func (m *MsgDisableCoordinator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -526,14 +621,13 @@ func (m *MsgDisableCoordinator) GetAddress() string { } type MsgDisableCoordinatorResponse struct { - CoordinatorID uint64 `protobuf:"varint,1,opt,name=coordinatorID,proto3" json:"coordinatorID,omitempty"` } func (m *MsgDisableCoordinatorResponse) Reset() { *m = MsgDisableCoordinatorResponse{} } func (m *MsgDisableCoordinatorResponse) String() string { return proto.CompactTextString(m) } func (*MsgDisableCoordinatorResponse) ProtoMessage() {} func (*MsgDisableCoordinatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_227b73a1f63bc900, []int{11} + return fileDescriptor_5e5d2334a592d435, []int{13} } func (m *MsgDisableCoordinatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -562,68 +656,73 @@ func (m *MsgDisableCoordinatorResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgDisableCoordinatorResponse proto.InternalMessageInfo -func (m *MsgDisableCoordinatorResponse) GetCoordinatorID() uint64 { - if m != nil { - return m.CoordinatorID - } - return 0 -} - func init() { - proto.RegisterType((*MsgUpdateValidatorDescription)(nil), "spn.profile.MsgUpdateValidatorDescription") - proto.RegisterType((*MsgUpdateValidatorDescriptionResponse)(nil), "spn.profile.MsgUpdateValidatorDescriptionResponse") - proto.RegisterType((*MsgAddValidatorOperatorAddress)(nil), "spn.profile.MsgAddValidatorOperatorAddress") - proto.RegisterType((*MsgAddValidatorOperatorAddressResponse)(nil), "spn.profile.MsgAddValidatorOperatorAddressResponse") - proto.RegisterType((*MsgCreateCoordinator)(nil), "spn.profile.MsgCreateCoordinator") - proto.RegisterType((*MsgCreateCoordinatorResponse)(nil), "spn.profile.MsgCreateCoordinatorResponse") - proto.RegisterType((*MsgUpdateCoordinatorDescription)(nil), "spn.profile.MsgUpdateCoordinatorDescription") - proto.RegisterType((*MsgUpdateCoordinatorDescriptionResponse)(nil), "spn.profile.MsgUpdateCoordinatorDescriptionResponse") - proto.RegisterType((*MsgUpdateCoordinatorAddress)(nil), "spn.profile.MsgUpdateCoordinatorAddress") - proto.RegisterType((*MsgUpdateCoordinatorAddressResponse)(nil), "spn.profile.MsgUpdateCoordinatorAddressResponse") - proto.RegisterType((*MsgDisableCoordinator)(nil), "spn.profile.MsgDisableCoordinator") - proto.RegisterType((*MsgDisableCoordinatorResponse)(nil), "spn.profile.MsgDisableCoordinatorResponse") -} - -func init() { proto.RegisterFile("spn/profile/tx.proto", fileDescriptor_227b73a1f63bc900) } - -var fileDescriptor_227b73a1f63bc900 = []byte{ - // 574 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0x4d, 0x6e, 0xd3, 0x40, - 0x14, 0xce, 0x40, 0x01, 0xf5, 0x45, 0x08, 0xb0, 0x82, 0x14, 0x9c, 0xd6, 0x6d, 0x5d, 0x4a, 0x93, - 0x00, 0x09, 0x4a, 0xb9, 0x40, 0x7e, 0x58, 0x54, 0x95, 0x85, 0x64, 0x04, 0x0b, 0x36, 0xc8, 0xc9, - 0x0c, 0xc6, 0x52, 0xe2, 0x31, 0x33, 0x43, 0x28, 0x12, 0x12, 0x12, 0x27, 0x60, 0xc7, 0x8e, 0x05, - 0x67, 0xe0, 0x10, 0x15, 0xab, 0x8a, 0x15, 0x2b, 0x84, 0x92, 0x8b, 0xa0, 0x38, 0xf6, 0xc4, 0x8e, - 0x8d, 0xdd, 0x94, 0x05, 0xab, 0xc4, 0xef, 0x7d, 0xf3, 0xbe, 0xef, 0xfd, 0xcd, 0x40, 0x89, 0x7b, - 0x6e, 0xd3, 0x63, 0xf4, 0xa5, 0x33, 0x24, 0x4d, 0x71, 0xdc, 0xf0, 0x18, 0x15, 0x54, 0x29, 0x72, - 0xcf, 0x6d, 0x04, 0x56, 0xb5, 0x64, 0x53, 0x9b, 0xfa, 0xf6, 0xe6, 0xec, 0xdf, 0x1c, 0xa2, 0xde, - 0x1a, 0x50, 0x3e, 0xa2, 0xfc, 0xc5, 0xdc, 0x31, 0xff, 0x08, 0x5c, 0x9b, 0xd1, 0x98, 0x03, 0x4a, - 0x19, 0x76, 0x5c, 0x4b, 0x50, 0x16, 0xb8, 0x2b, 0x51, 0xf7, 0xd8, 0x1a, 0x3a, 0x78, 0xe1, 0xd4, - 0xbf, 0x20, 0xd8, 0x34, 0xb8, 0xfd, 0xd4, 0xc3, 0x96, 0x20, 0xcf, 0x42, 0x67, 0x8f, 0xf0, 0x01, - 0x73, 0x3c, 0xe1, 0x50, 0x57, 0x69, 0xc1, 0x15, 0x0b, 0x63, 0x46, 0x38, 0x2f, 0xa3, 0x6d, 0x54, - 0x5d, 0xef, 0x94, 0x7f, 0x7c, 0xbb, 0x5f, 0x0a, 0x04, 0xb4, 0xe7, 0x9e, 0x27, 0x82, 0x39, 0xae, - 0x6d, 0x86, 0x40, 0xe5, 0x10, 0x8a, 0x78, 0x11, 0xa2, 0x7c, 0x61, 0x1b, 0x55, 0x8b, 0xad, 0x9d, - 0x46, 0x24, 0xcb, 0x46, 0x1a, 0x57, 0x67, 0xed, 0xe4, 0xd7, 0x56, 0xc1, 0x8c, 0x9e, 0xd5, 0xf7, - 0x61, 0x2f, 0x53, 0x9f, 0x49, 0xb8, 0x47, 0x5d, 0x4e, 0xf4, 0x31, 0x68, 0x06, 0xb7, 0xdb, 0x18, - 0x4b, 0xd4, 0x63, 0x8f, 0xb0, 0xd9, 0x6f, 0x20, 0x52, 0xa9, 0xc3, 0x75, 0x99, 0x7e, 0x3b, 0x9a, - 0x92, 0x99, 0xb0, 0x2b, 0x55, 0xb8, 0x46, 0xe3, 0xc7, 0xfd, 0x2c, 0xd6, 0xcd, 0x65, 0xb3, 0x5e, - 0x85, 0x3b, 0xd9, 0xbc, 0x52, 0xe1, 0x67, 0x04, 0x25, 0x83, 0xdb, 0x5d, 0x46, 0x2c, 0x41, 0xba, - 0x8b, 0x3e, 0x9d, 0xab, 0xc4, 0x47, 0x69, 0x25, 0xde, 0x8d, 0x95, 0x38, 0x42, 0x91, 0x53, 0xe4, - 0x1e, 0x6c, 0xa4, 0x09, 0x0b, 0x95, 0x2b, 0xb7, 0xe1, 0x6a, 0x64, 0xae, 0x0e, 0x7b, 0xbe, 0xcc, - 0x35, 0x33, 0x6e, 0xd4, 0xbf, 0x22, 0xd8, 0x92, 0xbd, 0x4a, 0x27, 0xff, 0xff, 0xa9, 0xd6, 0x60, - 0x3f, 0x47, 0xa3, 0xec, 0xd7, 0x6b, 0xa8, 0xa4, 0x41, 0xc3, 0x11, 0x39, 0x4f, 0x2a, 0x1a, 0x80, - 0x4b, 0xde, 0xc6, 0x27, 0x2a, 0x62, 0xd1, 0xf7, 0x60, 0x37, 0x83, 0x52, 0x2a, 0x3b, 0x82, 0x9b, - 0x06, 0xb7, 0x7b, 0x0e, 0xb7, 0xfa, 0xc3, 0x7f, 0x9d, 0x24, 0xfd, 0x91, 0x7f, 0x03, 0x24, 0x83, - 0xad, 0xd6, 0xfd, 0xd6, 0xf7, 0x4b, 0x70, 0xd1, 0xe0, 0xb6, 0xf2, 0x1e, 0xd4, 0x8c, 0xdb, 0xa4, - 0x1e, 0x6b, 0x5b, 0xe6, 0x66, 0xab, 0xad, 0xb3, 0x63, 0xa5, 0xd6, 0x0f, 0x50, 0xc9, 0xba, 0x02, - 0xee, 0x2e, 0x87, 0xcc, 0x00, 0xab, 0x07, 0x2b, 0x80, 0xa5, 0x00, 0x0b, 0x6e, 0x24, 0x17, 0x7c, - 0x67, 0x39, 0x52, 0x02, 0xa2, 0xd6, 0x72, 0x21, 0x92, 0xe2, 0x23, 0x82, 0x8d, 0xcc, 0x25, 0xbb, - 0x97, 0x5e, 0xb8, 0x74, 0xb4, 0xfa, 0x70, 0x15, 0xb4, 0x14, 0x31, 0x86, 0xf2, 0x5f, 0x37, 0xa3, - 0x9a, 0x1b, 0x31, 0x2c, 0xf1, 0x83, 0xb3, 0x22, 0x25, 0x2f, 0x06, 0x25, 0x65, 0xee, 0xf5, 0xe5, - 0x38, 0x49, 0x8c, 0x5a, 0xcf, 0xc7, 0x84, 0x2c, 0x9d, 0xee, 0xc9, 0x44, 0x43, 0xa7, 0x13, 0x0d, - 0xfd, 0x9e, 0x68, 0xe8, 0xd3, 0x54, 0x2b, 0x9c, 0x4e, 0xb5, 0xc2, 0xcf, 0xa9, 0x56, 0x78, 0x5e, - 0xb3, 0x1d, 0xf1, 0xea, 0x4d, 0xbf, 0x31, 0xa0, 0xa3, 0xa6, 0x20, 0x2e, 0x26, 0x6c, 0xe4, 0xb8, - 0xa2, 0x39, 0x7b, 0x63, 0x8f, 0x17, 0x0f, 0xfb, 0x3b, 0x8f, 0xf0, 0xfe, 0x65, 0xff, 0x89, 0x3d, - 0xf8, 0x13, 0x00, 0x00, 0xff, 0xff, 0x57, 0xdf, 0xd1, 0xbe, 0xf4, 0x07, 0x00, 0x00, + proto.RegisterType((*MsgUpdateParams)(nil), "network.profile.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "network.profile.v1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgUpdateValidatorDescription)(nil), "network.profile.v1.MsgUpdateValidatorDescription") + proto.RegisterType((*MsgUpdateValidatorDescriptionResponse)(nil), "network.profile.v1.MsgUpdateValidatorDescriptionResponse") + proto.RegisterType((*MsgAddValidatorOperatorAddress)(nil), "network.profile.v1.MsgAddValidatorOperatorAddress") + proto.RegisterType((*MsgAddValidatorOperatorAddressResponse)(nil), "network.profile.v1.MsgAddValidatorOperatorAddressResponse") + proto.RegisterType((*MsgCreateCoordinator)(nil), "network.profile.v1.MsgCreateCoordinator") + proto.RegisterType((*MsgCreateCoordinatorResponse)(nil), "network.profile.v1.MsgCreateCoordinatorResponse") + proto.RegisterType((*MsgUpdateCoordinatorDescription)(nil), "network.profile.v1.MsgUpdateCoordinatorDescription") + proto.RegisterType((*MsgUpdateCoordinatorDescriptionResponse)(nil), "network.profile.v1.MsgUpdateCoordinatorDescriptionResponse") + proto.RegisterType((*MsgUpdateCoordinatorAddress)(nil), "network.profile.v1.MsgUpdateCoordinatorAddress") + proto.RegisterType((*MsgUpdateCoordinatorAddressResponse)(nil), "network.profile.v1.MsgUpdateCoordinatorAddressResponse") + proto.RegisterType((*MsgDisableCoordinator)(nil), "network.profile.v1.MsgDisableCoordinator") + proto.RegisterType((*MsgDisableCoordinatorResponse)(nil), "network.profile.v1.MsgDisableCoordinatorResponse") +} + +func init() { proto.RegisterFile("network/profile/v1/tx.proto", fileDescriptor_5e5d2334a592d435) } + +var fileDescriptor_5e5d2334a592d435 = []byte{ + // 736 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0x4d, 0x4f, 0x13, 0x5d, + 0x18, 0xed, 0x7d, 0x5f, 0x5e, 0x48, 0x1f, 0x78, 0x83, 0x4c, 0x20, 0x94, 0x01, 0xa7, 0x38, 0x80, + 0x94, 0x1a, 0x3b, 0xb6, 0x18, 0x3f, 0x6a, 0x5c, 0x50, 0xba, 0x71, 0xd1, 0x48, 0xc6, 0x68, 0xa2, + 0x1b, 0x1d, 0x3a, 0xe3, 0x30, 0x91, 0xce, 0x9d, 0xcc, 0xbd, 0x7c, 0xed, 0x8c, 0x71, 0x45, 0x42, + 0xc2, 0xd6, 0x7f, 0xe0, 0xc2, 0x05, 0x89, 0x26, 0xee, 0x5c, 0xb3, 0x24, 0xae, 0x5c, 0x19, 0x03, + 0x0b, 0xfe, 0x86, 0x99, 0xaf, 0xdb, 0x8f, 0xb9, 0x1d, 0x5a, 0xdc, 0xb8, 0x81, 0xce, 0xbd, 0xe7, + 0x9c, 0xe7, 0x9c, 0x79, 0xee, 0x3c, 0xb9, 0x30, 0x6d, 0x1b, 0x74, 0x07, 0xbb, 0x6f, 0x14, 0xc7, + 0xc5, 0xaf, 0xad, 0x4d, 0x43, 0xd9, 0x2e, 0x2a, 0x74, 0xb7, 0xe0, 0xb8, 0x98, 0x62, 0x41, 0x08, + 0x37, 0x0b, 0xe1, 0x66, 0x61, 0xbb, 0x28, 0x8e, 0x69, 0x0d, 0xcb, 0xc6, 0x8a, 0xff, 0x37, 0x80, + 0x89, 0x93, 0x75, 0x4c, 0x1a, 0x98, 0x28, 0x0d, 0x62, 0x7a, 0xf4, 0x06, 0x31, 0xc3, 0x8d, 0xa9, + 0x60, 0xe3, 0xa5, 0xff, 0xa4, 0x04, 0x0f, 0xe1, 0xd6, 0xb8, 0x89, 0x4d, 0x1c, 0xac, 0x7b, 0xbf, + 0xc2, 0xd5, 0x79, 0x8e, 0x9b, 0x3a, 0xc6, 0xae, 0x6e, 0xd9, 0x1a, 0xc5, 0x6e, 0x88, 0xca, 0x72, + 0x50, 0x8e, 0xe6, 0x6a, 0x8d, 0x48, 0x5c, 0xe6, 0x00, 0xb6, 0xb5, 0x4d, 0x4b, 0x6f, 0x8a, 0xc8, + 0xdf, 0x10, 0x8c, 0xd6, 0x88, 0xf9, 0xd4, 0xd1, 0x35, 0x6a, 0xac, 0xf9, 0x6c, 0xe1, 0x0e, 0xa4, + 0xb5, 0x2d, 0xba, 0x81, 0x5d, 0x8b, 0xee, 0x65, 0xd0, 0x2c, 0xca, 0xa5, 0x2b, 0x99, 0xef, 0x5f, + 0x6e, 0x8e, 0x87, 0xce, 0x57, 0x74, 0xdd, 0x35, 0x08, 0x79, 0x42, 0x5d, 0xcb, 0x36, 0xd5, 0x26, + 0x54, 0x78, 0x08, 0x83, 0x41, 0xfd, 0xcc, 0x3f, 0xb3, 0x28, 0x37, 0x5c, 0x12, 0x0b, 0xf1, 0x17, + 0x57, 0x08, 0x6a, 0x54, 0xd2, 0xc7, 0x3f, 0xb3, 0xa9, 0x8f, 0xe7, 0x47, 0x79, 0xa4, 0x86, 0xa4, + 0xf2, 0xed, 0x77, 0xe7, 0x47, 0xf9, 0xa6, 0xdc, 0xfe, 0xf9, 0x51, 0xfe, 0x5a, 0x94, 0x60, 0x97, + 0x65, 0xe8, 0x30, 0x2b, 0x4f, 0xc1, 0x64, 0xc7, 0x92, 0x6a, 0x10, 0x07, 0xdb, 0xc4, 0x90, 0x3f, + 0x23, 0xb8, 0xca, 0xf6, 0x9e, 0x45, 0xc1, 0xab, 0x06, 0xa9, 0xbb, 0x96, 0x43, 0x2d, 0x6c, 0x0b, + 0x25, 0x18, 0xd2, 0x82, 0x34, 0x17, 0xe6, 0x8c, 0x80, 0xc2, 0x1a, 0x0c, 0xeb, 0x4d, 0x89, 0x30, + 0x6a, 0x8e, 0x17, 0x95, 0x57, 0xb2, 0x32, 0xe0, 0x05, 0x57, 0x5b, 0x25, 0xca, 0x23, 0x5e, 0xf0, + 0x48, 0x5f, 0x5e, 0x84, 0x85, 0x44, 0xd3, 0x2c, 0xde, 0x01, 0x02, 0xa9, 0x46, 0xcc, 0x15, 0x5d, + 0x67, 0xb0, 0xc7, 0x8e, 0xe1, 0x7a, 0xff, 0x43, 0xeb, 0x42, 0x1e, 0xae, 0xb0, 0x86, 0xaf, 0xb4, + 0x06, 0x55, 0x63, 0xeb, 0x42, 0x0e, 0x46, 0x71, 0x3b, 0xdd, 0xcf, 0x96, 0x56, 0x3b, 0x97, 0xcb, + 0x13, 0x9e, 0xdf, 0x98, 0x80, 0x9c, 0x83, 0xeb, 0xc9, 0x76, 0x98, 0xf3, 0x4f, 0x08, 0xc6, 0x6b, + 0xc4, 0x5c, 0x75, 0x0d, 0x8d, 0x1a, 0xab, 0xcd, 0x83, 0x7d, 0xa9, 0x7e, 0xa8, 0xbc, 0x7e, 0xe4, + 0x79, 0xfd, 0x68, 0xa9, 0xd4, 0x57, 0x47, 0xaa, 0x30, 0xc3, 0x73, 0x1b, 0xc5, 0x11, 0xe6, 0xe1, + 0xff, 0x96, 0xaf, 0xf3, 0x51, 0xd5, 0xf7, 0x3e, 0xa0, 0xb6, 0x2f, 0xca, 0x5f, 0x11, 0x64, 0x59, + 0x63, 0xf9, 0x56, 0xfe, 0xd2, 0xfc, 0x4b, 0xb0, 0x78, 0x81, 0x71, 0xd6, 0xd9, 0x0f, 0x08, 0xa6, + 0x79, 0xd8, 0xe8, 0x90, 0x5d, 0x26, 0xe0, 0x3d, 0x00, 0xdb, 0xd8, 0x69, 0x3b, 0x93, 0x09, 0xb4, + 0x16, 0x6c, 0x47, 0x8c, 0x05, 0x98, 0x4b, 0xb0, 0xc6, 0x22, 0x3c, 0x87, 0x89, 0x1a, 0x31, 0xab, + 0x16, 0xd1, 0xd6, 0x37, 0xff, 0xf4, 0x70, 0x76, 0x38, 0xc8, 0xfa, 0xf3, 0x28, 0x2e, 0x1d, 0xd5, + 0x2e, 0xed, 0x0f, 0xc1, 0xbf, 0x35, 0x62, 0x0a, 0xaf, 0x60, 0xa4, 0x6d, 0x22, 0xcf, 0xf1, 0xda, + 0xd9, 0x31, 0xf6, 0xc4, 0x1b, 0x3d, 0x80, 0xd8, 0x99, 0xdd, 0x47, 0x20, 0x26, 0x0c, 0xc6, 0x62, + 0xa2, 0x16, 0x8f, 0x22, 0xde, 0xef, 0x9b, 0xc2, 0xcc, 0x1c, 0x20, 0x98, 0x4e, 0x1a, 0x63, 0xa5, + 0x2e, 0xd2, 0x09, 0x1c, 0xb1, 0xdc, 0x3f, 0x87, 0xf9, 0xc1, 0x30, 0x16, 0x9f, 0x4d, 0xb9, 0x2e, + 0x82, 0x31, 0xa4, 0x78, 0xab, 0x57, 0x24, 0x2b, 0x78, 0x88, 0x60, 0x26, 0x71, 0x30, 0x2c, 0x27, + 0xbe, 0x5c, 0x3e, 0x49, 0x7c, 0x70, 0x09, 0x12, 0xb3, 0xf4, 0x1e, 0x41, 0xa6, 0xeb, 0x67, 0xac, + 0xf4, 0xaa, 0x1c, 0x75, 0xe3, 0x6e, 0x9f, 0x04, 0x66, 0xc3, 0x05, 0x81, 0xf3, 0x29, 0x2e, 0x75, + 0x91, 0x8b, 0x43, 0xc5, 0x62, 0xcf, 0xd0, 0xa8, 0xa6, 0xf8, 0xdf, 0x5b, 0xef, 0x5e, 0x52, 0x59, + 0x3d, 0x3e, 0x95, 0xd0, 0xc9, 0xa9, 0x84, 0x7e, 0x9d, 0x4a, 0xe8, 0xf0, 0x4c, 0x4a, 0x9d, 0x9c, + 0x49, 0xa9, 0x1f, 0x67, 0x52, 0xea, 0xc5, 0x92, 0x69, 0xd1, 0x8d, 0xad, 0xf5, 0x42, 0x1d, 0x37, + 0x14, 0xcb, 0xb4, 0x2d, 0x6a, 0x28, 0xf1, 0x8b, 0x0a, 0xdd, 0x73, 0x0c, 0xb2, 0x3e, 0xe8, 0x5f, + 0xb3, 0x96, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x2d, 0xfa, 0xf3, 0x61, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -638,6 +737,9 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) UpdateValidatorDescription(ctx context.Context, in *MsgUpdateValidatorDescription, opts ...grpc.CallOption) (*MsgUpdateValidatorDescriptionResponse, error) AddValidatorOperatorAddress(ctx context.Context, in *MsgAddValidatorOperatorAddress, opts ...grpc.CallOption) (*MsgAddValidatorOperatorAddressResponse, error) CreateCoordinator(ctx context.Context, in *MsgCreateCoordinator, opts ...grpc.CallOption) (*MsgCreateCoordinatorResponse, error) @@ -654,9 +756,18 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/network.profile.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) UpdateValidatorDescription(ctx context.Context, in *MsgUpdateValidatorDescription, opts ...grpc.CallOption) (*MsgUpdateValidatorDescriptionResponse, error) { out := new(MsgUpdateValidatorDescriptionResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Msg/UpdateValidatorDescription", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.profile.v1.Msg/UpdateValidatorDescription", in, out, opts...) if err != nil { return nil, err } @@ -665,7 +776,7 @@ func (c *msgClient) UpdateValidatorDescription(ctx context.Context, in *MsgUpdat func (c *msgClient) AddValidatorOperatorAddress(ctx context.Context, in *MsgAddValidatorOperatorAddress, opts ...grpc.CallOption) (*MsgAddValidatorOperatorAddressResponse, error) { out := new(MsgAddValidatorOperatorAddressResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Msg/AddValidatorOperatorAddress", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.profile.v1.Msg/AddValidatorOperatorAddress", in, out, opts...) if err != nil { return nil, err } @@ -674,7 +785,7 @@ func (c *msgClient) AddValidatorOperatorAddress(ctx context.Context, in *MsgAddV func (c *msgClient) CreateCoordinator(ctx context.Context, in *MsgCreateCoordinator, opts ...grpc.CallOption) (*MsgCreateCoordinatorResponse, error) { out := new(MsgCreateCoordinatorResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Msg/CreateCoordinator", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.profile.v1.Msg/CreateCoordinator", in, out, opts...) if err != nil { return nil, err } @@ -683,7 +794,7 @@ func (c *msgClient) CreateCoordinator(ctx context.Context, in *MsgCreateCoordina func (c *msgClient) UpdateCoordinatorDescription(ctx context.Context, in *MsgUpdateCoordinatorDescription, opts ...grpc.CallOption) (*MsgUpdateCoordinatorDescriptionResponse, error) { out := new(MsgUpdateCoordinatorDescriptionResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Msg/UpdateCoordinatorDescription", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.profile.v1.Msg/UpdateCoordinatorDescription", in, out, opts...) if err != nil { return nil, err } @@ -692,7 +803,7 @@ func (c *msgClient) UpdateCoordinatorDescription(ctx context.Context, in *MsgUpd func (c *msgClient) UpdateCoordinatorAddress(ctx context.Context, in *MsgUpdateCoordinatorAddress, opts ...grpc.CallOption) (*MsgUpdateCoordinatorAddressResponse, error) { out := new(MsgUpdateCoordinatorAddressResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Msg/UpdateCoordinatorAddress", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.profile.v1.Msg/UpdateCoordinatorAddress", in, out, opts...) if err != nil { return nil, err } @@ -701,7 +812,7 @@ func (c *msgClient) UpdateCoordinatorAddress(ctx context.Context, in *MsgUpdateC func (c *msgClient) DisableCoordinator(ctx context.Context, in *MsgDisableCoordinator, opts ...grpc.CallOption) (*MsgDisableCoordinatorResponse, error) { out := new(MsgDisableCoordinatorResponse) - err := c.cc.Invoke(ctx, "/spn.profile.Msg/DisableCoordinator", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.profile.v1.Msg/DisableCoordinator", in, out, opts...) if err != nil { return nil, err } @@ -710,6 +821,9 @@ func (c *msgClient) DisableCoordinator(ctx context.Context, in *MsgDisableCoordi // MsgServer is the server API for Msg service. type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) UpdateValidatorDescription(context.Context, *MsgUpdateValidatorDescription) (*MsgUpdateValidatorDescriptionResponse, error) AddValidatorOperatorAddress(context.Context, *MsgAddValidatorOperatorAddress) (*MsgAddValidatorOperatorAddressResponse, error) CreateCoordinator(context.Context, *MsgCreateCoordinator) (*MsgCreateCoordinatorResponse, error) @@ -722,6 +836,9 @@ type MsgServer interface { type UnimplementedMsgServer struct { } +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} func (*UnimplementedMsgServer) UpdateValidatorDescription(ctx context.Context, req *MsgUpdateValidatorDescription) (*MsgUpdateValidatorDescriptionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateValidatorDescription not implemented") } @@ -745,6 +862,24 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/network.profile.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_UpdateValidatorDescription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgUpdateValidatorDescription) if err := dec(in); err != nil { @@ -755,7 +890,7 @@ func _Msg_UpdateValidatorDescription_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Msg/UpdateValidatorDescription", + FullMethod: "/network.profile.v1.Msg/UpdateValidatorDescription", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateValidatorDescription(ctx, req.(*MsgUpdateValidatorDescription)) @@ -773,7 +908,7 @@ func _Msg_AddValidatorOperatorAddress_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Msg/AddValidatorOperatorAddress", + FullMethod: "/network.profile.v1.Msg/AddValidatorOperatorAddress", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).AddValidatorOperatorAddress(ctx, req.(*MsgAddValidatorOperatorAddress)) @@ -791,7 +926,7 @@ func _Msg_CreateCoordinator_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Msg/CreateCoordinator", + FullMethod: "/network.profile.v1.Msg/CreateCoordinator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).CreateCoordinator(ctx, req.(*MsgCreateCoordinator)) @@ -809,7 +944,7 @@ func _Msg_UpdateCoordinatorDescription_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Msg/UpdateCoordinatorDescription", + FullMethod: "/network.profile.v1.Msg/UpdateCoordinatorDescription", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateCoordinatorDescription(ctx, req.(*MsgUpdateCoordinatorDescription)) @@ -827,7 +962,7 @@ func _Msg_UpdateCoordinatorAddress_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Msg/UpdateCoordinatorAddress", + FullMethod: "/network.profile.v1.Msg/UpdateCoordinatorAddress", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateCoordinatorAddress(ctx, req.(*MsgUpdateCoordinatorAddress)) @@ -845,7 +980,7 @@ func _Msg_DisableCoordinator_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.profile.Msg/DisableCoordinator", + FullMethod: "/network.profile.v1.Msg/DisableCoordinator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).DisableCoordinator(ctx, req.(*MsgDisableCoordinator)) @@ -854,9 +989,13 @@ func _Msg_DisableCoordinator_Handler(srv interface{}, ctx context.Context, dec f } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.profile.Msg", + ServiceName: "network.profile.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, { MethodName: "UpdateValidatorDescription", Handler: _Msg_UpdateValidatorDescription_Handler, @@ -883,7 +1022,70 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/profile/tx.proto", + Metadata: "network/profile/v1/tx.proto", +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil } func (m *MsgUpdateValidatorDescription) Marshal() (dAtA []byte, err error) { @@ -1250,11 +1452,6 @@ func (m *MsgDisableCoordinatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, _ = i var l int _ = l - if m.CoordinatorID != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.CoordinatorID)) - i-- - dAtA[i] = 0x8 - } return len(dAtA) - i, nil } @@ -1269,6 +1466,30 @@ func encodeVarintTx(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgUpdateValidatorDescription) Size() (n int) { if m == nil { return 0 @@ -1415,9 +1636,6 @@ func (m *MsgDisableCoordinatorResponse) Size() (n int) { } var l int _ = l - if m.CoordinatorID != 0 { - n += 1 + sovTx(uint64(m.CoordinatorID)) - } return n } @@ -1427,6 +1645,171 @@ func sovTx(x uint64) (n int) { func sozTx(x uint64) (n int) { return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgUpdateValidatorDescription) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2380,25 +2763,6 @@ func (m *MsgDisableCoordinatorResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgDisableCoordinatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CoordinatorID", wireType) - } - m.CoordinatorID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CoordinatorID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/x/profile/types/types.go b/x/profile/types/types.go new file mode 100644 index 00000000..ab1254f4 --- /dev/null +++ b/x/profile/types/types.go @@ -0,0 +1 @@ +package types diff --git a/x/profile/types/validator.pb.go b/x/profile/types/validator.pb.go index 88a3d5b7..5ad61447 100644 --- a/x/profile/types/validator.pb.go +++ b/x/profile/types/validator.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/profile/validator.proto +// source: network/profile/v1/validator.proto package types @@ -34,7 +34,7 @@ func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} func (*Validator) Descriptor() ([]byte, []int) { - return fileDescriptor_6edbd82758571ec4, []int{0} + return fileDescriptor_249f25ebebce066b, []int{0} } func (m *Validator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -96,7 +96,7 @@ func (m *ValidatorDescription) Reset() { *m = ValidatorDescription{} } func (m *ValidatorDescription) String() string { return proto.CompactTextString(m) } func (*ValidatorDescription) ProtoMessage() {} func (*ValidatorDescription) Descriptor() ([]byte, []int) { - return fileDescriptor_6edbd82758571ec4, []int{1} + return fileDescriptor_249f25ebebce066b, []int{1} } func (m *ValidatorDescription) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -169,7 +169,7 @@ func (m *ValidatorByOperatorAddress) Reset() { *m = ValidatorByOperatorA func (m *ValidatorByOperatorAddress) String() string { return proto.CompactTextString(m) } func (*ValidatorByOperatorAddress) ProtoMessage() {} func (*ValidatorByOperatorAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_6edbd82758571ec4, []int{2} + return fileDescriptor_249f25ebebce066b, []int{2} } func (m *ValidatorByOperatorAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -213,40 +213,42 @@ func (m *ValidatorByOperatorAddress) GetValidatorAddress() string { } func init() { - proto.RegisterType((*Validator)(nil), "spn.profile.Validator") - proto.RegisterType((*ValidatorDescription)(nil), "spn.profile.ValidatorDescription") - proto.RegisterType((*ValidatorByOperatorAddress)(nil), "spn.profile.ValidatorByOperatorAddress") + proto.RegisterType((*Validator)(nil), "network.profile.v1.Validator") + proto.RegisterType((*ValidatorDescription)(nil), "network.profile.v1.ValidatorDescription") + proto.RegisterType((*ValidatorByOperatorAddress)(nil), "network.profile.v1.ValidatorByOperatorAddress") } -func init() { proto.RegisterFile("spn/profile/validator.proto", fileDescriptor_6edbd82758571ec4) } +func init() { + proto.RegisterFile("network/profile/v1/validator.proto", fileDescriptor_249f25ebebce066b) +} -var fileDescriptor_6edbd82758571ec4 = []byte{ - // 386 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xbd, 0x4e, 0xeb, 0x30, - 0x18, 0x8d, 0xdb, 0xde, 0xdb, 0x1b, 0x77, 0xb8, 0xf7, 0x5a, 0x1d, 0x4c, 0x90, 0x42, 0xe9, 0x14, - 0x24, 0x48, 0xa4, 0xf2, 0x04, 0xa4, 0x5d, 0x98, 0x90, 0x82, 0xc4, 0xc0, 0x82, 0xd2, 0xc4, 0x04, - 0x8b, 0xc6, 0x8e, 0x6c, 0x17, 0xc8, 0x3b, 0x30, 0xf0, 0x1c, 0xcc, 0x0c, 0x3c, 0x42, 0xc7, 0x8a, - 0x89, 0x09, 0xa1, 0xf6, 0x45, 0x50, 0x7e, 0x29, 0x2d, 0x12, 0x5b, 0xce, 0x77, 0xce, 0xf9, 0x72, - 0x6c, 0x1f, 0xb8, 0x2d, 0x13, 0xe6, 0x24, 0x82, 0x5f, 0xd2, 0x09, 0x71, 0x6e, 0xfc, 0x09, 0x0d, - 0x7d, 0xc5, 0x85, 0x9d, 0x08, 0xae, 0x38, 0xea, 0xc8, 0x84, 0xd9, 0x25, 0x69, 0x74, 0x23, 0x1e, - 0xf1, 0x7c, 0xee, 0x64, 0x5f, 0x85, 0xc4, 0xd8, 0x0a, 0xb8, 0x8c, 0xb9, 0xbc, 0x28, 0x88, 0x02, - 0x14, 0x54, 0xff, 0x19, 0x40, 0xfd, 0xac, 0xda, 0x88, 0x06, 0xb0, 0xed, 0x87, 0xa1, 0x20, 0x52, - 0x62, 0xd0, 0x03, 0x96, 0xee, 0xe2, 0x97, 0xa7, 0x83, 0x6e, 0x69, 0x38, 0x2a, 0x98, 0x53, 0x25, - 0x28, 0x8b, 0xbc, 0x4a, 0x88, 0xf6, 0xe1, 0x7f, 0x9e, 0x10, 0x91, 0xf9, 0x4b, 0x05, 0x91, 0xb8, - 0xd1, 0x6b, 0x5a, 0xba, 0xb7, 0x49, 0xa0, 0x63, 0xd8, 0x09, 0x89, 0x0c, 0x04, 0x4d, 0x14, 0xe5, - 0x0c, 0x37, 0x7b, 0xc0, 0xea, 0x0c, 0x76, 0xed, 0x95, 0x33, 0xd8, 0x75, 0x9c, 0xd1, 0xa7, 0xd0, - 0x6d, 0xcd, 0xde, 0x76, 0x34, 0x6f, 0xd5, 0xdb, 0x7f, 0x04, 0xb0, 0xfb, 0x9d, 0x16, 0x19, 0xf0, - 0x0f, 0x0d, 0x09, 0x53, 0x54, 0xa5, 0xc5, 0x31, 0xbc, 0x1a, 0x23, 0x0c, 0xdb, 0x31, 0x67, 0xf4, - 0x9a, 0x08, 0xdc, 0xc8, 0xa9, 0x0a, 0x66, 0xcc, 0x2d, 0x19, 0x4b, 0xaa, 0x48, 0x9e, 0x4a, 0xf7, - 0x2a, 0x88, 0x2c, 0xf8, 0x57, 0x92, 0x60, 0x2a, 0xa8, 0x4a, 0x87, 0x9c, 0x29, 0x3f, 0x50, 0xb8, - 0x95, 0x2b, 0xd6, 0xc7, 0xd9, 0x8e, 0x90, 0x28, 0x9f, 0x4e, 0x24, 0xfe, 0x55, 0xec, 0x28, 0x61, - 0xff, 0x1e, 0x40, 0xa3, 0x0e, 0xeb, 0xa6, 0x27, 0x5f, 0x2f, 0x26, 0xfb, 0xc5, 0xda, 0x5d, 0x95, - 0xc9, 0xd7, 0xc7, 0x68, 0x04, 0xff, 0xd5, 0x0d, 0xa8, 0xa4, 0x8d, 0x1f, 0xde, 0x6a, 0xc3, 0xe1, - 0x0e, 0x67, 0x0b, 0x13, 0xcc, 0x17, 0x26, 0x78, 0x5f, 0x98, 0xe0, 0x61, 0x69, 0x6a, 0xf3, 0xa5, - 0xa9, 0xbd, 0x2e, 0x4d, 0xed, 0x7c, 0x2f, 0xa2, 0xea, 0x6a, 0x3a, 0xb6, 0x03, 0x1e, 0x3b, 0x8a, - 0xb0, 0x90, 0x88, 0x98, 0x32, 0xe5, 0x64, 0x0d, 0xbc, 0xab, 0x3b, 0xa8, 0xd2, 0x84, 0xc8, 0xf1, - 0xef, 0xbc, 0x42, 0x87, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x73, 0x86, 0xf9, 0xd1, 0x9f, 0x02, - 0x00, 0x00, +var fileDescriptor_249f25ebebce066b = []byte{ + // 388 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xbf, 0x4e, 0xf3, 0x30, + 0x14, 0xc5, 0xe3, 0xb6, 0xdf, 0x57, 0xe2, 0x0e, 0x80, 0xd5, 0xc1, 0x64, 0x08, 0x55, 0xa6, 0x20, + 0x41, 0xa2, 0x96, 0x27, 0x20, 0xed, 0x0e, 0x0a, 0x12, 0x03, 0x0b, 0x4a, 0x13, 0x13, 0xac, 0xb6, + 0x71, 0x64, 0xbb, 0x2d, 0x79, 0x07, 0x06, 0x9e, 0x83, 0x99, 0x9d, 0xb5, 0x63, 0xc5, 0xc4, 0x84, + 0x50, 0xfb, 0x22, 0x28, 0x7f, 0x81, 0x16, 0x89, 0x2d, 0xe7, 0xde, 0x9f, 0x4f, 0xae, 0xaf, 0x0f, + 0x34, 0x22, 0x22, 0xe7, 0x8c, 0x8f, 0xec, 0x98, 0xb3, 0x5b, 0x3a, 0x26, 0xf6, 0xac, 0x6b, 0xcf, + 0xbc, 0x31, 0x0d, 0x3c, 0xc9, 0xb8, 0x15, 0x73, 0x26, 0x19, 0x42, 0x05, 0x63, 0x15, 0x8c, 0x35, + 0xeb, 0x6a, 0x07, 0x3e, 0x13, 0x13, 0x26, 0x6e, 0x32, 0xc2, 0xce, 0x45, 0x8e, 0x6b, 0xed, 0x90, + 0x85, 0x2c, 0xaf, 0xa7, 0x5f, 0x79, 0xd5, 0x78, 0x01, 0x50, 0xbd, 0x2a, 0x8d, 0x51, 0x0f, 0x36, + 0xbd, 0x20, 0xe0, 0x44, 0x08, 0x0c, 0x3a, 0xc0, 0x54, 0x1d, 0xfc, 0xfa, 0x7c, 0xd2, 0x2e, 0x6c, + 0xce, 0xf2, 0xce, 0xa5, 0xe4, 0x34, 0x0a, 0xdd, 0x12, 0x44, 0xc7, 0x70, 0x9f, 0xc5, 0x84, 0xa7, + 0xe7, 0x0b, 0x82, 0x08, 0x5c, 0xeb, 0xd4, 0x4d, 0xd5, 0xdd, 0x6e, 0xa0, 0x0b, 0xd8, 0x0a, 0x88, + 0xf0, 0x39, 0x8d, 0x25, 0x65, 0x11, 0xae, 0x77, 0x80, 0xd9, 0xea, 0x99, 0xd6, 0xf6, 0x55, 0xac, + 0x6a, 0xaa, 0xc1, 0x17, 0xef, 0x34, 0x16, 0xef, 0x87, 0x8a, 0xfb, 0xdd, 0xc2, 0x78, 0x02, 0xb0, + 0xfd, 0x1b, 0x8b, 0x34, 0xb8, 0x43, 0x03, 0x12, 0x49, 0x2a, 0x93, 0xfc, 0x36, 0x6e, 0xa5, 0x11, + 0x86, 0xcd, 0x09, 0x8b, 0xe8, 0x88, 0x70, 0x5c, 0xcb, 0x5a, 0xa5, 0x4c, 0x3b, 0x73, 0x32, 0x14, + 0x54, 0x92, 0x6c, 0x38, 0xd5, 0x2d, 0x25, 0x32, 0xe1, 0xae, 0x20, 0xfe, 0x94, 0x53, 0x99, 0xf4, + 0x59, 0x24, 0x3d, 0x5f, 0xe2, 0x46, 0x46, 0x6c, 0x96, 0x53, 0x8f, 0x80, 0x48, 0x8f, 0x8e, 0x05, + 0xfe, 0x97, 0x7b, 0x14, 0xd2, 0x78, 0x00, 0x50, 0xab, 0x86, 0x75, 0x92, 0xf3, 0x9f, 0xfb, 0x49, + 0x7f, 0xb1, 0xb1, 0xb2, 0x62, 0xf2, 0xcd, 0x32, 0x1a, 0xc0, 0xbd, 0x2a, 0x0f, 0x25, 0x5a, 0xfb, + 0xe3, 0xc9, 0xb6, 0x4e, 0x38, 0xfd, 0xc5, 0x4a, 0x07, 0xcb, 0x95, 0x0e, 0x3e, 0x56, 0x3a, 0x78, + 0x5c, 0xeb, 0xca, 0x72, 0xad, 0x2b, 0x6f, 0x6b, 0x5d, 0xb9, 0x3e, 0x0a, 0xa9, 0xbc, 0x9b, 0x0e, + 0x2d, 0x9f, 0x4d, 0x6c, 0x1a, 0x46, 0x54, 0x12, 0xbb, 0x8c, 0xe4, 0x7d, 0x15, 0x4a, 0x99, 0xc4, + 0x44, 0x0c, 0xff, 0x67, 0x49, 0x3a, 0xfd, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xac, 0x17, 0x4c, 0x4d, + 0xb4, 0x02, 0x00, 0x00, } func (m *Validator) Marshal() (dAtA []byte, err error) { diff --git a/x/profile/types/validator_test.go b/x/profile/types/validator_test.go index 619f8dd7..a9c08d38 100644 --- a/x/profile/types/validator_test.go +++ b/x/profile/types/validator_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/profile/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/profile/types" ) func TestValidator_AddValidatorOperatorAddress(t *testing.T) { diff --git a/x/project/client/cli/query.go b/x/project/client/cli/query.go deleted file mode 100644 index 5c62119e..00000000 --- a/x/project/client/cli/query.go +++ /dev/null @@ -1,39 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -// GetQueryCmd returns the cli query commands for this module -func GetQueryCmd(queryRoute string) *cobra.Command { - // Group project queries under a subcommand - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdShowProject(), - CmdListProject(), - CmdShowProjectChains(), - CmdSpecialAllocationsBalance(), - CmdShowMainnetAccount(), - CmdListMainnetAccount(), - CmdShowMainnetAccountBalance(), - CmdListMainnetAccountBalance(), - CmdQueryParams(), - CmdQueryTotalShares(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/project/client/cli/query_mainnet_account.go b/x/project/client/cli/query_mainnet_account.go deleted file mode 100644 index 9cb2c981..00000000 --- a/x/project/client/cli/query_mainnet_account.go +++ /dev/null @@ -1,163 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdListMainnetAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-mainnet-account [project-id]", - Short: "List all mainnet accounts for a project", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - projectID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllMainnetAccountRequest{ - ProjectID: projectID, - Pagination: pageReq, - } - - res, err := queryClient.MainnetAccountAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowMainnetAccount() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-mainnet-account [project-id] [address]", - Short: "Shows the mainnet account for a project", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argsProjectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - argsAddress := args[1] - - params := &types.QueryGetMainnetAccountRequest{ - ProjectID: argsProjectID, - Address: argsAddress, - } - - res, err := queryClient.MainnetAccount(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdListMainnetAccountBalance() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-mainnet-account-balance [project-id]", - Short: "List all mainnet account balances for a project", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - projectID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllMainnetAccountBalanceRequest{ - ProjectID: projectID, - Pagination: pageReq, - } - - res, err := queryClient.MainnetAccountBalanceAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowMainnetAccountBalance() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-mainnet-account-balance [project-id] [address]", - Short: "Shows the mainnet account balance for a project", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argsProjectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - argsAddress := args[1] - - params := &types.QueryGetMainnetAccountBalanceRequest{ - ProjectID: argsProjectID, - Address: argsAddress, - } - - res, err := queryClient.MainnetAccountBalance(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/query_mainnet_account_test.go b/x/project/client/cli/query_mainnet_account_test.go deleted file mode 100644 index d139f4a7..00000000 --- a/x/project/client/cli/query_mainnet_account_test.go +++ /dev/null @@ -1,131 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/project/client/cli" - "github.com/tendermint/spn/x/project/types" -) - -func (suite *QueryTestSuite) TestShowMainnetAccount() { - ctx := suite.Network.Validators[0].ClientCtx - accs := suite.ProjectState.MainnetAccounts - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - name string - idProjectID uint64 - idAddress string - - args []string - err error - obj types.MainnetAccount - }{ - { - name: "should allow valid query", - idProjectID: accs[0].ProjectID, - idAddress: accs[0].Address, - - args: common, - obj: accs[0], - }, - { - name: "should fail if not found", - idProjectID: 100000, - idAddress: strconv.Itoa(100000), - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.name, func(t *testing.T) { - args := []string{ - strconv.Itoa(int(tc.idProjectID)), - tc.idAddress, - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowMainnetAccount(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetMainnetAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.MainnetAccount) - require.Equal(t, tc.obj, resp.MainnetAccount) - } - }) - } -} - -func (suite *QueryTestSuite) TestListMainnetAccount() { - ctx := suite.Network.Validators[0].ClientCtx - accs := suite.ProjectState.MainnetAccounts - - projectID := accs[0].ProjectID - request := func(projectID uint64, next []byte, offset, limit uint64, total bool) []string { - args := []string{ - strconv.FormatUint(projectID, 10), - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should paginate by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(accs); i += step { - args := request(projectID, nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListMainnetAccount(), args) - require.NoError(t, err) - var resp types.QueryAllMainnetAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.MainnetAccount), step) - require.Subset(t, accs, resp.MainnetAccount) - } - }) - suite.T().Run("should paginate by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(accs); i += step { - args := request(projectID, next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListMainnetAccount(), args) - require.NoError(t, err) - var resp types.QueryAllMainnetAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.MainnetAccount), step) - require.Subset(t, accs, resp.MainnetAccount) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should paginate all", func(t *testing.T) { - args := request(projectID, nil, 0, uint64(len(accs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListMainnetAccount(), args) - require.NoError(t, err) - var resp types.QueryAllMainnetAccountResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(accs), int(resp.Pagination.Total)) - require.ElementsMatch(t, accs, resp.MainnetAccount) - }) -} diff --git a/x/project/client/cli/query_params.go b/x/project/client/cli/query_params.go deleted file mode 100644 index 164ff2ce..00000000 --- a/x/project/client/cli/query_params.go +++ /dev/null @@ -1,35 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdQueryParams() *cobra.Command { - cmd := &cobra.Command{ - Use: "params", - Short: "Shows the parameters of the module", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/query_project.go b/x/project/client/cli/query_project.go deleted file mode 100644 index 417bf73d..00000000 --- a/x/project/client/cli/query_project.go +++ /dev/null @@ -1,78 +0,0 @@ -package cli - -import ( - "context" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdListProject() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-project", - Short: "List all projects", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllProjectRequest{ - Pagination: pageReq, - } - - res, err := queryClient.ProjectAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowProject() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-project [id]", - Short: "shows a project", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - projectID, err := strconv.ParseUint(args[0], 10, 64) - if err != nil { - return err - } - - params := &types.QueryGetProjectRequest{ - ProjectID: projectID, - } - - res, err := queryClient.Project(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/query_project_chains.go b/x/project/client/cli/query_project_chains.go deleted file mode 100644 index 4d2c24e8..00000000 --- a/x/project/client/cli/query_project_chains.go +++ /dev/null @@ -1,45 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdShowProjectChains() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-project-chains [project-id]", - Short: "List all chains of a project", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argsProjectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - params := &types.QueryGetProjectChainsRequest{ - ProjectID: argsProjectID, - } - - res, err := queryClient.ProjectChains(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/query_project_chains_test.go b/x/project/client/cli/query_project_chains_test.go deleted file mode 100644 index c7651072..00000000 --- a/x/project/client/cli/query_project_chains_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/project/client/cli" - "github.com/tendermint/spn/x/project/types" -) - -func (suite *QueryTestSuite) TestShowProjectChains() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.ProjectState.ProjectChains - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - name string - idProjectID uint64 - - args []string - err error - obj types.ProjectChains - }{ - { - name: "should allow valid query", - idProjectID: objs[0].ProjectID, - - args: common, - obj: objs[0], - }, - { - name: "should fail if not found", - idProjectID: 100000, - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.name, func(t *testing.T) { - args := []string{ - strconv.Itoa(int(tc.idProjectID)), - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowProjectChains(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetProjectChainsResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.ProjectChains) - require.Equal(t, tc.obj, resp.ProjectChains) - } - }) - } -} diff --git a/x/project/client/cli/query_project_test.go b/x/project/client/cli/query_project_test.go deleted file mode 100644 index bd5f3773..00000000 --- a/x/project/client/cli/query_project_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package cli_test - -import ( - "fmt" - "testing" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/project/client/cli" - "github.com/tendermint/spn/x/project/types" -) - -func (suite *QueryTestSuite) TestShowProject() { - ctx := suite.Network.Validators[0].ClientCtx - projects := suite.ProjectState.Projects - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - name string - id string - args []string - err error - obj types.Project - }{ - { - name: "should allow valid query", - id: fmt.Sprintf("%d", projects[0].ProjectID), - args: common, - obj: projects[0], - }, - { - name: "should fail if not found", - id: "not_found", - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.name, func(t *testing.T) { - args := []string{tc.id} - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowProject(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetProjectResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - tc.obj.Metadata = []uint8(nil) - require.Equal(t, nullify.Fill(tc.obj), nullify.Fill(resp.Project)) - } - }) - } -} - -func (suite *QueryTestSuite) TestListProject() { - ctx := suite.Network.Validators[0].ClientCtx - projects := suite.ProjectState.Projects - - request := func(next []byte, offset, limit uint64, total bool) []string { - args := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should paginate by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(projects); i += step { - args := request(nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListProject(), args) - require.NoError(t, err) - var resp types.QueryAllProjectResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Project), step) - require.Subset(t, nullify.Fill(projects), nullify.Fill(resp.Project)) - } - }) - suite.T().Run("should paginate by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(projects); i += step { - args := request(next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListProject(), args) - require.NoError(t, err) - var resp types.QueryAllProjectResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.Project), step) - require.Subset(t, nullify.Fill(projects), nullify.Fill(resp.Project)) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should paginate all", func(t *testing.T) { - args := request(nil, 0, uint64(len(projects)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListProject(), args) - require.NoError(t, err) - var resp types.QueryAllProjectResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(projects), int(resp.Pagination.Total)) - require.ElementsMatch(t, nullify.Fill(projects), nullify.Fill(resp.Project)) - }) -} diff --git a/x/project/client/cli/query_special_allocations_balance.go b/x/project/client/cli/query_special_allocations_balance.go deleted file mode 100644 index 323d9257..00000000 --- a/x/project/client/cli/query_special_allocations_balance.go +++ /dev/null @@ -1,46 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdSpecialAllocationsBalance() *cobra.Command { - cmd := &cobra.Command{ - Use: "special-allocations-balance [project-id]", - Short: "query the coin balance for special allocations", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - reqProjectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QuerySpecialAllocationsBalanceRequest{ - ProjectID: reqProjectID, - } - - res, err := queryClient.SpecialAllocationsBalance(cmd.Context(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/query_test.go b/x/project/client/cli/query_test.go deleted file mode 100644 index d7b54620..00000000 --- a/x/project/client/cli/query_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package cli_test - -import ( - "testing" - - "github.com/stretchr/testify/suite" - - "github.com/tendermint/spn/testutil/networksuite" -) - -// QueryTestSuite is a test suite for query tests -type QueryTestSuite struct { - networksuite.NetworkTestSuite -} - -// TestQueryTestSuite runs test of the query suite -func TestQueryTestSuite(t *testing.T) { - suite.Run(t, new(QueryTestSuite)) -} diff --git a/x/project/client/cli/query_total_shares.go b/x/project/client/cli/query_total_shares.go deleted file mode 100644 index 083a413e..00000000 --- a/x/project/client/cli/query_total_shares.go +++ /dev/null @@ -1,38 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdQueryTotalShares() *cobra.Command { - cmd := &cobra.Command{ - Use: "total-shares", - Short: "Shows the total-shares value of projects", - Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryTotalSharesRequest{} - - res, err := queryClient.TotalShares(cmd.Context(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx.go b/x/project/client/cli/tx.go deleted file mode 100644 index eebc62b5..00000000 --- a/x/project/client/cli/tx.go +++ /dev/null @@ -1,37 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -// GetTxCmd returns the transaction commands for this module -func GetTxCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdCreateProject(), - CmdEditProject(), - CmdUpdateTotalSupply(), - CmdUpdateSpecialAllocations(), - CmdInitializeMainnet(), - CmdMintVouchers(), - CmdBurnVouchers(), - CmdUnredeemVouchers(), - CmdRedeemVouchers(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/project/client/cli/tx_burn_vouchers.go b/x/project/client/cli/tx_burn_vouchers.go deleted file mode 100644 index 7b36c9ce..00000000 --- a/x/project/client/cli/tx_burn_vouchers.go +++ /dev/null @@ -1,50 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdBurnVouchers() *cobra.Command { - cmd := &cobra.Command{ - Use: "burn-vouchers [project-id] [vouchers]", - Short: "Burn vouchers and decrease allocated shares of the project", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - projectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - vouchers, err := sdk.ParseCoinsNormalized(args[1]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgBurnVouchers( - clientCtx.GetFromAddress().String(), - projectID, - vouchers, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx_create_project.go b/x/project/client/cli/tx_create_project.go deleted file mode 100644 index 993546f3..00000000 --- a/x/project/client/cli/tx_create_project.go +++ /dev/null @@ -1,59 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -const ( - flagMetadata = "metadata" -) - -func CmdCreateProject() *cobra.Command { - cmd := &cobra.Command{ - Use: "create-project [project-name] [total-supply]", - Short: "Create a new project", - Args: cobra.RangeArgs(1, 2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - totalSupply := sdk.NewCoins() - if len(args) > 1 { - totalSupply, err = sdk.ParseCoinsNormalized(args[1]) - if err != nil { - return err - } - } - - metadata, err := cmd.Flags().GetString(flagMetadata) - if err != nil { - return err - } - metadataBytes := []byte(metadata) - - msg := types.NewMsgCreateProject( - clientCtx.GetFromAddress().String(), - args[0], - totalSupply, - metadataBytes, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagMetadata, "", "Set metadata field for the project") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx_edit_project.go b/x/project/client/cli/tx_edit_project.go deleted file mode 100644 index 90a907f6..00000000 --- a/x/project/client/cli/tx_edit_project.go +++ /dev/null @@ -1,61 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -const flagName = "flag-project-name" - -func CmdEditProject() *cobra.Command { - cmd := &cobra.Command{ - Use: "edit-project [project-id]", - Short: "Edit the project name or metadata", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - projectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - name, err := cmd.Flags().GetString(flagName) - if err != nil { - return err - } - - metadata, err := cmd.Flags().GetString(flagMetadata) - if err != nil { - return err - } - metadataBytes := []byte(metadata) - - msg := types.NewMsgEditProject( - clientCtx.GetFromAddress().String(), - projectID, - name, - metadataBytes, - ) - - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagName, "", "Set name for the project") - cmd.Flags().String(flagMetadata, "", "Set metadata field for the project") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx_initialize_mainnet.go b/x/project/client/cli/tx_initialize_mainnet.go deleted file mode 100644 index efda19fc..00000000 --- a/x/project/client/cli/tx_initialize_mainnet.go +++ /dev/null @@ -1,46 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdInitializeMainnet() *cobra.Command { - cmd := &cobra.Command{ - Use: "initialize-mainnet [project-id] [source-url] [source-hash] [mainnet-chain-id]", - Short: "Initialize the mainnet of the project to open gentxs submissions and fix total supply", - Args: cobra.ExactArgs(4), - RunE: func(cmd *cobra.Command, args []string) (err error) { - projectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgInitializeMainnet( - clientCtx.GetFromAddress().String(), - projectID, - args[1], - args[2], - args[3], - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx_mint_vouchers.go b/x/project/client/cli/tx_mint_vouchers.go deleted file mode 100644 index 74629946..00000000 --- a/x/project/client/cli/tx_mint_vouchers.go +++ /dev/null @@ -1,49 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdMintVouchers() *cobra.Command { - cmd := &cobra.Command{ - Use: "mint-vouchers [project-id] [shares]", - Short: "Mint vouchers from project shares", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - projectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - shares, err := types.NewShares(args[1]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgMintVouchers( - clientCtx.GetFromAddress().String(), - projectID, - shares, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx_redeem_vouchers.go b/x/project/client/cli/tx_redeem_vouchers.go deleted file mode 100644 index 851fa696..00000000 --- a/x/project/client/cli/tx_redeem_vouchers.go +++ /dev/null @@ -1,63 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -const flagAccount = "account" - -func CmdRedeemVouchers() *cobra.Command { - cmd := &cobra.Command{ - Use: "redeem-vouchers [project-id] [vouchers]", - Short: "Redeem vouchers and allocate shares for an account in the mainnet of the project", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - projectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - vouchers, err := sdk.ParseCoinsNormalized(args[1]) - if err != nil { - return err - } - - account, err := cmd.Flags().GetString(flagAccount) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - if account == "" { - account = clientCtx.GetFromAddress().String() - } - - msg := types.NewMsgRedeemVouchers( - clientCtx.GetFromAddress().String(), - account, - projectID, - vouchers, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(flagAccount, "", "Account address that receives shares allocation from redeemed vouchers") - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx_unredeem_vouchers.go b/x/project/client/cli/tx_unredeem_vouchers.go deleted file mode 100644 index f83d384b..00000000 --- a/x/project/client/cli/tx_unredeem_vouchers.go +++ /dev/null @@ -1,49 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdUnredeemVouchers() *cobra.Command { - cmd := &cobra.Command{ - Use: "unredeem-vouchers [project-id] [shares]", - Short: "Unredeem vouchers that have been redeemed into an account and get vouchers back", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - projectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - shares, err := types.NewShares(args[1]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgUnredeemVouchers( - clientCtx.GetFromAddress().String(), - projectID, - shares, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx_update_special_allocations.go b/x/project/client/cli/tx_update_special_allocations.go deleted file mode 100644 index 5a52451b..00000000 --- a/x/project/client/cli/tx_update_special_allocations.go +++ /dev/null @@ -1,54 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdUpdateSpecialAllocations() *cobra.Command { - cmd := &cobra.Command{ - Use: "update-special-allocations [project-id] [genesis-distribution] [claimable-airdrop]", - Short: "Update special allocations for the project", - Args: cobra.ExactArgs(3), - RunE: func(cmd *cobra.Command, args []string) (err error) { - argProjectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - genesisDistribution, err := types.NewShares(args[1]) - if err != nil { - return err - } - - claimableAirdrop, err := types.NewShares(args[2]) - if err != nil { - return err - } - - msg := types.NewMsgUpdateSpecialAllocations( - clientCtx.GetFromAddress().String(), - argProjectID, - types.NewSpecialAllocations(genesisDistribution, claimableAirdrop), - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/client/cli/tx_update_total_supply.go b/x/project/client/cli/tx_update_total_supply.go deleted file mode 100644 index 958ec3bd..00000000 --- a/x/project/client/cli/tx_update_total_supply.go +++ /dev/null @@ -1,50 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/types" -) - -func CmdUpdateTotalSupply() *cobra.Command { - cmd := &cobra.Command{ - Use: "update-total-supply [project-id] [total-supply]", - Short: "Update the total supply of the mainnet of a project", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - projectID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - totalSupply, err := sdk.ParseCoinsNormalized(args[1]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgUpdateTotalSupply( - clientCtx.GetFromAddress().String(), - projectID, - totalSupply, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/project/genesis.go b/x/project/genesis.go deleted file mode 100644 index 7c064cff..00000000 --- a/x/project/genesis.go +++ /dev/null @@ -1,50 +0,0 @@ -package project - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" -) - -// InitGenesis initializes the project module's state from a provided genesis -// state. -func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { - // Set all the project - for _, elem := range genState.Projects { - k.SetProject(ctx, elem) - } - // Set project counter - k.SetProjectCounter(ctx, genState.ProjectCounter) - - // Set all the projectChains - for _, elem := range genState.ProjectChains { - k.SetProjectChains(ctx, elem) - } - - // Set all the mainnetAccount - for _, elem := range genState.MainnetAccounts { - k.SetMainnetAccount(ctx, elem) - } - - k.SetParams(ctx, genState.Params) - - // set maximum shares constant value - k.SetTotalShares(ctx, genState.TotalShares) - - // this line is used by starport scaffolding # genesis/module/init -} - -// ExportGenesis returns the project module's exported genesis. -func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - genesis := types.DefaultGenesis() - - genesis.Projects = k.GetAllProject(ctx) - genesis.ProjectCounter = k.GetProjectCounter(ctx) - genesis.ProjectChains = k.GetAllProjectChains(ctx) - genesis.MainnetAccounts = k.GetAllMainnetAccount(ctx) - genesis.Params = k.GetParams(ctx) - // this line is used by starport scaffolding # genesis/module/export - - return genesis -} diff --git a/x/project/genesis_test.go b/x/project/genesis_test.go deleted file mode 100644 index aa82835c..00000000 --- a/x/project/genesis_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package project_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project" -) - -/* -// We use a genesis template from sample package, therefore this placeholder is not used -// this line is used by starport scaffolding # genesis/test/state -*/ - -func TestGenesis(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - r := sample.Rand() - - t.Run("should allow importing and exporting genesis", func(t *testing.T) { - genesisState := sample.ProjectGenesisStateWithAccounts(r) - - project.InitGenesis(ctx, *tk.ProjectKeeper, genesisState) - got := *project.ExportGenesis(ctx, *tk.ProjectKeeper) - - require.ElementsMatch(t, genesisState.ProjectChains, got.ProjectChains) - require.ElementsMatch(t, genesisState.Projects, got.Projects) - require.Equal(t, genesisState.ProjectCounter, got.ProjectCounter) - require.ElementsMatch(t, genesisState.MainnetAccounts, got.MainnetAccounts) - require.Equal(t, genesisState.Params, got.Params) - maxShares := tk.ProjectKeeper.GetTotalShares(ctx) - require.Equal(t, uint64(spntypes.TotalShareNumber), maxShares) - }) - - // this line is used by starport scaffolding # genesis/test/assert -} diff --git a/x/project/keeper/grpc.go b/x/project/keeper/grpc.go deleted file mode 100644 index 3e6c720f..00000000 --- a/x/project/keeper/grpc.go +++ /dev/null @@ -1,7 +0,0 @@ -package keeper - -import ( - "github.com/tendermint/spn/x/project/types" -) - -var _ types.QueryServer = Keeper{} diff --git a/x/project/keeper/grpc_mainnet_account.go b/x/project/keeper/grpc_mainnet_account.go deleted file mode 100644 index b85cd07f..00000000 --- a/x/project/keeper/grpc_mainnet_account.go +++ /dev/null @@ -1,136 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/project/types" -) - -func (k Keeper) MainnetAccountAll(c context.Context, req *types.QueryAllMainnetAccountRequest) (*types.QueryAllMainnetAccountResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var mainnetAccounts []types.MainnetAccount - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - mainnetAccountStore := prefix.NewStore(store, types.MainnetAccountAllKey(req.ProjectID)) - - pageRes, err := query.Paginate(mainnetAccountStore, req.Pagination, func(key []byte, value []byte) error { - var mainnetAccount types.MainnetAccount - if err := k.cdc.Unmarshal(value, &mainnetAccount); err != nil { - return err - } - - mainnetAccounts = append(mainnetAccounts, mainnetAccount) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllMainnetAccountResponse{MainnetAccount: mainnetAccounts, Pagination: pageRes}, nil -} - -func (k Keeper) MainnetAccount(c context.Context, req *types.QueryGetMainnetAccountRequest) (*types.QueryGetMainnetAccountResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetMainnetAccount(ctx, req.ProjectID, req.Address) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetMainnetAccountResponse{MainnetAccount: val}, nil -} - -func (k Keeper) MainnetAccountBalanceAll(c context.Context, req *types.QueryAllMainnetAccountBalanceRequest) (*types.QueryAllMainnetAccountBalanceResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var mainnetAccountBalances []types.MainnetAccountBalance - ctx := sdk.UnwrapSDKContext(c) - - // get project and share information - totalShareNumber := k.GetTotalShares(ctx) - project, found := k.GetProject(ctx, req.ProjectID) - if !found { - return nil, status.Error(codes.NotFound, "project not found") - } - - // iterate accounts - store := ctx.KVStore(k.storeKey) - mainnetAccountStore := prefix.NewStore(store, types.MainnetAccountAllKey(req.ProjectID)) - - pageRes, err := query.Paginate(mainnetAccountStore, req.Pagination, func(key []byte, value []byte) error { - var acc types.MainnetAccount - if err := k.cdc.Unmarshal(value, &acc); err != nil { - return err - } - - balance, err := acc.Shares.CoinsFromTotalSupply(project.TotalSupply, totalShareNumber) - if err != nil { - return status.Errorf(codes.Internal, "balance can't be calculated for account %s: %s", acc.Address, err.Error()) - } - - // add the balance if not zero - if !balance.IsZero() { - mainnetAccountBalance := types.MainnetAccountBalance{ - ProjectID: acc.ProjectID, - Address: acc.Address, - Coins: balance, - } - mainnetAccountBalances = append(mainnetAccountBalances, mainnetAccountBalance) - } - - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllMainnetAccountBalanceResponse{MainnetAccountBalance: mainnetAccountBalances, Pagination: pageRes}, nil -} - -func (k Keeper) MainnetAccountBalance(c context.Context, req *types.QueryGetMainnetAccountBalanceRequest) (*types.QueryGetMainnetAccountBalanceResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - // get project and share information - totalShareNumber := k.GetTotalShares(ctx) - project, found := k.GetProject(ctx, req.ProjectID) - if !found { - return nil, status.Error(codes.NotFound, "project not found") - } - - // get account balance - acc, found := k.GetMainnetAccount(ctx, req.ProjectID, req.Address) - if !found { - return nil, status.Error(codes.NotFound, "account not found") - } - - balance, err := acc.Shares.CoinsFromTotalSupply(project.TotalSupply, totalShareNumber) - if err != nil { - return nil, status.Errorf(codes.Internal, "balance can't be calculated: %s", err.Error()) - } - - mainnetAccountBalance := types.MainnetAccountBalance{ - ProjectID: acc.ProjectID, - Address: acc.Address, - Coins: balance, - } - - return &types.QueryGetMainnetAccountBalanceResponse{MainnetAccountBalance: mainnetAccountBalance}, nil -} diff --git a/x/project/keeper/grpc_mainnet_account_test.go b/x/project/keeper/grpc_mainnet_account_test.go deleted file mode 100644 index 89d33863..00000000 --- a/x/project/keeper/grpc_mainnet_account_test.go +++ /dev/null @@ -1,338 +0,0 @@ -package keeper_test - -import ( - "fmt" - "strconv" - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" -) - -func createNMainnetAccountForProjectID( - keeper *keeper.Keeper, - ctx sdk.Context, - n int, - projectID uint64, -) []types.MainnetAccount { - items := make([]types.MainnetAccount, n) - for i := range items { - items[i] = sample.MainnetAccount(r, projectID, strconv.Itoa(i)) - keeper.SetMainnetAccount(ctx, items[i]) - } - return items -} - -func createNMainnetAccountForProjectIDWithTotalSupply( - t *testing.T, - keeper *keeper.Keeper, - ctx sdk.Context, - n int, - projectID uint64, -) []types.MainnetAccountBalance { - totalSupply := tc.Coins(t, "100000foo,200000bar") - totalShares := uint64(100000) - - // create and set project - project := sample.Project(r, projectID) - project.TotalSupply = totalSupply - keeper.SetProject(ctx, project) - keeper.SetTotalShares(ctx, totalShares) - - // set account and create n account balance - // shares of accounts are foo and bar shares with random share number - items := make([]types.MainnetAccountBalance, n) - for i := range items { - acc := sample.MainnetAccount(r, projectID, sample.Address(r)) - fooShares := r.Intn(int(totalShares)) - barShares := r.Intn(int(totalShares)) - acc.Shares = tc.Shares(t, fmt.Sprintf("%dfoo,%dbar", fooShares, barShares)) - keeper.SetMainnetAccount(ctx, acc) - - balance, err := acc.Shares.CoinsFromTotalSupply(totalSupply, totalShares) - require.NoError(t, err) - items[i] = types.MainnetAccountBalance{ - ProjectID: projectID, - Address: acc.Address, - Coins: balance, - } - } - return items -} - -func TestMainnetAccountQuerySingle(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - msgs = createNMainnetAccount(tk.ProjectKeeper, ctx, 2) - ) - for _, tc := range []struct { - name string - request *types.QueryGetMainnetAccountRequest - response *types.QueryGetMainnetAccountResponse - err error - }{ - { - name: "should allow valid query", - request: &types.QueryGetMainnetAccountRequest{ - ProjectID: msgs[0].ProjectID, - Address: msgs[0].Address, - }, - response: &types.QueryGetMainnetAccountResponse{MainnetAccount: msgs[0]}, - }, - { - name: "should return KeyNotFound", - request: &types.QueryGetMainnetAccountRequest{ - ProjectID: 100000, - Address: strconv.Itoa(100000), - }, - err: status.Error(codes.NotFound, "not found"), - }, - { - name: "should return InvalidRequest", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.ProjectKeeper.MainnetAccount(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestMainnetAccountQueryPaginated(t *testing.T) { - var ( - projectID = uint64(5) - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - msgs = createNMainnetAccountForProjectID(tk.ProjectKeeper, ctx, 5, projectID) - ) - request := func(projectID uint64, next []byte, offset, limit uint64, total bool) *types.QueryAllMainnetAccountRequest { - return &types.QueryAllMainnetAccountRequest{ - ProjectID: projectID, - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("ByOffset", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProjectKeeper.MainnetAccountAll(wctx, request(projectID, nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.MainnetAccount), step) - require.Subset(t, msgs, resp.MainnetAccount) - } - }) - t.Run("ByKey", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProjectKeeper.MainnetAccountAll(wctx, request(projectID, next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.MainnetAccount), step) - require.Subset(t, msgs, resp.MainnetAccount) - next = resp.Pagination.NextKey - } - }) - t.Run("Total", func(t *testing.T) { - resp, err := tk.ProjectKeeper.MainnetAccountAll(wctx, request(projectID, nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.MainnetAccount) - }) - t.Run("InvalidRequest", func(t *testing.T) { - _, err := tk.ProjectKeeper.MainnetAccountAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} - -func TestMainnetAccountBalanceQuerySingle(t *testing.T) { - var ( - projectID = uint64(5) - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - msgs = createNMainnetAccountForProjectIDWithTotalSupply(t, tk.ProjectKeeper, ctx, 5, projectID) - ) - for _, tc := range []struct { - desc string - request *types.QueryGetMainnetAccountBalanceRequest - response *types.QueryGetMainnetAccountBalanceResponse - err error - }{ - { - desc: "First", - request: &types.QueryGetMainnetAccountBalanceRequest{ - ProjectID: msgs[0].ProjectID, - Address: msgs[0].Address, - }, - response: &types.QueryGetMainnetAccountBalanceResponse{MainnetAccountBalance: msgs[0]}, - }, - { - desc: "Second", - request: &types.QueryGetMainnetAccountBalanceRequest{ - ProjectID: msgs[1].ProjectID, - Address: msgs[1].Address, - }, - response: &types.QueryGetMainnetAccountBalanceResponse{MainnetAccountBalance: msgs[1]}, - }, - { - desc: "project not found", - request: &types.QueryGetMainnetAccountBalanceRequest{ - ProjectID: 10000, - Address: sample.Address(r), - }, - err: status.Error(codes.NotFound, "project not found"), - }, - { - desc: "account not found", - request: &types.QueryGetMainnetAccountBalanceRequest{ - ProjectID: projectID, - Address: sample.Address(r), - }, - err: status.Error(codes.NotFound, "account not found"), - }, - { - desc: "invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.ProjectKeeper.MainnetAccountBalance(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestMainnetAccountBalanceQueryPaginated(t *testing.T) { - var ( - projectID = uint64(5) - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - msgs = createNMainnetAccountForProjectIDWithTotalSupply(t, tk.ProjectKeeper, ctx, 5, projectID) - ) - request := func(projectID uint64, next []byte, offset, limit uint64, total bool) *types.QueryAllMainnetAccountBalanceRequest { - return &types.QueryAllMainnetAccountBalanceRequest{ - ProjectID: projectID, - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("ByOffset", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProjectKeeper.MainnetAccountBalanceAll(wctx, request(projectID, nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.MainnetAccountBalance), step) - require.Subset(t, msgs, resp.MainnetAccountBalance) - } - }) - t.Run("ByKey", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProjectKeeper.MainnetAccountBalanceAll(wctx, request(projectID, next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.MainnetAccountBalance), step) - require.Subset(t, msgs, resp.MainnetAccountBalance) - next = resp.Pagination.NextKey - } - }) - t.Run("Total", func(t *testing.T) { - resp, err := tk.ProjectKeeper.MainnetAccountBalanceAll(wctx, request(projectID, nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.MainnetAccountBalance) - }) - t.Run("invalid request", func(t *testing.T) { - _, err := tk.ProjectKeeper.MainnetAccountBalanceAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) - t.Run("project not found", func(t *testing.T) { - _, err := tk.ProjectKeeper.MainnetAccountBalanceAll(wctx, request(10000, nil, 0, 0, true)) - require.ErrorIs(t, err, status.Error(codes.NotFound, "project not found")) - }) -} - -func TestMainnetAccountBalanceAll(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - - projectID = uint64(5) - totalSupply = tc.Coins(t, "1000foo,1000bar") - totalShares = uint64(100) - addr1 = sample.Address(r) - addr2 = sample.Address(r) - addr3 = sample.Address(r) - project = sample.Project(r, projectID) - ) - - // set project and sample accounts - project.TotalSupply = totalSupply - tk.ProjectKeeper.SetProject(ctx, project) - tk.ProjectKeeper.SetTotalShares(ctx, totalShares) - tk.ProjectKeeper.SetMainnetAccount(ctx, types.MainnetAccount{ - ProjectID: projectID, - Address: addr1, - Shares: tc.Shares(t, "100foo"), - }) - tk.ProjectKeeper.SetMainnetAccount(ctx, types.MainnetAccount{ - ProjectID: projectID, - Address: addr2, - Shares: tc.Shares(t, "100bar"), - }) - tk.ProjectKeeper.SetMainnetAccount(ctx, types.MainnetAccount{ - ProjectID: projectID, - Address: addr3, - Shares: tc.Shares(t, "100baz"), - }) - - t.Run("accounts with empty balance are skipped", func(t *testing.T) { - accountBalances, err := tk.ProjectKeeper.MainnetAccountBalanceAll(wctx, &types.QueryAllMainnetAccountBalanceRequest{ - ProjectID: projectID, - Pagination: &query.PageRequest{ - CountTotal: true, - }, - }) - require.NoError(t, err) - - // Account 3 must not be included in balances since the total supply doesn't contains baz tokens - balances := accountBalances.MainnetAccountBalance - require.Len(t, balances, 2) - require.Contains(t, balances, types.MainnetAccountBalance{ - ProjectID: projectID, - Address: addr1, - Coins: tc.Coins(t, "1000foo"), - }) - require.Contains(t, balances, types.MainnetAccountBalance{ - ProjectID: projectID, - Address: addr2, - Coins: tc.Coins(t, "1000bar"), - }) - }) -} diff --git a/x/project/keeper/grpc_params.go b/x/project/keeper/grpc_params.go deleted file mode 100644 index 1afe7eb3..00000000 --- a/x/project/keeper/grpc_params.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/project/types" -) - -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil -} diff --git a/x/project/keeper/grpc_params_test.go b/x/project/keeper/grpc_params_test.go deleted file mode 100644 index eca6516c..00000000 --- a/x/project/keeper/grpc_params_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" -) - -func TestParamsQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - params := sample.ProjectParams(r) - - t.Run("should allow query for params", func(t *testing.T) { - tk.ProjectKeeper.SetParams(ctx, params) - response, err := tk.ProjectKeeper.Params(wctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.Equal(t, &types.QueryParamsResponse{Params: params}, response) - - _, err = tk.ProjectKeeper.Params(wctx, nil) - require.Error(t, err) - }) -} diff --git a/x/project/keeper/grpc_project.go b/x/project/keeper/grpc_project.go deleted file mode 100644 index 3aaa597f..00000000 --- a/x/project/keeper/grpc_project.go +++ /dev/null @@ -1,54 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/project/types" -) - -func (k Keeper) ProjectAll(c context.Context, req *types.QueryAllProjectRequest) (*types.QueryAllProjectResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var projects []types.Project - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - projectStore := prefix.NewStore(store, types.KeyPrefix(types.ProjectKey)) - - pageRes, err := query.Paginate(projectStore, req.Pagination, func(key []byte, value []byte) error { - var project types.Project - if err := k.cdc.Unmarshal(value, &project); err != nil { - return err - } - - projects = append(projects, project) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllProjectResponse{Project: projects, Pagination: pageRes}, nil -} - -func (k Keeper) Project(c context.Context, req *types.QueryGetProjectRequest) (*types.QueryGetProjectResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - ctx := sdk.UnwrapSDKContext(c) - project, found := k.GetProject(ctx, req.ProjectID) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetProjectResponse{Project: project}, nil -} diff --git a/x/project/keeper/grpc_project_chains.go b/x/project/keeper/grpc_project_chains.go deleted file mode 100644 index a2dea2f3..00000000 --- a/x/project/keeper/grpc_project_chains.go +++ /dev/null @@ -1,28 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/project/types" -) - -func (k Keeper) ProjectChains(c context.Context, req *types.QueryGetProjectChainsRequest) (*types.QueryGetProjectChainsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetProjectChains( - ctx, - req.ProjectID, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetProjectChainsResponse{ProjectChains: val}, nil -} diff --git a/x/project/keeper/grpc_project_chains_test.go b/x/project/keeper/grpc_project_chains_test.go deleted file mode 100644 index 27d841e6..00000000 --- a/x/project/keeper/grpc_project_chains_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/project/types" -) - -func TestProjectChainsQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNProjectChains(tk.ProjectKeeper, ctx, 2) - for _, tc := range []struct { - name string - request *types.QueryGetProjectChainsRequest - response *types.QueryGetProjectChainsResponse - err error - }{ - { - name: "should allow valid query", - request: &types.QueryGetProjectChainsRequest{ - ProjectID: msgs[0].ProjectID, - }, - response: &types.QueryGetProjectChainsResponse{ProjectChains: msgs[0]}, - }, - { - name: "should return KeyNotFound", - request: &types.QueryGetProjectChainsRequest{ - ProjectID: 100000, - }, - err: status.Error(codes.NotFound, "not found"), - }, - { - name: "should return InvalidRequest", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.ProjectKeeper.ProjectChains(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.Equal(t, tc.response, response) - } - }) - } -} diff --git a/x/project/keeper/grpc_project_test.go b/x/project/keeper/grpc_project_test.go deleted file mode 100644 index 6bb0d1fd..00000000 --- a/x/project/keeper/grpc_project_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/project/types" -) - -func TestProjectQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNProject(tk.ProjectKeeper, ctx, 2) - for _, tc := range []struct { - name string - request *types.QueryGetProjectRequest - response *types.QueryGetProjectResponse - err error - }{ - { - name: "should allow valid query", - request: &types.QueryGetProjectRequest{ProjectID: msgs[0].ProjectID}, - response: &types.QueryGetProjectResponse{Project: msgs[0]}, - }, - { - name: "should return project not found", - request: &types.QueryGetProjectRequest{ProjectID: uint64(len(msgs))}, - err: status.Error(codes.NotFound, "not found"), - }, - { - name: "should return invalid request", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.ProjectKeeper.Project(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, tc.response, response) - } - }) - } -} - -func TestProjectQueryPaginated(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNProject(tk.ProjectKeeper, ctx, 5) - - request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllProjectRequest { - return &types.QueryAllProjectRequest{ - Pagination: &query.PageRequest{ - Key: next, - Offset: offset, - Limit: limit, - CountTotal: total, - }, - } - } - t.Run("ByOffset", func(t *testing.T) { - step := 2 - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProjectKeeper.ProjectAll(wctx, request(nil, uint64(i), uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Project), step) - require.Subset(t, msgs, resp.Project) - } - }) - t.Run("ByKey", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(msgs); i += step { - resp, err := tk.ProjectKeeper.ProjectAll(wctx, request(next, 0, uint64(step), false)) - require.NoError(t, err) - require.LessOrEqual(t, len(resp.Project), step) - require.Subset(t, msgs, resp.Project) - next = resp.Pagination.NextKey - } - }) - t.Run("Total", func(t *testing.T) { - resp, err := tk.ProjectKeeper.ProjectAll(wctx, request(nil, 0, 0, true)) - require.NoError(t, err) - require.Equal(t, len(msgs), int(resp.Pagination.Total)) - require.ElementsMatch(t, msgs, resp.Project) - }) - t.Run("InvalidRequest", func(t *testing.T) { - _, err := tk.ProjectKeeper.ProjectAll(wctx, nil) - require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) - }) -} diff --git a/x/project/keeper/grpc_special_allocations_balance.go b/x/project/keeper/grpc_special_allocations_balance.go deleted file mode 100644 index 2845b39b..00000000 --- a/x/project/keeper/grpc_special_allocations_balance.go +++ /dev/null @@ -1,50 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/project/types" -) - -func (k Keeper) SpecialAllocationsBalance( - goCtx context.Context, - req *types.QuerySpecialAllocationsBalanceRequest, -) (*types.QuerySpecialAllocationsBalanceResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - ctx := sdk.UnwrapSDKContext(goCtx) - - // get the project - totalShareNumber := k.GetTotalShares(ctx) - project, found := k.GetProject(ctx, req.ProjectID) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - // calculate special allocations balance from total supply - genesisDistribution, err := project.SpecialAllocations.GenesisDistribution.CoinsFromTotalSupply( - project.TotalSupply, - totalShareNumber, - ) - if err != nil { - return nil, status.Errorf(codes.Internal, "genesis distribution can't be calculated: %s", err.Error()) - } - claimableAirdrop, err := project.SpecialAllocations.ClaimableAirdrop.CoinsFromTotalSupply( - project.TotalSupply, - totalShareNumber, - ) - if err != nil { - return nil, status.Errorf(codes.Internal, "claimable airdrop can't be calculated: %s", err.Error()) - } - - return &types.QuerySpecialAllocationsBalanceResponse{ - GenesisDistribution: genesisDistribution, - ClaimableAirdrop: claimableAirdrop, - }, nil -} diff --git a/x/project/keeper/grpc_special_allocations_balance_test.go b/x/project/keeper/grpc_special_allocations_balance_test.go deleted file mode 100644 index 163b1a9e..00000000 --- a/x/project/keeper/grpc_special_allocations_balance_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" -) - -func TestSpecialAllocationsBalance(t *testing.T) { - var ( - ctx, tk, _ = testkeeper.NewTestSetup(t) - wctx = sdk.WrapSDKContext(ctx) - - projectID = uint64(1) - projectIDInvalidGenesisDistribution = uint64(2) - projectIDInvalidClaimableAirdrop = uint64(3) - ) - - tk.ProjectKeeper.SetTotalShares(ctx, 100) - - // initialize projects - setProject := func(projectID uint64, genesisDistribution, claimableAirdrop types.Shares) { - project := sample.Project(r, projectID) - project.TotalSupply = tc.Coins(t, "1000foo,1000bar,1000baz") - project.SpecialAllocations = types.NewSpecialAllocations( - genesisDistribution, - claimableAirdrop, - ) - project.AllocatedShares = tc.Shares(t, "100foo,100bar,100baz,100bam") - tk.ProjectKeeper.SetProject(ctx, project) - } - setProject(projectID, - tc.Shares(t, "50foo,20bar,30bam"), - tc.Shares(t, "50foo,100baz,40bam"), - ) - setProject(projectIDInvalidGenesisDistribution, - tc.Shares(t, "101foo"), - tc.Shares(t, "50foo"), - ) - setProject(projectIDInvalidClaimableAirdrop, - tc.Shares(t, "50foo"), - tc.Shares(t, "101foo"), - ) - - for _, tc := range []struct { - desc string - request *types.QuerySpecialAllocationsBalanceRequest - response *types.QuerySpecialAllocationsBalanceResponse - errStatusCode codes.Code - }{ - { - desc: "should fetch the balance of special allocations", - request: &types.QuerySpecialAllocationsBalanceRequest{ProjectID: projectID}, - response: &types.QuerySpecialAllocationsBalanceResponse{ - GenesisDistribution: tc.Coins(t, "500foo,200bar"), - ClaimableAirdrop: tc.Coins(t, "500foo,1000baz"), - }, - }, - { - desc: "should fail if project not found", - request: &types.QuerySpecialAllocationsBalanceRequest{ProjectID: 10000}, - errStatusCode: codes.NotFound, - }, - { - desc: "should fail if genesis distribution is invalid", - request: &types.QuerySpecialAllocationsBalanceRequest{ProjectID: projectIDInvalidGenesisDistribution}, - errStatusCode: codes.Internal, - }, - { - desc: "should fail if claimable airdrop is invalid", - request: &types.QuerySpecialAllocationsBalanceRequest{ProjectID: projectIDInvalidClaimableAirdrop}, - errStatusCode: codes.Internal, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.ProjectKeeper.SpecialAllocationsBalance(wctx, tc.request) - if tc.errStatusCode != codes.OK { - require.EqualValues(t, tc.errStatusCode, status.Code(err)) - } else { - require.NoError(t, err) - require.Equal(t, tc.response, response) - } - }) - } -} diff --git a/x/project/keeper/grpc_total_shares.go b/x/project/keeper/grpc_total_shares.go deleted file mode 100644 index 4f41c267..00000000 --- a/x/project/keeper/grpc_total_shares.go +++ /dev/null @@ -1,23 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/project/types" -) - -func (k Keeper) TotalShares(goCtx context.Context, req *types.QueryTotalSharesRequest) (*types.QueryTotalSharesResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - ctx := sdk.UnwrapSDKContext(goCtx) - - shares := k.GetTotalShares(ctx) - - return &types.QueryTotalSharesResponse{TotalShares: shares}, nil -} diff --git a/x/project/keeper/grpc_total_shares_test.go b/x/project/keeper/grpc_total_shares_test.go deleted file mode 100644 index 1e31fb4f..00000000 --- a/x/project/keeper/grpc_total_shares_test.go +++ /dev/null @@ -1,48 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/project/types" -) - -func TestTotalSharesQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - - tk.ProjectKeeper.SetTotalShares(ctx, spntypes.TotalShareNumber) - - for _, tc := range []struct { - desc string - request *types.QueryTotalSharesRequest - response *types.QueryTotalSharesResponse - err error - }{ - { - desc: "should allow valid query", - request: &types.QueryTotalSharesRequest{}, - response: &types.QueryTotalSharesResponse{TotalShares: spntypes.TotalShareNumber}, - }, - { - desc: "should return InvalidRequest", - err: status.Error(codes.InvalidArgument, "invalid request"), - }, - } { - t.Run(tc.desc, func(t *testing.T) { - response, err := tk.ProjectKeeper.TotalShares(wctx, tc.request) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - require.Equal(t, tc.response, response) - } - }) - } -} diff --git a/x/project/keeper/invariants.go b/x/project/keeper/invariants.go index 1e11c8df..391af2fc 100644 --- a/x/project/keeper/invariants.go +++ b/x/project/keeper/invariants.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/x/project/types" ) const ( @@ -36,12 +36,15 @@ func AllInvariants(k Keeper) sdk.Invariant { // the `MainnetAccount` project exist. func AccountWithoutProjectInvariant(k Keeper) sdk.Invariant { return func(ctx sdk.Context) (string, bool) { - all := k.GetAllMainnetAccount(ctx) + all, err := k.GetAllMainnetAccount(ctx) + if err != nil { + return "", false + } for _, acc := range all { - if _, found := k.GetProject(ctx, acc.ProjectID); !found { + if _, err := k.GetProject(ctx, acc.ProjectID); err != nil { return sdk.FormatInvariant( types.ModuleName, accountWithoutProjectRoute, - fmt.Sprintf("%s: %d", types.ErrProjectNotFound, acc.ProjectID), + fmt.Sprintf("%s: %d", err, acc.ProjectID), ), true } } @@ -58,7 +61,10 @@ func ProjectSharesInvariant(k Keeper) sdk.Invariant { accountSharesByProject := make(map[uint64]types.Shares) // get all mainnet account shares - accounts := k.GetAllMainnetAccount(ctx) + accounts, err := k.GetAllMainnetAccount(ctx) + if err != nil { + return "", false + } for _, acc := range accounts { if _, ok := accountSharesByProject[acc.ProjectID]; !ok { accountSharesByProject[acc.ProjectID] = types.EmptyShares() @@ -69,7 +75,11 @@ func ProjectSharesInvariant(k Keeper) sdk.Invariant { ) } - for _, project := range k.GetAllProject(ctx) { + projects, err := k.Projects(ctx) + if err != nil { + return "", false + } + for _, project := range projects { projectID := project.ProjectID expectedAllocatedSharesShares := accountSharesByProject[projectID] diff --git a/x/project/keeper/invariants_test.go b/x/project/keeper/invariants_test.go index b3f32fb2..381b6807 100644 --- a/x/project/keeper/invariants_test.go +++ b/x/project/keeper/invariants_test.go @@ -4,28 +4,39 @@ import ( "fmt" "testing" + "cosmossdk.io/collections" "github.com/stretchr/testify/require" - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" + tc "github.com/ignite/network/testutil/constructor" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" ) func TestAccountWithoutProjectInvariant(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) t.Run("should allow valid case", func(t *testing.T) { + var err error project := sample.Project(r, 0) - project.ProjectID = tk.ProjectKeeper.AppendProject(ctx, project) - tk.ProjectKeeper.SetMainnetAccount(ctx, sample.MainnetAccount(r, project.ProjectID, sample.Address(r))) - msg, broken := keeper.AccountWithoutProjectInvariant(*tk.ProjectKeeper)(ctx) + project.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) + + addr := sample.AccAddress(r) + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(project.ProjectID, addr), sample.MainnetAccount(r, project.ProjectID, addr.String())) + require.NoError(t, err) + + msg, broken := keeper.AccountWithoutProjectInvariant(tk.ProjectKeeper)(ctx) require.False(t, broken, msg) }) t.Run("should prevent invalid case", func(t *testing.T) { - tk.ProjectKeeper.SetMainnetAccount(ctx, sample.MainnetAccount(r, 100, sample.Address(r))) - msg, broken := keeper.AccountWithoutProjectInvariant(*tk.ProjectKeeper)(ctx) + addr := sample.AccAddress(r) + projectID := uint64(100) + err := tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(projectID, addr), sample.MainnetAccount(r, projectID, addr.String())) + require.NoError(t, err) + + msg, broken := keeper.AccountWithoutProjectInvariant(tk.ProjectKeeper)(ctx) require.True(t, broken, msg) }) } @@ -40,14 +51,16 @@ func TestProjectSharesInvariant(t *testing.T) { project.AllocatedShares, tc.Shares(t, "100foo,200bar"), ) - tk.ProjectKeeper.SetProject(ctx, project) + err := tk.ProjectKeeper.Project.Set(ctx, projectID1, project) + require.NoError(t, err) project = sample.Project(r, projectID2) project.AllocatedShares = types.IncreaseShares( project.AllocatedShares, tc.Shares(t, "10000foo"), ) - tk.ProjectKeeper.SetProject(ctx, project) + err = tk.ProjectKeeper.Project.Set(ctx, projectID2, project) + require.NoError(t, err) // mint vouchers voucherFoo, voucherBar := types.VoucherDenom(projectID1, "foo"), types.VoucherDenom(projectID1, "bar") @@ -58,31 +71,41 @@ func TestProjectSharesInvariant(t *testing.T) { tk.Mint(ctx, sample.Address(r), tc.Coins(t, fmt.Sprintf("5000%s", voucherFoo))) // add accounts with shares - tk.ProjectKeeper.SetMainnetAccount(ctx, types.MainnetAccount{ + addr1 := sample.AccAddress(r) + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(projectID1, addr1), types.MainnetAccount{ ProjectID: projectID1, - Address: sample.Address(r), + Address: addr1.String(), Shares: tc.Shares(t, "20foo,40bar"), }) - tk.ProjectKeeper.SetMainnetAccount(ctx, types.MainnetAccount{ + require.NoError(t, err) + + addr2 := sample.AccAddress(r) + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(projectID1, addr2), types.MainnetAccount{ ProjectID: projectID1, - Address: sample.Address(r), + Address: addr2.String(), Shares: tc.Shares(t, "30foo,60bar"), }) - tk.ProjectKeeper.SetMainnetAccount(ctx, types.MainnetAccount{ + require.NoError(t, err) + + addr3 := sample.AccAddress(r) + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(projectID2, addr3), types.MainnetAccount{ ProjectID: projectID2, - Address: sample.Address(r), + Address: addr3.String(), Shares: tc.Shares(t, "5000foo"), }) + require.NoError(t, err) - msg, broken := keeper.ProjectSharesInvariant(*tk.ProjectKeeper)(ctx) + msg, broken := keeper.ProjectSharesInvariant(tk.ProjectKeeper)(ctx) require.False(t, broken, msg) }) t.Run("should allow project with empty allocated share is valid", func(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) - tk.ProjectKeeper.SetProject(ctx, sample.Project(r, 3)) + projectID := uint64(3) + err := tk.ProjectKeeper.Project.Set(ctx, projectID, sample.Project(r, projectID)) + require.NoError(t, err) - msg, broken := keeper.ProjectSharesInvariant(*tk.ProjectKeeper)(ctx) + msg, broken := keeper.ProjectSharesInvariant(tk.ProjectKeeper)(ctx) require.False(t, broken, msg) }) @@ -99,9 +122,10 @@ func TestProjectSharesInvariant(t *testing.T) { project.AllocatedShares, shares, ) - tk.ProjectKeeper.SetProject(ctx, project) + err := tk.ProjectKeeper.Project.Set(ctx, projectID, project) + require.NoError(t, err) - msg, broken := keeper.ProjectSharesInvariant(*tk.ProjectKeeper)(ctx) + msg, broken := keeper.ProjectSharesInvariant(tk.ProjectKeeper)(ctx) require.True(t, broken, msg) }) @@ -113,13 +137,14 @@ func TestProjectSharesInvariant(t *testing.T) { project.AllocatedShares, tc.Shares(t, "100foo,200bar"), ) - tk.ProjectKeeper.SetProject(ctx, project) + err := tk.ProjectKeeper.Project.Set(ctx, projectID, project) + require.NoError(t, err) // mint vouchers voucherFoo, voucherBar := types.VoucherDenom(projectID, "foo"), types.VoucherDenom(projectID, "bar") tk.Mint(ctx, sample.Address(r), tc.Coins(t, fmt.Sprintf("99%s,200%s", voucherFoo, voucherBar))) - msg, broken := keeper.ProjectSharesInvariant(*tk.ProjectKeeper)(ctx) + msg, broken := keeper.ProjectSharesInvariant(tk.ProjectKeeper)(ctx) require.True(t, broken, msg) }) @@ -130,9 +155,10 @@ func TestProjectSharesInvariant(t *testing.T) { project.SpecialAllocations.GenesisDistribution, sample.Shares(r), ) - tk.ProjectKeeper.SetProject(ctx, project) + err := tk.ProjectKeeper.Project.Set(ctx, project.ProjectID, project) + require.NoError(t, err) - msg, broken := keeper.ProjectSharesInvariant(*tk.ProjectKeeper)(ctx) + msg, broken := keeper.ProjectSharesInvariant(tk.ProjectKeeper)(ctx) require.True(t, broken, msg) }) } diff --git a/x/project/keeper/keeper.go b/x/project/keeper/keeper.go index 87976484..af0c89c6 100644 --- a/x/project/keeper/keeper.go +++ b/x/project/keeper/keeper.go @@ -1,23 +1,24 @@ package keeper import ( + "context" "fmt" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + "cosmossdk.io/core/store" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - launchtypes "github.com/tendermint/spn/x/launch/types" - "github.com/tendermint/spn/x/project/types" + launchtypes "github.com/ignite/network/x/launch/types" + "github.com/ignite/network/x/project/types" ) type LaunchKeeper interface { - GetChain(ctx sdk.Context, launchID uint64) (val launchtypes.Chain, found bool) + GetChain(ctx context.Context, launchID uint64) (launchtypes.Chain, error) CreateNewChain( - ctx sdk.Context, + ctx context.Context, coordinatorID uint64, genesisChainID, sourceURL, @@ -33,44 +34,87 @@ type LaunchKeeper interface { type ( Keeper struct { - cdc codec.BinaryCodec - storeKey storetypes.StoreKey - memKey storetypes.StoreKey - launchKeeper LaunchKeeper - bankKeeper types.BankKeeper - distrKeeper types.DistributionKeeper - profileKeeper types.ProfileKeeper - paramSpace paramtypes.Subspace + cdc codec.BinaryCodec + addressCodec address.Codec + storeService store.KVStoreService + logger log.Logger + + // the address capable of executing a MsgUpdateParams message. + // Typically, this should be the x/gov module account. + authority string + + Schema collections.Schema + Params collections.Item[types.Params] + MainnetAccount collections.Map[collections.Pair[uint64, sdk.AccAddress], types.MainnetAccount] + ProjectSeq collections.Sequence + Project collections.Map[uint64, types.Project] + ProjectChains collections.Map[uint64, types.ProjectChains] + TotalShares collections.Item[uint64] + // this line is used by starport scaffolding # collection/type + + distributionKeeper types.DistributionKeeper + profileKeeper types.ProfileKeeper + bankKeeper types.BankKeeper + launchKeeper LaunchKeeper } ) func NewKeeper( cdc codec.BinaryCodec, - storeKey, - memKey storetypes.StoreKey, - paramSpace paramtypes.Subspace, - launchKeeper LaunchKeeper, - bankKeeper types.BankKeeper, - distrKeeper types.DistributionKeeper, + addressCodec address.Codec, + storeService store.KVStoreService, + logger log.Logger, + authority string, + distributionKeeper types.DistributionKeeper, profileKeeper types.ProfileKeeper, -) *Keeper { - // set KeyTable if it has not already been set - if !paramSpace.HasKeyTable() { - paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) + bankKeeper types.BankKeeper, + launchKeeper LaunchKeeper, +) Keeper { + if _, err := addressCodec.StringToBytes(authority); err != nil { + panic(fmt.Sprintf("invalid authority address %s: %s", authority, err)) } - return &Keeper{ - cdc: cdc, - storeKey: storeKey, - memKey: memKey, - paramSpace: paramSpace, - launchKeeper: launchKeeper, - bankKeeper: bankKeeper, - distrKeeper: distrKeeper, - profileKeeper: profileKeeper, + sb := collections.NewSchemaBuilder(storeService) + + k := Keeper{ + cdc: cdc, + addressCodec: addressCodec, + storeService: storeService, + authority: authority, + logger: logger, + distributionKeeper: distributionKeeper, + profileKeeper: profileKeeper, + bankKeeper: bankKeeper, + launchKeeper: launchKeeper, + Params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + MainnetAccount: collections.NewMap(sb, types.MainnetAccountKey, "mainnetAccount", collections.PairKeyCodec(collections.Uint64Key, sdk.LengthPrefixedAddressKey(sdk.AccAddressKey)), codec.CollValue[types.MainnetAccount](cdc)), + ProjectSeq: collections.NewSequence(sb, types.ProjectCountKey, "project_seq"), + Project: collections.NewMap(sb, types.ProjectKey, "project", collections.Uint64Key, codec.CollValue[types.Project](cdc)), + ProjectChains: collections.NewMap(sb, types.ProjectChainsKey, "projectChains", collections.Uint64Key, codec.CollValue[types.ProjectChains](cdc)), + TotalShares: collections.NewItem(sb, types.TotalSharesKey, "totalShares", collections.Uint64Value), + // this line is used by starport scaffolding # collection/instantiate + } + + schema, err := sb.Build() + if err != nil { + panic(err) } + k.Schema = schema + + return k +} + +// GetAuthority returns the module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger() log.Logger { + return k.logger.With("module", fmt.Sprintf("x/%s", types.ModuleName)) } -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +// AddressCodec returns the address codec. +func (k Keeper) AddressCodec() address.Codec { + return k.addressCodec } diff --git a/x/project/keeper/mainnet_account.go b/x/project/keeper/mainnet_account.go index 896d7b62..7d622e36 100644 --- a/x/project/keeper/mainnet_account.go +++ b/x/project/keeper/mainnet_account.go @@ -1,64 +1,93 @@ package keeper import ( - "github.com/cosmos/cosmos-sdk/store/prefix" + "context" + + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pkg/errors" - "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/x/project/types" ) -// SetMainnetAccount set a specific mainnetAccount in the store from its index -func (k Keeper) SetMainnetAccount(ctx sdk.Context, mainnetAccount types.MainnetAccount) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MainnetAccountKeyPrefix)) - b := k.cdc.MustMarshal(&mainnetAccount) - store.Set(types.AccountKeyPath( - mainnetAccount.ProjectID, - mainnetAccount.Address, - ), b) +func (k Keeper) GetMainnetAccount(ctx context.Context, projectID uint64, address sdk.AccAddress) (types.MainnetAccount, error) { + acc, err := k.MainnetAccount.Get(ctx, collections.Join(projectID, address)) + if errors.Is(err, collections.ErrNotFound) { + return types.MainnetAccount{}, types.ErrMainnetAccountNotFound + } + return acc, err } -// GetMainnetAccount returns a mainnetAccount from its index -func (k Keeper) GetMainnetAccount( - ctx sdk.Context, - projectID uint64, - address string, -) (val types.MainnetAccount, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MainnetAccountKeyPrefix)) +// GetAllMainnetAccount returns all MainnetAccount +func (k Keeper) GetAllMainnetAccount(ctx context.Context) ([]types.MainnetAccount, error) { + accs := make([]types.MainnetAccount, 0) + err := k.MainnetAccount.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], value types.MainnetAccount) (bool, error) { + accs = append(accs, value) + return false, nil + }) + return accs, err +} - b := store.Get(types.AccountKeyPath(projectID, address)) - if b == nil { - return val, false +func (k Keeper) MainnetAccountBalance(ctx context.Context, projectID uint64, address sdk.AccAddress) (types.MainnetAccountBalance, error) { + // get project and share information + totalShareNumber, err := k.TotalShares.Get(ctx) + if err != nil { + return types.MainnetAccountBalance{}, err } - k.cdc.MustUnmarshal(b, &val) - return val, true -} + project, err := k.GetProject(ctx, projectID) + if err != nil { + return types.MainnetAccountBalance{}, err + } -// RemoveMainnetAccount removes a mainnetAccount from the store -func (k Keeper) RemoveMainnetAccount( - ctx sdk.Context, - projectID uint64, - address string, -) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MainnetAccountKeyPrefix)) - store.Delete(types.AccountKeyPath( - projectID, - address, - )) -} + // get account balance + acc, err := k.MainnetAccount.Get(ctx, collections.Join(projectID, address)) + if err != nil { + return types.MainnetAccountBalance{}, err + } -// GetAllMainnetAccount returns all mainnetAccount -func (k Keeper) GetAllMainnetAccount(ctx sdk.Context) (list []types.MainnetAccount) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.MainnetAccountKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) + balance, err := acc.Shares.CoinsFromTotalSupply(project.TotalSupply, totalShareNumber) + if err != nil { + return types.MainnetAccountBalance{}, err + } + + return types.MainnetAccountBalance{ + ProjectID: acc.ProjectID, + Address: acc.Address, + Coins: balance, + }, nil +} - defer iterator.Close() +func (k Keeper) ListMainnetAccountBalance(ctx context.Context, projectID uint64) ([]types.MainnetAccountBalance, error) { + // get project and share information + totalShareNumber, err := k.TotalShares.Get(ctx) + if err != nil { + return nil, err + } - for ; iterator.Valid(); iterator.Next() { - var val types.MainnetAccount - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) + project, err := k.GetProject(ctx, projectID) + if err != nil { + return nil, err } - return + mainnetAccountBalances := make([]types.MainnetAccountBalance, 0) + err = k.MainnetAccount.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], acc types.MainnetAccount) (stop bool, err error) { + balance, err := acc.Shares.CoinsFromTotalSupply(project.TotalSupply, totalShareNumber) + if err != nil { + return true, err + } + + // add the balance if not zero + if !balance.IsZero() { + mainnetAccountBalance := types.MainnetAccountBalance{ + ProjectID: acc.ProjectID, + Address: acc.Address, + Coins: balance, + } + mainnetAccountBalances = append(mainnetAccountBalances, mainnetAccountBalance) + } + + return false, nil + }) + return mainnetAccountBalances, err } diff --git a/x/project/keeper/mainnet_account_test.go b/x/project/keeper/mainnet_account_test.go deleted file mode 100644 index ad1e2caf..00000000 --- a/x/project/keeper/mainnet_account_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" -) - -func createNMainnetAccount(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.MainnetAccount { - items := make([]types.MainnetAccount, n) - for i := range items { - items[i].ProjectID = uint64(i) - items[i].Address = sample.Address(r) - keeper.SetMainnetAccount(ctx, items[i]) - } - return items -} - -func TestMainnetAccountGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should get accounts", func(t *testing.T) { - items := createNMainnetAccount(tk.ProjectKeeper, ctx, 10) - for _, item := range items { - rst, found := tk.ProjectKeeper.GetMainnetAccount(ctx, - item.ProjectID, - item.Address, - ) - require.True(t, found) - require.Equal(t, item, rst) - } - }) -} - -func TestMainnetAccountRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should remove accounts", func(t *testing.T) { - items := createNMainnetAccount(tk.ProjectKeeper, ctx, 10) - for _, item := range items { - tk.ProjectKeeper.RemoveMainnetAccount(ctx, - item.ProjectID, - item.Address, - ) - _, found := tk.ProjectKeeper.GetMainnetAccount(ctx, - item.ProjectID, - item.Address, - ) - require.False(t, found) - } - }) -} - -func TestMainnetAccountGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should get all accounts", func(t *testing.T) { - items := createNMainnetAccount(tk.ProjectKeeper, ctx, 10) - require.ElementsMatch(t, items, tk.ProjectKeeper.GetAllMainnetAccount(ctx)) - }) -} diff --git a/x/project/keeper/msg_create_project.go b/x/project/keeper/msg_create_project.go deleted file mode 100644 index eb3504f5..00000000 --- a/x/project/keeper/msg_create_project.go +++ /dev/null @@ -1,80 +0,0 @@ -package keeper - -import ( - "context" - "errors" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - ignterrors "github.com/ignite/modules/pkg/errors" - - "github.com/tendermint/spn/x/project/types" -) - -func (k msgServer) CreateProject(goCtx context.Context, msg *types.MsgCreateProject) (*types.MsgCreateProjectResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - // check if the metadata length is valid - maxMetadataLength := k.MaxMetadataLength(ctx) - if uint64(len(msg.Metadata)) > maxMetadataLength { - return nil, sdkerrors.Wrapf(types.ErrInvalidMetadataLength, - "metadata length %d is greater than maximum %d", - len(msg.Metadata), - maxMetadataLength, - ) - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - // Validate provided totalSupply - totalSupplyRange := k.TotalSupplyRange(ctx) - if err := types.ValidateTotalSupply(msg.TotalSupply, totalSupplyRange); err != nil { - if errors.Is(err, types.ErrInvalidSupplyRange) { - return nil, ignterrors.Critical(err.Error()) - } - - return nil, sdkerrors.Wrap(types.ErrInvalidTotalSupply, err.Error()) - } - - // Deduct project creation fee if set - creationFee := k.ProjectCreationFee(ctx) - if !creationFee.Empty() { - coordAddr, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return nil, ignterrors.Criticalf("invalid coordinator bech32 address %s", err.Error()) - } - if err = k.distrKeeper.FundCommunityPool(ctx, creationFee, coordAddr); err != nil { - return nil, sdkerrors.Wrap(types.ErrFundCommunityPool, err.Error()) - } - } - - // Append the new project - project := types.NewProject( - 0, - msg.ProjectName, - coordID, - msg.TotalSupply, - msg.Metadata, - ctx.BlockTime().Unix(), - ) - projectID := k.AppendProject(ctx, project) - - // Initialize the list of project chains - k.SetProjectChains(ctx, types.ProjectChains{ - ProjectID: projectID, - Chains: []uint64{}, - }) - - err = ctx.EventManager().EmitTypedEvent(&types.EventProjectCreated{ - ProjectID: projectID, - CoordinatorAddress: msg.Coordinator, - CoordinatorID: coordID, - }) - - return &types.MsgCreateProjectResponse{ProjectID: projectID}, err -} diff --git a/x/project/keeper/msg_edit_project.go b/x/project/keeper/msg_edit_project.go deleted file mode 100644 index 1e030565..00000000 --- a/x/project/keeper/msg_edit_project.go +++ /dev/null @@ -1,63 +0,0 @@ -package keeper - -import ( - "context" - "fmt" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func (k msgServer) EditProject(goCtx context.Context, msg *types.MsgEditProject) (*types.MsgEditProjectResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - // check if the metadata length is valid - maxMetadataLength := k.MaxMetadataLength(ctx) - if uint64(len(msg.Metadata)) > maxMetadataLength { - return nil, sdkerrors.Wrapf(types.ErrInvalidMetadataLength, - "metadata length %d is greater than maximum %d", - len(msg.Metadata), - maxMetadataLength, - ) - } - - project, found := k.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrProjectNotFound, "%d", msg.ProjectID) - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - if project.CoordinatorID != coordID { - return nil, sdkerrors.Wrap(profiletypes.ErrCoordInvalid, fmt.Sprintf( - "coordinator of the project is %d", - project.CoordinatorID, - )) - } - - if len(msg.Name) > 0 { - project.ProjectName = msg.Name - } - - if len(msg.Metadata) > 0 { - project.Metadata = msg.Metadata - } - - k.SetProject(ctx, project) - - err = ctx.EventManager().EmitTypedEvent(&types.EventProjectInfoUpdated{ - ProjectID: project.ProjectID, - CoordinatorAddress: msg.Coordinator, - ProjectName: project.ProjectName, - Metadata: project.Metadata, - }) - - return &types.MsgEditProjectResponse{}, err -} diff --git a/x/project/keeper/msg_initialize_mainnet.go b/x/project/keeper/msg_initialize_mainnet.go deleted file mode 100644 index 78cbddc3..00000000 --- a/x/project/keeper/msg_initialize_mainnet.go +++ /dev/null @@ -1,82 +0,0 @@ -package keeper - -import ( - "context" - "fmt" - - sdkerrors "cosmossdk.io/errors" - - sdk "github.com/cosmos/cosmos-sdk/types" - - ignterrors "github.com/ignite/modules/pkg/errors" - - launchtypes "github.com/tendermint/spn/x/launch/types" - - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func (k msgServer) InitializeMainnet(goCtx context.Context, msg *types.MsgInitializeMainnet) (*types.MsgInitializeMainnetResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - project, found := k.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrProjectNotFound, "%d", msg.ProjectID) - } - - if project.MainnetInitialized { - return nil, sdkerrors.Wrapf(types.ErrMainnetInitialized, "%d", msg.ProjectID) - } - - if project.TotalSupply.Empty() { - return nil, sdkerrors.Wrap(types.ErrInvalidTotalSupply, "total supply is empty") - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - if project.CoordinatorID != coordID { - return nil, sdkerrors.Wrap(profiletypes.ErrCoordInvalid, fmt.Sprintf( - "coordinator of the project is %d", - project.CoordinatorID, - )) - } - - initialGenesis := launchtypes.NewDefaultInitialGenesis() - - // Create the mainnet chain for launch - mainnetID, err := k.launchKeeper.CreateNewChain( - ctx, - coordID, - msg.MainnetChainID, - msg.SourceURL, - msg.SourceHash, - initialGenesis, - true, - msg.ProjectID, - true, - sdk.NewCoins(), // no enforced default for mainnet - []byte{}, - ) - if err != nil { - return nil, ignterrors.Criticalf("cannot create the mainnet: %s", err.Error()) - } - - // Set mainnet as initialized and save the change - project.MainnetID = mainnetID - project.MainnetInitialized = true - k.SetProject(ctx, project) - - err = ctx.EventManager().EmitTypedEvent(&types.EventProjectMainnetInitialized{ - ProjectID: project.ProjectID, - CoordinatorAddress: msg.Coordinator, - MainnetID: project.MainnetID, - }) - - return &types.MsgInitializeMainnetResponse{ - MainnetID: mainnetID, - }, err -} diff --git a/x/project/keeper/msg.go b/x/project/keeper/msg_server.go similarity index 86% rename from x/project/keeper/msg.go rename to x/project/keeper/msg_server.go index d0ad6184..9e3d191f 100644 --- a/x/project/keeper/msg.go +++ b/x/project/keeper/msg_server.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/x/project/types" ) type msgServer struct { diff --git a/x/project/keeper/msg_burn_vouchers.go b/x/project/keeper/msg_server_burn_vouchers.go similarity index 56% rename from x/project/keeper/msg_burn_vouchers.go rename to x/project/keeper/msg_server_burn_vouchers.go index f61d0dae..983868e9 100644 --- a/x/project/keeper/msg_burn_vouchers.go +++ b/x/project/keeper/msg_server_burn_vouchers.go @@ -6,17 +6,23 @@ import ( sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - ignterrors "github.com/ignite/modules/pkg/errors" - - "github.com/tendermint/spn/x/project/types" + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/project/types" ) -func (k msgServer) BurnVouchers(goCtx context.Context, msg *types.MsgBurnVouchers) (*types.MsgBurnVouchersResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) BurnVouchers(ctx context.Context, msg *types.MsgBurnVouchers) (*types.MsgBurnVouchersResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + sender, err := k.addressCodec.StringToBytes(msg.Sender) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } - project, found := k.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrProjectNotFound, "%d", msg.ProjectID) + project, err := k.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) } // Convert and validate vouchers first @@ -26,10 +32,6 @@ func (k msgServer) BurnVouchers(goCtx context.Context, msg *types.MsgBurnVoucher } // Send coins and burn them - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return nil, ignterrors.Criticalf("can't parse sender address %s", err.Error()) - } if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, sender, types.ModuleName, msg.Vouchers); err != nil { return nil, sdkerrors.Wrapf(types.ErrInsufficientVouchers, "%s", err.Error()) } @@ -42,12 +44,12 @@ func (k msgServer) BurnVouchers(goCtx context.Context, msg *types.MsgBurnVoucher if err != nil { return nil, ignterrors.Criticalf("invalid allocated share amount %s", err.Error()) } - k.SetProject(ctx, project) + if err := k.Project.Set(ctx, project.ProjectID, project); err != nil { + return nil, ignterrors.Criticalf("can't set project %s", err.Error()) + } - err = ctx.EventManager().EmitTypedEvent(&types.EventProjectSharesUpdated{ + return &types.MsgBurnVouchersResponse{}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&types.EventProjectSharesUpdated{ ProjectID: project.ProjectID, AllocatedShares: project.AllocatedShares, }) - - return &types.MsgBurnVouchersResponse{}, err } diff --git a/x/project/keeper/msg_burn_vouchers_test.go b/x/project/keeper/msg_server_burn_vouchers_test.go similarity index 80% rename from x/project/keeper/msg_burn_vouchers_test.go rename to x/project/keeper/msg_server_burn_vouchers_test.go index 14cee1d1..2d347fd2 100644 --- a/x/project/keeper/msg_burn_vouchers_test.go +++ b/x/project/keeper/msg_server_burn_vouchers_test.go @@ -7,19 +7,17 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - ignterrors "github.com/ignite/modules/pkg/errors" - - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" + ignterrors "github.com/ignite/network/pkg/errors" + spntypes "github.com/ignite/network/pkg/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/types" ) func TestMsgBurnVouchers(t *testing.T) { var ( - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) + ctx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) project = sample.Project(r, 0) addr = sample.AccAddress(r) shares types.Shares @@ -37,7 +35,8 @@ func TestMsgBurnVouchers(t *testing.T) { // Set project project.AllocatedShares = shares - project.ProjectID = tk.ProjectKeeper.AppendProject(sdkCtx, project) + project.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) // Create vouchers t.Run("should allow create valid vouchers", func(t *testing.T) { @@ -46,9 +45,9 @@ func TestMsgBurnVouchers(t *testing.T) { }) t.Run("should allow setting initial balances", func(t *testing.T) { - err = tk.BankKeeper.MintCoins(sdkCtx, types.ModuleName, vouchers) + err = tk.BankKeeper.MintCoins(ctx, types.ModuleName, vouchers) require.NoError(t, err) - err = tk.BankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, addr, vouchers) + err = tk.BankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, addr, vouchers) require.NoError(t, err) }) @@ -146,13 +145,12 @@ func TestMsgBurnVouchers(t *testing.T) { // Get values before message execution if tc.err == nil { - var found bool - previousProject, found = tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + previousProject, err = tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + require.NoError(t, err) creatorAddr, err = sdk.AccAddressFromBech32(tc.msg.Sender) require.NoError(t, err) - previousBalance = tk.BankKeeper.GetAllBalances(sdkCtx, creatorAddr) + previousBalance = tk.BankKeeper.GetAllBalances(ctx, creatorAddr) } // Execute message @@ -163,8 +161,8 @@ func TestMsgBurnVouchers(t *testing.T) { } require.NoError(t, err) - project, found := tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + project, err := tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + require.NoError(t, err) // Allocated shares of the project must be decreased burned, err := types.VouchersToShares(tc.msg.Vouchers, tc.msg.ProjectID) @@ -175,9 +173,9 @@ func TestMsgBurnVouchers(t *testing.T) { require.True(t, types.IsEqualShares(expectedShares, project.AllocatedShares)) // Check coordinator balance - balance := tk.BankKeeper.GetAllBalances(sdkCtx, creatorAddr) + balance := tk.BankKeeper.GetAllBalances(ctx, creatorAddr) expectedBalance := previousBalance.Sub(tc.msg.Vouchers...) - require.True(t, balance.IsEqual(expectedBalance)) + require.True(t, balance.Equal(expectedBalance)) }) } } diff --git a/x/project/keeper/msg_server_create_project.go b/x/project/keeper/msg_server_create_project.go new file mode 100644 index 00000000..02c43caf --- /dev/null +++ b/x/project/keeper/msg_server_create_project.go @@ -0,0 +1,90 @@ +package keeper + +import ( + "context" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pkg/errors" + + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/project/types" +) + +func (k msgServer) CreateProject(ctx context.Context, msg *types.MsgCreateProject) (*types.MsgCreateProjectResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get project params") + } + + // check if the metadata length is valid + if uint64(len(msg.Metadata)) > params.MaxMetadataLength { + return nil, sdkerrors.Wrapf(types.ErrInvalidMetadataLength, + "metadata length %d is greater than maximum %d", + len(msg.Metadata), + params.MaxMetadataLength, + ) + } + + // Get the coordinator ID associated to the sender address + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + // Validate provided totalSupply + if err := types.ValidateTotalSupply(msg.TotalSupply, params.TotalSupplyRange); err != nil { + if errors.Is(err, types.ErrInvalidSupplyRange) { + return nil, ignterrors.Critical(err.Error()) + } + + return nil, sdkerrors.Wrap(types.ErrInvalidTotalSupply, err.Error()) + } + + // Deduct project creation fee if set + creationFee := params.ProjectCreationFee + if !creationFee.Empty() { + if err = k.distributionKeeper.FundCommunityPool(ctx, creationFee, coordinatorAddress); err != nil { + return nil, sdkerrors.Wrap(types.ErrFundCommunityPool, err.Error()) + } + } + + // Append the new project + sdkCtx := sdk.UnwrapSDKContext(ctx) + project := types.NewProject( + 0, + msg.ProjectName, + coordinatorID, + msg.TotalSupply, + msg.Metadata, + sdkCtx.BlockTime().Unix(), + ) + + projectID, err := k.AppendProject(ctx, project) + if err != nil { + return nil, err + } + + // Initialize the list of project chains + if err := k.ProjectChains.Set(ctx, projectID, types.ProjectChains{ + ProjectID: projectID, + Chains: []uint64{}, + }); err != nil { + return nil, ignterrors.Criticalf("project chains not set %s", err.Error()) + } + + return &types.MsgCreateProjectResponse{ProjectID: projectID}, sdkCtx.EventManager().EmitTypedEvent(&types.EventProjectCreated{ + ProjectID: projectID, + CoordinatorAddress: msg.Coordinator, + CoordinatorID: coordinatorID, + }) +} diff --git a/x/project/keeper/msg_create_project_test.go b/x/project/keeper/msg_server_create_project_test.go similarity index 72% rename from x/project/keeper/msg_create_project_test.go rename to x/project/keeper/msg_server_create_project_test.go index 0a025158..54a6e2a2 100644 --- a/x/project/keeper/msg_create_project_test.go +++ b/x/project/keeper/msg_server_create_project_test.go @@ -7,26 +7,28 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" ) func initCreationFeeAndFundCoordAccounts( t *testing.T, - keeper *keeper.Keeper, + keeper keeper.Keeper, bk bankkeeper.Keeper, - sdkCtx sdk.Context, + ctx sdk.Context, fee sdk.Coins, numCreations int64, addrs ...string, ) { // set fee param to `coins` - params := keeper.GetParams(sdkCtx) + params, err := keeper.Params.Get(ctx) + require.NoError(t, err) params.ProjectCreationFee = fee - keeper.SetParams(sdkCtx, params) + err = keeper.Params.Set(ctx, params) + require.NoError(t, err) coins := sdk.NewCoins() for _, coin := range fee { @@ -38,9 +40,9 @@ func initCreationFeeAndFundCoordAccounts( for _, addr := range addrs { accAddr, err := sdk.AccAddressFromBech32(addr) require.NoError(t, err) - err = bk.MintCoins(sdkCtx, types.ModuleName, coins) + err = bk.MintCoins(ctx, types.ModuleName, coins) require.NoError(t, err) - err = bk.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, accAddr, coins) + err = bk.SendCoinsFromModuleToAccount(ctx, types.ModuleName, accAddr, coins) require.NoError(t, err) } }) @@ -49,24 +51,26 @@ func initCreationFeeAndFundCoordAccounts( func TestMsgCreateProject(t *testing.T) { var ( coordAddrs = make([]string, 3) - coordMap = make(map[string]uint64) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + coordinatorMap = make(map[string]uint64) + ctx, tk, ts = testkeeper.NewTestSetup(t) projectCreationFee = sample.Coins(r) - maxMetadataLength = tk.ProjectKeeper.MaxMetadataLength(sdkCtx) ) + params, err := tk.ProjectKeeper.Params.Get(ctx) + require.NoError(t, err) + maxMetadataLength := params.MaxMetadataLength + t.Run("should allow creation of coordinators", func(t *testing.T) { for i := range coordAddrs { addr := sample.Address(r) coordAddrs[i] = addr - coordMap[addr], _ = ts.CreateCoordinatorWithAddr(ctx, r, addr) + coordinatorMap[addr], _ = ts.CreateCoordinatorWithAddr(ctx, r, addr) } }) // assign random sdk.Coins to `projectCreationFee` param and provide balance to coordinators // coordAddrs[2] is not funded - initCreationFeeAndFundCoordAccounts(t, tk.ProjectKeeper, tk.BankKeeper, sdkCtx, projectCreationFee, 1, coordAddrs[:2]...) + initCreationFeeAndFundCoordAccounts(t, tk.ProjectKeeper, tk.BankKeeper, ctx, projectCreationFee, 1, coordAddrs[:2]...) for _, tc := range []struct { name string @@ -102,7 +106,7 @@ func TestMsgCreateProject(t *testing.T) { TotalSupply: sample.TotalSupply(r), Metadata: sample.Metadata(r, 20), }, - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should allow create a project with an invalid token supply", @@ -139,7 +143,7 @@ func TestMsgCreateProject(t *testing.T) { // get account initial balance accAddr, err := sdk.AccAddressFromBech32(tc.msg.Coordinator) require.NoError(t, err) - preBalance := tk.BankKeeper.SpendableCoins(sdkCtx, accAddr) + preBalance := tk.BankKeeper.SpendableCoins(ctx, accAddr) got, err := ts.ProjectSrv.CreateProject(ctx, &tc.msg) if tc.err != nil { @@ -148,24 +152,24 @@ func TestMsgCreateProject(t *testing.T) { } require.NoError(t, err) require.Equal(t, tc.expectedID, got.ProjectID) - project, found := tk.ProjectKeeper.GetProject(sdkCtx, got.ProjectID) - require.True(t, found) + project, err := tk.ProjectKeeper.GetProject(ctx, got.ProjectID) + require.NoError(t, err) require.EqualValues(t, got.ProjectID, project.ProjectID) require.EqualValues(t, tc.msg.ProjectName, project.ProjectName) - require.EqualValues(t, coordMap[tc.msg.Coordinator], project.CoordinatorID) + require.EqualValues(t, coordinatorMap[tc.msg.Coordinator], project.CoordinatorID) require.False(t, project.MainnetInitialized) - require.True(t, tc.msg.TotalSupply.IsEqual(project.TotalSupply)) + require.True(t, tc.msg.TotalSupply.Equal(project.TotalSupply)) require.EqualValues(t, types.Shares(nil), project.AllocatedShares) // Empty list of project chains - projectChains, found := tk.ProjectKeeper.GetProjectChains(sdkCtx, got.ProjectID) - require.True(t, found) + projectChains, err := tk.ProjectKeeper.GetProjectChains(ctx, got.ProjectID) + require.NoError(t, err) require.EqualValues(t, got.ProjectID, projectChains.ProjectID) require.Empty(t, projectChains.Chains) // check fee deduction - postBalance := tk.BankKeeper.SpendableCoins(sdkCtx, accAddr) - require.True(t, preBalance.Sub(projectCreationFee...).IsEqual(postBalance)) + postBalance := tk.BankKeeper.SpendableCoins(ctx, accAddr) + require.True(t, preBalance.Sub(projectCreationFee...).Equal(postBalance)) }) } } diff --git a/x/project/keeper/msg_server_edit_project.go b/x/project/keeper/msg_server_edit_project.go new file mode 100644 index 00000000..496e2422 --- /dev/null +++ b/x/project/keeper/msg_server_edit_project.go @@ -0,0 +1,75 @@ +package keeper + +import ( + "context" + "fmt" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + ignterrors "github.com/ignite/network/pkg/errors" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" +) + +func (k msgServer) EditProject(ctx context.Context, msg *types.MsgEditProject) (*types.MsgEditProjectResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get project params") + } + + // check if the metadata length is valid + if uint64(len(msg.Metadata)) > params.MaxMetadataLength { + return nil, sdkerrors.Wrapf(types.ErrInvalidMetadataLength, + "metadata length %d is greater than maximum %d", + len(msg.Metadata), + params.MaxMetadataLength, + ) + } + + project, err := k.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) + } + + // Get the coordinator ID associated to the sender address + coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + if project.CoordinatorID != coordID { + return nil, sdkerrors.Wrap(profiletypes.ErrCoordinatorInvalid, fmt.Sprintf( + "coordinator of the project is %d", + project.CoordinatorID, + )) + } + + if len(msg.Name) > 0 { + project.ProjectName = msg.Name + } + + if len(msg.Metadata) > 0 { + project.Metadata = msg.Metadata + } + + if err := k.Project.Set(ctx, project.ProjectID, project); err != nil { + return nil, ignterrors.Criticalf("project not set %s", err.Error()) + } + + return &types.MsgEditProjectResponse{}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&types.EventProjectInfoUpdated{ + ProjectID: project.ProjectID, + CoordinatorAddress: msg.Coordinator, + ProjectName: project.ProjectName, + Metadata: project.Metadata, + }) +} diff --git a/x/project/keeper/msg_edit_project_test.go b/x/project/keeper/msg_server_edit_project_test.go similarity index 77% rename from x/project/keeper/msg_edit_project_test.go rename to x/project/keeper/msg_server_edit_project_test.go index 53450a69..889a6a93 100644 --- a/x/project/keeper/msg_edit_project_test.go +++ b/x/project/keeper/msg_server_edit_project_test.go @@ -3,13 +3,12 @@ package keeper_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) func TestMsgUpdateProjectName(t *testing.T) { @@ -18,11 +17,13 @@ func TestMsgUpdateProjectName(t *testing.T) { coordAddrNoProject = sample.Address(r) project = sample.Project(r, 0) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) - maxMetadataLength = tk.ProjectKeeper.MaxMetadataLength(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) ) + params, err := tk.ProjectKeeper.Params.Get(ctx) + require.NoError(t, err) + maxMetadataLength := params.MaxMetadataLength + t.Run("should allow creation of coordinators", func(t *testing.T) { res, err := ts.ProfileSrv.CreateCoordinator(ctx, &profiletypes.MsgCreateCoordinator{ Address: coordAddr, @@ -30,7 +31,8 @@ func TestMsgUpdateProjectName(t *testing.T) { }) require.NoError(t, err) project.CoordinatorID = res.CoordinatorID - project.ProjectID = tk.ProjectKeeper.AppendProject(sdkCtx, project) + project.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) res, err = ts.ProfileSrv.CreateCoordinator(ctx, &profiletypes.MsgCreateCoordinator{ Address: coordAddrNoProject, @@ -89,7 +91,7 @@ func TestMsgUpdateProjectName(t *testing.T) { Name: sample.ProjectName(r), Metadata: sample.Metadata(r, 20), }, - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should fail with wrong coordinator id", @@ -99,7 +101,7 @@ func TestMsgUpdateProjectName(t *testing.T) { Name: sample.ProjectName(r), Metadata: sample.Metadata(r, 20), }, - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "should fail when the change had too long metadata", @@ -113,16 +115,21 @@ func TestMsgUpdateProjectName(t *testing.T) { }, } { t.Run(tc.name, func(t *testing.T) { - previousProject, found := tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - _, err := ts.ProjectSrv.EditProject(ctx, &tc.msg) + previousProject, err := tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + if err != nil && tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + require.NoError(t, err) + _, err = ts.ProjectSrv.EditProject(ctx, &tc.msg) if tc.err != nil { require.ErrorIs(t, err, tc.err) return } require.NoError(t, err) - project, found := tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + project, err := tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + require.NoError(t, err) if len(tc.msg.Name) > 0 { require.EqualValues(t, tc.msg.Name, project.ProjectName) diff --git a/x/project/keeper/msg_server_initialize_mainnet.go b/x/project/keeper/msg_server_initialize_mainnet.go new file mode 100644 index 00000000..6a1b22fd --- /dev/null +++ b/x/project/keeper/msg_server_initialize_mainnet.go @@ -0,0 +1,86 @@ +package keeper + +import ( + "context" + "fmt" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + ignterrors "github.com/ignite/network/pkg/errors" + launchtypes "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" +) + +func (k msgServer) InitializeMainnet(ctx context.Context, msg *types.MsgInitializeMainnet) (*types.MsgInitializeMainnetResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + project, err := k.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) + } + + if project.MainnetInitialized { + return nil, sdkerrors.Wrapf(types.ErrMainnetInitialized, "%d", msg.ProjectID) + } + + if project.TotalSupply.Empty() { + return nil, sdkerrors.Wrap(types.ErrInvalidTotalSupply, "total supply is empty") + } + + // Get the coordinator ID associated to the sender address + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + if project.CoordinatorID != coordinatorID { + return nil, sdkerrors.Wrap(profiletypes.ErrCoordinatorInvalid, fmt.Sprintf( + "coordinator of the project is %d", + project.CoordinatorID, + )) + } + + initialGenesis := launchtypes.NewDefaultInitialGenesis() + + // Create the mainnet chain for launch + mainnetID, err := k.launchKeeper.CreateNewChain( + ctx, + coordinatorID, + msg.MainnetChainID, + msg.SourceURL, + msg.SourceHash, + initialGenesis, + true, + msg.ProjectID, + true, + sdk.NewCoins(), // no enforced default for mainnet + []byte{}, + ) + if err != nil { + return nil, ignterrors.Criticalf("cannot create the mainnet: %s", err.Error()) + } + + // Set mainnet as initialized and save the change + project.MainnetID = mainnetID + project.MainnetInitialized = true + if err := k.Project.Set(ctx, project.ProjectID, project); err != nil { + return nil, ignterrors.Criticalf("project not set %s", err.Error()) + } + + return &types.MsgInitializeMainnetResponse{ + MainnetID: mainnetID, + }, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&types.EventProjectMainnetInitialized{ + ProjectID: project.ProjectID, + CoordinatorAddress: msg.Coordinator, + MainnetID: project.MainnetID, + }) +} diff --git a/x/project/keeper/msg_initialize_mainnet_test.go b/x/project/keeper/msg_server_initialize_mainnet_test.go similarity index 79% rename from x/project/keeper/msg_initialize_mainnet_test.go rename to x/project/keeper/msg_server_initialize_mainnet_test.go index 221e489e..c1552500 100644 --- a/x/project/keeper/msg_initialize_mainnet_test.go +++ b/x/project/keeper/msg_server_initialize_mainnet_test.go @@ -3,14 +3,13 @@ package keeper_test import ( "testing" - testkeeper "github.com/tendermint/spn/testutil/keeper" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) func TestMsgInitializeMainnet(t *testing.T) { @@ -23,8 +22,7 @@ func TestMsgInitializeMainnet(t *testing.T) { coordAddr = sample.Address(r) coordAddrNoProject = sample.Address(r) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) ) t.Run("should allow creation of coordinators", func(t *testing.T) { @@ -43,21 +41,25 @@ func TestMsgInitializeMainnet(t *testing.T) { project := sample.Project(r, projectID) project.CoordinatorID = coordID - tk.ProjectKeeper.SetProject(sdkCtx, project) + err := tk.ProjectKeeper.Project.Set(ctx, projectID, project) + require.NoError(t, err) projectMainnetInitialized := sample.Project(r, projectMainnetInitializedID) projectMainnetInitialized.CoordinatorID = coordID projectMainnetInitialized.MainnetInitialized = true - tk.ProjectKeeper.SetProject(sdkCtx, projectMainnetInitialized) + err = tk.ProjectKeeper.Project.Set(ctx, projectMainnetInitializedID, projectMainnetInitialized) + require.NoError(t, err) projectEmptySupply := sample.Project(r, projectEmptySupplyID) projectEmptySupply.CoordinatorID = coordID projectEmptySupply.TotalSupply = sdk.NewCoins() - tk.ProjectKeeper.SetProject(sdkCtx, projectEmptySupply) + err = tk.ProjectKeeper.Project.Set(ctx, projectEmptySupplyID, projectEmptySupply) + require.NoError(t, err) projectIncorrectCoord := sample.Project(r, projectIncorrectCoordID) projectIncorrectCoord.CoordinatorID = coordID - tk.ProjectKeeper.SetProject(sdkCtx, projectIncorrectCoord) + err = tk.ProjectKeeper.Project.Set(ctx, projectIncorrectCoordID, projectIncorrectCoord) + require.NoError(t, err) for _, tc := range []struct { name string @@ -116,7 +118,7 @@ func TestMsgInitializeMainnet(t *testing.T) { SourceURL: sample.String(r, 20), MainnetChainID: sample.GenesisChainID(r), }, - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should fail with invalid coordinator", @@ -127,7 +129,7 @@ func TestMsgInitializeMainnet(t *testing.T) { SourceURL: sample.String(r, 20), MainnetChainID: sample.GenesisChainID(r), }, - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, } { t.Run(tc.name, func(t *testing.T) { @@ -137,21 +139,21 @@ func TestMsgInitializeMainnet(t *testing.T) { return } require.NoError(t, err) - project, found := tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + project, err := tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + require.NoError(t, err) require.True(t, project.MainnetInitialized) require.EqualValues(t, res.MainnetID, project.MainnetID) // Chain is in launch module - chain, found := tk.LaunchKeeper.GetChain(sdkCtx, project.MainnetID) - require.True(t, found) + chain, err := tk.LaunchKeeper.GetChain(ctx, project.MainnetID) + require.NoError(t, err) require.True(t, chain.HasProject) require.True(t, chain.IsMainnet) require.EqualValues(t, tc.msg.ProjectID, chain.ProjectID) // Mainnet ID is listed in project chains - projectChains, found := tk.ProjectKeeper.GetProjectChains(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + projectChains, err := tk.ProjectKeeper.GetProjectChains(ctx, tc.msg.ProjectID) + require.NoError(t, err) require.Contains(t, projectChains.Chains, project.MainnetID) }) } diff --git a/x/project/keeper/msg_mint_vouchers.go b/x/project/keeper/msg_server_mint_vouchers.go similarity index 52% rename from x/project/keeper/msg_mint_vouchers.go rename to x/project/keeper/msg_server_mint_vouchers.go index 9070cf1e..52dacf84 100644 --- a/x/project/keeper/msg_mint_vouchers.go +++ b/x/project/keeper/msg_server_mint_vouchers.go @@ -5,38 +5,50 @@ import ( "fmt" sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - ignterrors "github.com/ignite/modules/pkg/errors" + sdk "github.com/cosmos/cosmos-sdk/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + ignterrors "github.com/ignite/network/pkg/errors" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) -func (k msgServer) MintVouchers(goCtx context.Context, msg *types.MsgMintVouchers) (*types.MsgMintVouchersResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) MintVouchers(ctx context.Context, msg *types.MsgMintVouchers) (*types.MsgMintVouchersResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } - project, found := k.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrProjectNotFound, "%d", msg.ProjectID) + project, err := k.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) } // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) if err != nil { return nil, err } - if project.CoordinatorID != coordID { - return nil, sdkerrors.Wrap(profiletypes.ErrCoordInvalid, fmt.Sprintf( + if project.CoordinatorID != coordinatorID { + return nil, sdkerrors.Wrap(profiletypes.ErrCoordinatorInvalid, fmt.Sprintf( "coordinator of the project is %d", project.CoordinatorID, )) } // Increase the project shares + totalShares, err := k.TotalShares.Get(ctx) + if err != nil { + return nil, ignterrors.Criticalf("total shares not found %s", err.Error()) + } + project.AllocatedShares = types.IncreaseShares(project.AllocatedShares, msg.Shares) - reached, err := types.IsTotalSharesReached(project.AllocatedShares, k.GetTotalShares(ctx)) + reached, err := types.IsTotalSharesReached(project.AllocatedShares, totalShares) if err != nil { return nil, ignterrors.Criticalf("verified shares are invalid %s", err.Error()) } @@ -53,23 +65,18 @@ func (k msgServer) MintVouchers(goCtx context.Context, msg *types.MsgMintVoucher return nil, sdkerrors.Wrap(types.ErrVouchersMinting, err.Error()) } - receiver, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return nil, ignterrors.Criticalf("can't parse coordinator address %s", err.Error()) - } - - if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, receiver, vouchers); err != nil { + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, coordinatorAddress, vouchers); err != nil { return nil, ignterrors.Criticalf("can't send minted coins %s", err.Error()) } - k.SetProject(ctx, project) + if err := k.Project.Set(ctx, project.ProjectID, project); err != nil { + return nil, ignterrors.Criticalf("can't set project %s", err.Error()) + } - err = ctx.EventManager().EmitTypedEvent( + return &types.MsgMintVouchersResponse{}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent( &types.EventProjectSharesUpdated{ ProjectID: project.ProjectID, CoordinatorAddress: msg.Coordinator, AllocatedShares: project.AllocatedShares, }) - - return &types.MsgMintVouchersResponse{}, err } diff --git a/x/project/keeper/msg_mint_vouchers_test.go b/x/project/keeper/msg_server_mint_vouchers_test.go similarity index 77% rename from x/project/keeper/msg_mint_vouchers_test.go rename to x/project/keeper/msg_server_mint_vouchers_test.go index 8f1feb0b..273c888c 100644 --- a/x/project/keeper/msg_mint_vouchers_test.go +++ b/x/project/keeper/msg_server_mint_vouchers_test.go @@ -7,17 +7,16 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + spntypes "github.com/ignite/network/pkg/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) func TestMsgMintVouchers(t *testing.T) { var ( - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) coordID uint64 coord = sample.Address(r) coordNoProject = sample.Address(r) @@ -45,7 +44,9 @@ func TestMsgMintVouchers(t *testing.T) { // Set project project := sample.Project(r, 0) project.CoordinatorID = coordID - project.ProjectID = tk.ProjectKeeper.AppendProject(sdkCtx, project) + projectID, err := tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) + project.ProjectID = projectID for _, tc := range []struct { name string @@ -101,7 +102,7 @@ func TestMsgMintVouchers(t *testing.T) { ProjectID: 0, Shares: shares, }, - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should fail with invalid coordinator", @@ -110,7 +111,7 @@ func TestMsgMintVouchers(t *testing.T) { ProjectID: 0, Shares: shares, }, - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, } { t.Run(tc.name, func(t *testing.T) { @@ -122,11 +123,10 @@ func TestMsgMintVouchers(t *testing.T) { // Get values before message execution if tc.err == nil { - var found bool - previousProject, found = tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + previousProject, err = tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + require.NoError(t, err) - previousBalance = tk.BankKeeper.GetAllBalances(sdkCtx, coordAddr) + previousBalance = tk.BankKeeper.GetAllBalances(ctx, coordAddr) } // Execute message @@ -137,8 +137,8 @@ func TestMsgMintVouchers(t *testing.T) { } require.NoError(t, err) - project, found := tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + project, err := tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + require.NoError(t, err) // Allocated shares of the project must be increased expectedShares := types.IncreaseShares(previousProject.AllocatedShares, tc.msg.Shares) @@ -147,8 +147,8 @@ func TestMsgMintVouchers(t *testing.T) { // Check coordinator balance minted, err := types.SharesToVouchers(tc.msg.Shares, tc.msg.ProjectID) require.NoError(t, err) - balance := tk.BankKeeper.GetAllBalances(sdkCtx, coordAddr) - require.True(t, balance.IsEqual(previousBalance.Add(minted...))) + balance := tk.BankKeeper.GetAllBalances(ctx, coordAddr) + require.True(t, balance.Equal(previousBalance.Add(minted...))) }) } } diff --git a/x/project/keeper/msg_redeem_vouchers.go b/x/project/keeper/msg_server_redeem_vouchers.go similarity index 53% rename from x/project/keeper/msg_redeem_vouchers.go rename to x/project/keeper/msg_server_redeem_vouchers.go index 22f87d72..78cce4fa 100644 --- a/x/project/keeper/msg_redeem_vouchers.go +++ b/x/project/keeper/msg_server_redeem_vouchers.go @@ -2,22 +2,30 @@ package keeper import ( "context" + "errors" "fmt" + "cosmossdk.io/collections" sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - ignterrors "github.com/ignite/modules/pkg/errors" - - "github.com/tendermint/spn/x/project/types" + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/project/types" ) -func (k msgServer) RedeemVouchers(goCtx context.Context, msg *types.MsgRedeemVouchers) (*types.MsgRedeemVouchersResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) RedeemVouchers(ctx context.Context, msg *types.MsgRedeemVouchers) (*types.MsgRedeemVouchersResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } - project, found := k.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrProjectNotFound, "%d", msg.ProjectID) + creatorAddr, err := k.addressCodec.StringToBytes(msg.Sender) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + project, err := k.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) } mainnetLaunched, err := k.IsProjectMainnetLaunchTriggered(ctx, project.ProjectID) @@ -38,40 +46,49 @@ func (k msgServer) RedeemVouchers(goCtx context.Context, msg *types.MsgRedeemVou } // Send coins and burn them - creatorAddr, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return nil, ignterrors.Criticalf("can't parse sender address %s", err.Error()) - } if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, creatorAddr, types.ModuleName, msg.Vouchers); err != nil { - return nil, sdkerrors.Wrapf(types.ErrInsufficientVouchers, "%s", creatorAddr.String()) + return nil, sdkerrors.Wrapf(types.ErrInsufficientVouchers, "%s", creatorAddr) } if err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, msg.Vouchers); err != nil { return nil, ignterrors.Criticalf("can't burn coins %s", err.Error()) } // Check if the account already exists - account, found := k.GetMainnetAccount(ctx, msg.ProjectID, msg.Account) - if !found { + + accountAddress, err := k.addressCodec.StringToBytes(msg.Account) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + found := true + account, err := k.MainnetAccount.Get(ctx, collections.Join(msg.ProjectID, sdk.AccAddress(accountAddress))) + if errors.Is(err, collections.ErrNotFound) { + found = false // If not, create the account account = types.MainnetAccount{ ProjectID: project.ProjectID, Address: msg.Account, Shares: types.EmptyShares(), } + } else if err != nil { + return nil, ignterrors.Criticalf("can't get mainnet account %s", err.Error()) } // Increase the account shares account.Shares = types.IncreaseShares(account.Shares, shares) - k.SetMainnetAccount(ctx, account) + if err := k.MainnetAccount.Set(ctx, collections.Join(msg.ProjectID, sdk.AccAddress(accountAddress)), account); err != nil { + return nil, ignterrors.Criticalf("can't set mainnet account %s", err.Error()) + } + sdkCtx := sdk.UnwrapSDKContext(ctx) if !found { - err = ctx.EventManager().EmitTypedEvent(&types.EventMainnetAccountCreated{ + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventMainnetAccountCreated{ ProjectID: account.ProjectID, Address: account.Address, Shares: account.Shares, }) } else { - err = ctx.EventManager().EmitTypedEvent(&types.EventMainnetAccountUpdated{ + err = sdkCtx.EventManager().EmitTypedEvent(&types.EventMainnetAccountUpdated{ ProjectID: account.ProjectID, Address: account.Address, Shares: account.Shares, diff --git a/x/project/keeper/msg_redeem_vouchers_test.go b/x/project/keeper/msg_server_redeem_vouchers_test.go similarity index 76% rename from x/project/keeper/msg_redeem_vouchers_test.go rename to x/project/keeper/msg_server_redeem_vouchers_test.go index c9b5efe9..32ae3bce 100644 --- a/x/project/keeper/msg_redeem_vouchers_test.go +++ b/x/project/keeper/msg_server_redeem_vouchers_test.go @@ -3,24 +3,22 @@ package keeper_test import ( "testing" + "cosmossdk.io/collections" sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - ignterrors "github.com/ignite/modules/pkg/errors" - - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" + ignterrors "github.com/ignite/network/pkg/errors" + spntypes "github.com/ignite/network/pkg/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/types" ) func TestMsgRedeemVouchers(t *testing.T) { var ( - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) + ctx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) addr = sample.AccAddress(r) existAddr = sample.AccAddress(r) project = sample.Project(r, 0) @@ -40,15 +38,18 @@ func TestMsgRedeemVouchers(t *testing.T) { // Set projects project.AllocatedShares = shares - project.ProjectID = tk.ProjectKeeper.AppendProject(sdkCtx, project) + project.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) projectMainnetLaunched.MainnetInitialized = true projectMainnetLaunched.AllocatedShares = shares chainLaunched := sample.Chain(r, 0, 0) chainLaunched.LaunchTriggered = true chainLaunched.IsMainnet = true - projectMainnetLaunched.MainnetID = tk.LaunchKeeper.AppendChain(sdkCtx, chainLaunched) - projectMainnetLaunched.ProjectID = tk.ProjectKeeper.AppendProject(sdkCtx, projectMainnetLaunched) + projectMainnetLaunched.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chainLaunched) + require.NoError(t, err) + projectMainnetLaunched.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, projectMainnetLaunched) + require.NoError(t, err) t.Run("should allow creation of valid vouchers", func(t *testing.T) { vouchers, err = types.SharesToVouchers(shares, project.ProjectID) @@ -56,19 +57,20 @@ func TestMsgRedeemVouchers(t *testing.T) { }) t.Run("should allow setting test balances", func(t *testing.T) { - err = tk.BankKeeper.MintCoins(sdkCtx, types.ModuleName, vouchers) + err = tk.BankKeeper.MintCoins(ctx, types.ModuleName, vouchers) require.NoError(t, err) - err = tk.BankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, addr, vouchers) + err = tk.BankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, addr, vouchers) require.NoError(t, err) - tk.ProjectKeeper.SetMainnetAccount(sdkCtx, types.MainnetAccount{ + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(project.ProjectID, existAddr), types.MainnetAccount{ ProjectID: project.ProjectID, Address: existAddr.String(), Shares: shares, }) - err = tk.BankKeeper.MintCoins(sdkCtx, types.ModuleName, vouchers) require.NoError(t, err) - err = tk.BankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, existAddr, vouchers) + err = tk.BankKeeper.MintCoins(ctx, types.ModuleName, vouchers) + require.NoError(t, err) + err = tk.BankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, existAddr, vouchers) require.NoError(t, err) }) @@ -196,9 +198,15 @@ func TestMsgRedeemVouchers(t *testing.T) { accountAddr, err = sdk.AccAddressFromBech32(tc.msg.Account) require.NoError(t, err) - previousAccount, foundAccount = tk.ProjectKeeper.GetMainnetAccount(sdkCtx, tc.msg.ProjectID, tc.msg.Account) + previousAccount, err = tk.ProjectKeeper.GetMainnetAccount(ctx, tc.msg.ProjectID, accountAddr) + if err != nil { + require.ErrorIs(t, err, types.ErrAccountNotFound) + foundAccount = false + } else { + foundAccount = true + } if foundAccount { - previousBalance = tk.BankKeeper.GetAllBalances(sdkCtx, accountAddr) + previousBalance = tk.BankKeeper.GetAllBalances(ctx, accountAddr) } } @@ -213,8 +221,8 @@ func TestMsgRedeemVouchers(t *testing.T) { shares, err := types.VouchersToShares(tc.msg.Vouchers, tc.msg.ProjectID) require.NoError(t, err) - account, found := tk.ProjectKeeper.GetMainnetAccount(sdkCtx, tc.msg.ProjectID, tc.msg.Account) - require.True(t, found) + account, err := tk.ProjectKeeper.GetMainnetAccount(ctx, tc.msg.ProjectID, accountAddr) + require.NoError(t, err) // Check account shares expectedShares := shares @@ -230,8 +238,8 @@ func TestMsgRedeemVouchers(t *testing.T) { expectedVouchers, negative = previousBalance.SafeSub(tc.msg.Vouchers...) require.False(t, negative) } - balance := tk.BankKeeper.GetAllBalances(sdkCtx, accountAddr) - require.True(t, expectedVouchers.IsEqual(balance)) + balance := tk.BankKeeper.GetAllBalances(ctx, accountAddr) + require.True(t, expectedVouchers.Equal(balance)) }) } } diff --git a/x/project/keeper/msg_unredeem_vouchers.go b/x/project/keeper/msg_server_unredeem_vouchers.go similarity index 53% rename from x/project/keeper/msg_unredeem_vouchers.go rename to x/project/keeper/msg_server_unredeem_vouchers.go index bce9b3c9..60a2d420 100644 --- a/x/project/keeper/msg_unredeem_vouchers.go +++ b/x/project/keeper/msg_server_unredeem_vouchers.go @@ -4,20 +4,27 @@ import ( "context" "fmt" + "cosmossdk.io/collections" sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - ignterrors "github.com/ignite/modules/pkg/errors" - - "github.com/tendermint/spn/x/project/types" + ignterrors "github.com/ignite/network/pkg/errors" + "github.com/ignite/network/x/project/types" ) -func (k msgServer) UnredeemVouchers(goCtx context.Context, msg *types.MsgUnredeemVouchers) (*types.MsgUnredeemVouchersResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) UnredeemVouchers(ctx context.Context, msg *types.MsgUnredeemVouchers) (*types.MsgUnredeemVouchersResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + senderAddress, err := k.addressCodec.StringToBytes(msg.Sender) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } - project, found := k.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrProjectNotFound, "%d", msg.ProjectID) + project, err := k.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) } mainnetLaunched, err := k.IsProjectMainnetLaunchTriggered(ctx, project.ProjectID) @@ -31,9 +38,10 @@ func (k msgServer) UnredeemVouchers(goCtx context.Context, msg *types.MsgUnredee )) } - account, found := k.GetMainnetAccount(ctx, msg.ProjectID, msg.Sender) - if !found { - return nil, sdkerrors.Wrap(types.ErrAccountNotFound, msg.Sender) + // Check if the account already exists + account, err := k.MainnetAccount.Get(ctx, collections.Join(msg.ProjectID, sdk.AccAddress(senderAddress))) + if err != nil { + return nil, ignterrors.Criticalf("can't get mainnet account %s", err.Error()) } // Update the shares of the account @@ -43,17 +51,22 @@ func (k msgServer) UnredeemVouchers(goCtx context.Context, msg *types.MsgUnredee } // If the account no longer has shares, it can be removed from the store + sdkCtx := sdk.UnwrapSDKContext(ctx) if types.IsEqualShares(account.Shares, types.EmptyShares()) { - k.RemoveMainnetAccount(ctx, msg.ProjectID, msg.Sender) - if err := ctx.EventManager().EmitTypedEvent(&types.EventMainnetAccountRemoved{ + if err := k.MainnetAccount.Remove(ctx, collections.Join(msg.ProjectID, sdk.AccAddress(senderAddress))); err != nil { + return nil, ignterrors.Criticalf("can't remove mainnet account %s", err.Error()) + } + if err := sdkCtx.EventManager().EmitTypedEvent(&types.EventMainnetAccountRemoved{ ProjectID: project.ProjectID, Address: account.Address, }); err != nil { return nil, err } } else { - k.SetMainnetAccount(ctx, account) - if err := ctx.EventManager().EmitTypedEvent(&types.EventMainnetAccountUpdated{ + if err := k.MainnetAccount.Set(ctx, collections.Join(msg.ProjectID, sdk.AccAddress(senderAddress)), account); err != nil { + return nil, ignterrors.Criticalf("can't set mainnet account %s", err.Error()) + } + if err := sdkCtx.EventManager().EmitTypedEvent(&types.EventMainnetAccountUpdated{ ProjectID: account.ProjectID, Address: account.Address, Shares: account.Shares, @@ -71,12 +84,7 @@ func (k msgServer) UnredeemVouchers(goCtx context.Context, msg *types.MsgUnredee return nil, sdkerrors.Wrap(types.ErrVouchersMinting, err.Error()) } - receiver, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return nil, ignterrors.Criticalf("can't parse sender address %s", err.Error()) - } - - if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, receiver, vouchers); err != nil { + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, senderAddress, vouchers); err != nil { return nil, ignterrors.Criticalf("can't send minted coins %s", err.Error()) } diff --git a/x/project/keeper/msg_unredeem_vouchers_test.go b/x/project/keeper/msg_server_unredeem_vouchers_test.go similarity index 69% rename from x/project/keeper/msg_unredeem_vouchers_test.go rename to x/project/keeper/msg_server_unredeem_vouchers_test.go index f89b0a5a..4d34921b 100644 --- a/x/project/keeper/msg_unredeem_vouchers_test.go +++ b/x/project/keeper/msg_server_unredeem_vouchers_test.go @@ -3,19 +3,18 @@ package keeper_test import ( "testing" - testkeeper "github.com/tendermint/spn/testutil/keeper" - + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/types" ) func TestMsgUnredeemVouchers(t *testing.T) { var ( - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) accountAddr = sample.Address(r) account = sample.MainnetAccount(r, 0, accountAddr) @@ -32,18 +31,28 @@ func TestMsgUnredeemVouchers(t *testing.T) { accountFewShares.Shares = accountFewSharesShare // Create projects - tk.ProjectKeeper.AppendProject(sdkCtx, project) + projectID, err := tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) projectMainnetLaunched.MainnetInitialized = true chainLaunched := sample.Chain(r, 0, 0) chainLaunched.LaunchTriggered = true chainLaunched.IsMainnet = true - projectMainnetLaunched.MainnetID = tk.LaunchKeeper.AppendChain(sdkCtx, chainLaunched) - projectMainnetLaunched.ProjectID = tk.ProjectKeeper.AppendProject(sdkCtx, projectMainnetLaunched) + projectMainnetLaunched.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chainLaunched) + require.NoError(t, err) + projectMainnetLaunched.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, projectMainnetLaunched) + require.NoError(t, err) // Create accounts - tk.ProjectKeeper.SetMainnetAccount(sdkCtx, account) - tk.ProjectKeeper.SetMainnetAccount(sdkCtx, accountFewShares) + accountAddress, err := sdk.AccAddressFromBech32(account.Address) + require.NoError(t, err) + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(projectID, accountAddress), account) + require.NoError(t, err) + + accountFewSharesAddress, err := sdk.AccAddressFromBech32(accountFewShares.Address) + require.NoError(t, err) + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(projectID, accountFewSharesAddress), accountFewShares) + require.NoError(t, err) for _, tc := range []struct { name string @@ -122,17 +131,16 @@ func TestMsgUnredeemVouchers(t *testing.T) { t.Run(tc.name, func(t *testing.T) { var previousAccount types.MainnetAccount var previousBalance sdk.Coins - var found bool accountAddr, err := sdk.AccAddressFromBech32(tc.msg.Sender) require.NoError(t, err) // Get values before message execution if tc.err == nil { - previousAccount, found = tk.ProjectKeeper.GetMainnetAccount(sdkCtx, tc.msg.ProjectID, tc.msg.Sender) - require.True(t, found) + previousAccount, err = tk.ProjectKeeper.GetMainnetAccount(ctx, tc.msg.ProjectID, accountAddr) + require.NoError(t, err) - previousBalance = tk.BankKeeper.GetAllBalances(sdkCtx, accountAddr) + previousBalance = tk.BankKeeper.GetAllBalances(ctx, accountAddr) } // Execute message @@ -145,12 +153,12 @@ func TestMsgUnredeemVouchers(t *testing.T) { if types.IsEqualShares(tc.msg.Shares, previousAccount.Shares) { // All unredeemed - _, found := tk.ProjectKeeper.GetMainnetAccount(sdkCtx, tc.msg.ProjectID, tc.msg.Sender) - require.False(t, found) + _, err := tk.ProjectKeeper.GetMainnetAccount(ctx, tc.msg.ProjectID, accountAddr) + require.NoError(t, err) } else { - account, found := tk.ProjectKeeper.GetMainnetAccount(sdkCtx, tc.msg.ProjectID, tc.msg.Sender) - require.True(t, found) + account, err := tk.ProjectKeeper.GetMainnetAccount(ctx, tc.msg.ProjectID, accountAddr) + require.NoError(t, err) expectedShares, err := types.DecreaseShares(previousAccount.Shares, tc.msg.Shares) require.NoError(t, err) @@ -160,8 +168,8 @@ func TestMsgUnredeemVouchers(t *testing.T) { // Compare balance unredeemed, err := types.SharesToVouchers(tc.msg.Shares, tc.msg.ProjectID) require.NoError(t, err) - balance := tk.BankKeeper.GetAllBalances(sdkCtx, accountAddr) - require.True(t, balance.IsEqual(previousBalance.Add(unredeemed...))) + balance := tk.BankKeeper.GetAllBalances(ctx, accountAddr) + require.True(t, balance.Equal(previousBalance.Add(unredeemed...))) }) } } diff --git a/x/project/keeper/msg_update_special_allocations.go b/x/project/keeper/msg_server_update_special_allocations.go similarity index 56% rename from x/project/keeper/msg_update_special_allocations.go rename to x/project/keeper/msg_server_update_special_allocations.go index 4f198605..3481bc37 100644 --- a/x/project/keeper/msg_update_special_allocations.go +++ b/x/project/keeper/msg_server_update_special_allocations.go @@ -5,30 +5,37 @@ import ( "fmt" sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - ignterrors "github.com/ignite/modules/pkg/errors" + sdk "github.com/cosmos/cosmos-sdk/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + ignterrors "github.com/ignite/network/pkg/errors" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) -func (k msgServer) UpdateSpecialAllocations(goCtx context.Context, msg *types.MsgUpdateSpecialAllocations) (*types.MsgUpdateSpecialAllocationsResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) UpdateSpecialAllocations(ctx context.Context, msg *types.MsgUpdateSpecialAllocations) (*types.MsgUpdateSpecialAllocationsResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } - project, found := k.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrProjectNotFound, "%d", msg.ProjectID) + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + project, err := k.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) } // get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) if err != nil { return nil, err } - if project.CoordinatorID != coordID { - return nil, sdkerrors.Wrap(profiletypes.ErrCoordInvalid, fmt.Sprintf( + if project.CoordinatorID != coordinatorID { + return nil, sdkerrors.Wrap(profiletypes.ErrCoordinatorInvalid, fmt.Sprintf( "coordinator of the project is %d", project.CoordinatorID, )) @@ -56,7 +63,12 @@ func (k msgServer) UpdateSpecialAllocations(goCtx context.Context, msg *types.Ms project.AllocatedShares = types.IncreaseShares(project.AllocatedShares, msg.SpecialAllocations.TotalShares()) // increase the project shares - reached, err := types.IsTotalSharesReached(project.AllocatedShares, k.GetTotalShares(ctx)) + totalShares, err := k.TotalShares.Get(ctx) + if err != nil { + return nil, ignterrors.Criticalf("total shares not found %s", err.Error()) + } + + reached, err := types.IsTotalSharesReached(project.AllocatedShares, totalShares) if err != nil { return nil, ignterrors.Criticalf("verified shares are invalid %s", err.Error()) } @@ -65,12 +77,14 @@ func (k msgServer) UpdateSpecialAllocations(goCtx context.Context, msg *types.Ms } project.SpecialAllocations = msg.SpecialAllocations - k.SetProject(ctx, project) - err = ctx.EventManager().EmitTypedEvents( + if err := k.Project.Set(ctx, project.ProjectID, project); err != nil { + return nil, ignterrors.Criticalf("project not set %s", err.Error()) + } + + return &types.MsgUpdateSpecialAllocationsResponse{}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvents( &types.EventProjectSharesUpdated{ ProjectID: project.ProjectID, CoordinatorAddress: msg.Coordinator, AllocatedShares: project.AllocatedShares, }) - return &types.MsgUpdateSpecialAllocationsResponse{}, err } diff --git a/x/project/keeper/msg_update_special_allocations_test.go b/x/project/keeper/msg_server_update_special_allocations_test.go similarity index 92% rename from x/project/keeper/msg_update_special_allocations_test.go rename to x/project/keeper/msg_server_update_special_allocations_test.go index 5cc73eea..95e89063 100644 --- a/x/project/keeper/msg_update_special_allocations_test.go +++ b/x/project/keeper/msg_server_update_special_allocations_test.go @@ -4,17 +4,15 @@ import ( "fmt" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - ignterrors "github.com/ignite/modules/pkg/errors" - - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - launchtypes "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + ignterrors "github.com/ignite/network/pkg/errors" + tc "github.com/ignite/network/testutil/constructor" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + launchtypes "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) func Test_msgServer_UpdateSpecialAllocations(t *testing.T) { @@ -22,11 +20,11 @@ func Test_msgServer_UpdateSpecialAllocations(t *testing.T) { coordID uint64 coordAddr = sample.Address(r) coordAddrNoProject = sample.Address(r) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + ctx, tk, ts = testkeeper.NewTestSetup(t) ) - totalShares := tk.ProjectKeeper.GetTotalShares(sdkCtx) + totalShares, err := tk.ProjectKeeper.TotalShares.Get(ctx) + require.NoError(t, err) t.Run("should allow creation of coordinators", func(t *testing.T) { res, err := ts.ProfileSrv.CreateCoordinator(ctx, &profiletypes.MsgCreateCoordinator{ @@ -239,7 +237,7 @@ func Test_msgServer_UpdateSpecialAllocations(t *testing.T) { mainnet: nil, }, expectedAllocatedShares: types.EmptyShares(), - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should fail if the signer is not the coordinator of the project", @@ -253,7 +251,7 @@ func Test_msgServer_UpdateSpecialAllocations(t *testing.T) { mainnet: nil, }, expectedAllocatedShares: types.EmptyShares(), - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "should fail if mainnet launch is triggered", @@ -326,10 +324,10 @@ func Test_msgServer_UpdateSpecialAllocations(t *testing.T) { tt.state.project.MainnetInitialized = true tt.state.project.MainnetID = tt.state.mainnet.LaunchID - tk.LaunchKeeper.SetChain(sdkCtx, *tt.state.mainnet) + require.NoError(t, tk.LaunchKeeper.Chain.Set(ctx, tt.state.mainnet.LaunchID, *tt.state.mainnet)) } - tk.ProjectKeeper.SetProject(sdkCtx, *tt.state.project) + require.NoError(t, tk.ProjectKeeper.Project.Set(ctx, tt.state.project.ProjectID, *tt.state.project)) } _, err := ts.ProjectSrv.UpdateSpecialAllocations(ctx, &tt.msg) @@ -340,8 +338,8 @@ func Test_msgServer_UpdateSpecialAllocations(t *testing.T) { } // fetch project - prjt, found := tk.ProjectKeeper.GetProject(sdkCtx, tt.msg.ProjectID) - require.True(t, found) + prjt, err := tk.ProjectKeeper.GetProject(ctx, tt.msg.ProjectID) + require.NoError(t, err) // check genesis distribution gdExpected := tt.msg.SpecialAllocations.GenesisDistribution diff --git a/x/project/keeper/msg_server_update_total_supply.go b/x/project/keeper/msg_server_update_total_supply.go new file mode 100644 index 00000000..07de5fe7 --- /dev/null +++ b/x/project/keeper/msg_server_update_total_supply.go @@ -0,0 +1,71 @@ +package keeper + +import ( + "context" + "fmt" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pkg/errors" + + ignterrors "github.com/ignite/network/pkg/errors" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" +) + +func (k msgServer) UpdateTotalSupply(ctx context.Context, msg *types.MsgUpdateTotalSupply) (*types.MsgUpdateTotalSupplyResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + coordinatorAddress, err := k.addressCodec.StringToBytes(msg.Coordinator) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } + + params, err := k.Params.Get(ctx) + if err != nil { + return nil, ignterrors.Critical("failed to get project params") + } + + project, err := k.GetProject(ctx, msg.ProjectID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.ProjectID) + } + + // Get the coordinator ID associated to the sender address + coordinatorID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, coordinatorAddress) + if err != nil { + return nil, err + } + + if project.CoordinatorID != coordinatorID { + return nil, sdkerrors.Wrap(profiletypes.ErrCoordinatorInvalid, fmt.Sprintf( + "coordinator of the project is %d", + project.CoordinatorID, + )) + } + + if project.MainnetInitialized { + return nil, sdkerrors.Wrapf(types.ErrMainnetInitialized, "%d", msg.ProjectID) + } + + // Validate provided totalSupply + if err := types.ValidateTotalSupply(msg.TotalSupplyUpdate, params.TotalSupplyRange); err != nil { + if errors.Is(err, types.ErrInvalidSupplyRange) { + return nil, ignterrors.Critical(err.Error()) + } + return nil, sdkerrors.Wrap(types.ErrInvalidTotalSupply, err.Error()) + } + + project.TotalSupply = types.UpdateTotalSupply(project.TotalSupply, msg.TotalSupplyUpdate) + if err := k.Project.Set(ctx, project.ProjectID, project); err != nil { + return nil, ignterrors.Criticalf("project not set %s", err.Error()) + } + + return &types.MsgUpdateTotalSupplyResponse{}, sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&types.EventProjectTotalSupplyUpdated{ + ProjectID: project.ProjectID, + CoordinatorAddress: msg.Coordinator, + TotalSupply: project.TotalSupply, + }) +} diff --git a/x/project/keeper/msg_update_total_supply_test.go b/x/project/keeper/msg_server_update_total_supply_test.go similarity index 78% rename from x/project/keeper/msg_update_total_supply_test.go rename to x/project/keeper/msg_server_update_total_supply_test.go index e87ad4a5..c5ea345a 100644 --- a/x/project/keeper/msg_update_total_supply_test.go +++ b/x/project/keeper/msg_server_update_total_supply_test.go @@ -6,19 +6,18 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) func TestMsgUpdateTotalSupply(t *testing.T) { var ( - coordID uint64 - coordAddr1 = sample.Address(r) - coordAddr2 = sample.Address(r) - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) + coordID uint64 + coordAddr1 = sample.Address(r) + coordAddr2 = sample.Address(r) + ctx, tk, ts = testkeeper.NewTestSetup(t) ) t.Run("should allow creating coordinators", func(t *testing.T) { @@ -38,12 +37,12 @@ func TestMsgUpdateTotalSupply(t *testing.T) { // Set a regular project and a project with an already initialized mainnet project := sample.Project(r, 0) project.CoordinatorID = coordID - tk.ProjectKeeper.SetProject(sdkCtx, project) + require.NoError(t, tk.ProjectKeeper.Project.Set(ctx, 0, project)) project = sample.Project(r, 1) project.CoordinatorID = coordID project.MainnetInitialized = true - tk.ProjectKeeper.SetProject(sdkCtx, project) + require.NoError(t, tk.ProjectKeeper.Project.Set(ctx, 1, project)) for _, tc := range []struct { name string @@ -82,7 +81,7 @@ func TestMsgUpdateTotalSupply(t *testing.T) { Coordinator: sample.Address(r), TotalSupplyUpdate: sample.TotalSupply(r), }, - err: profiletypes.ErrCoordAddressNotFound, + err: profiletypes.ErrCoordinatorAddressNotFound, }, { name: "should fail if coordinator is not associated with project", @@ -91,7 +90,7 @@ func TestMsgUpdateTotalSupply(t *testing.T) { Coordinator: coordAddr2, TotalSupplyUpdate: sample.TotalSupply(r), }, - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "cannot update total supply when mainnet is initialized", @@ -115,8 +114,8 @@ func TestMsgUpdateTotalSupply(t *testing.T) { t.Run(tc.name, func(t *testing.T) { var previousTotalSupply sdk.Coins if tc.err == nil { - project, found := tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - require.True(t, found) + project, err := tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + require.NoError(t, err) previousTotalSupply = project.TotalSupply } @@ -126,9 +125,9 @@ func TestMsgUpdateTotalSupply(t *testing.T) { return } require.NoError(t, err) - project, found := tk.ProjectKeeper.GetProject(sdkCtx, tc.msg.ProjectID) - require.True(t, found) - require.True(t, project.TotalSupply.IsEqual( + project, err := tk.ProjectKeeper.GetProject(ctx, tc.msg.ProjectID) + require.NoError(t, err) + require.True(t, project.TotalSupply.Equal( types.UpdateTotalSupply(previousTotalSupply, tc.msg.TotalSupplyUpdate), )) }) diff --git a/x/project/keeper/msg_update_params.go b/x/project/keeper/msg_update_params.go new file mode 100644 index 00000000..a865bc23 --- /dev/null +++ b/x/project/keeper/msg_update_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + + "github.com/ignite/network/x/project/types" +) + +func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if _, err := k.addressCodec.StringToBytes(req.Authority); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + if k.GetAuthority() != req.Authority { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) + } + + if err := req.Params.Validate(); err != nil { + return nil, err + } + + if err := k.Params.Set(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/project/keeper/msg_update_params_test.go b/x/project/keeper/msg_update_params_test.go new file mode 100644 index 00000000..d6b6b5b5 --- /dev/null +++ b/x/project/keeper/msg_update_params_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func TestMsgUpdateParams(t *testing.T) { + k, ctx, _ := keepertest.ProjectKeeper(t) + ms := keeper.NewMsgServerImpl(k) + + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + // default params + testCases := []struct { + name string + input *types.MsgUpdateParams + expErr bool + expErrMsg string + }{ + { + name: "invalid authority", + input: &types.MsgUpdateParams{ + Authority: "invalid", + Params: params, + }, + expErr: true, + expErrMsg: "invalid authority", + }, + { + name: "send enabled param", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: types.Params{}, + }, + expErr: false, + }, + { + name: "all good", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: params, + }, + expErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, err := ms.UpdateParams(ctx, tc.input) + + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expErrMsg) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/project/keeper/msg_update_total_supply.go b/x/project/keeper/msg_update_total_supply.go deleted file mode 100644 index 0ae70598..00000000 --- a/x/project/keeper/msg_update_total_supply.go +++ /dev/null @@ -1,61 +0,0 @@ -package keeper - -import ( - "context" - "errors" - "fmt" - - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - ignterrors "github.com/ignite/modules/pkg/errors" - - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func (k msgServer) UpdateTotalSupply(goCtx context.Context, msg *types.MsgUpdateTotalSupply) (*types.MsgUpdateTotalSupplyResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - project, found := k.GetProject(ctx, msg.ProjectID) - if !found { - return nil, sdkerrors.Wrapf(types.ErrProjectNotFound, "%d", msg.ProjectID) - } - - // Get the coordinator ID associated to the sender address - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Coordinator) - if err != nil { - return nil, err - } - - if project.CoordinatorID != coordID { - return nil, sdkerrors.Wrap(profiletypes.ErrCoordInvalid, fmt.Sprintf( - "coordinator of the project is %d", - project.CoordinatorID, - )) - } - - if project.MainnetInitialized { - return nil, sdkerrors.Wrapf(types.ErrMainnetInitialized, "%d", msg.ProjectID) - } - - // Validate provided totalSupply - totalSupplyRange := k.TotalSupplyRange(ctx) - if err := types.ValidateTotalSupply(msg.TotalSupplyUpdate, totalSupplyRange); err != nil { - if errors.Is(err, types.ErrInvalidSupplyRange) { - return nil, ignterrors.Critical(err.Error()) - } - return nil, sdkerrors.Wrap(types.ErrInvalidTotalSupply, err.Error()) - } - - project.TotalSupply = types.UpdateTotalSupply(project.TotalSupply, msg.TotalSupplyUpdate) - k.SetProject(ctx, project) - - err = ctx.EventManager().EmitTypedEvent(&types.EventProjectTotalSupplyUpdated{ - ProjectID: project.ProjectID, - CoordinatorAddress: msg.Coordinator, - TotalSupply: project.TotalSupply, - }) - - return &types.MsgUpdateTotalSupplyResponse{}, err -} diff --git a/x/project/keeper/params.go b/x/project/keeper/params.go deleted file mode 100644 index f14f53a2..00000000 --- a/x/project/keeper/params.go +++ /dev/null @@ -1,40 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/project/types" -) - -// GetParams get all parameters as types.Params -func (k Keeper) GetParams(ctx sdk.Context) types.Params { - return types.NewParams( - k.TotalSupplyRange(ctx).MinTotalSupply, - k.TotalSupplyRange(ctx).MaxTotalSupply, - k.ProjectCreationFee(ctx), - k.MaxMetadataLength(ctx), - ) -} - -// SetParams sets the project parameters to the param space. -func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { - k.paramSpace.SetParamSet(ctx, ¶ms) -} - -// TotalSupplyRange returns the param that defines the allowed range for total supply -func (k Keeper) TotalSupplyRange(ctx sdk.Context) (totalSupplyRange types.TotalSupplyRange) { - k.paramSpace.Get(ctx, types.KeyTotalSupplyRange, &totalSupplyRange) - return -} - -// ProjectCreationFee returns the project creation fee param -func (k Keeper) ProjectCreationFee(ctx sdk.Context) (projectCreationFee sdk.Coins) { - k.paramSpace.Get(ctx, types.KeyProjectCreationFee, &projectCreationFee) - return -} - -// MaxMetadataLength returns the param that defines the max metadata length -func (k Keeper) MaxMetadataLength(ctx sdk.Context) (maxMetadataLength uint64) { - k.paramSpace.Get(ctx, types.KeyMaxMetadataLength, &maxMetadataLength) - return -} diff --git a/x/project/keeper/params_test.go b/x/project/keeper/params_test.go deleted file mode 100644 index b8f8dbc8..00000000 --- a/x/project/keeper/params_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" -) - -func Test_GetParams(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - params := sample.ProjectParams(r) - - t.Run("should set and get params", func(t *testing.T) { - tk.ProjectKeeper.SetParams(ctx, params) - require.EqualValues(t, params, tk.ProjectKeeper.GetParams(ctx)) - require.EqualValues(t, params.TotalSupplyRange.MinTotalSupply, tk.ProjectKeeper.TotalSupplyRange(ctx).MinTotalSupply) - require.EqualValues(t, params.TotalSupplyRange.MaxTotalSupply, tk.ProjectKeeper.TotalSupplyRange(ctx).MaxTotalSupply) - require.EqualValues(t, params.ProjectCreationFee, tk.ProjectKeeper.ProjectCreationFee(ctx)) - }) -} diff --git a/x/project/keeper/project.go b/x/project/keeper/project.go index cbe4ecb7..fe899f2f 100644 --- a/x/project/keeper/project.go +++ b/x/project/keeper/project.go @@ -1,98 +1,42 @@ package keeper import ( - "encoding/binary" + "context" + "fmt" - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" + "cosmossdk.io/collections" + "github.com/pkg/errors" - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/x/project/types" ) -// GetProjectCounter get the counter for project -func (k Keeper) GetProjectCounter(ctx sdk.Context) uint64 { - store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) - byteKey := types.KeyPrefix(types.ProjectCounterKey) - bz := store.Get(byteKey) - - // Count doesn't exist: no element - if bz == nil { - return 0 - } - - // Parse bytes - return binary.BigEndian.Uint64(bz) -} - -// SetProjectCounter set the counter for project -func (k Keeper) SetProjectCounter(ctx sdk.Context, counter uint64) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) - byteKey := types.KeyPrefix(types.ProjectCounterKey) - bz := make([]byte, 8) - binary.BigEndian.PutUint64(bz, counter) - store.Set(byteKey, bz) -} - // AppendProject appends a project in the store with a new id and update the count -func (k Keeper) AppendProject(ctx sdk.Context, project types.Project) uint64 { - // Create the project - counter := k.GetProjectCounter(ctx) - - // Set the ID of the appended value - project.ProjectID = counter - - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProjectKey)) - appendedValue := k.cdc.MustMarshal(&project) - store.Set(GetProjectIDBytes(project.ProjectID), appendedValue) - - // Update project count - k.SetProjectCounter(ctx, counter+1) - - return counter -} - -// SetProject set a specific project in the store -func (k Keeper) SetProject(ctx sdk.Context, project types.Project) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProjectKey)) - b := k.cdc.MustMarshal(&project) - store.Set(GetProjectIDBytes(project.ProjectID), b) -} - -// GetProject returns a project from its id -func (k Keeper) GetProject(ctx sdk.Context, id uint64) (val types.Project, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProjectKey)) - b := store.Get(GetProjectIDBytes(id)) - if b == nil { - return val, false +func (k Keeper) AppendProject(ctx context.Context, project types.Project) (uint64, error) { + projectID, err := k.ProjectSeq.Next(ctx) + if err != nil { + return 0, fmt.Errorf("failed to get next project sequence %s", err.Error()) } - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveProject removes a project from the store -func (k Keeper) RemoveProject(ctx sdk.Context, id uint64) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProjectKey)) - store.Delete(GetProjectIDBytes(id)) + project.ProjectID = projectID + if err := k.Project.Set(ctx, projectID, project); err != nil { + return 0, fmt.Errorf("project not set %s", err.Error()) + } + return projectID, nil } -// GetAllProject returns all project -func (k Keeper) GetAllProject(ctx sdk.Context) (list []types.Project) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProjectKey)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.Project - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) +func (k Keeper) GetProject(ctx context.Context, projectID uint64) (types.Project, error) { + project, err := k.Project.Get(ctx, projectID) + if errors.Is(err, collections.ErrNotFound) { + return types.Project{}, types.ErrProjectNotFound } - - return + return project, err } -// GetProjectIDBytes returns the byte representation of the ID -func GetProjectIDBytes(id uint64) []byte { - return spntypes.UintBytes(id) +// Projects returns all Project. +func (k Keeper) Projects(ctx context.Context) ([]types.Project, error) { + projects := make([]types.Project, 0) + err := k.Project.Walk(ctx, nil, func(_ uint64, project types.Project) (bool, error) { + projects = append(projects, project) + return false, nil + }) + return projects, err } diff --git a/x/project/keeper/project_auction_event_hooks.go b/x/project/keeper/project_auction_event_hooks.go index ac4538f0..439837cb 100644 --- a/x/project/keeper/project_auction_event_hooks.go +++ b/x/project/keeper/project_auction_event_hooks.go @@ -1,21 +1,21 @@ package keeper import ( + "context" "time" sdkerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + fundraisingtypes "github.com/ignite/modules/x/fundraising/types" - fundraisingtypes "github.com/tendermint/fundraising/x/fundraising/types" - - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) // EmitProjectAuctionCreated emits EventProjectAuctionCreated event if an auction is created for a project from a coordinator func (k Keeper) EmitProjectAuctionCreated( - ctx sdk.Context, + ctx context.Context, auctionID uint64, auctioneer string, sellingCoin sdk.Coin, @@ -27,17 +27,17 @@ func (k Keeper) EmitProjectAuctionCreated( } // verify the auctioneer is the coordinator of the project - project, found := k.GetProject(ctx, projectID) - if !found { + project, err := k.GetProject(ctx, projectID) + if err != nil { return false, sdkerrors.Wrapf(types.ErrProjectNotFound, "voucher %s is associated to an non-existing project %d", sellingCoin.Denom, projectID, ) } - coord, found := k.profileKeeper.GetCoordinator(ctx, project.CoordinatorID) - if !found { - return false, sdkerrors.Wrapf(profiletypes.ErrCoordInvalid, + coordinator, err := k.profileKeeper.GetCoordinator(ctx, project.CoordinatorID) + if err != nil { + return false, sdkerrors.Wrapf(profiletypes.ErrCoordinatorInvalid, "project %d coordinator doesn't exist %d", projectID, project.CoordinatorID, @@ -45,11 +45,11 @@ func (k Keeper) EmitProjectAuctionCreated( } // if the coordinator if the auctioneer, we emit a ProjectAuctionCreated event - if coord.Address != auctioneer { + if coordinator.Address != auctioneer { return false, nil } - err = ctx.EventManager().EmitTypedEvents( + err = sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvents( &types.EventProjectAuctionCreated{ ProjectID: projectID, AuctionID: auctionID, @@ -79,123 +79,129 @@ var _ fundraisingtypes.FundraisingHooks = ProjectAuctionEventHooks{} // AfterFixedPriceAuctionCreated emits a ProjectAuctionCreated event if created for a project func (h ProjectAuctionEventHooks) AfterFixedPriceAuctionCreated( - ctx sdk.Context, + ctx context.Context, auctionID uint64, auctioneer string, - _ sdk.Dec, + _ sdkmath.LegacyDec, sellingCoin sdk.Coin, _ string, _ []fundraisingtypes.VestingSchedule, _ time.Time, _ time.Time, -) { - // TODO: investigate error handling for hooks - // https://github.com/tendermint/spn/issues/869 - _, _ = h.projectKeeper.EmitProjectAuctionCreated(ctx, auctionID, auctioneer, sellingCoin) +) error { + _, err := h.projectKeeper.EmitProjectAuctionCreated(ctx, auctionID, auctioneer, sellingCoin) + return err } // AfterBatchAuctionCreated emits a ProjectAuctionCreated event if created for a project func (h ProjectAuctionEventHooks) AfterBatchAuctionCreated( - ctx sdk.Context, + ctx context.Context, auctionID uint64, auctioneer string, - _ sdk.Dec, - _ sdk.Dec, + _ sdkmath.LegacyDec, + _ sdkmath.LegacyDec, sellingCoin sdk.Coin, _ string, _ []fundraisingtypes.VestingSchedule, _ uint32, - _ sdk.Dec, + _ sdkmath.LegacyDec, _ time.Time, _ time.Time, -) { - // TODO: investigate error handling for hooks - // https://github.com/tendermint/spn/issues/869 - _, _ = h.projectKeeper.EmitProjectAuctionCreated(ctx, auctionID, auctioneer, sellingCoin) +) error { + _, err := h.projectKeeper.EmitProjectAuctionCreated(ctx, auctionID, auctioneer, sellingCoin) + return err } // BeforeFixedPriceAuctionCreated implements FundraisingHooks func (h ProjectAuctionEventHooks) BeforeFixedPriceAuctionCreated( - _ sdk.Context, + _ context.Context, _ string, - _ sdk.Dec, + _ sdkmath.LegacyDec, _ sdk.Coin, _ string, _ []fundraisingtypes.VestingSchedule, _ time.Time, _ time.Time, -) { +) error { + return nil } // BeforeBatchAuctionCreated implements FundraisingHooks func (h ProjectAuctionEventHooks) BeforeBatchAuctionCreated( - _ sdk.Context, + _ context.Context, _ string, - _ sdk.Dec, - _ sdk.Dec, + _ sdkmath.LegacyDec, + _ sdkmath.LegacyDec, _ sdk.Coin, _ string, _ []fundraisingtypes.VestingSchedule, _ uint32, - _ sdk.Dec, + _ sdkmath.LegacyDec, _ time.Time, _ time.Time, -) { +) error { + return nil } // BeforeAuctionCanceled implements FundraisingHooks func (h ProjectAuctionEventHooks) BeforeAuctionCanceled( - _ sdk.Context, + _ context.Context, _ uint64, _ string, -) { +) error { + return nil } // BeforeBidPlaced implements FundraisingHooks func (h ProjectAuctionEventHooks) BeforeBidPlaced( - _ sdk.Context, + _ context.Context, _ uint64, _ uint64, _ string, _ fundraisingtypes.BidType, - _ sdk.Dec, + _ sdkmath.LegacyDec, _ sdk.Coin, -) { +) error { + return nil } // BeforeBidModified implements FundraisingHooks func (h ProjectAuctionEventHooks) BeforeBidModified( - _ sdk.Context, + _ context.Context, _ uint64, _ uint64, _ string, _ fundraisingtypes.BidType, - _ sdk.Dec, + _ sdkmath.LegacyDec, _ sdk.Coin, -) { +) error { + return nil } // BeforeAllowedBiddersAdded implements FundraisingHooks func (h ProjectAuctionEventHooks) BeforeAllowedBiddersAdded( - _ sdk.Context, + _ context.Context, _ []fundraisingtypes.AllowedBidder, -) { +) error { + return nil } // BeforeAllowedBidderUpdated implements FundraisingHooks func (h ProjectAuctionEventHooks) BeforeAllowedBidderUpdated( - _ sdk.Context, + _ context.Context, _ uint64, _ sdk.AccAddress, _ sdkmath.Int, -) { +) error { + return nil } // BeforeSellingCoinsAllocated implements FundraisingHooks func (h ProjectAuctionEventHooks) BeforeSellingCoinsAllocated( - _ sdk.Context, + _ context.Context, _ uint64, _ map[string]sdkmath.Int, _ map[string]sdkmath.Int, -) { +) error { + return nil } diff --git a/x/project/keeper/project_auction_event_hooks_test.go b/x/project/keeper/project_auction_event_hooks_test.go index 05de1bf9..dfed97dc 100644 --- a/x/project/keeper/project_auction_event_hooks_test.go +++ b/x/project/keeper/project_auction_event_hooks_test.go @@ -6,11 +6,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" + tc "github.com/ignite/network/testutil/constructor" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/project/types" ) func TestKeeper_EmitProjectAuctionCreated(t *testing.T) { @@ -62,7 +62,7 @@ func TestKeeper_EmitProjectAuctionCreated(t *testing.T) { noCoordinator: true, }, sellingCoin: tc.Coin(t, "1000"+types.VoucherDenom(10, "foo")), - err: profiletypes.ErrCoordInvalid, + err: profiletypes.ErrCoordinatorInvalid, }, { name: "should prevent emitting event if the auctioneer is not the coordinator of the project", @@ -101,10 +101,12 @@ func TestKeeper_EmitProjectAuctionCreated(t *testing.T) { t.Run(tt.name, func(t *testing.T) { // initialize input state if !tt.inputState.noProject { - tk.ProjectKeeper.SetProject(ctx, tt.inputState.project) + err := tk.ProjectKeeper.Project.Set(ctx, tt.inputState.project.ProjectID, tt.inputState.project) + require.NoError(t, err) } if !tt.inputState.noCoordinator { - tk.ProfileKeeper.SetCoordinator(ctx, tt.inputState.coordinator) + err := tk.ProfileKeeper.Coordinator.Set(ctx, tt.inputState.coordinator.CoordinatorID, tt.inputState.coordinator) + require.NoError(t, err) } emitted, err := tk.ProjectKeeper.EmitProjectAuctionCreated(ctx, tt.auctionId, tt.auctioneer, tt.sellingCoin) @@ -117,10 +119,12 @@ func TestKeeper_EmitProjectAuctionCreated(t *testing.T) { // clean state if !tt.inputState.noProject { - tk.ProjectKeeper.RemoveProject(ctx, tt.inputState.project.ProjectID) + err := tk.ProjectKeeper.Project.Remove(ctx, tt.inputState.project.ProjectID) + require.NoError(t, err) } if !tt.inputState.noCoordinator { - tk.ProfileKeeper.RemoveCoordinator(ctx, tt.inputState.coordinator.CoordinatorID) + err := tk.ProfileKeeper.Coordinator.Remove(ctx, tt.inputState.coordinator.CoordinatorID) + require.NoError(t, err) } }) } diff --git a/x/project/keeper/project_chains.go b/x/project/keeper/project_chains.go index 65e1bdd9..14dfa402 100644 --- a/x/project/keeper/project_chains.go +++ b/x/project/keeper/project_chains.go @@ -1,27 +1,31 @@ package keeper import ( + "context" "fmt" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pkg/errors" - "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/x/project/types" ) -// AddChainToProject adds a new chain into an existing project -func (k Keeper) AddChainToProject(ctx sdk.Context, projectID, launchID uint64) error { +// AddChainToProject adds a new chain into an existing project. +func (k Keeper) AddChainToProject(ctx context.Context, projectID, launchID uint64) error { // Check project exist - if _, found := k.GetProject(ctx, projectID); !found { + if _, err := k.GetProject(ctx, projectID); err != nil { return fmt.Errorf("project %d not found", projectID) } - projectChains, found := k.GetProjectChains(ctx, projectID) - if !found { + projectChains, err := k.GetProjectChains(ctx, projectID) + if errors.Is(err, types.ErrProjectChainsNotFound) { projectChains = types.ProjectChains{ ProjectID: projectID, Chains: []uint64{launchID}, } + } else if err != nil { + return err } else { // Ensure no duplicated chain ID for _, existingChainID := range projectChains.Chains { @@ -31,49 +35,19 @@ func (k Keeper) AddChainToProject(ctx sdk.Context, projectID, launchID uint64) e } projectChains.Chains = append(projectChains.Chains, launchID) } - k.SetProjectChains(ctx, projectChains) - return ctx.EventManager().EmitTypedEvent(&types.EventProjectChainAdded{ + if err := k.ProjectChains.Set(ctx, projectChains.ProjectID, projectChains); err != nil { + return err + } + return sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&types.EventProjectChainAdded{ ProjectID: projectID, LaunchID: launchID, }) } -// SetProjectChains set a specific projectChains in the store from its index -func (k Keeper) SetProjectChains(ctx sdk.Context, projectChains types.ProjectChains) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProjectChainsKeyPrefix)) - b := k.cdc.MustMarshal(&projectChains) - store.Set(types.ProjectChainsKey( - projectChains.ProjectID, - ), b) -} - -// GetProjectChains returns a projectChains from its index -func (k Keeper) GetProjectChains(ctx sdk.Context, projectID uint64) (val types.ProjectChains, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProjectChainsKeyPrefix)) - - b := store.Get(types.ProjectChainsKey( - projectID, - )) - if b == nil { - return val, false +func (k Keeper) GetProjectChains(ctx context.Context, projectID uint64) (types.ProjectChains, error) { + projectChains, err := k.ProjectChains.Get(ctx, projectID) + if errors.Is(err, collections.ErrNotFound) { + return types.ProjectChains{}, types.ErrProjectChainsNotFound } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// GetAllProjectChains returns all projectChains -func (k Keeper) GetAllProjectChains(ctx sdk.Context) (list []types.ProjectChains) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProjectChainsKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.ProjectChains - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return + return projectChains, err } diff --git a/x/project/keeper/project_chains_test.go b/x/project/keeper/project_chains_test.go index d4e4e23e..76e7a53e 100644 --- a/x/project/keeper/project_chains_test.go +++ b/x/project/keeper/project_chains_test.go @@ -3,13 +3,10 @@ package keeper_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" ) func TestKeeper_AddChainToProject(t *testing.T) { @@ -22,16 +19,18 @@ func TestKeeper_AddChainToProject(t *testing.T) { // Chains can be added t.Run("should allow adding chains to project", func(t *testing.T) { - tk.ProjectKeeper.SetProject(ctx, sample.Project(r, 0)) - err := tk.ProjectKeeper.AddChainToProject(ctx, 0, 0) + projectID := uint64(0) + err := tk.ProjectKeeper.Project.Set(ctx, projectID, sample.Project(r, 0)) + require.Error(t, err) + err = tk.ProjectKeeper.AddChainToProject(ctx, projectID, 0) require.NoError(t, err) - err = tk.ProjectKeeper.AddChainToProject(ctx, 0, 1) + err = tk.ProjectKeeper.AddChainToProject(ctx, projectID, 1) require.NoError(t, err) - err = tk.ProjectKeeper.AddChainToProject(ctx, 0, 2) + err = tk.ProjectKeeper.AddChainToProject(ctx, projectID, 2) require.NoError(t, err) - projectChains, found := tk.ProjectKeeper.GetProjectChains(ctx, 0) - require.True(t, found) + projectChains, err := tk.ProjectKeeper.GetProjectChains(ctx, projectID) + require.NoError(t, err) require.EqualValues(t, projectChains.ProjectID, uint64(0)) require.Len(t, projectChains.Chains, 3) require.EqualValues(t, []uint64{0, 1, 2}, projectChains.Chains) @@ -43,36 +42,3 @@ func TestKeeper_AddChainToProject(t *testing.T) { require.Error(t, err) }) } - -func createNProjectChains(k *keeper.Keeper, ctx sdk.Context, n int) []types.ProjectChains { - items := make([]types.ProjectChains, n) - for i := range items { - items[i].ProjectID = uint64(i) - k.SetProjectChains(ctx, items[i]) - } - return items -} - -func TestProjectChainsGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should get all projects", func(t *testing.T) { - items := createNProjectChains(tk.ProjectKeeper, ctx, 10) - for _, item := range items { - rst, found := tk.ProjectKeeper.GetProjectChains(ctx, - item.ProjectID, - ) - require.True(t, found) - require.Equal(t, item, rst) - } - }) -} - -func TestProjectChainsGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - - t.Run("should get all projects", func(t *testing.T) { - items := createNProjectChains(tk.ProjectKeeper, ctx, 10) - require.ElementsMatch(t, items, tk.ProjectKeeper.GetAllProjectChains(ctx)) - }) -} diff --git a/x/project/keeper/project_mainnet.go b/x/project/keeper/project_mainnet.go index 5007bd4a..7eda3c64 100644 --- a/x/project/keeper/project_mainnet.go +++ b/x/project/keeper/project_mainnet.go @@ -1,22 +1,23 @@ package keeper import ( + "context" "fmt" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "cosmossdk.io/errors" ) // IsProjectMainnetLaunchTriggered returns true if the provided project has an associated mainnet chain whose launch // has been already triggered -func (k Keeper) IsProjectMainnetLaunchTriggered(ctx sdk.Context, projectID uint64) (bool, error) { - project, found := k.GetProject(ctx, projectID) - if !found { - return false, fmt.Errorf("project %d not found", projectID) +func (k Keeper) IsProjectMainnetLaunchTriggered(ctx context.Context, projectID uint64) (bool, error) { + project, err := k.GetProject(ctx, projectID) + if err != nil { + return false, sdkerrors.Wrapf(err, "%d", projectID) } if project.MainnetInitialized { - chain, found := k.launchKeeper.GetChain(ctx, project.MainnetID) - if !found { + chain, err := k.launchKeeper.GetChain(ctx, project.MainnetID) + if err != nil { return false, fmt.Errorf("mainnet chain %d for project %d not found", project.MainnetID, projectID) } if !chain.IsMainnet { diff --git a/x/project/keeper/project_mainnet_test.go b/x/project/keeper/project_mainnet_test.go index fcfd298a..b8baee27 100644 --- a/x/project/keeper/project_mainnet_test.go +++ b/x/project/keeper/project_mainnet_test.go @@ -5,66 +5,79 @@ import ( "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" ) func TestIsProjectMainnetLaunchTriggered(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) t.Run("should show project has mainnet with launch triggered", func(t *testing.T) { + var err error projectMainnetLaunched := sample.Project(r, 0) projectMainnetLaunched.MainnetInitialized = true chainLaunched := sample.Chain(r, 0, 0) chainLaunched.LaunchTriggered = true chainLaunched.IsMainnet = true - projectMainnetLaunched.MainnetID = tk.LaunchKeeper.AppendChain(ctx, chainLaunched) - projectMainnetLaunched.ProjectID = tk.ProjectKeeper.AppendProject(ctx, projectMainnetLaunched) + projectMainnetLaunched.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chainLaunched) + require.NoError(t, err) + projectMainnetLaunched.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, projectMainnetLaunched) + require.NoError(t, err) res, err := tk.ProjectKeeper.IsProjectMainnetLaunchTriggered(ctx, projectMainnetLaunched.ProjectID) require.NoError(t, err) require.True(t, res) }) t.Run("should show project has mainnet with launch not triggered", func(t *testing.T) { + var err error projectMainnetInitialized := sample.Project(r, 1) projectMainnetInitialized.MainnetInitialized = true chain := sample.Chain(r, 0, 0) chain.LaunchTriggered = false chain.IsMainnet = true - projectMainnetInitialized.MainnetID = tk.LaunchKeeper.AppendChain(ctx, chain) - projectMainnetInitialized.ProjectID = tk.ProjectKeeper.AppendProject(ctx, projectMainnetInitialized) + projectMainnetInitialized.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + projectMainnetInitialized.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, projectMainnetInitialized) + require.NoError(t, err) res, err := tk.ProjectKeeper.IsProjectMainnetLaunchTriggered(ctx, projectMainnetInitialized.ProjectID) require.NoError(t, err) require.False(t, res) }) t.Run("should show project with mainnnet not initialized", func(t *testing.T) { + var err error projectMainnetNotInitialized := sample.Project(r, 2) projectMainnetNotInitialized.MainnetInitialized = false - projectMainnetNotInitialized.ProjectID = tk.ProjectKeeper.AppendProject(ctx, projectMainnetNotInitialized) + projectMainnetNotInitialized.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, projectMainnetNotInitialized) + require.NoError(t, err) res, err := tk.ProjectKeeper.IsProjectMainnetLaunchTriggered(ctx, projectMainnetNotInitialized.ProjectID) require.NoError(t, err) require.False(t, res) }) t.Run("should show mainnet not found", func(t *testing.T) { + var err error projectMainnetNotFound := sample.Project(r, 3) projectMainnetNotFound.MainnetInitialized = true projectMainnetNotFound.MainnetID = 1000 - projectMainnetNotFound.ProjectID = tk.ProjectKeeper.AppendProject(ctx, projectMainnetNotFound) - _, err := tk.ProjectKeeper.IsProjectMainnetLaunchTriggered(ctx, projectMainnetNotFound.ProjectID) + projectMainnetNotFound.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, projectMainnetNotFound) + require.NoError(t, err) + _, err = tk.ProjectKeeper.IsProjectMainnetLaunchTriggered(ctx, projectMainnetNotFound.ProjectID) require.Error(t, err) }) t.Run("should show associated mainnet chain is not mainnet", func(t *testing.T) { + var err error projectInvalidMainnet := sample.Project(r, 4) projectInvalidMainnet.MainnetInitialized = true chainNoMainnet := sample.Chain(r, 0, 0) chainNoMainnet.LaunchTriggered = false chainNoMainnet.IsMainnet = false - projectInvalidMainnet.MainnetID = tk.LaunchKeeper.AppendChain(ctx, chainNoMainnet) - projectInvalidMainnet.ProjectID = tk.ProjectKeeper.AppendProject(ctx, projectInvalidMainnet) - _, err := tk.ProjectKeeper.IsProjectMainnetLaunchTriggered(ctx, projectInvalidMainnet.ProjectID) + projectInvalidMainnet.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chainNoMainnet) + require.NoError(t, err) + projectInvalidMainnet.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, projectInvalidMainnet) + require.NoError(t, err) + _, err = tk.ProjectKeeper.IsProjectMainnetLaunchTriggered(ctx, projectInvalidMainnet.ProjectID) require.Error(t, err) }) diff --git a/x/project/keeper/project_test.go b/x/project/keeper/project_test.go deleted file mode 100644 index f9865fd8..00000000 --- a/x/project/keeper/project_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - projectkeeper "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" -) - -func createNProject(keeper *projectkeeper.Keeper, ctx sdk.Context, n int) []types.Project { - items := make([]types.Project, n) - for i := range items { - items[i] = sample.Project(r, 0) - items[i].ProjectID = keeper.AppendProject(ctx, items[i]) - } - return items -} - -func TestProjectGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - t.Run("should get projects", func(t *testing.T) { - items := createNProject(tk.ProjectKeeper, ctx, 10) - for _, item := range items { - got, found := tk.ProjectKeeper.GetProject(ctx, item.ProjectID) - require.True(t, found) - require.Equal(t, item, got) - } - }) -} - -func TestProjectRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - t.Run("should remove projects", func(t *testing.T) { - items := createNProject(tk.ProjectKeeper, ctx, 10) - for _, item := range items { - tk.ProjectKeeper.RemoveProject(ctx, item.ProjectID) - _, found := tk.ProjectKeeper.GetProject(ctx, item.ProjectID) - require.False(t, found) - } - }) -} - -func TestProjectGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNProject(tk.ProjectKeeper, ctx, 10) - t.Run("should get all projects", func(t *testing.T) { - require.ElementsMatch(t, items, tk.ProjectKeeper.GetAllProject(ctx)) - }) -} - -func TestProjectCount(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - t.Run("should get project count", func(t *testing.T) { - items := createNProject(tk.ProjectKeeper, ctx, 10) - counter := uint64(len(items)) - require.Equal(t, counter, tk.ProjectKeeper.GetProjectCounter(ctx)) - }) -} diff --git a/x/project/keeper/query.go b/x/project/keeper/query.go new file mode 100644 index 00000000..6fa12a17 --- /dev/null +++ b/x/project/keeper/query.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "github.com/ignite/network/x/project/types" +) + +var _ types.QueryServer = queryServer{} + +// NewQueryServerImpl returns an implementation of the QueryServer interface +// for the provided Keeper. +func NewQueryServerImpl(k Keeper) types.QueryServer { + return queryServer{k} +} + +type queryServer struct { + k Keeper +} diff --git a/x/project/keeper/query_mainnet_account.go b/x/project/keeper/query_mainnet_account.go new file mode 100644 index 00000000..128a0145 --- /dev/null +++ b/x/project/keeper/query_mainnet_account.go @@ -0,0 +1,56 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/project/types" +) + +func (q queryServer) ListMainnetAccount(ctx context.Context, req *types.QueryAllMainnetAccountRequest) (*types.QueryAllMainnetAccountResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + mainnetAccounts, pageRes, err := query.CollectionPaginate( + ctx, + q.k.MainnetAccount, + req.Pagination, + func(_ collections.Pair[uint64, sdk.AccAddress], value types.MainnetAccount) (types.MainnetAccount, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllMainnetAccountResponse{MainnetAccount: mainnetAccounts, Pagination: pageRes}, nil +} + +func (q queryServer) GetMainnetAccount(ctx context.Context, req *types.QueryGetMainnetAccountRequest) (*types.QueryGetMainnetAccountResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + address, err := q.k.addressCodec.StringToBytes(req.Address) + if err != nil { + return nil, status.Error(codes.InvalidArgument, "invalid address") + } + + val, err := q.k.MainnetAccount.Get(ctx, collections.Join(req.ProjectID, sdk.AccAddress(address))) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetMainnetAccountResponse{MainnetAccount: val}, nil +} diff --git a/x/project/keeper/query_mainnet_account_balance.go b/x/project/keeper/query_mainnet_account_balance.go new file mode 100644 index 00000000..249fdabe --- /dev/null +++ b/x/project/keeper/query_mainnet_account_balance.go @@ -0,0 +1,30 @@ +package keeper + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/project/types" +) + +func (q queryServer) MainnetAccountBalance(ctx context.Context, req *types.QueryMainnetAccountBalanceRequest) (*types.QueryMainnetAccountBalanceResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + // TODO: Process the query + + return &types.QueryMainnetAccountBalanceResponse{}, nil +} + +func (q queryServer) ListMainnetAccountBalance(ctx context.Context, req *types.QueryListMainnetAccountBalanceRequest) (*types.QueryListMainnetAccountBalanceResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + // TODO: Process the query + + return &types.QueryListMainnetAccountBalanceResponse{}, nil +} diff --git a/x/project/keeper/query_mainnet_account_test.go b/x/project/keeper/query_mainnet_account_test.go new file mode 100644 index 00000000..3be4591f --- /dev/null +++ b/x/project/keeper/query_mainnet_account_test.go @@ -0,0 +1,143 @@ +package keeper_test + +import ( + "context" + "strconv" + "testing" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/testutil/sample" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNMainnetAccount(keeper keeper.Keeper, ctx context.Context, n int) []types.MainnetAccount { + items := make([]types.MainnetAccount, n) + for i := range items { + address := sample.AccAddress(r) + items[i].ProjectID = uint64(i) + items[i].Address = address.String() + + _ = keeper.MainnetAccount.Set(ctx, collections.Join(items[i].ProjectID, address), items[i]) + } + return items +} + +func TestMainnetAccountQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.ProjectKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNMainnetAccount(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetMainnetAccountRequest + response *types.QueryGetMainnetAccountResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetMainnetAccountRequest{ + ProjectID: msgs[0].ProjectID, + }, + response: &types.QueryGetMainnetAccountResponse{MainnetAccount: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetMainnetAccountRequest{ + ProjectID: msgs[1].ProjectID, + }, + response: &types.QueryGetMainnetAccountResponse{MainnetAccount: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetMainnetAccountRequest{ + ProjectID: 100000, + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetMainnetAccount(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestMainnetAccountQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.ProjectKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNMainnetAccount(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllMainnetAccountRequest { + return &types.QueryAllMainnetAccountRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListMainnetAccount(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.MainnetAccount), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.MainnetAccount), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListMainnetAccount(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.MainnetAccount), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.MainnetAccount), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListMainnetAccount(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.MainnetAccount), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListMainnetAccount(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/project/keeper/query_params.go b/x/project/keeper/query_params.go new file mode 100644 index 00000000..885c9e4c --- /dev/null +++ b/x/project/keeper/query_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/project/types" +) + +func (q queryServer) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + params, err := q.k.Params.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/x/project/keeper/query_params_test.go b/x/project/keeper/query_params_test.go new file mode 100644 index 00000000..f3543e66 --- /dev/null +++ b/x/project/keeper/query_params_test.go @@ -0,0 +1,23 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func TestParamsQuery(t *testing.T) { + k, ctx, _ := keepertest.ProjectKeeper(t) + + qs := keeper.NewQueryServerImpl(k) + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + response, err := qs.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/project/keeper/query_project.go b/x/project/keeper/query_project.go new file mode 100644 index 00000000..0c4fffff --- /dev/null +++ b/x/project/keeper/query_project.go @@ -0,0 +1,51 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/project/types" +) + +func (q queryServer) ListProject(ctx context.Context, req *types.QueryAllProjectRequest) (*types.QueryAllProjectResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + projects, pageRes, err := query.CollectionPaginate( + ctx, + q.k.Project, + req.Pagination, + func(_ uint64, value types.Project) (types.Project, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllProjectResponse{Project: projects, Pagination: pageRes}, nil +} + +func (q queryServer) GetProject(ctx context.Context, req *types.QueryGetProjectRequest) (*types.QueryGetProjectResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + project, err := q.k.Project.Get(ctx, req.ProjectID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, sdkerrors.ErrKeyNotFound + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetProjectResponse{Project: project}, nil +} diff --git a/x/project/keeper/query_project_chains.go b/x/project/keeper/query_project_chains.go new file mode 100644 index 00000000..adcfa5d5 --- /dev/null +++ b/x/project/keeper/query_project_chains.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/project/types" +) + +func (q queryServer) GetProjectChains(ctx context.Context, req *types.QueryGetProjectChainsRequest) (*types.QueryGetProjectChainsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.ProjectChains.Get(ctx, req.ProjectID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetProjectChainsResponse{ProjectChains: val}, nil +} diff --git a/x/project/keeper/query_project_chains_test.go b/x/project/keeper/query_project_chains_test.go new file mode 100644 index 00000000..302eaa08 --- /dev/null +++ b/x/project/keeper/query_project_chains_test.go @@ -0,0 +1,81 @@ +package keeper_test + +import ( + "context" + "strconv" + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNProjectChains(keeper keeper.Keeper, ctx context.Context, n int) []types.ProjectChains { + items := make([]types.ProjectChains, n) + for i := range items { + items[i].ProjectID = uint64(i) + + _ = keeper.ProjectChains.Set(ctx, items[i].ProjectID, items[i]) + } + return items +} + +func TestProjectChainsQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.ProjectKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNProjectChains(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetProjectChainsRequest + response *types.QueryGetProjectChainsResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetProjectChainsRequest{ + ProjectID: msgs[0].ProjectID, + }, + response: &types.QueryGetProjectChainsResponse{ProjectChains: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetProjectChainsRequest{ + ProjectID: msgs[1].ProjectID, + }, + response: &types.QueryGetProjectChainsResponse{ProjectChains: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetProjectChainsRequest{ + ProjectID: 100000, + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetProjectChains(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} diff --git a/x/project/keeper/query_project_test.go b/x/project/keeper/query_project_test.go new file mode 100644 index 00000000..fbfe27bb --- /dev/null +++ b/x/project/keeper/query_project_test.go @@ -0,0 +1,130 @@ +package keeper_test + +import ( + "context" + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func createNProject(keeper keeper.Keeper, ctx context.Context, n int) []types.Project { + items := make([]types.Project, n) + for i := range items { + iu := uint64(i) + items[i].ProjectID = iu + _ = keeper.Project.Set(ctx, iu, items[i]) + _ = keeper.ProjectSeq.Set(ctx, iu) + } + return items +} + +func TestProjectQuerySingle(t *testing.T) { + k, ctx, _ := keepertest.ProjectKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNProject(k, ctx, 2) + tests := []struct { + desc string + request *types.QueryGetProjectRequest + response *types.QueryGetProjectResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetProjectRequest{ProjectID: msgs[0].ProjectID}, + response: &types.QueryGetProjectResponse{Project: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetProjectRequest{ProjectID: msgs[1].ProjectID}, + response: &types.QueryGetProjectResponse{Project: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetProjectRequest{ProjectID: uint64(len(msgs))}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetProject(ctx, tc.request) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.response), + nullify.Fill(response), + ) + } + }) + } +} + +func TestProjectQueryPaginated(t *testing.T) { + k, ctx, _ := keepertest.ProjectKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNProject(k, ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllProjectRequest { + return &types.QueryAllProjectRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListProject(ctx, request(nil, uint64(i), uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Project), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Project), + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := qs.ListProject(ctx, request(next, 0, uint64(step), false)) + require.NoError(t, err) + require.LessOrEqual(t, len(resp.Project), step) + require.Subset(t, + nullify.Fill(msgs), + nullify.Fill(resp.Project), + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + resp, err := qs.ListProject(ctx, request(nil, 0, 0, true)) + require.NoError(t, err) + require.Equal(t, len(msgs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + nullify.Fill(msgs), + nullify.Fill(resp.Project), + ) + }) + t.Run("InvalidRequest", func(t *testing.T) { + _, err := qs.ListProject(ctx, nil) + require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/project/keeper/query_special_allocations_balance.go b/x/project/keeper/query_special_allocations_balance.go new file mode 100644 index 00000000..4ac67d4a --- /dev/null +++ b/x/project/keeper/query_special_allocations_balance.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/project/types" +) + +func (q queryServer) SpecialAllocationsBalance(ctx context.Context, req *types.QuerySpecialAllocationsBalanceRequest) (*types.QuerySpecialAllocationsBalanceResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + // TODO: Process the query + + return &types.QuerySpecialAllocationsBalanceResponse{}, nil +} diff --git a/x/project/keeper/query_total_shares.go b/x/project/keeper/query_total_shares.go new file mode 100644 index 00000000..f8530c37 --- /dev/null +++ b/x/project/keeper/query_total_shares.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/project/types" +) + +func (q queryServer) TotalShares(ctx context.Context, req *types.QueryTotalSharesRequest) (*types.QueryTotalSharesResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + // TODO: Process the query + + return &types.QueryTotalSharesResponse{}, nil +} diff --git a/x/project/keeper/total_shares.go b/x/project/keeper/total_shares.go deleted file mode 100644 index b5bf8b96..00000000 --- a/x/project/keeper/total_shares.go +++ /dev/null @@ -1,34 +0,0 @@ -package keeper - -import ( - "encoding/binary" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/project/types" -) - -// GetTotalShares gets the total shares value -func (k Keeper) GetTotalShares(ctx sdk.Context) uint64 { - store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) - byteKey := types.KeyPrefix(types.TotalSharesKey) - bz := store.Get(byteKey) - - // value doesn't exist: no element - if bz == nil { - return 0 - } - - // Parse bytes - return binary.BigEndian.Uint64(bz) -} - -// SetTotalShares sets the total shares value -func (k Keeper) SetTotalShares(ctx sdk.Context, numShares uint64) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) - byteKey := types.KeyPrefix(types.TotalSharesKey) - bz := make([]byte, 8) - binary.BigEndian.PutUint64(bz, numShares) - store.Set(byteKey, bz) -} diff --git a/x/project/keeper/total_shares_test.go b/x/project/keeper/total_shares_test.go deleted file mode 100644 index 44230f5d..00000000 --- a/x/project/keeper/total_shares_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" -) - -func TestMaximumSharesGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - value := uint64(10) - - t.Run("should get total shares", func(t *testing.T) { - tk.ProjectKeeper.SetTotalShares(ctx, value) - got := tk.ProjectKeeper.GetTotalShares(ctx) - require.Equal(t, value, got) - }) -} diff --git a/x/project/module.go b/x/project/module.go deleted file mode 100644 index 1560eea2..00000000 --- a/x/project/module.go +++ /dev/null @@ -1,170 +0,0 @@ -package project - -import ( - "context" - "encoding/json" - "fmt" - - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/project/client/cli" - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} -) - -// ---------------------------------------------------------------------------- -// AppModuleBasic -// ---------------------------------------------------------------------------- - -// AppModuleBasic implements the AppModuleBasic interface for the project module. -type AppModuleBasic struct { - cdc codec.Codec -} - -func NewAppModuleBasic(cdc codec.Codec) AppModuleBasic { - return AppModuleBasic{cdc: cdc} -} - -// Name returns the project module's name. -func (AppModuleBasic) Name() string { - return types.ModuleName -} - -func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -// RegisterInterfaces registers the project module's interface types -func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { - types.RegisterInterfaces(reg) -} - -// DefaultGenesis returns the project module's default genesis state. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesis()) -} - -// ValidateGenesis performs genesis state validation for the project module. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - var genState types.GenesisState - if err := cdc.UnmarshalJSON(bz, &genState); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - return genState.Validate() -} - -// RegisterRESTRoutes registers the project module's REST service handlers. -func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { -} - -// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the project module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint -} - -// GetTxCmd returns the project module's root tx command. -func (a AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() -} - -// GetQueryCmd returns the project module's root query command. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd(types.StoreKey) -} - -// ---------------------------------------------------------------------------- -// AppModule -// ---------------------------------------------------------------------------- - -// AppModule implements the AppModule interface for the project module. -type AppModule struct { - AppModuleBasic - - keeper keeper.Keeper - accountKeeper types.AccountKeeper - bankKeeper types.BankKeeper - profileKeeper types.ProfileKeeper -} - -func NewAppModule( - cdc codec.Codec, - keeper keeper.Keeper, - accountKeeper types.AccountKeeper, - bankKeeper types.BankKeeper, - profileKeeper types.ProfileKeeper, -) AppModule { - return AppModule{ - AppModuleBasic: NewAppModuleBasic(cdc), - keeper: keeper, - accountKeeper: accountKeeper, - bankKeeper: bankKeeper, - profileKeeper: profileKeeper, - } -} - -// Name returns the project module's name. -func (am AppModule) Name() string { - return am.AppModuleBasic.Name() -} - -// QuerierRoute returns the project module's query routing key. -func (AppModule) QuerierRoute() string { return types.QuerierRoute } - -// RegisterServices registers a GRPC query service to respond to the -// module-specific GRPC queries. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) -} - -// RegisterInvariants registers the project module's invariants. -func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { - keeper.RegisterInvariants(ir, am.keeper) -} - -// InitGenesis performs the project module's genesis initialization It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { - var genState types.GenesisState - // Initialize global index to index in genesis state - cdc.MustUnmarshalJSON(gs, &genState) - - InitGenesis(ctx, am.keeper, genState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the project module's exported genesis state as raw JSON bytes. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - genState := ExportGenesis(ctx, am.keeper) - return cdc.MustMarshalJSON(genState) -} - -// ConsensusVersion implements ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 1 } - -// BeginBlock executes all ABCI BeginBlock logic respective to the project module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock executes all ABCI EndBlock logic respective to the project module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} diff --git a/x/project/module/autocli.go b/x/project/module/autocli.go new file mode 100644 index 00000000..4a0e3cd9 --- /dev/null +++ b/x/project/module/autocli.go @@ -0,0 +1,149 @@ +package project + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + + modulev1 "github.com/ignite/network/api/network/project/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Query_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Shows the parameters of the module", + }, + { + RpcMethod: "ListMainnetAccount", + Use: "list-mainnet-account", + Short: "List all MainnetAccount", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}}, + }, + { + RpcMethod: "GetMainnetAccount", + Use: "get-mainnet-account [project-id] [address]", + Short: "Gets a MainnetAccount", + Alias: []string{"show-mainnet-account"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}, {ProtoField: "address"}}, + }, + { + RpcMethod: "ListProject", + Use: "list-project", + Short: "List all Project", + }, + { + RpcMethod: "GetProject", + Use: "get-project [project-id]", + Short: "Gets a Project by id", + Alias: []string{"show-project"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}}, + }, + { + RpcMethod: "GetProjectChains", + Use: "get-project-chains [project-id]", + Short: "Gets a ProjectChains", + Alias: []string{"show-project-chains"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}}, + }, + { + RpcMethod: "SpecialAllocationsBalance", + Use: "special-allocations-balance [project-id]", + Short: "Query SpecialAllocationsBalance", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}}, + }, + + { + RpcMethod: "MainnetAccountBalance", + Use: "mainnet-account-balance [project-id] [address]", + Short: "Query MainnetAccountBalance", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}, {ProtoField: "address"}}, + }, + + { + RpcMethod: "ListMainnetAccountBalance", + Use: "list-mainnet-account-balance [project-id]", + Short: "Query ListMainnetAccountBalance", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}}, + }, + + { + RpcMethod: "TotalShares", + Use: "total-shares", + Short: "Query TotalShares", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{}, + }, + + // this line is used by ignite scaffolding # autocli/query + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, // only required if you want to use the custom command + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "UpdateParams", + Skip: true, // skipped because authority gated + }, + { + RpcMethod: "CreateProject", + Use: "create-project [project-name] [total-supply] [metadata]", + Short: "Send a CreateProject tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectName"}, {ProtoField: "totalSupply"}, {ProtoField: "metadata"}}, + }, + { + RpcMethod: "EditProject", + Use: "edit-project [project-id] [name] [metadata]", + Short: "Send a EditProject tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectId"}, {ProtoField: "name"}, {ProtoField: "metadata"}}, + }, + { + RpcMethod: "UpdateTotalSupply", + Use: "update-total-supply [project-id] [total-supply-update]", + Short: "Send a UpdateTotalSupply tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectId"}, {ProtoField: "totalSupplyUpdate"}}, + }, + { + RpcMethod: "UpdateSpecialAllocations", + Use: "update-special-allocations [project-id] [special-allocations]", + Short: "Send a UpdateSpecialAllocations tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectId"}, {ProtoField: "specialAllocations"}}, + }, + { + RpcMethod: "InitializeMainnet", + Use: "initialize-mainnet [project-id] [source-url] [source-hash] [mainnet-chain-id]", + Short: "Send a InitializeMainnet tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}, {ProtoField: "sourceURL"}, {ProtoField: "sourceHash"}, {ProtoField: "mainnetChainID"}}, + }, + { + RpcMethod: "MintVouchers", + Use: "mint-vouchers [project-id] [shares]", + Short: "Send a MintVouchers tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}, {ProtoField: "shares"}}, + }, + { + RpcMethod: "BurnVouchers", + Use: "burn-vouchers [project-id] [vouchers]", + Short: "Send a BurnVouchers tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}, {ProtoField: "vouchers"}}, + }, + { + RpcMethod: "RedeemVouchers", + Use: "redeem-vouchers [project-id] [account] [vouchers]", + Short: "Send a RedeemVouchers tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}, {ProtoField: "account"}, {ProtoField: "vouchers"}}, + }, + { + RpcMethod: "UnredeemVouchers", + Use: "unredeem-vouchers [project-id] [shares]", + Short: "Send a UnredeemVouchers tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "projectID"}, {ProtoField: "shares"}}, + }, + // this line is used by ignite scaffolding # autocli/tx + }, + }, + } +} diff --git a/x/project/module/genesis.go b/x/project/module/genesis.go new file mode 100644 index 00000000..0a40362a --- /dev/null +++ b/x/project/module/genesis.go @@ -0,0 +1,86 @@ +package project + +import ( + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) error { + // Set all the mainnetAccount + for _, elem := range genState.MainnetAccountList { + address, err := k.AddressCodec().StringToBytes(elem.Address) + if err != nil { + return err + } + + if err := k.MainnetAccount.Set(ctx, collections.Join(elem.ProjectID, sdk.AccAddress(address)), elem); err != nil { + return err + } + } + + // Set all the project + for _, elem := range genState.ProjectList { + if err := k.Project.Set(ctx, elem.ProjectID, elem); err != nil { + return err + } + } + + // Set project count + if err := k.ProjectSeq.Set(ctx, genState.ProjectCount); err != nil { + return err + } + // Set all the projectChains + for _, elem := range genState.ProjectChainsList { + if err := k.ProjectChains.Set(ctx, elem.ProjectID, elem); err != nil { + return err + } + } + // this line is used by starport scaffolding # genesis/module/init + + return k.Params.Set(ctx, genState.Params) +} + +// ExportGenesis returns the module's exported genesis. +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) { + var err error + + genesis := types.DefaultGenesis() + genesis.Params, err = k.Params.Get(ctx) + if err != nil { + return nil, err + } + + if err := k.MainnetAccount.Walk(ctx, nil, func(_ collections.Pair[uint64, sdk.AccAddress], val types.MainnetAccount) (stop bool, err error) { + genesis.MainnetAccountList = append(genesis.MainnetAccountList, val) + return false, nil + }); err != nil { + return nil, err + } + + err = k.Project.Walk(ctx, nil, func(key uint64, elem types.Project) (bool, error) { + genesis.ProjectList = append(genesis.ProjectList, elem) + return false, nil + }) + if err != nil { + return nil, err + } + + genesis.ProjectCount, err = k.ProjectSeq.Peek(ctx) + if err != nil { + return nil, err + } + + if err := k.ProjectChains.Walk(ctx, nil, func(_ uint64, val types.ProjectChains) (stop bool, err error) { + genesis.ProjectChainsList = append(genesis.ProjectChainsList, val) + return false, nil + }); err != nil { + return nil, err + } + // this line is used by starport scaffolding # genesis/module/export + + return genesis, nil +} diff --git a/x/project/module/genesis_test.go b/x/project/module/genesis_test.go new file mode 100644 index 00000000..07851231 --- /dev/null +++ b/x/project/module/genesis_test.go @@ -0,0 +1,61 @@ +package project_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + project "github.com/ignite/network/x/project/module" + "github.com/ignite/network/x/project/types" +) + +func TestGenesis(t *testing.T) { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + + MainnetAccountList: []types.MainnetAccount{ + { + ProjectID: 0, + }, + { + ProjectID: 1, + }, + }, + ProjectList: []types.Project{ + { + ProjectID: 0, + }, + { + ProjectID: 1, + }, + }, + ProjectCount: 2, + ProjectChainsList: []types.ProjectChains{ + { + ProjectID: 0, + }, + { + ProjectID: 1, + }, + }, + // this line is used by starport scaffolding # genesis/test/state + } + + k, ctx, _ := keepertest.ProjectKeeper(t) + err := project.InitGenesis(ctx, k, genesisState) + require.NoError(t, err) + got, err := project.ExportGenesis(ctx, k) + require.NoError(t, err) + require.NotNil(t, got) + + nullify.Fill(&genesisState) + nullify.Fill(got) + + require.ElementsMatch(t, genesisState.MainnetAccountList, got.MainnetAccountList) + require.ElementsMatch(t, genesisState.ProjectList, got.ProjectList) + require.Equal(t, genesisState.ProjectCount, got.ProjectCount) + require.ElementsMatch(t, genesisState.ProjectChainsList, got.ProjectChainsList) + // this line is used by starport scaffolding # genesis/test/assert +} diff --git a/x/project/module/module.go b/x/project/module/module.go new file mode 100644 index 00000000..446e4b5f --- /dev/null +++ b/x/project/module/module.go @@ -0,0 +1,234 @@ +package project + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + + // this line is used by starport scaffolding # 1 + + modulev1 "github.com/ignite/network/api/network/project/module/v1" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasInvariants = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface that defines the +// independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module, which is used +// to marshal and unmarshal structs to/from []byte in order to persist them in the module's KVStore. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers a module's interface types and their concrete implementations as proto.Message. +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns a default GenesisState for the module, marshalled to json.RawMessage. +// The default GenesisState need to be defined by the module developer and is primarily used for testing. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis used to validate the GenesisState, given in its json.RawMessage form. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper + profileKeeper types.ProfileKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, + profileKeeper types.ProfileKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + profileKeeper: profileKeeper, + } +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper)) +} + +// RegisterInvariants registers the invariants of the module. If an invariant deviates from its predicted value, the InvariantRegistry triggers appropriate logic (most often the chain will be halted) +func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { + keeper.RegisterInvariants(ir, am.keeper) +} + +// InitGenesis performs the module's genesis initialization. It returns no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + if err := InitGenesis(ctx, am.keeper, genState); err != nil { + panic(err) + } +} + +// ExportGenesis returns the module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState, err := ExportGenesis(ctx, am.keeper) + if err != nil { + panic(err) + } + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion is a sequence number for state-breaking change of the module. +// It should be incremented on each consensus-breaking change introduced by the module. +// To avoid wrong/empty versions, the initial version should be set to 1. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block. +// The end block implementation is optional. +func (am AppModule) EndBlock(_ context.Context) error { + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// ---------------------------------------------------------------------------- +// App Wiring Setup +// ---------------------------------------------------------------------------- + +func init() { + appmodule.Register( + &modulev1.Module{}, + appmodule.Provide(ProvideModule), + ) +} + +type ModuleInputs struct { + depinject.In + + AddressCodec address.Codec + StoreService store.KVStoreService + Cdc codec.Codec + Config *modulev1.Module + Logger log.Logger + + AccountKeeper types.AccountKeeper + BankKeeper types.BankKeeper + DistributionKeeper types.DistributionKeeper + ProfileKeeper types.ProfileKeeper + LaunchKeeper keeper.LaunchKeeper +} + +type ModuleOutputs struct { + depinject.Out + + ProjectKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + k := keeper.NewKeeper( + in.Cdc, + in.AddressCodec, + in.StoreService, + in.Logger, + authority.String(), + in.DistributionKeeper, + in.ProfileKeeper, + in.BankKeeper, + in.LaunchKeeper, + ) + m := NewAppModule( + in.Cdc, + k, + in.AccountKeeper, + in.BankKeeper, + in.ProfileKeeper, + ) + + return ModuleOutputs{ProjectKeeper: k, Module: m} +} diff --git a/x/project/module/simulation.go b/x/project/module/simulation.go new file mode 100644 index 00000000..c01ba5ae --- /dev/null +++ b/x/project/module/simulation.go @@ -0,0 +1,244 @@ +package project + +import ( + "math/rand" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/testutil/sample" + projectsimulation "github.com/ignite/network/x/project/simulation" + "github.com/ignite/network/x/project/types" +) + +// avoid unused import issue +var _ = sample.AccAddress + +const ( + defaultWeightMsgCreateProject = 25 + defaultWeightMsgEditProject = 20 + defaultWeightMsgUpdateTotalSupply = 20 + defaultWeightMsgInitializeMainnet = 15 + defaultWeightMsgUpdateSpecialAllocations = 20 + defaultWeightMsgMintVouchers = 20 + defaultWeightMsgBurnVouchers = 20 + defaultWeightMsgRedeemVouchers = 20 + defaultWeightMsgUnredeemVouchers = 20 + + opWeightMsgCreateProject = "op_weight_msg_create_project" + opWeightMsgEditProject = "op_weight_msg_edit_project" + opWeightMsgUpdateTotalSupply = "op_weight_msg_update_total_supply" + opWeightMsgInitializeMainnet = "op_weight_msg_initialize_mainnet" + opWeightMsgUpdateSpecialAllocations = "op_weight_msg_update_special_allocations" + opWeightMsgMintVouchers = "op_weight_msg_mint_vouchers" + opWeightMsgBurnVouchers = "op_weight_msg_burn_vouchers" + opWeightMsgRedeemVouchers = "op_weight_msg_redeem_vouchers" + opWeightMsgUnredeemVouchers = "op_weight_msg_unredeem_vouchers" + + // this line is used by starport scaffolding # simapp/module/const +) + +// GenerateGenesisState creates a randomized GenState of the module. +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + accs := make([]string, len(simState.Accounts)) + for i, acc := range simState.Accounts { + accs[i] = acc.Address.String() + } + projectGenesis := types.GenesisState{ + Params: types.DefaultParams(), + // this line is used by starport scaffolding # simapp/module/genesisState + } + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&projectGenesis) +} + +// RegisterStoreDecoder registers a decoder. +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { + operations := make([]simtypes.WeightedOperation, 0) + + var weightMsgCreateProject int + simState.AppParams.GetOrGenerate(opWeightMsgCreateProject, &weightMsgCreateProject, nil, + func(_ *rand.Rand) { + weightMsgCreateProject = defaultWeightMsgCreateProject + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgCreateProject, + projectsimulation.SimulateMsgCreateProject(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgEditProject int + simState.AppParams.GetOrGenerate(opWeightMsgEditProject, &weightMsgEditProject, nil, + func(_ *rand.Rand) { + weightMsgEditProject = defaultWeightMsgEditProject + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgEditProject, + projectsimulation.SimulateMsgEditProject(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgUpdateTotalSupply int + simState.AppParams.GetOrGenerate(opWeightMsgUpdateTotalSupply, &weightMsgUpdateTotalSupply, nil, + func(_ *rand.Rand) { + weightMsgUpdateTotalSupply = defaultWeightMsgUpdateTotalSupply + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgUpdateTotalSupply, + projectsimulation.SimulateMsgUpdateTotalSupply(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgUpdateSpecialAllocations int + simState.AppParams.GetOrGenerate(opWeightMsgUpdateSpecialAllocations, &weightMsgUpdateSpecialAllocations, nil, + func(_ *rand.Rand) { + weightMsgUpdateSpecialAllocations = defaultWeightMsgUpdateSpecialAllocations + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgUpdateSpecialAllocations, + projectsimulation.SimulateMsgUpdateSpecialAllocations(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgInitializeMainnet int + simState.AppParams.GetOrGenerate(opWeightMsgInitializeMainnet, &weightMsgInitializeMainnet, nil, + func(_ *rand.Rand) { + weightMsgInitializeMainnet = defaultWeightMsgInitializeMainnet + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgInitializeMainnet, + projectsimulation.SimulateMsgInitializeMainnet(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgMintVouchers int + simState.AppParams.GetOrGenerate(opWeightMsgMintVouchers, &weightMsgMintVouchers, nil, + func(_ *rand.Rand) { + weightMsgMintVouchers = defaultWeightMsgMintVouchers + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgMintVouchers, + projectsimulation.SimulateMsgMintVouchers(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgBurnVouchers int + simState.AppParams.GetOrGenerate(opWeightMsgBurnVouchers, &weightMsgBurnVouchers, nil, + func(_ *rand.Rand) { + weightMsgBurnVouchers = defaultWeightMsgBurnVouchers + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgBurnVouchers, + projectsimulation.SimulateMsgBurnVouchers(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgRedeemVouchers int + simState.AppParams.GetOrGenerate(opWeightMsgRedeemVouchers, &weightMsgRedeemVouchers, nil, + func(_ *rand.Rand) { + weightMsgRedeemVouchers = defaultWeightMsgRedeemVouchers + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgRedeemVouchers, + projectsimulation.SimulateMsgRedeemVouchers(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + var weightMsgUnredeemVouchers int + simState.AppParams.GetOrGenerate(opWeightMsgUnredeemVouchers, &weightMsgUnredeemVouchers, nil, + func(_ *rand.Rand) { + weightMsgUnredeemVouchers = defaultWeightMsgUnredeemVouchers + }, + ) + operations = append(operations, simulation.NewWeightedOperation( + weightMsgUnredeemVouchers, + projectsimulation.SimulateMsgUnredeemVouchers(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), + )) + + // this line is used by starport scaffolding # simapp/module/operation + + return operations +} + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + simulation.NewWeightedProposalMsg( + opWeightMsgCreateProject, + defaultWeightMsgCreateProject, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgCreateProject(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgEditProject, + defaultWeightMsgEditProject, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgEditProject(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgUpdateTotalSupply, + defaultWeightMsgUpdateTotalSupply, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgUpdateTotalSupply(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgUpdateSpecialAllocations, + defaultWeightMsgUpdateSpecialAllocations, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgUpdateSpecialAllocations(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgInitializeMainnet, + defaultWeightMsgInitializeMainnet, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgInitializeMainnet(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgMintVouchers, + defaultWeightMsgMintVouchers, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgMintVouchers(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgBurnVouchers, + defaultWeightMsgBurnVouchers, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgBurnVouchers(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgRedeemVouchers, + defaultWeightMsgRedeemVouchers, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgRedeemVouchers(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + simulation.NewWeightedProposalMsg( + opWeightMsgUnredeemVouchers, + defaultWeightMsgUnredeemVouchers, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + projectsimulation.SimulateMsgUnredeemVouchers(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + // this line is used by starport scaffolding # simapp/module/OpMsg + } +} diff --git a/x/project/module_simulation.go b/x/project/module_simulation.go deleted file mode 100644 index cee8daf4..00000000 --- a/x/project/module_simulation.go +++ /dev/null @@ -1,167 +0,0 @@ -package project - -import ( - "math/rand" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - - "github.com/tendermint/spn/testutil/sample" - projectsim "github.com/tendermint/spn/x/project/simulation" - "github.com/tendermint/spn/x/project/types" -) - -const ( - defaultWeightMsgCreateProject = 25 - defaultWeightMsgEditProject = 20 - defaultWeightMsgUpdateTotalSupply = 20 - defaultWeightMsgInitializeMainnet = 15 - defaultWeightMsgUpdateSpecialAllocations = 20 - defaultWeightMsgMintVouchers = 20 - defaultWeightMsgBurnVouchers = 20 - defaultWeightMsgRedeemVouchers = 20 - defaultWeightMsgUnredeemVouchers = 20 - - opWeightMsgCreateProject = "op_weight_msg_create_project" - opWeightMsgEditProject = "op_weight_msg_edit_project" - opWeightMsgUpdateTotalSupply = "op_weight_msg_update_total_supply" - opWeightMsgInitializeMainnet = "op_weight_msg_initialize_mainnet" - opWeightMsgUpdateSpecialAllocations = "op_weight_msg_update_special_allocations" - opWeightMsgMintVouchers = "op_weight_msg_mint_vouchers" - opWeightMsgBurnVouchers = "op_weight_msg_burn_vouchers" - opWeightMsgRedeemVouchers = "op_weight_msg_redeem_vouchers" - opWeightMsgUnredeemVouchers = "op_weight_msg_unredeem_vouchers" - - // this line is used by starport scaffolding # simapp/module/const -) - -// GenerateGenesisState creates a randomized GenState of the module -func (AppModule) GenerateGenesisState(simState *module.SimulationState) { - projectGenesis := sample.ProjectGenesisState(simState.Rand) - simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&projectGenesis) -} - -// ProposalContents doesn't return any content functions for governance proposals -func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { - return nil -} - -// RandomizedParams creates randomized param changes for the simulator -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { - projectParams := types.DefaultParams() - return []simtypes.LegacyParamChange{ - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyTotalSupplyRange), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(projectParams.TotalSupplyRange)) - }), - simulation.NewSimLegacyParamChange(types.ModuleName, string(types.KeyProjectCreationFee), func(r *rand.Rand) string { - return string(types.Amino.MustMarshalJSON(projectParams.ProjectCreationFee)) - }), - } -} - -// RegisterStoreDecoder registers a decoder -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} - -// WeightedOperations returns the all the gov module operations with their respective weights. -func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { - var ( - weightMsgCreateProject int - weightMsgEditProject int - weightMsgUpdateTotalSupply int - weightMsgInitializeMainnet int - weightMsgUpdateSpecialAllocations int - weightMsgMintVouchers int - weightMsgBurnVouchers int - weightMsgRedeemVouchers int - weightMsgUnredeemVouchers int - ) - - appParams := simState.AppParams - cdc := simState.Cdc - appParams.GetOrGenerate(cdc, opWeightMsgCreateProject, &weightMsgCreateProject, nil, - func(_ *rand.Rand) { - weightMsgCreateProject = defaultWeightMsgCreateProject - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgEditProject, &weightMsgEditProject, nil, - func(_ *rand.Rand) { - weightMsgEditProject = defaultWeightMsgEditProject - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgUpdateTotalSupply, &weightMsgUpdateTotalSupply, nil, - func(_ *rand.Rand) { - weightMsgUpdateTotalSupply = defaultWeightMsgUpdateTotalSupply - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgInitializeMainnet, &weightMsgInitializeMainnet, nil, - func(_ *rand.Rand) { - weightMsgInitializeMainnet = defaultWeightMsgInitializeMainnet - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgUpdateSpecialAllocations, &weightMsgUpdateSpecialAllocations, nil, - func(_ *rand.Rand) { - weightMsgInitializeMainnet = defaultWeightMsgUpdateSpecialAllocations - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgMintVouchers, &weightMsgMintVouchers, nil, - func(_ *rand.Rand) { - weightMsgMintVouchers = defaultWeightMsgMintVouchers - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgBurnVouchers, &weightMsgBurnVouchers, nil, - func(_ *rand.Rand) { - weightMsgBurnVouchers = defaultWeightMsgBurnVouchers - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgRedeemVouchers, &weightMsgRedeemVouchers, nil, - func(_ *rand.Rand) { - weightMsgRedeemVouchers = defaultWeightMsgRedeemVouchers - }, - ) - appParams.GetOrGenerate(cdc, opWeightMsgUnredeemVouchers, &weightMsgUnredeemVouchers, nil, - func(_ *rand.Rand) { - weightMsgUnredeemVouchers = defaultWeightMsgUnredeemVouchers - }, - ) - - return []simtypes.WeightedOperation{ - simulation.NewWeightedOperation( - weightMsgCreateProject, - projectsim.SimulateMsgCreateProject(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgEditProject, - projectsim.SimulateMsgEditProject(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgUpdateTotalSupply, - projectsim.SimulateMsgUpdateTotalSupply(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgInitializeMainnet, - projectsim.SimulateMsgInitializeMainnet(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgUpdateSpecialAllocations, - projectsim.SimulateMsgUpdateSpecialAllocations(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgMintVouchers, - projectsim.SimulateMsgMintVouchers(am.accountKeeper, am.bankKeeper, am.profileKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgBurnVouchers, - projectsim.SimulateMsgBurnVouchers(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgRedeemVouchers, - projectsim.SimulateMsgRedeemVouchers(am.accountKeeper, am.bankKeeper, am.keeper), - ), - simulation.NewWeightedOperation( - weightMsgUnredeemVouchers, - projectsim.SimulateMsgUnredeemVouchers(am.accountKeeper, am.bankKeeper, am.keeper), - ), - } -} diff --git a/x/project/simulation/burn_vouchers.go b/x/project/simulation/burn_vouchers.go new file mode 100644 index 00000000..f7513f0b --- /dev/null +++ b/x/project/simulation/burn_vouchers.go @@ -0,0 +1,36 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func SimulateMsgBurnVouchers( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgBurnVouchers{} + prjtID, simAccount, vouchers, found := GetAccountWithVouchers(r, ctx, bk, k, accs, false) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip burn vouchers"), nil, nil + } + + msg = types.NewMsgBurnVouchers( + simAccount.Address.String(), + prjtID, + vouchers, + ) + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, vouchers, txGen) + } +} diff --git a/x/project/simulation/create_project.go b/x/project/simulation/create_project.go new file mode 100644 index 00000000..e68fbf84 --- /dev/null +++ b/x/project/simulation/create_project.go @@ -0,0 +1,49 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +// SimulateMsgCreateProject simulates a MsgCreateProject message +func SimulateMsgCreateProject( + ak types.AccountKeeper, + bk types.BankKeeper, + pk types.ProfileKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgCreateProject{} + + simAccount, _, found := GetCoordSimAccount(r, ctx, pk, accs) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip project creation"), nil, nil + } + + params, err := k.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "params not found"), nil, err + } + creationFee := params.ProjectCreationFee + + msg = types.NewMsgCreateProject( + simAccount.Address.String(), + sample.ProjectName(r), + sample.TotalSupply(r), + sample.Metadata(r, 20), + ) + + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, creationFee, txGen) + } +} diff --git a/x/project/simulation/edit_project.go b/x/project/simulation/edit_project.go new file mode 100644 index 00000000..d6225be2 --- /dev/null +++ b/x/project/simulation/edit_project.go @@ -0,0 +1,57 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func SimulateMsgEditProject( + ak types.AccountKeeper, + bk types.BankKeeper, + pk types.ProfileKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgEditProject{} + + simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, false, false) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip edit project"), nil, nil + } + + var newName string + var newMetadata []byte + + name := r.Intn(100) < 50 + metadata := r.Intn(100) < 50 + // ensure there is always a value to edit + if !name && !metadata { + metadata = true + } + + if name { + newName = sample.ProjectName(r) + } + if metadata { + newMetadata = sample.Metadata(r, 20) + } + + msg = types.NewMsgEditProject( + simAccount.Address.String(), + prjtID, + newName, + newMetadata, + ) + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins(), txGen) + } +} diff --git a/x/project/simulation/store.go b/x/project/simulation/helpers.go similarity index 77% rename from x/project/simulation/store.go rename to x/project/simulation/helpers.go index e0d1e1f8..81e6e48a 100644 --- a/x/project/simulation/store.go +++ b/x/project/simulation/helpers.go @@ -4,13 +4,22 @@ import ( "math/rand" sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" ) +// TypedMsg extends sdk.Msg with Type method +type TypedMsg interface { + sdk.Msg + Type() string +} + // ShareDenoms are the denom used for the shares in the simulation var ShareDenoms = []string{"s/foo", "s/bar", "s/toto"} @@ -22,7 +31,10 @@ func GetCoordSimAccount( accs []simtypes.Account, ) (simtypes.Account, uint64, bool) { // Choose a random coordinator - coords := pk.GetAllCoordinator(ctx) + coords, err := pk.Coordinators(ctx) + if err != nil { + return simtypes.Account{}, 0, false + } coordNb := len(coords) if coordNb == 0 { return simtypes.Account{}, 0, false @@ -50,7 +62,10 @@ func GetCoordSimAccountWithProjectID( requireNoMainnetInitialized bool, requireNoMainnetLaunchTriggered bool, ) (simtypes.Account, uint64, bool) { - projects := k.GetAllProject(ctx) + projects, err := k.Projects(ctx) + if err != nil { + return simtypes.Account{}, 0, false + } prjtNb := len(projects) if prjtNb == 0 { return simtypes.Account{}, 0, false @@ -92,8 +107,8 @@ func GetCoordSimAccountWithProjectID( } // Find the sim account of the project coordinator - coord, found := pk.GetCoordinator(ctx, prjt.CoordinatorID) - if !found { + coord, err := pk.GetCoordinator(ctx, prjt.CoordinatorID) + if err != nil { return simtypes.Account{}, 0, false } for _, acc := range accs { @@ -107,14 +122,19 @@ func GetCoordSimAccountWithProjectID( // GetSharesFromProject returns a small portion of shares that can be minted as vouchers or added to an account func GetSharesFromProject(r *rand.Rand, ctx sdk.Context, k keeper.Keeper, prjtID uint64) (types.Shares, bool) { - prjt, found := k.GetProject(ctx, prjtID) - if !found { + prjt, err := k.GetProject(ctx, prjtID) + if err != nil { + return types.EmptyShares(), false + } + + totalShares, err := k.TotalShares.Get(ctx) + if err != nil { return types.EmptyShares(), false } var shares sdk.Coins for _, share := range ShareDenoms { - remaining := int64(k.GetTotalShares(ctx)) - prjt.AllocatedShares.AmountOf(share) + remaining := int64(totalShares) - prjt.AllocatedShares.AmountOf(share) if remaining == 0 { continue } @@ -154,8 +174,8 @@ func GetAccountWithVouchers( } if requireNoMainnetLaunchTriggered { - project, found := k.GetProject(ctx, prjtID) - if !found { + project, err := k.GetProject(ctx, prjtID) + if err != nil { return false } launched, err := k.IsProjectMainnetLaunchTriggered(ctx, project.ProjectID) @@ -209,7 +229,10 @@ func GetAccountWithShares( accs []simtypes.Account, requireNoMainnetLaunchTriggered bool, ) (uint64, simtypes.Account, types.Shares, bool) { - mainnetAccounts := k.GetAllMainnetAccount(ctx) + mainnetAccounts, err := k.GetAllMainnetAccount(ctx) + if err != nil { + return 0, simtypes.Account{}, nil, false + } nb := len(mainnetAccounts) // No account have been created yet @@ -225,8 +248,8 @@ func GetAccountWithShares( var mainnetAccount types.MainnetAccount for _, mAcc := range mainnetAccounts { if requireNoMainnetLaunchTriggered { - project, found := k.GetProject(ctx, mAcc.ProjectID) - if !found { + project, err := k.GetProject(ctx, mAcc.ProjectID) + if err != nil { continue } launched, _ := k.IsProjectMainnetLaunchTriggered(ctx, project.ProjectID) @@ -246,3 +269,31 @@ func GetAccountWithShares( } return 0, simtypes.Account{}, nil, false } + +// deliverSimTx delivers the tx for simulation from the provided message +func deliverSimTx( + r *rand.Rand, + app *baseapp.BaseApp, + ctx sdk.Context, + ak types.AccountKeeper, + bk types.BankKeeper, + simAccount simtypes.Account, + msg TypedMsg, + coinsSpent sdk.Coins, + txGen client.TxConfig, +) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: txGen, + Cdc: nil, + Msg: msg, + Context: ctx, + SimAccount: simAccount, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: types.ModuleName, + CoinsSpentInMsg: coinsSpent, + } + return simulation.GenAndDeliverTxWithRandFees(txCtx) +} diff --git a/x/project/simulation/store_test.go b/x/project/simulation/helpers_test.go similarity index 67% rename from x/project/simulation/store_test.go rename to x/project/simulation/helpers_test.go index af20b3d0..d4d734d5 100644 --- a/x/project/simulation/store_test.go +++ b/x/project/simulation/helpers_test.go @@ -5,17 +5,18 @@ import ( "math/rand" "testing" + "cosmossdk.io/collections" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - profilekeeper "github.com/tendermint/spn/x/profile/keeper" - profiletypes "github.com/tendermint/spn/x/profile/types" - simproject "github.com/tendermint/spn/x/project/simulation" - projecttypes "github.com/tendermint/spn/x/project/types" + spntypes "github.com/ignite/network/pkg/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + profilekeeper "github.com/ignite/network/x/profile/keeper" + profiletypes "github.com/ignite/network/x/profile/types" + simproject "github.com/ignite/network/x/project/simulation" + projecttypes "github.com/ignite/network/x/project/types" ) // populateCoordinators populates the profile keeper with some coordinators from simulation accounts @@ -32,12 +33,12 @@ func populateCoordinators( accs[i], accs[j] = accs[j], accs[i] }) for i := 0; i < coordNb; i++ { - coordID := pk.AppendCoordinator(ctx, profiletypes.Coordinator{ + coordID, err := pk.AppendCoordinator(ctx, profiletypes.Coordinator{ Address: accs[i].Address.String(), Description: sample.CoordinatorDescription(r), Active: true, }) - + require.NoError(t, err) coordIDs = append(coordIDs, coordID) } @@ -54,14 +55,14 @@ func TestGetCoordSimAccount(t *testing.T) { require.False(t, found) }) - populateCoordinators(t, r, ctx, *tk.ProfileKeeper, accs, 10) + populateCoordinators(t, r, ctx, tk.ProfileKeeper, accs, 10) t.Run("should find coordinators", func(t *testing.T) { acc, coordID, found := simproject.GetCoordSimAccount(r, ctx, tk.ProfileKeeper, accs) require.True(t, found) require.Contains(t, accs, acc) - _, found = tk.ProfileKeeper.GetCoordinator(ctx, coordID) - require.True(t, found) + _, err := tk.ProfileKeeper.GetCoordinator(ctx, coordID) + require.NoError(t, err) }) } @@ -69,13 +70,14 @@ func TestGetCoordSimAccountWithProjectID(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) r := sample.Rand() accs := sample.SimAccounts() + var err error t.Run("should find no project", func(t *testing.T) { _, _, found := simproject.GetCoordSimAccountWithProjectID( r, ctx, tk.ProfileKeeper, - *tk.ProjectKeeper, + tk.ProjectKeeper, accs, false, false, @@ -83,7 +85,7 @@ func TestGetCoordSimAccountWithProjectID(t *testing.T) { require.False(t, found) }) - coords := populateCoordinators(t, r, ctx, *tk.ProfileKeeper, accs, 10) + coords := populateCoordinators(t, r, ctx, tk.ProfileKeeper, accs, 10) t.Run("should find one project with mainnet launch triggered", func(t *testing.T) { prjt := projecttypes.NewProject( @@ -98,13 +100,15 @@ func TestGetCoordSimAccountWithProjectID(t *testing.T) { chain := sample.Chain(r, 0, coords[1]) chain.LaunchTriggered = true chain.IsMainnet = true - prjt.MainnetID = tk.LaunchKeeper.AppendChain(ctx, chain) - tk.ProjectKeeper.AppendProject(ctx, prjt) + prjt.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + _, err = tk.ProjectKeeper.AppendProject(ctx, prjt) + require.NoError(t, err) _, _, found := simproject.GetCoordSimAccountWithProjectID( r, ctx, tk.ProfileKeeper, - *tk.ProjectKeeper, + tk.ProjectKeeper, accs, false, true, @@ -125,21 +129,23 @@ func TestGetCoordSimAccountWithProjectID(t *testing.T) { chain := sample.Chain(r, 0, coords[1]) chain.LaunchTriggered = false chain.IsMainnet = true - prjt.MainnetID = tk.LaunchKeeper.AppendChain(ctx, chain) - tk.ProjectKeeper.AppendProject(ctx, prjt) + prjt.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + _, err = tk.ProjectKeeper.AppendProject(ctx, prjt) + require.NoError(t, err) acc, id, found := simproject.GetCoordSimAccountWithProjectID( r, ctx, tk.ProfileKeeper, - *tk.ProjectKeeper, + tk.ProjectKeeper, accs, false, true, ) require.True(t, found) require.Contains(t, accs, acc) - _, found = tk.ProjectKeeper.GetProject(ctx, id) - require.True(t, found) + _, err = tk.ProjectKeeper.GetProject(ctx, id) + require.NoError(t, err) require.EqualValues(t, id, prjt.ProjectID) }) @@ -152,20 +158,21 @@ func TestGetCoordSimAccountWithProjectID(t *testing.T) { sample.Metadata(r, 20), sample.Duration(r).Milliseconds(), ) - idNoMainnet := tk.ProjectKeeper.AppendProject(ctx, prjt) + idNoMainnet, err := tk.ProjectKeeper.AppendProject(ctx, prjt) + require.NoError(t, err) acc, id, found := simproject.GetCoordSimAccountWithProjectID( r, ctx, tk.ProfileKeeper, - *tk.ProjectKeeper, + tk.ProjectKeeper, accs, true, false, ) require.True(t, found) require.Contains(t, accs, acc) - _, found = tk.ProjectKeeper.GetProject(ctx, id) - require.True(t, found) + _, err = tk.ProjectKeeper.GetProject(ctx, id) + require.NoError(t, err) require.EqualValues(t, idNoMainnet, id) require.EqualValues(t, prjt.ProjectID, id) require.False(t, prjt.MainnetInitialized) @@ -177,7 +184,7 @@ func TestGetSharesFromProject(t *testing.T) { r := sample.Rand() t.Run("should find no project", func(t *testing.T) { - _, found := simproject.GetSharesFromProject(r, ctx, *tk.ProjectKeeper, 0) + _, found := simproject.GetSharesFromProject(r, ctx, tk.ProjectKeeper, 0) require.False(t, found) }) @@ -196,13 +203,15 @@ func TestGetSharesFromProject(t *testing.T) { )) require.NoError(t, err) prjt.AllocatedShares = shares - prjtSharesReached := tk.ProjectKeeper.AppendProject(ctx, prjt) - _, found := simproject.GetSharesFromProject(r, ctx, *tk.ProjectKeeper, prjtSharesReached) + prjtSharesReached, err := tk.ProjectKeeper.AppendProject(ctx, prjt) + require.NoError(t, err) + + _, found := simproject.GetSharesFromProject(r, ctx, tk.ProjectKeeper, prjtSharesReached) require.False(t, found) }) t.Run("should find project with available shares", func(t *testing.T) { - prjtID := tk.ProjectKeeper.AppendProject(ctx, projecttypes.NewProject( + prjtID, err := tk.ProjectKeeper.AppendProject(ctx, projecttypes.NewProject( 1, sample.AlphaString(r, 5), 0, @@ -210,7 +219,8 @@ func TestGetSharesFromProject(t *testing.T) { sample.Metadata(r, 20), sample.Duration(r).Milliseconds(), )) - shares, found := simproject.GetSharesFromProject(r, ctx, *tk.ProjectKeeper, prjtID) + require.NoError(t, err) + shares, found := simproject.GetSharesFromProject(r, ctx, tk.ProjectKeeper, prjtID) require.True(t, found) require.NotEqualValues(t, projecttypes.EmptyShares(), shares) }) @@ -220,6 +230,7 @@ func TestGetAccountWithVouchers(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) r := sample.Rand() accs := sample.SimAccounts() + var err error mint := func(addr sdk.AccAddress, coins sdk.Coins) { require.NoError(t, tk.BankKeeper.MintCoins(ctx, projecttypes.ModuleName, coins)) @@ -227,7 +238,7 @@ func TestGetAccountWithVouchers(t *testing.T) { } t.Run("should find no account", func(t *testing.T) { - _, _, _, found := simproject.GetAccountWithVouchers(r, ctx, tk.BankKeeper, *tk.ProjectKeeper, accs, false) + _, _, _, found := simproject.GetAccountWithVouchers(r, ctx, tk.BankKeeper, tk.ProjectKeeper, accs, false) require.False(t, found) }) @@ -238,10 +249,12 @@ func TestGetAccountWithVouchers(t *testing.T) { chain := sample.Chain(r, 0, 0) chain.LaunchTriggered = true chain.IsMainnet = true - project.MainnetID = tk.LaunchKeeper.AppendChain(ctx, chain) - project.ProjectID = tk.ProjectKeeper.AppendProject(ctx, project) + project.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + project.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) mint(acc.Address, sample.Vouchers(r, project.ProjectID)) - prjtID, acc, coins, found := simproject.GetAccountWithVouchers(r, ctx, tk.BankKeeper, *tk.ProjectKeeper, accs, false) + prjtID, acc, coins, found := simproject.GetAccountWithVouchers(r, ctx, tk.BankKeeper, tk.ProjectKeeper, accs, false) require.True(t, found) require.EqualValues(t, project.ProjectID, prjtID) require.False(t, coins.Empty()) @@ -252,9 +265,10 @@ func TestGetAccountWithVouchers(t *testing.T) { acc, _ := simtypes.RandomAcc(r, accs) project := sample.Project(r, 1) project.MainnetInitialized = false - project.ProjectID = tk.ProjectKeeper.AppendProject(ctx, project) + project.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) mint(acc.Address, sample.Vouchers(r, project.ProjectID)) - prjtID, acc, coins, found := simproject.GetAccountWithVouchers(r, ctx, tk.BankKeeper, *tk.ProjectKeeper, accs, true) + prjtID, acc, coins, found := simproject.GetAccountWithVouchers(r, ctx, tk.BankKeeper, tk.ProjectKeeper, accs, true) require.True(t, found) require.EqualValues(t, project.ProjectID, prjtID) require.False(t, coins.Empty()) @@ -266,22 +280,26 @@ func TestGetAccountWithShares(t *testing.T) { ctx, tk, _ := testkeeper.NewTestSetup(t) r := sample.Rand() accs := sample.SimAccounts() + var err error t.Run("should find no account", func(t *testing.T) { - _, _, _, found := simproject.GetAccountWithShares(r, ctx, *tk.ProjectKeeper, accs, false) + _, _, _, found := simproject.GetAccountWithShares(r, ctx, tk.ProjectKeeper, accs, false) require.False(t, found) }) t.Run("should not find account not part of sim accounts", func(t *testing.T) { - sampleAddr := sample.Address(r) - tk.ProjectKeeper.SetMainnetAccount(ctx, projecttypes.MainnetAccount{ - ProjectID: 10, - Address: sampleAddr, + sampleAddr := sample.AccAddress(r) + projectID := uint64(10) + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(projectID, sampleAddr), projecttypes.MainnetAccount{ + ProjectID: projectID, + Address: sampleAddr.String(), Shares: sample.Shares(r), }) - _, _, _, found := simproject.GetAccountWithShares(r, ctx, *tk.ProjectKeeper, accs, false) + require.NoError(t, err) + _, _, _, found := simproject.GetAccountWithShares(r, ctx, tk.ProjectKeeper, accs, false) require.False(t, found) - tk.ProjectKeeper.RemoveMainnetAccount(ctx, 10, sampleAddr) + err = tk.ProjectKeeper.MainnetAccount.Remove(ctx, collections.Join(projectID, sampleAddr)) + require.NoError(t, err) }) t.Run("should find account from project with launched mainnet can be retrieved", func(t *testing.T) { @@ -291,15 +309,18 @@ func TestGetAccountWithShares(t *testing.T) { chain := sample.Chain(r, 0, 0) chain.LaunchTriggered = true chain.IsMainnet = true - project.MainnetID = tk.LaunchKeeper.AppendChain(ctx, chain) - project.ProjectID = tk.ProjectKeeper.AppendProject(ctx, project) + project.MainnetID, err = tk.LaunchKeeper.AppendChain(ctx, chain) + require.NoError(t, err) + project.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) share := sample.Shares(r) - tk.ProjectKeeper.SetMainnetAccount(ctx, projecttypes.MainnetAccount{ + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(project.ProjectID, acc.Address), projecttypes.MainnetAccount{ ProjectID: project.ProjectID, Address: acc.Address.String(), Shares: share, }) - prjtID, acc, shareRetrieved, found := simproject.GetAccountWithShares(r, ctx, *tk.ProjectKeeper, accs, false) + require.NoError(t, err) + prjtID, acc, shareRetrieved, found := simproject.GetAccountWithShares(r, ctx, tk.ProjectKeeper, accs, false) require.True(t, found) require.Contains(t, accs, acc) require.EqualValues(t, project.ProjectID, prjtID) @@ -310,14 +331,16 @@ func TestGetAccountWithShares(t *testing.T) { acc, _ := simtypes.RandomAcc(r, accs) project := sample.Project(r, 1) project.MainnetInitialized = false - project.ProjectID = tk.ProjectKeeper.AppendProject(ctx, project) + project.ProjectID, err = tk.ProjectKeeper.AppendProject(ctx, project) + require.NoError(t, err) share := sample.Shares(r) - tk.ProjectKeeper.SetMainnetAccount(ctx, projecttypes.MainnetAccount{ + err = tk.ProjectKeeper.MainnetAccount.Set(ctx, collections.Join(project.ProjectID, acc.Address), projecttypes.MainnetAccount{ ProjectID: project.ProjectID, Address: acc.Address.String(), Shares: share, }) - prjtID, acc, shareRetrieved, found := simproject.GetAccountWithShares(r, ctx, *tk.ProjectKeeper, accs, true) + require.NoError(t, err) + prjtID, acc, shareRetrieved, found := simproject.GetAccountWithShares(r, ctx, tk.ProjectKeeper, accs, true) require.True(t, found) require.Contains(t, accs, acc) require.EqualValues(t, project.ProjectID, prjtID) diff --git a/x/project/simulation/initialize_mainnet.go b/x/project/simulation/initialize_mainnet.go new file mode 100644 index 00000000..0bdd1455 --- /dev/null +++ b/x/project/simulation/initialize_mainnet.go @@ -0,0 +1,40 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func SimulateMsgInitializeMainnet( + ak types.AccountKeeper, + bk types.BankKeeper, + pk types.ProfileKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgInitializeMainnet{} + simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, true, true) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip initliaze mainnet"), nil, nil + } + + msg = types.NewMsgInitializeMainnet( + simAccount.Address.String(), + prjtID, + sample.String(r, 50), + sample.String(r, 32), + sample.GenesisChainID(r), + ) + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins(), txGen) + } +} diff --git a/x/project/simulation/mint_vouchers.go b/x/project/simulation/mint_vouchers.go new file mode 100644 index 00000000..f41a8991 --- /dev/null +++ b/x/project/simulation/mint_vouchers.go @@ -0,0 +1,42 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func SimulateMsgMintVouchers( + ak types.AccountKeeper, + bk types.BankKeeper, + pk types.ProfileKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgMintVouchers{} + simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, false, false) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip mint vouchers"), nil, nil + } + + shares, getShares := GetSharesFromProject(r, ctx, k, prjtID) + if !getShares { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip mint vouchers"), nil, nil + } + + msg = types.NewMsgMintVouchers( + simAccount.Address.String(), + prjtID, + shares, + ) + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins(), txGen) + } +} diff --git a/x/project/simulation/redeem_vouchers.go b/x/project/simulation/redeem_vouchers.go new file mode 100644 index 00000000..d2092a01 --- /dev/null +++ b/x/project/simulation/redeem_vouchers.go @@ -0,0 +1,40 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func SimulateMsgRedeemVouchers( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgRedeemVouchers{} + prjtID, simAccount, vouchers, found := GetAccountWithVouchers(r, ctx, bk, k, accs, true) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip redeem vouchers"), nil, nil + } + + // Select a random account to redeem vouchers into + accountNb := r.Intn(len(accs)) + + msg = types.NewMsgRedeemVouchers( + simAccount.Address.String(), + prjtID, + accs[accountNb].Address.String(), + vouchers, + ) + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, vouchers, txGen) + } +} diff --git a/x/project/simulation/simulation.go b/x/project/simulation/simulation.go deleted file mode 100644 index 0bc5d5f9..00000000 --- a/x/project/simulation/simulation.go +++ /dev/null @@ -1,312 +0,0 @@ -package simulation - -import ( - "math/rand" - - "github.com/cosmos/cosmos-sdk/baseapp" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - sdksimulation "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/tendermint/spn/testutil/encoding" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/testutil/simulation" - "github.com/tendermint/spn/x/project/keeper" - "github.com/tendermint/spn/x/project/types" -) - -// TypedMsg extends sdk.Msg with Type method -type TypedMsg interface { - sdk.Msg - Type() string -} - -// deliverSimTx delivers the tx for simulation from the provided message -func deliverSimTx( - r *rand.Rand, - app *baseapp.BaseApp, - ctx sdk.Context, - ak types.AccountKeeper, - bk types.BankKeeper, - simAccount simtypes.Account, - msg TypedMsg, - coinsSpent sdk.Coins, -) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - txCtx := sdksimulation.OperationInput{ - R: r, - App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - Bankkeeper: bk, - ModuleName: types.ModuleName, - CoinsSpentInMsg: coinsSpent, - } - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) -} - -// SimulateMsgCreateProject simulates a MsgCreateProject message -func SimulateMsgCreateProject( - ak types.AccountKeeper, - bk types.BankKeeper, - pk types.ProfileKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - simAccount, _, found := GetCoordSimAccount(r, ctx, pk, accs) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateProject, "skip project creation"), nil, nil - } - - creationFee := k.ProjectCreationFee(ctx) - - msg := types.NewMsgCreateProject( - simAccount.Address.String(), - sample.ProjectName(r), - sample.TotalSupply(r), - sample.Metadata(r, 20), - ) - - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, creationFee) - } -} - -// SimulateMsgEditProject simulates a MsgEditProject message -func SimulateMsgEditProject(ak types.AccountKeeper, bk types.BankKeeper, pk types.ProfileKeeper, k keeper.Keeper) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - msg := &types.MsgEditProject{} - - simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, false, false) - if !found { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip edit project"), nil, nil - } - - var newName string - var newMetadata []byte - - name := r.Intn(100) < 50 - metadata := r.Intn(100) < 50 - // ensure there is always a value to edit - if !name && !metadata { - metadata = true - } - - if name { - newName = sample.ProjectName(r) - } - if metadata { - newMetadata = sample.Metadata(r, 20) - } - - msg = types.NewMsgEditProject( - simAccount.Address.String(), - prjtID, - newName, - newMetadata, - ) - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins()) - } -} - -// SimulateMsgUpdateTotalSupply simulates a MsgUpdateTotalSupply message -func SimulateMsgUpdateTotalSupply( - ak types.AccountKeeper, - bk types.BankKeeper, - pk types.ProfileKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, true, true) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUpdateTotalSupply, "skip update total supply"), nil, nil - } - - msg := types.NewMsgUpdateTotalSupply( - simAccount.Address.String(), - prjtID, - sample.TotalSupply(r), - ) - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins()) - } -} - -// SimulateMsgInitializeMainnet simulates a MsgInitializeMainnet message -func SimulateMsgInitializeMainnet( - ak types.AccountKeeper, - bk types.BankKeeper, - pk types.ProfileKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, true, true) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgInitializeMainnet, "skip initliaze mainnet"), nil, nil - } - - msg := types.NewMsgInitializeMainnet( - simAccount.Address.String(), - prjtID, - sample.String(r, 50), - sample.String(r, 32), - sample.GenesisChainID(r), - ) - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins()) - } -} - -// SimulateMsgUpdateSpecialAllocations simulates a MsgUpdateSpecialAllocations message -func SimulateMsgUpdateSpecialAllocations(ak types.AccountKeeper, - bk types.BankKeeper, - pk types.ProfileKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, false, true) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUpdateSpecialAllocations, "skip update special allocations"), nil, nil - } - - // get shares for both genesis distribution and claimable airdrop - genesisDistribution, getShares := GetSharesFromProject(r, ctx, k, prjtID) - if !getShares { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUpdateSpecialAllocations, "skip update special allocations"), nil, nil - } - claimableAirdrop, getShares := GetSharesFromProject(r, ctx, k, prjtID) - if !getShares { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUpdateSpecialAllocations, "skip update special allocations"), nil, nil - } - - // GetSharesFromProject returns a number of available shares for a project - // potentially genesisDistribution + claimableAirdrop can overflow the available shares - // we divide by two all amounts to avoid overflowing available shares - for i, s := range genesisDistribution { - genesisDistribution[i].Amount = s.Amount.QuoRaw(2) - } - for i, s := range claimableAirdrop { - claimableAirdrop[i].Amount = s.Amount.QuoRaw(2) - } - - msg := types.NewMsgUpdateSpecialAllocations( - simAccount.Address.String(), - prjtID, - types.NewSpecialAllocations(genesisDistribution, claimableAirdrop), - ) - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins()) - } -} - -// SimulateMsgMintVouchers simulates a MsgMintVouchers message -func SimulateMsgMintVouchers(ak types.AccountKeeper, - bk types.BankKeeper, - pk types.ProfileKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, false, false) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgMintVouchers, "skip mint vouchers"), nil, nil - } - - shares, getShares := GetSharesFromProject(r, ctx, k, prjtID) - if !getShares { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgMintVouchers, "skip mint vouchers"), nil, nil - } - - msg := types.NewMsgMintVouchers( - simAccount.Address.String(), - prjtID, - shares, - ) - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins()) - } -} - -// SimulateMsgBurnVouchers simulates a MsgBurnVouchers message -func SimulateMsgBurnVouchers( - ak types.AccountKeeper, - bk types.BankKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - prjtID, simAccount, vouchers, found := GetAccountWithVouchers(r, ctx, bk, k, accs, false) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBurnVouchers, "skip burn vouchers"), nil, nil - } - - msg := types.NewMsgBurnVouchers( - simAccount.Address.String(), - prjtID, - vouchers, - ) - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, vouchers) - } -} - -// SimulateMsgRedeemVouchers simulates a MsgRedeemVouchers message -func SimulateMsgRedeemVouchers( - ak types.AccountKeeper, - bk types.BankKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - prjtID, simAccount, vouchers, found := GetAccountWithVouchers(r, ctx, bk, k, accs, true) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemVouchers, "skip redeem vouchers"), nil, nil - } - - // Select a random account to redeem vouchers into - accountNb := r.Intn(len(accs)) - - msg := types.NewMsgRedeemVouchers( - simAccount.Address.String(), - accs[accountNb].Address.String(), - prjtID, - vouchers, - ) - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, vouchers) - } -} - -// SimulateMsgUnredeemVouchers simulates a MsgUnredeemVouchers message -func SimulateMsgUnredeemVouchers( - ak types.AccountKeeper, - bk types.BankKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - // Find a random account from a random project that contains shares - prjtID, simAccount, shares, found := GetAccountWithShares(r, ctx, k, accs, true) - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUnredeemVouchers, "skip unredeem vouchers"), nil, nil - } - - msg := types.NewMsgUnredeemVouchers( - simAccount.Address.String(), - prjtID, - shares, - ) - return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins()) - } -} diff --git a/x/project/simulation/unredeem_vouchers.go b/x/project/simulation/unredeem_vouchers.go new file mode 100644 index 00000000..78bea114 --- /dev/null +++ b/x/project/simulation/unredeem_vouchers.go @@ -0,0 +1,37 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func SimulateMsgUnredeemVouchers( + ak types.AccountKeeper, + bk types.BankKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgUnredeemVouchers{} + // Find a random account from a random project that contains shares + prjtID, simAccount, shares, found := GetAccountWithShares(r, ctx, k, accs, true) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip unredeem vouchers"), nil, nil + } + + msg = types.NewMsgUnredeemVouchers( + simAccount.Address.String(), + prjtID, + shares, + ) + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins(), txGen) + } +} diff --git a/x/project/simulation/update_special_allocations.go b/x/project/simulation/update_special_allocations.go new file mode 100644 index 00000000..468d001e --- /dev/null +++ b/x/project/simulation/update_special_allocations.go @@ -0,0 +1,57 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func SimulateMsgUpdateSpecialAllocations( + ak types.AccountKeeper, + bk types.BankKeeper, + pk types.ProfileKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgUpdateSpecialAllocations{} + simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, false, true) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip update special allocations"), nil, nil + } + + // get shares for both genesis distribution and claimable airdrop + genesisDistribution, getShares := GetSharesFromProject(r, ctx, k, prjtID) + if !getShares { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip update special allocations"), nil, nil + } + claimableAirdrop, getShares := GetSharesFromProject(r, ctx, k, prjtID) + if !getShares { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip update special allocations"), nil, nil + } + + // GetSharesFromProject returns a number of available shares for a project + // potentially genesisDistribution + claimableAirdrop can overflow the available shares + // we divide by two all amounts to avoid overflowing available shares + for i, s := range genesisDistribution { + genesisDistribution[i].Amount = s.Amount.QuoRaw(2) + } + for i, s := range claimableAirdrop { + claimableAirdrop[i].Amount = s.Amount.QuoRaw(2) + } + + msg = types.NewMsgUpdateSpecialAllocations( + simAccount.Address.String(), + prjtID, + types.NewSpecialAllocations(genesisDistribution, claimableAirdrop), + ) + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins(), txGen) + } +} diff --git a/x/project/simulation/update_total_supply.go b/x/project/simulation/update_total_supply.go new file mode 100644 index 00000000..4d4ea2a5 --- /dev/null +++ b/x/project/simulation/update_total_supply.go @@ -0,0 +1,38 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/keeper" + "github.com/ignite/network/x/project/types" +) + +func SimulateMsgUpdateTotalSupply( + ak types.AccountKeeper, + bk types.BankKeeper, + pk types.ProfileKeeper, + k keeper.Keeper, + txGen client.TxConfig, +) simtypes.Operation { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + msg := &types.MsgUpdateTotalSupply{} + simAccount, prjtID, found := GetCoordSimAccountWithProjectID(r, ctx, pk, k, accs, true, true) + if !found { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "skip update total supply"), nil, nil + } + + msg = types.NewMsgUpdateTotalSupply( + simAccount.Address.String(), + prjtID, + sample.TotalSupply(r), + ) + return deliverSimTx(r, app, ctx, ak, bk, simAccount, msg, sdk.NewCoins(), txGen) + } +} diff --git a/x/project/types/codec.go b/x/project/types/codec.go index 2affd3d4..1617e7e2 100644 --- a/x/project/types/codec.go +++ b/x/project/types/codec.go @@ -1,43 +1,44 @@ package types import ( - "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" + // this line is used by starport scaffolding # 1 ) -func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgCreateProject{}, "project/CreateProject", nil) - cdc.RegisterConcrete(&MsgEditProject{}, "project/EditProject", nil) - cdc.RegisterConcrete(&MsgUpdateTotalSupply{}, "project/UpdateTotalSupply", nil) - cdc.RegisterConcrete(&MsgUpdateSpecialAllocations{}, "project/UpdateSpecialAllocations", nil) - cdc.RegisterConcrete(&MsgInitializeMainnet{}, "project/InitializeMainnet", nil) - cdc.RegisterConcrete(&MsgMintVouchers{}, "project/MintVouchers", nil) - cdc.RegisterConcrete(&MsgBurnVouchers{}, "project/BurnVouchers", nil) - cdc.RegisterConcrete(&MsgRedeemVouchers{}, "project/RedeemVouchers", nil) - cdc.RegisterConcrete(&MsgUnredeemVouchers{}, "project/UnredeemVouchers", nil) - // this line is used by starport scaffolding # 2 -} - func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { - // this line is used by starport scaffolding # 3 registry.RegisterImplementations((*sdk.Msg)(nil), &MsgCreateProject{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgEditProject{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgUpdateTotalSupply{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgUpdateSpecialAllocations{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgInitializeMainnet{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgMintVouchers{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgBurnVouchers{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgRedeemVouchers{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgUnredeemVouchers{}, ) + // this line is used by starport scaffolding # 3 + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } - -var ( - Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) -) diff --git a/x/project/types/errors.go b/x/project/types/errors.go index 65fff301..5c3c1ab4 100644 --- a/x/project/types/errors.go +++ b/x/project/types/errors.go @@ -8,24 +8,26 @@ import ( // x/project module sentinel errors var ( - ErrInvalidTotalSupply = sdkerrors.Register(ModuleName, 2, "invalid total supply") - ErrProjectNotFound = sdkerrors.Register(ModuleName, 3, "project not found") - ErrMainnetInitialized = sdkerrors.Register(ModuleName, 4, "mainnet initialized") - ErrInvalidShares = sdkerrors.Register(ModuleName, 5, "invalid shares") - ErrTotalSharesLimit = sdkerrors.Register(ModuleName, 6, "allocated shares greater than total shares") - ErrAccountNotFound = sdkerrors.Register(ModuleName, 7, "account not found") - ErrSharesDecrease = sdkerrors.Register(ModuleName, 8, "shares can't be decreased") - ErrVouchersMinting = sdkerrors.Register(ModuleName, 9, "vouchers can't be minted") - ErrInvalidVouchers = sdkerrors.Register(ModuleName, 10, "invalid vouchers") - ErrNoMatchVouchers = sdkerrors.Register(ModuleName, 11, "vouchers don't match to project") - ErrInsufficientVouchers = sdkerrors.Register(ModuleName, 12, "account with insufficient vouchers") - ErrInvalidProjectName = sdkerrors.Register(ModuleName, 13, "invalid project name") - ErrInvalidSupplyRange = sdkerrors.Register(ModuleName, 14, "invalid total supply range") - ErrInvalidMetadataLength = sdkerrors.Register(ModuleName, 15, "metadata field too long") - ErrMainnetLaunchTriggered = sdkerrors.Register(ModuleName, 16, "mainnet launch already triggered") - ErrInvalidSpecialAllocations = sdkerrors.Register(ModuleName, 17, "invalid special allocations") - ErrInvalidMainnetInfo = sdkerrors.Register(ModuleName, 18, "invalid mainnet info") - ErrCannotUpdateProject = sdkerrors.Register(ModuleName, 19, "cannot update project") - ErrInvalidVoucherAddress = sdkerrors.Register(ModuleName, 20, "invalid address for voucher operation") - ErrFundCommunityPool = sdkerrors.Register(ModuleName, 21, "unable to fund community pool") + ErrInvalidSigner = sdkerrors.Register(ModuleName, 1101, "expected gov account as only signer for proposal message") + ErrInvalidTotalSupply = sdkerrors.Register(ModuleName, 1102, "invalid total supply") + ErrProjectNotFound = sdkerrors.Register(ModuleName, 1103, "project not found") + ErrMainnetInitialized = sdkerrors.Register(ModuleName, 1104, "mainnet initialized") + ErrInvalidShares = sdkerrors.Register(ModuleName, 1105, "invalid shares") + ErrTotalSharesLimit = sdkerrors.Register(ModuleName, 1106, "allocated shares greater than total shares") + ErrAccountNotFound = sdkerrors.Register(ModuleName, 1107, "account not found") + ErrSharesDecrease = sdkerrors.Register(ModuleName, 1108, "shares can't be decreased") + ErrVouchersMinting = sdkerrors.Register(ModuleName, 1109, "vouchers can't be minted") + ErrInvalidVouchers = sdkerrors.Register(ModuleName, 1110, "invalid vouchers") + ErrNoMatchVouchers = sdkerrors.Register(ModuleName, 1111, "vouchers don't match to project") + ErrInsufficientVouchers = sdkerrors.Register(ModuleName, 1112, "account with insufficient vouchers") + ErrInvalidProjectName = sdkerrors.Register(ModuleName, 1113, "invalid project name") + ErrInvalidSupplyRange = sdkerrors.Register(ModuleName, 1114, "invalid total supply range") + ErrInvalidMetadataLength = sdkerrors.Register(ModuleName, 1115, "metadata field too long") + ErrMainnetLaunchTriggered = sdkerrors.Register(ModuleName, 1116, "mainnet launch already triggered") + ErrInvalidSpecialAllocations = sdkerrors.Register(ModuleName, 1117, "invalid special allocations") + ErrInvalidMainnetInfo = sdkerrors.Register(ModuleName, 1118, "invalid mainnet info") + ErrCannotUpdateProject = sdkerrors.Register(ModuleName, 1119, "cannot update project") + ErrFundCommunityPool = sdkerrors.Register(ModuleName, 1120, "unable to fund community pool") + ErrProjectChainsNotFound = sdkerrors.Register(ModuleName, 1121, "project chains not found") + ErrMainnetAccountNotFound = sdkerrors.Register(ModuleName, 1122, "mainnet account not found") ) diff --git a/x/project/types/events.pb.go b/x/project/types/events.pb.go index bf1bc931..5bcc1154 100644 --- a/x/project/types/events.pb.go +++ b/x/project/types/events.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/events.proto +// source: network/project/v1/events.proto package types @@ -8,6 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -36,7 +37,7 @@ func (m *EventProjectCreated) Reset() { *m = EventProjectCreated{} } func (m *EventProjectCreated) String() string { return proto.CompactTextString(m) } func (*EventProjectCreated) ProtoMessage() {} func (*EventProjectCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{0} + return fileDescriptor_aee279bbd5727584, []int{0} } func (m *EventProjectCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -95,7 +96,7 @@ func (m *EventProjectChainAdded) Reset() { *m = EventProjectChainAdded{} func (m *EventProjectChainAdded) String() string { return proto.CompactTextString(m) } func (*EventProjectChainAdded) ProtoMessage() {} func (*EventProjectChainAdded) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{1} + return fileDescriptor_aee279bbd5727584, []int{1} } func (m *EventProjectChainAdded) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -149,7 +150,7 @@ func (m *EventProjectInfoUpdated) Reset() { *m = EventProjectInfoUpdated func (m *EventProjectInfoUpdated) String() string { return proto.CompactTextString(m) } func (*EventProjectInfoUpdated) ProtoMessage() {} func (*EventProjectInfoUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{2} + return fileDescriptor_aee279bbd5727584, []int{2} } func (m *EventProjectInfoUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -216,7 +217,7 @@ func (m *EventProjectSharesUpdated) Reset() { *m = EventProjectSharesUpd func (m *EventProjectSharesUpdated) String() string { return proto.CompactTextString(m) } func (*EventProjectSharesUpdated) ProtoMessage() {} func (*EventProjectSharesUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{3} + return fileDescriptor_aee279bbd5727584, []int{3} } func (m *EventProjectSharesUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -276,7 +277,7 @@ func (m *EventProjectTotalSupplyUpdated) Reset() { *m = EventProjectTota func (m *EventProjectTotalSupplyUpdated) String() string { return proto.CompactTextString(m) } func (*EventProjectTotalSupplyUpdated) ProtoMessage() {} func (*EventProjectTotalSupplyUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{4} + return fileDescriptor_aee279bbd5727584, []int{4} } func (m *EventProjectTotalSupplyUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -336,7 +337,7 @@ func (m *EventProjectMainnetInitialized) Reset() { *m = EventProjectMain func (m *EventProjectMainnetInitialized) String() string { return proto.CompactTextString(m) } func (*EventProjectMainnetInitialized) ProtoMessage() {} func (*EventProjectMainnetInitialized) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{5} + return fileDescriptor_aee279bbd5727584, []int{5} } func (m *EventProjectMainnetInitialized) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -396,7 +397,7 @@ func (m *EventMainnetAccountCreated) Reset() { *m = EventMainnetAccountC func (m *EventMainnetAccountCreated) String() string { return proto.CompactTextString(m) } func (*EventMainnetAccountCreated) ProtoMessage() {} func (*EventMainnetAccountCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{6} + return fileDescriptor_aee279bbd5727584, []int{6} } func (m *EventMainnetAccountCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -456,7 +457,7 @@ func (m *EventMainnetAccountUpdated) Reset() { *m = EventMainnetAccountU func (m *EventMainnetAccountUpdated) String() string { return proto.CompactTextString(m) } func (*EventMainnetAccountUpdated) ProtoMessage() {} func (*EventMainnetAccountUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{7} + return fileDescriptor_aee279bbd5727584, []int{7} } func (m *EventMainnetAccountUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -515,7 +516,7 @@ func (m *EventMainnetAccountRemoved) Reset() { *m = EventMainnetAccountR func (m *EventMainnetAccountRemoved) String() string { return proto.CompactTextString(m) } func (*EventMainnetAccountRemoved) ProtoMessage() {} func (*EventMainnetAccountRemoved) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{8} + return fileDescriptor_aee279bbd5727584, []int{8} } func (m *EventMainnetAccountRemoved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -568,7 +569,7 @@ func (m *EventMainnetVestingAccountCreated) Reset() { *m = EventMainnetV func (m *EventMainnetVestingAccountCreated) String() string { return proto.CompactTextString(m) } func (*EventMainnetVestingAccountCreated) ProtoMessage() {} func (*EventMainnetVestingAccountCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{9} + return fileDescriptor_aee279bbd5727584, []int{9} } func (m *EventMainnetVestingAccountCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -628,7 +629,7 @@ func (m *EventMainnetVestingAccountUpdated) Reset() { *m = EventMainnetV func (m *EventMainnetVestingAccountUpdated) String() string { return proto.CompactTextString(m) } func (*EventMainnetVestingAccountUpdated) ProtoMessage() {} func (*EventMainnetVestingAccountUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{10} + return fileDescriptor_aee279bbd5727584, []int{10} } func (m *EventMainnetVestingAccountUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -687,7 +688,7 @@ func (m *EventProjectAuctionCreated) Reset() { *m = EventProjectAuctionC func (m *EventProjectAuctionCreated) String() string { return proto.CompactTextString(m) } func (*EventProjectAuctionCreated) ProtoMessage() {} func (*EventProjectAuctionCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_42b7dc53d352f155, []int{11} + return fileDescriptor_aee279bbd5727584, []int{11} } func (m *EventProjectAuctionCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -731,65 +732,68 @@ func (m *EventProjectAuctionCreated) GetAuctionID() uint64 { } func init() { - proto.RegisterType((*EventProjectCreated)(nil), "spn.project.EventProjectCreated") - proto.RegisterType((*EventProjectChainAdded)(nil), "spn.project.EventProjectChainAdded") - proto.RegisterType((*EventProjectInfoUpdated)(nil), "spn.project.EventProjectInfoUpdated") - proto.RegisterType((*EventProjectSharesUpdated)(nil), "spn.project.EventProjectSharesUpdated") - proto.RegisterType((*EventProjectTotalSupplyUpdated)(nil), "spn.project.EventProjectTotalSupplyUpdated") - proto.RegisterType((*EventProjectMainnetInitialized)(nil), "spn.project.EventProjectMainnetInitialized") - proto.RegisterType((*EventMainnetAccountCreated)(nil), "spn.project.EventMainnetAccountCreated") - proto.RegisterType((*EventMainnetAccountUpdated)(nil), "spn.project.EventMainnetAccountUpdated") - proto.RegisterType((*EventMainnetAccountRemoved)(nil), "spn.project.EventMainnetAccountRemoved") - proto.RegisterType((*EventMainnetVestingAccountCreated)(nil), "spn.project.EventMainnetVestingAccountCreated") - proto.RegisterType((*EventMainnetVestingAccountUpdated)(nil), "spn.project.EventMainnetVestingAccountUpdated") - proto.RegisterType((*EventProjectAuctionCreated)(nil), "spn.project.EventProjectAuctionCreated") -} - -func init() { proto.RegisterFile("spn/project/events.proto", fileDescriptor_42b7dc53d352f155) } - -var fileDescriptor_42b7dc53d352f155 = []byte{ - // 646 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0x4d, 0x8f, 0xd2, 0x4e, - 0x1c, 0x66, 0x16, 0xc2, 0xff, 0xcf, 0xe0, 0x4b, 0x52, 0x37, 0x5a, 0x08, 0x29, 0xb5, 0x31, 0x11, - 0x0f, 0xdb, 0x66, 0xf1, 0xe4, 0x91, 0x17, 0x13, 0x39, 0xb8, 0x9a, 0xa2, 0x1b, 0xa3, 0x07, 0x33, - 0xb4, 0x23, 0x8c, 0xb6, 0x33, 0x4d, 0x67, 0x20, 0xae, 0x07, 0x2f, 0x7e, 0x01, 0x8f, 0xde, 0x37, - 0xf1, 0xe0, 0xd9, 0xbb, 0x27, 0x93, 0x3d, 0x6e, 0x3c, 0x79, 0x30, 0xab, 0x81, 0x6f, 0xe1, 0xc9, - 0xb4, 0x1d, 0xa0, 0x6c, 0xd6, 0x80, 0x89, 0x10, 0x4f, 0x30, 0xbf, 0x97, 0x79, 0x9e, 0xe7, 0xd7, - 0xa7, 0x9d, 0x81, 0x2a, 0x0f, 0xa8, 0x15, 0x84, 0xec, 0x39, 0x76, 0x84, 0x85, 0x47, 0x98, 0x0a, - 0x6e, 0x06, 0x21, 0x13, 0x4c, 0x29, 0xf2, 0x80, 0x9a, 0x32, 0x53, 0xde, 0xee, 0xb3, 0x3e, 0x8b, - 0xe3, 0x56, 0xf4, 0x2f, 0x29, 0x29, 0x6b, 0x0e, 0xe3, 0x3e, 0xe3, 0x56, 0x0f, 0x71, 0x6c, 0x8d, - 0x76, 0x7b, 0x58, 0xa0, 0x5d, 0xcb, 0x61, 0x84, 0xca, 0x7c, 0x29, 0xc9, 0x3f, 0x4d, 0x1a, 0x93, - 0xc5, 0x34, 0x95, 0xc6, 0x1d, 0x61, 0x2e, 0x08, 0xed, 0x27, 0x29, 0xe3, 0x10, 0xc0, 0x4b, 0xb7, - 0x23, 0x26, 0xf7, 0x93, 0x74, 0x2b, 0xc4, 0x48, 0x60, 0x57, 0xa9, 0xc0, 0x82, 0x6c, 0xe8, 0xb4, - 0x55, 0xa0, 0x83, 0x5a, 0xce, 0x9e, 0x07, 0x94, 0x3b, 0x50, 0x71, 0x18, 0x0b, 0x5d, 0x42, 0x91, - 0x60, 0x61, 0xc3, 0x75, 0x43, 0xcc, 0xb9, 0xba, 0xa5, 0x83, 0x5a, 0xa1, 0xa9, 0x7e, 0xf9, 0xb8, - 0xb3, 0x2d, 0xe1, 0x65, 0xa6, 0x2b, 0x42, 0x42, 0xfb, 0xf6, 0x19, 0x3d, 0xca, 0x35, 0x78, 0x3e, - 0x15, 0xed, 0xb4, 0xd5, 0x6c, 0x8c, 0xb5, 0x18, 0x34, 0x6c, 0x78, 0x79, 0x81, 0xe4, 0x00, 0x11, - 0xda, 0x70, 0xdd, 0xa5, 0x3c, 0xcb, 0xf0, 0x7f, 0x0f, 0x0d, 0xa9, 0x33, 0xe8, 0xb4, 0x63, 0x76, - 0x39, 0x7b, 0xb6, 0x36, 0x3e, 0x01, 0x78, 0x25, 0xbd, 0x69, 0x87, 0x3e, 0x63, 0x0f, 0x03, 0x77, - 0xa3, 0xea, 0x75, 0x58, 0x94, 0xdb, 0xee, 0x21, 0x1f, 0xc7, 0xda, 0x0b, 0x76, 0x3a, 0x14, 0x29, - 0xf0, 0xb1, 0x40, 0x2e, 0x12, 0x48, 0xcd, 0xe9, 0xa0, 0x76, 0xce, 0x9e, 0xad, 0x8d, 0x37, 0x5b, - 0xb0, 0x94, 0x56, 0xd0, 0x1d, 0xa0, 0x10, 0xf3, 0x4d, 0x6b, 0x78, 0x0d, 0x2f, 0x22, 0xcf, 0x63, - 0x4e, 0x04, 0x9a, 0x30, 0x50, 0xb3, 0x7a, 0xb6, 0x56, 0xac, 0x97, 0x4c, 0xb9, 0x47, 0xe4, 0x58, - 0x53, 0x3a, 0xd6, 0x6c, 0x31, 0x42, 0x9b, 0xb7, 0x8e, 0x4e, 0xaa, 0x99, 0x9f, 0x27, 0xd5, 0xeb, - 0x7d, 0x22, 0x06, 0xc3, 0x9e, 0xe9, 0x30, 0x5f, 0x3a, 0x56, 0xfe, 0xec, 0x70, 0xf7, 0x85, 0x25, - 0x0e, 0x02, 0xcc, 0xe3, 0x86, 0x0f, 0xdf, 0xab, 0xf9, 0x64, 0x6f, 0xfb, 0x34, 0x98, 0x71, 0xb8, - 0x05, 0xb5, 0xf4, 0x14, 0x1e, 0x30, 0x81, 0xbc, 0xee, 0x30, 0x08, 0xbc, 0x83, 0x4d, 0x8f, 0xe2, - 0x1d, 0x80, 0x45, 0x31, 0x87, 0x5f, 0x3e, 0x87, 0x27, 0x7f, 0x3e, 0x87, 0xda, 0x8a, 0xa5, 0xdc, - 0x4e, 0x53, 0x31, 0xde, 0x83, 0xc5, 0x29, 0xdd, 0x45, 0x84, 0x52, 0x2c, 0x3a, 0x94, 0x08, 0x82, - 0x3c, 0xf2, 0x6a, 0x83, 0x53, 0xaa, 0xc0, 0x82, 0x2f, 0xd1, 0xa7, 0xaf, 0xfb, 0x3c, 0x60, 0x7c, - 0x03, 0xb0, 0x1c, 0x13, 0x95, 0x0c, 0x1b, 0x8e, 0xc3, 0x86, 0x74, 0xc5, 0xef, 0x52, 0x1d, 0xfe, - 0x87, 0x56, 0x64, 0x36, 0x2d, 0x54, 0x3c, 0x98, 0xe7, 0xeb, 0xb7, 0xad, 0xc4, 0xf8, 0x9d, 0xbc, - 0xd5, 0x9c, 0xfa, 0xef, 0xcb, 0xa3, 0x67, 0xaa, 0xb3, 0xb1, 0xcf, 0x46, 0xeb, 0x50, 0x67, 0x7c, - 0x06, 0xf0, 0x6a, 0x1a, 0x70, 0x3f, 0x39, 0xdc, 0xd6, 0x6e, 0x9a, 0x3d, 0x78, 0x41, 0x9e, 0xa3, - 0xf7, 0x02, 0x41, 0x18, 0xe5, 0xb1, 0x91, 0x8b, 0x75, 0xdd, 0x4c, 0x1d, 0xe4, 0x66, 0x3c, 0x9c, - 0xfd, 0x85, 0xba, 0x66, 0x2e, 0x1a, 0xb2, 0x7d, 0xaa, 0x7b, 0x89, 0x8e, 0xf5, 0xb9, 0xe3, 0x6f, - 0xeb, 0x78, 0x24, 0x9f, 0xbf, 0xfc, 0xca, 0x34, 0x86, 0x4e, 0x14, 0x5f, 0xed, 0x39, 0x54, 0x60, - 0x01, 0x25, 0xf5, 0xb3, 0xd3, 0x7a, 0x1e, 0x68, 0xb6, 0x8e, 0xc6, 0x1a, 0x38, 0x1e, 0x6b, 0xe0, - 0xc7, 0x58, 0x03, 0x6f, 0x27, 0x5a, 0xe6, 0x78, 0xa2, 0x65, 0xbe, 0x4e, 0xb4, 0xcc, 0xe3, 0x1b, - 0x29, 0xbb, 0x0a, 0x4c, 0x5d, 0x1c, 0xfa, 0x84, 0x0a, 0x2b, 0xba, 0xf3, 0xbc, 0x9c, 0xdd, 0x7a, - 0x62, 0xd7, 0xf6, 0xf2, 0xf1, 0xa5, 0xe7, 0xe6, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x04, 0x25, - 0x6e, 0xae, 0x89, 0x09, 0x00, 0x00, + proto.RegisterType((*EventProjectCreated)(nil), "network.project.v1.EventProjectCreated") + proto.RegisterType((*EventProjectChainAdded)(nil), "network.project.v1.EventProjectChainAdded") + proto.RegisterType((*EventProjectInfoUpdated)(nil), "network.project.v1.EventProjectInfoUpdated") + proto.RegisterType((*EventProjectSharesUpdated)(nil), "network.project.v1.EventProjectSharesUpdated") + proto.RegisterType((*EventProjectTotalSupplyUpdated)(nil), "network.project.v1.EventProjectTotalSupplyUpdated") + proto.RegisterType((*EventProjectMainnetInitialized)(nil), "network.project.v1.EventProjectMainnetInitialized") + proto.RegisterType((*EventMainnetAccountCreated)(nil), "network.project.v1.EventMainnetAccountCreated") + proto.RegisterType((*EventMainnetAccountUpdated)(nil), "network.project.v1.EventMainnetAccountUpdated") + proto.RegisterType((*EventMainnetAccountRemoved)(nil), "network.project.v1.EventMainnetAccountRemoved") + proto.RegisterType((*EventMainnetVestingAccountCreated)(nil), "network.project.v1.EventMainnetVestingAccountCreated") + proto.RegisterType((*EventMainnetVestingAccountUpdated)(nil), "network.project.v1.EventMainnetVestingAccountUpdated") + proto.RegisterType((*EventProjectAuctionCreated)(nil), "network.project.v1.EventProjectAuctionCreated") +} + +func init() { proto.RegisterFile("network/project/v1/events.proto", fileDescriptor_aee279bbd5727584) } + +var fileDescriptor_aee279bbd5727584 = []byte{ + // 690 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x31, 0x6f, 0xd3, 0x40, + 0x14, 0xce, 0xb5, 0x51, 0x21, 0x97, 0x02, 0xc2, 0x54, 0x90, 0x46, 0x95, 0x63, 0x2c, 0xa4, 0x86, + 0x4a, 0xb5, 0x95, 0xf2, 0x0b, 0x92, 0x16, 0x89, 0x0c, 0x50, 0xe4, 0xd2, 0x0a, 0xb1, 0x54, 0x17, + 0xfb, 0x70, 0x8e, 0xda, 0x77, 0xc6, 0x77, 0x31, 0x94, 0x91, 0x5f, 0xc0, 0xc0, 0xd4, 0x15, 0x09, + 0x21, 0x06, 0xd4, 0x81, 0x85, 0x89, 0xb5, 0x03, 0x43, 0xc5, 0xc4, 0x54, 0x50, 0x3b, 0xf4, 0x07, + 0xb0, 0x31, 0x21, 0xdb, 0xd7, 0xc4, 0x29, 0xad, 0x1a, 0x86, 0x04, 0xb1, 0x24, 0xb9, 0x77, 0xdf, + 0xbd, 0xf7, 0x7d, 0xcf, 0x5f, 0xce, 0x0f, 0x56, 0x28, 0x16, 0xcf, 0x58, 0xb8, 0x61, 0x06, 0x21, + 0x7b, 0x82, 0x6d, 0x61, 0x46, 0x35, 0x13, 0x47, 0x98, 0x0a, 0x6e, 0x04, 0x21, 0x13, 0x4c, 0x51, + 0x24, 0xc0, 0x90, 0x00, 0x23, 0xaa, 0x95, 0x2f, 0x23, 0x9f, 0x50, 0x66, 0x26, 0x9f, 0x29, 0xac, + 0xac, 0xda, 0x8c, 0xfb, 0x8c, 0x9b, 0x2d, 0xc4, 0xb1, 0x19, 0xd5, 0x5a, 0x58, 0xa0, 0x9a, 0x69, + 0x33, 0x42, 0xe5, 0xfe, 0x74, 0xba, 0xbf, 0x9e, 0xac, 0xcc, 0x74, 0x21, 0xb7, 0xa6, 0x5c, 0xe6, + 0xb2, 0x34, 0x1e, 0xff, 0x92, 0x51, 0xed, 0x04, 0x62, 0x11, 0xe6, 0x82, 0x50, 0x37, 0x45, 0xe8, + 0x6f, 0x00, 0xbc, 0x72, 0x3b, 0xa6, 0x7a, 0x3f, 0x45, 0x2c, 0x86, 0x18, 0x09, 0xec, 0x28, 0x33, + 0xb0, 0x20, 0xcf, 0x34, 0x97, 0x4a, 0x40, 0x03, 0xd5, 0xbc, 0xd5, 0x0b, 0x28, 0x77, 0xa0, 0x62, + 0x33, 0x16, 0x3a, 0x84, 0x22, 0xc1, 0xc2, 0xba, 0xe3, 0x84, 0x98, 0xf3, 0xd2, 0x98, 0x06, 0xaa, + 0x85, 0x46, 0xe9, 0xeb, 0xc7, 0xf9, 0x29, 0xc9, 0x4d, 0xee, 0xac, 0x88, 0x90, 0x50, 0xd7, 0x3a, + 0xe1, 0x8c, 0x72, 0x03, 0x5e, 0xc8, 0x44, 0x9b, 0x4b, 0xa5, 0xf1, 0xa4, 0x56, 0x7f, 0x50, 0xb7, + 0xe0, 0xd5, 0x3e, 0x92, 0x6d, 0x44, 0x68, 0xdd, 0x71, 0xce, 0xe4, 0x59, 0x86, 0xe7, 0x3d, 0xd4, + 0xa1, 0x76, 0xbb, 0xb9, 0x94, 0xb0, 0xcb, 0x5b, 0xdd, 0xb5, 0xfe, 0x19, 0xc0, 0x6b, 0xd9, 0xa4, + 0x4d, 0xfa, 0x98, 0xad, 0x06, 0xce, 0x48, 0xd5, 0x6b, 0xb0, 0x28, 0xd3, 0xde, 0x43, 0x3e, 0x4e, + 0xb4, 0x17, 0xac, 0x6c, 0x28, 0x56, 0xe0, 0x63, 0x81, 0x1c, 0x24, 0x50, 0x29, 0xaf, 0x81, 0xea, + 0xa4, 0xd5, 0x5d, 0xeb, 0x5b, 0x63, 0x70, 0x3a, 0xab, 0x60, 0xa5, 0x8d, 0x42, 0xcc, 0x47, 0xad, + 0xe1, 0x35, 0x80, 0x97, 0x90, 0xe7, 0x31, 0x3b, 0xae, 0x9a, 0x52, 0x28, 0x8d, 0x6b, 0xe3, 0xd5, + 0xe2, 0xc2, 0xb4, 0x21, 0x93, 0xc4, 0x7e, 0x36, 0xa4, 0x9f, 0x8d, 0x45, 0x46, 0x68, 0x63, 0x79, + 0x67, 0xaf, 0x92, 0xfb, 0xb5, 0x57, 0x99, 0x75, 0x89, 0x68, 0x77, 0x5a, 0x86, 0xcd, 0x7c, 0xe9, + 0x67, 0xf9, 0x35, 0xcf, 0x9d, 0x0d, 0x53, 0x6c, 0x06, 0x98, 0x27, 0x07, 0xde, 0x7f, 0xaf, 0x4c, + 0xa4, 0xb9, 0xb7, 0x0e, 0xb7, 0xe7, 0x26, 0x3d, 0xec, 0x22, 0x7b, 0x73, 0x3d, 0xfe, 0x6b, 0xf0, + 0x77, 0x87, 0xdb, 0x73, 0xc0, 0x3a, 0x4e, 0x41, 0xff, 0x34, 0x06, 0xd5, 0x6c, 0x73, 0x1e, 0x30, + 0x81, 0xbc, 0x95, 0x4e, 0x10, 0x78, 0x9b, 0xa3, 0xee, 0xd0, 0x07, 0x00, 0x8b, 0xa2, 0x57, 0xfe, + 0xec, 0xee, 0x3c, 0xfd, 0xfb, 0xee, 0x54, 0x07, 0x84, 0x9e, 0xd6, 0xbf, 0x2c, 0x41, 0xfd, 0x2d, + 0xe8, 0xef, 0xdd, 0x5d, 0x44, 0x28, 0xc5, 0xa2, 0x49, 0x89, 0x20, 0xc8, 0x23, 0x2f, 0x46, 0xd8, + 0xbb, 0x19, 0x58, 0xf0, 0x65, 0xf5, 0xa3, 0xbb, 0xa1, 0x17, 0xd0, 0x7f, 0x02, 0x58, 0x4e, 0x88, + 0x4a, 0x86, 0x75, 0xdb, 0x66, 0x1d, 0x3a, 0xe0, 0x25, 0xb6, 0x00, 0xcf, 0xa1, 0x01, 0x99, 0x1d, + 0x01, 0x95, 0x97, 0x00, 0x4e, 0xf0, 0x7f, 0xe5, 0x71, 0x59, 0xf9, 0x34, 0xd5, 0x83, 0xd9, 0xfa, + 0xbf, 0x55, 0x4d, 0x4f, 0x14, 0x6d, 0x61, 0x9f, 0x45, 0xc3, 0x10, 0xad, 0x7f, 0x01, 0xf0, 0x7a, + 0xb6, 0xe0, 0x5a, 0xfa, 0xde, 0x1c, 0xba, 0xc5, 0x56, 0xe1, 0x45, 0xf9, 0x8a, 0x5e, 0x0e, 0x04, + 0x61, 0x94, 0x27, 0xb6, 0x2f, 0x2e, 0xcc, 0x1a, 0x7f, 0x0e, 0x11, 0x46, 0xd2, 0xb9, 0xb5, 0x3e, + 0x78, 0x23, 0x1f, 0x3f, 0x01, 0xeb, 0x58, 0x92, 0x33, 0xe4, 0x0c, 0xcf, 0x3b, 0x43, 0x92, 0xf3, + 0x50, 0xba, 0x41, 0xde, 0x50, 0xf5, 0x8e, 0x1d, 0xc7, 0x07, 0x7b, 0x2a, 0x33, 0xb0, 0x80, 0x52, + 0x7c, 0x77, 0x2c, 0xe8, 0x05, 0x1a, 0x8b, 0x3b, 0xfb, 0x2a, 0xd8, 0xdd, 0x57, 0xc1, 0x8f, 0x7d, + 0x15, 0xbc, 0x3a, 0x50, 0x73, 0xbb, 0x07, 0x6a, 0xee, 0xdb, 0x81, 0x9a, 0x7b, 0x74, 0x33, 0x63, + 0x69, 0xe2, 0x52, 0x22, 0xb0, 0x79, 0x34, 0x5f, 0x3d, 0xef, 0x4e, 0x58, 0x89, 0xb3, 0x5b, 0x13, + 0xc9, 0x74, 0x75, 0xeb, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x21, 0xdc, 0x3a, 0x1a, 0x0a, + 0x00, 0x00, } func (m *EventProjectCreated) Marshal() (dAtA []byte, err error) { diff --git a/x/project/types/expected_keepers.go b/x/project/types/expected_keepers.go index b983eebf..178760cf 100644 --- a/x/project/types/expected_keepers.go +++ b/x/project/types/expected_keepers.go @@ -1,33 +1,42 @@ package types import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + profiletypes "github.com/ignite/network/x/profile/types" ) -type BankKeeper interface { - GetSupply(ctx sdk.Context, denom string) sdk.Coin - MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error - BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error - SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error - SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error - SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins - IterateAllBalances(ctx sdk.Context, cb func(sdk.AccAddress, sdk.Coin) bool) - IterateAccountBalances(ctx sdk.Context, addr sdk.AccAddress, cb func(sdk.Coin) bool) +type ProfileKeeper interface { + CoordinatorIDFromAddress(ctx context.Context, address sdk.AccAddress) (uint64, error) + GetCoordinator(ctx context.Context, coordinatorID uint64) (profiletypes.Coordinator, error) + Coordinators(ctx context.Context) ([]profiletypes.Coordinator, error) } -type ProfileKeeper interface { - GetAllCoordinator(ctx sdk.Context) []profiletypes.Coordinator - GetCoordinator(ctx sdk.Context, id uint64) (val profiletypes.Coordinator, found bool) - CoordinatorIDFromAddress(ctx sdk.Context, address string) (id uint64, err error) +type DistributionKeeper interface { + FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) error } +// AccountKeeper defines the expected interface for the Account module. type AccountKeeper interface { - GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI // only used for simulation } -type DistributionKeeper interface { - FundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk.AccAddress) error +// BankKeeper defines the expected interface for the Bank module. +type BankKeeper interface { + SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins + SendCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + IterateAccountBalances(ctx context.Context, addr sdk.AccAddress, cb func(coin sdk.Coin) (stop bool)) + IterateAllBalances(ctx context.Context, cb func(address sdk.AccAddress, coin sdk.Coin) (stop bool)) + MintCoins(ctx context.Context, moduleName string, amt sdk.Coins) error + BurnCoins(ctx context.Context, moduleName string, amt sdk.Coins) error + GetSupply(ctx context.Context, denom string) sdk.Coin +} + +// ParamSubspace defines the expected Subspace interface for parameters. +type ParamSubspace interface { + Get(context.Context, []byte, interface{}) + Set(context.Context, []byte, interface{}) } diff --git a/x/project/types/genesis.go b/x/project/types/genesis.go index e30ae196..e723a8dd 100644 --- a/x/project/types/genesis.go +++ b/x/project/types/genesis.go @@ -3,69 +3,57 @@ package types import ( "fmt" - spntypes "github.com/tendermint/spn/pkg/types" + networktypes "github.com/ignite/network/pkg/types" ) -// DefaultGenesis returns the default Capability genesis state +// DefaultGenesis returns the default genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ - Projects: []Project{}, - ProjectCounter: 1, - ProjectChains: []ProjectChains{}, - MainnetAccounts: []MainnetAccount{}, - Params: DefaultParams(), - TotalShares: spntypes.TotalShareNumber, + MainnetAccountList: []MainnetAccount{}, + ProjectList: []Project{}, + ProjectChainsList: []ProjectChains{}, + TotalShares: networktypes.TotalShareNumber, // this line is used by starport scaffolding # genesis/types/default + Params: DefaultParams(), } } // Validate performs basic genesis state validation returning an error upon any // failure. func (gs GenesisState) Validate() error { + // Check for duplicated index in mainnetAccount + mainnetAccountIndexMap := make(map[string]struct{}) + + for _, elem := range gs.MainnetAccountList { + index := fmt.Sprint(elem.ProjectID) + if _, ok := mainnetAccountIndexMap[index]; ok { + return fmt.Errorf("duplicated index for mainnetAccount") + } + mainnetAccountIndexMap[index] = struct{}{} + } // Check for duplicated ID in project - projectIDMap := make(map[uint64]struct{}) - projectCounter := gs.GetProjectCounter() - for _, project := range gs.Projects { - if _, ok := projectIDMap[project.ProjectID]; ok { + projectIDMap := make(map[uint64]bool) + projectCount := gs.GetProjectCount() + for _, elem := range gs.ProjectList { + if _, ok := projectIDMap[elem.ProjectID]; ok { return fmt.Errorf("duplicated id for project") } - if project.ProjectID >= projectCounter { + if elem.ProjectID >= projectCount { return fmt.Errorf("project id should be lower or equal than the last id") } - if err := project.Validate(gs.TotalShares); err != nil { - return fmt.Errorf("invalid project %d: %s", project.ProjectID, err.Error()) - } - projectIDMap[project.ProjectID] = struct{}{} + projectIDMap[elem.ProjectID] = true } - // Check for duplicated index in projectChains projectChainsIndexMap := make(map[string]struct{}) - for _, elem := range gs.ProjectChains { - if _, ok := projectIDMap[elem.ProjectID]; !ok { - return fmt.Errorf("project id %d doesn't exist for chains", elem.ProjectID) - } - index := string(ProjectChainsKey(elem.ProjectID)) + + for _, elem := range gs.ProjectChainsList { + index := fmt.Sprint(elem.ProjectID) if _, ok := projectChainsIndexMap[index]; ok { return fmt.Errorf("duplicated index for projectChains") } projectChainsIndexMap[index] = struct{}{} } - - // Check for duplicated index in mainnetAccount - mainnetAccountIndexMap := make(map[string]struct{}) - for _, elem := range gs.MainnetAccounts { - if _, ok := projectIDMap[elem.ProjectID]; !ok { - return fmt.Errorf("project id %d doesn't exist for mainnet account %s", - elem.ProjectID, elem.Address) - } - index := string(AccountKeyPath(elem.ProjectID, elem.Address)) - if _, ok := mainnetAccountIndexMap[index]; ok { - return fmt.Errorf("duplicated index for mainnetAccount") - } - mainnetAccountIndexMap[index] = struct{}{} - } - // this line is used by starport scaffolding # genesis/types/validate - return gs.Params.ValidateBasic() + return gs.Params.Validate() } diff --git a/x/project/types/genesis.pb.go b/x/project/types/genesis.pb.go index 704cfd6d..e7768db9 100644 --- a/x/project/types/genesis.pb.go +++ b/x/project/types/genesis.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/genesis.proto +// source: network/project/v1/genesis.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,19 +26,20 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the project module's genesis state. type GenesisState struct { - Projects []Project `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects"` - ProjectCounter uint64 `protobuf:"varint,2,opt,name=projectCounter,proto3" json:"projectCounter,omitempty"` - ProjectChains []ProjectChains `protobuf:"bytes,3,rep,name=projectChains,proto3" json:"projectChains"` - MainnetAccounts []MainnetAccount `protobuf:"bytes,4,rep,name=mainnetAccounts,proto3" json:"mainnetAccounts"` - TotalShares uint64 `protobuf:"varint,5,opt,name=totalShares,proto3" json:"totalShares,omitempty"` - Params Params `protobuf:"bytes,6,opt,name=params,proto3" json:"params"` + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + ProjectList []Project `protobuf:"bytes,2,rep,name=projectList,proto3" json:"projectList"` + ProjectCount uint64 `protobuf:"varint,3,opt,name=projectCount,proto3" json:"projectCount,omitempty"` + ProjectChainsList []ProjectChains `protobuf:"bytes,4,rep,name=projectChainsList,proto3" json:"projectChainsList"` + MainnetAccountList []MainnetAccount `protobuf:"bytes,5,rep,name=mainnetAccountList,proto3" json:"mainnetAccountList"` + TotalShares uint64 `protobuf:"varint,6,opt,name=totalShares,proto3" json:"totalShares,omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_72a76b64bb972cd9, []int{0} + return fileDescriptor_7f86dacbbe581600, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -66,30 +68,37 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetProjects() []Project { +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetProjectList() []Project { if m != nil { - return m.Projects + return m.ProjectList } return nil } -func (m *GenesisState) GetProjectCounter() uint64 { +func (m *GenesisState) GetProjectCount() uint64 { if m != nil { - return m.ProjectCounter + return m.ProjectCount } return 0 } -func (m *GenesisState) GetProjectChains() []ProjectChains { +func (m *GenesisState) GetProjectChainsList() []ProjectChains { if m != nil { - return m.ProjectChains + return m.ProjectChainsList } return nil } -func (m *GenesisState) GetMainnetAccounts() []MainnetAccount { +func (m *GenesisState) GetMainnetAccountList() []MainnetAccount { if m != nil { - return m.MainnetAccounts + return m.MainnetAccountList } return nil } @@ -101,43 +110,38 @@ func (m *GenesisState) GetTotalShares() uint64 { return 0 } -func (m *GenesisState) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - func init() { - proto.RegisterType((*GenesisState)(nil), "spn.project.GenesisState") + proto.RegisterType((*GenesisState)(nil), "network.project.v1.GenesisState") } -func init() { proto.RegisterFile("spn/project/genesis.proto", fileDescriptor_72a76b64bb972cd9) } +func init() { proto.RegisterFile("network/project/v1/genesis.proto", fileDescriptor_7f86dacbbe581600) } -var fileDescriptor_72a76b64bb972cd9 = []byte{ - // 344 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x51, 0x4d, 0x4b, 0xc3, 0x40, - 0x10, 0x4d, 0xda, 0x5a, 0x64, 0xe3, 0x07, 0xac, 0x3d, 0xac, 0x11, 0x62, 0xf4, 0x20, 0xf5, 0x92, - 0x60, 0x05, 0xef, 0xb6, 0xa0, 0x07, 0x11, 0xa4, 0xbd, 0x79, 0x29, 0xdb, 0xb8, 0xa4, 0x11, 0xb3, - 0x1b, 0xb2, 0x53, 0xd1, 0x7f, 0xe1, 0xcf, 0xea, 0xb1, 0xc7, 0x9e, 0x44, 0xda, 0x3f, 0x22, 0xdd, - 0x4c, 0x4b, 0x52, 0x7a, 0x9a, 0x65, 0xde, 0x9b, 0xf7, 0xe6, 0xed, 0x90, 0x53, 0x9d, 0xc9, 0x30, - 0xcb, 0xd5, 0xbb, 0x88, 0x20, 0x8c, 0x85, 0x14, 0x3a, 0xd1, 0x41, 0x96, 0x2b, 0x50, 0xd4, 0xd1, - 0x99, 0x0c, 0x10, 0x72, 0x5b, 0xb1, 0x8a, 0x95, 0xe9, 0x87, 0xab, 0x57, 0x41, 0x71, 0xfd, 0xf2, - 0x34, 0xd6, 0x61, 0x34, 0xe6, 0x89, 0x44, 0x11, 0xb7, 0xa2, 0xff, 0x29, 0x34, 0x24, 0x32, 0xde, - 0x05, 0x61, 0x45, 0xe8, 0xa2, 0x0c, 0xa5, 0x3c, 0x91, 0x52, 0xc0, 0x90, 0x47, 0x91, 0x9a, 0xc8, - 0x35, 0x85, 0x55, 0xa6, 0x79, 0xce, 0x53, 0xb4, 0xbc, 0x9c, 0xd7, 0xc8, 0xc1, 0x63, 0x91, 0x64, - 0x00, 0x1c, 0x04, 0xbd, 0x23, 0xfb, 0x48, 0xd4, 0xcc, 0xf6, 0xeb, 0x6d, 0xa7, 0xd3, 0x0a, 0x4a, - 0xd9, 0x82, 0x97, 0xa2, 0x76, 0x1b, 0xd3, 0xdf, 0x73, 0xab, 0xbf, 0xe1, 0xd2, 0x2b, 0x72, 0x84, - 0xef, 0xde, 0xca, 0x58, 0xe4, 0xac, 0xe6, 0xdb, 0xed, 0x46, 0x7f, 0xab, 0x4b, 0x1f, 0xc8, 0xe1, - 0xba, 0x63, 0xa2, 0xb3, 0xba, 0x31, 0x71, 0x77, 0x99, 0x14, 0x0c, 0xb4, 0xaa, 0x8e, 0xd1, 0x27, - 0x72, 0x8c, 0x59, 0xef, 0x8b, 0xa8, 0x9a, 0x35, 0x8c, 0xd2, 0x59, 0x45, 0xe9, 0xb9, 0xc2, 0x41, - 0xa9, 0xed, 0x49, 0xea, 0x13, 0x07, 0x14, 0xf0, 0x8f, 0xc1, 0x98, 0xe7, 0x42, 0xb3, 0x3d, 0xb3, - 0x79, 0xb9, 0x45, 0x6f, 0x48, 0xb3, 0xf8, 0x37, 0xd6, 0xf4, 0xed, 0xb6, 0xd3, 0x39, 0xa9, 0xee, - 0x6b, 0x20, 0x54, 0x47, 0x62, 0xb7, 0x37, 0x5d, 0x78, 0xf6, 0x6c, 0xe1, 0xd9, 0x7f, 0x0b, 0xcf, - 0xfe, 0x59, 0x7a, 0xd6, 0x6c, 0xe9, 0x59, 0xf3, 0xa5, 0x67, 0xbd, 0x5e, 0xc7, 0x09, 0x8c, 0x27, - 0xa3, 0x20, 0x52, 0x69, 0x08, 0x42, 0xbe, 0x89, 0x3c, 0x4d, 0x24, 0x84, 0xab, 0x23, 0x7d, 0x6d, - 0xce, 0x04, 0xdf, 0x99, 0xd0, 0xa3, 0xa6, 0x39, 0xd3, 0xed, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x26, 0xce, 0xa2, 0xe4, 0x7b, 0x02, 0x00, 0x00, +var fileDescriptor_7f86dacbbe581600 = []byte{ + // 369 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xb1, 0x4e, 0xeb, 0x30, + 0x14, 0x86, 0xe3, 0xdb, 0xde, 0x4a, 0x38, 0x5d, 0x6a, 0x31, 0x44, 0x41, 0x4a, 0x43, 0x17, 0x02, + 0x43, 0xac, 0x96, 0x99, 0x81, 0x76, 0x60, 0x01, 0x09, 0xb5, 0x42, 0x42, 0x2c, 0x95, 0x1b, 0x59, + 0xa9, 0x81, 0xd8, 0x51, 0xe2, 0x16, 0x78, 0x04, 0x36, 0x1e, 0x83, 0x91, 0xc7, 0xe8, 0xd8, 0x91, + 0x09, 0xa1, 0x76, 0xe0, 0x35, 0x50, 0x6d, 0x07, 0xb5, 0x6a, 0x60, 0x89, 0xec, 0xa3, 0xcf, 0xdf, + 0x39, 0x27, 0x3f, 0xf4, 0x39, 0x95, 0x0f, 0x22, 0xbb, 0xc3, 0x69, 0x26, 0x6e, 0x69, 0x24, 0xf1, + 0xb4, 0x8d, 0x63, 0xca, 0x69, 0xce, 0xf2, 0x30, 0xcd, 0x84, 0x14, 0x08, 0x19, 0x22, 0x34, 0x44, + 0x38, 0x6d, 0xbb, 0x0d, 0x92, 0x30, 0x2e, 0xb0, 0xfa, 0x6a, 0xcc, 0xdd, 0x8d, 0x45, 0x2c, 0xd4, + 0x11, 0xaf, 0x4e, 0xa6, 0x1a, 0x94, 0xe8, 0x13, 0xc2, 0x38, 0xa7, 0x72, 0x48, 0xa2, 0x48, 0x4c, + 0xb8, 0x34, 0x64, 0xb3, 0x84, 0x4c, 0x49, 0x46, 0x12, 0x33, 0x87, 0x5b, 0x36, 0x69, 0x31, 0x92, + 0x26, 0x0e, 0x7e, 0x27, 0x86, 0xd1, 0x98, 0x30, 0x6e, 0x54, 0xad, 0xe7, 0x0a, 0xac, 0x9f, 0xe9, + 0x25, 0x07, 0x92, 0x48, 0x8a, 0x4e, 0x60, 0x4d, 0xf7, 0x72, 0x80, 0x0f, 0x02, 0xbb, 0xe3, 0x86, + 0xdb, 0x4b, 0x87, 0x97, 0x8a, 0xe8, 0xee, 0xcc, 0x3e, 0x9a, 0xd6, 0xeb, 0xd7, 0xdb, 0x11, 0xe8, + 0x9b, 0x47, 0xa8, 0x07, 0x6d, 0xc3, 0x9d, 0xb3, 0x5c, 0x3a, 0xff, 0xfc, 0x4a, 0x60, 0x77, 0xf6, + 0x4a, 0x1d, 0xfa, 0xd8, 0xad, 0xae, 0x24, 0xfd, 0xf5, 0x57, 0xa8, 0x05, 0xeb, 0xe6, 0xda, 0x5b, + 0xfd, 0x16, 0xa7, 0xe2, 0x83, 0xa0, 0xda, 0xdf, 0xa8, 0xa1, 0x2b, 0xd8, 0x28, 0xee, 0x6a, 0x1f, + 0xd5, 0xae, 0xaa, 0xda, 0xed, 0xff, 0xd1, 0x4e, 0xc3, 0xa6, 0xe9, 0xb6, 0x01, 0x5d, 0x43, 0x64, + 0x42, 0x39, 0xd5, 0x99, 0x28, 0xef, 0x7f, 0xe5, 0x6d, 0x95, 0x79, 0x2f, 0x36, 0x68, 0x23, 0x2e, + 0x71, 0x20, 0x1f, 0xda, 0x52, 0x48, 0x72, 0x3f, 0x18, 0x93, 0x8c, 0xe6, 0x4e, 0x4d, 0xed, 0xb4, + 0x5e, 0xea, 0xf6, 0x66, 0x0b, 0x0f, 0xcc, 0x17, 0x1e, 0xf8, 0x5c, 0x78, 0xe0, 0x65, 0xe9, 0x59, + 0xf3, 0xa5, 0x67, 0xbd, 0x2f, 0x3d, 0xeb, 0xe6, 0x30, 0x66, 0x72, 0x3c, 0x19, 0x85, 0x91, 0x48, + 0x30, 0x8b, 0x39, 0x93, 0x14, 0x17, 0x01, 0x3f, 0xfe, 0x44, 0x2c, 0x9f, 0x52, 0x9a, 0x8f, 0x6a, + 0x2a, 0xd7, 0xe3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x6f, 0xcf, 0x96, 0xce, 0x02, 0x00, + 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -160,25 +164,15 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 if m.TotalShares != 0 { i = encodeVarintGenesis(dAtA, i, uint64(m.TotalShares)) i-- - dAtA[i] = 0x28 + dAtA[i] = 0x30 } - if len(m.MainnetAccounts) > 0 { - for iNdEx := len(m.MainnetAccounts) - 1; iNdEx >= 0; iNdEx-- { + if len(m.MainnetAccountList) > 0 { + for iNdEx := len(m.MainnetAccountList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.MainnetAccounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.MainnetAccountList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -186,13 +180,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x2a } } - if len(m.ProjectChains) > 0 { - for iNdEx := len(m.ProjectChains) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ProjectChainsList) > 0 { + for iNdEx := len(m.ProjectChainsList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.ProjectChains[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ProjectChainsList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -200,18 +194,18 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x22 } } - if m.ProjectCounter != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.ProjectCounter)) + if m.ProjectCount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.ProjectCount)) i-- - dAtA[i] = 0x10 + dAtA[i] = 0x18 } - if len(m.Projects) > 0 { - for iNdEx := len(m.Projects) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ProjectList) > 0 { + for iNdEx := len(m.ProjectList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Projects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ProjectList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -219,9 +213,19 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 } } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -242,23 +246,25 @@ func (m *GenesisState) Size() (n int) { } var l int _ = l - if len(m.Projects) > 0 { - for _, e := range m.Projects { + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.ProjectList) > 0 { + for _, e := range m.ProjectList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if m.ProjectCounter != 0 { - n += 1 + sovGenesis(uint64(m.ProjectCounter)) + if m.ProjectCount != 0 { + n += 1 + sovGenesis(uint64(m.ProjectCount)) } - if len(m.ProjectChains) > 0 { - for _, e := range m.ProjectChains { + if len(m.ProjectChainsList) > 0 { + for _, e := range m.ProjectChainsList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.MainnetAccounts) > 0 { - for _, e := range m.MainnetAccounts { + if len(m.MainnetAccountList) > 0 { + for _, e := range m.MainnetAccountList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } @@ -266,8 +272,6 @@ func (m *GenesisState) Size() (n int) { if m.TotalShares != 0 { n += 1 + sovGenesis(uint64(m.TotalShares)) } - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) return n } @@ -308,7 +312,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Projects", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -335,16 +339,15 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Projects = append(m.Projects, Project{}) - if err := m.Projects[len(m.Projects)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ProjectCounter", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProjectList", wireType) } - m.ProjectCounter = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -354,14 +357,48 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ProjectCounter |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProjectList = append(m.ProjectList, Project{}) + if err := m.ProjectList[len(m.ProjectList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProjectCount", wireType) + } + m.ProjectCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ProjectCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProjectChains", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProjectChainsList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -388,14 +425,14 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ProjectChains = append(m.ProjectChains, ProjectChains{}) - if err := m.ProjectChains[len(m.ProjectChains)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ProjectChainsList = append(m.ProjectChainsList, ProjectChains{}) + if err := m.ProjectChainsList[len(m.ProjectChainsList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MainnetAccounts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MainnetAccountList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -422,12 +459,12 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.MainnetAccounts = append(m.MainnetAccounts, MainnetAccount{}) - if err := m.MainnetAccounts[len(m.MainnetAccounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.MainnetAccountList = append(m.MainnetAccountList, MainnetAccount{}) + if err := m.MainnetAccountList[len(m.MainnetAccountList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 5: + case 6: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TotalShares", wireType) } @@ -446,39 +483,6 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { break } } - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/x/project/types/genesis_test.go b/x/project/types/genesis_test.go index f5abb718..c1100890 100644 --- a/x/project/types/genesis_test.go +++ b/x/project/types/genesis_test.go @@ -1,81 +1,45 @@ package types_test import ( - "fmt" "testing" - sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - tc2 "github.com/tendermint/spn/testutil/constructor" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/x/project/types" ) func TestGenesisState_Validate(t *testing.T) { - var ( - project1 = sample.Project(r, 0) - project2 = sample.Project(r, 1) - shares1 = sample.Shares(r) - shares2 = sample.Shares(r) - shares3 = sample.Shares(r) - shares4 = sample.Shares(r) - ) - sharesProject1 := types.IncreaseShares(shares1, shares2) - project1.AllocatedShares = sharesProject1 - project1.CoordinatorID = 0 - - sharesProject2 := types.IncreaseShares(shares3, shares4) - project2.AllocatedShares = sharesProject2 - project2.CoordinatorID = 1 - - for _, tc := range []struct { - name string - genState *types.GenesisState - errorMessage string + tests := []struct { + desc string + genState *types.GenesisState + valid bool }{ { - name: "should allow validation of valid default genesis", + desc: "default is valid", genState: types.DefaultGenesis(), + valid: true, }, { - name: "should allow validation of valid genesis", + desc: "valid genesis state", genState: &types.GenesisState{ - // this line is used by starport scaffolding # types/genesis/validField - ProjectChains: []types.ProjectChains{ + MainnetAccountList: []types.MainnetAccount{ { - ProjectID: project1.ProjectID, + ProjectID: 0, }, { - ProjectID: project2.ProjectID, + ProjectID: 1, }, }, - Projects: []types.Project{ - project1, - project2, - }, - ProjectCounter: 2, - MainnetAccounts: []types.MainnetAccount{ + ProjectList: []types.Project{ { - ProjectID: project1.ProjectID, - Address: sample.Address(r), - Shares: shares1, + ProjectID: 0, }, { - ProjectID: project2.ProjectID, - Address: sample.Address(r), - Shares: shares3, + ProjectID: 1, }, }, - TotalShares: spntypes.TotalShareNumber, - Params: types.DefaultParams(), - }, - }, - { - name: "should prevent validation of genesis with non existing project for mainnet account", - genState: &types.GenesisState{ - ProjectChains: []types.ProjectChains{ + ProjectCount: 2, + ProjectChainsList: []types.ProjectChains{ { ProjectID: 0, }, @@ -83,46 +47,28 @@ func TestGenesisState_Validate(t *testing.T) { ProjectID: 1, }, }, - Projects: []types.Project{ - sample.Project(r, 0), - sample.Project(r, 1), - }, - ProjectCounter: 2, - MainnetAccounts: []types.MainnetAccount{ - sample.MainnetAccount(r, 330, "330"), - }, - TotalShares: spntypes.TotalShareNumber, + // this line is used by starport scaffolding # types/genesis/validField }, - errorMessage: "project id 330 doesn't exist for mainnet account 330", + valid: true, }, { - name: "should prevent validation of genesis with non existing project for chains", + desc: "duplicated mainnetAccount", genState: &types.GenesisState{ - ProjectChains: []types.ProjectChains{ + MainnetAccountList: []types.MainnetAccount{ { - ProjectID: 2, + ProjectID: 0, }, { - ProjectID: 4, + ProjectID: 0, }, }, - Projects: []types.Project{ - sample.Project(r, 99), - sample.Project(r, 88), - }, - ProjectCounter: 100, - TotalShares: spntypes.TotalShareNumber, }, - errorMessage: "project id 2 doesn't exist for chains", + valid: false, }, { - name: "should prevent validation of genesis with duplicated projectChains", + desc: "duplicated project", genState: &types.GenesisState{ - Projects: []types.Project{ - sample.Project(r, 0), - }, - ProjectCounter: 1, - ProjectChains: []types.ProjectChains{ + ProjectList: []types.Project{ { ProjectID: 0, }, @@ -130,173 +76,39 @@ func TestGenesisState_Validate(t *testing.T) { ProjectID: 0, }, }, - TotalShares: spntypes.TotalShareNumber, - }, - errorMessage: "duplicated index for projectChains", - }, - { - name: "should prevent validation of genesis with duplicated project", - genState: &types.GenesisState{ - Projects: []types.Project{ - sample.Project(r, 0), - sample.Project(r, 0), - }, - ProjectCounter: 2, - TotalShares: spntypes.TotalShareNumber, }, - errorMessage: "duplicated id for project", - }, - { - name: "should prevent validation of genesis with invalid project count", - genState: &types.GenesisState{ - Projects: []types.Project{ - sample.Project(r, 1), - }, - ProjectCounter: 0, - TotalShares: spntypes.TotalShareNumber, - }, - errorMessage: "project id should be lower or equal than the last id", - }, - { - name: "should prevent validation of genesis with invalid project", - genState: &types.GenesisState{ - Projects: []types.Project{ - types.NewProject( - 0, - invalidProjectName, - sample.Uint64(r), - sample.TotalSupply(r), - sample.Metadata(r, 20), - sample.Duration(r).Milliseconds(), - ), - }, - ProjectCounter: 1, - TotalShares: spntypes.TotalShareNumber, - }, - errorMessage: "invalid project 0: project name can only contain alphanumerical characters or hyphen", + valid: false, }, { - name: "should prevent validation of genesis with duplicated mainnetAccount", + desc: "invalid project count", genState: &types.GenesisState{ - Projects: []types.Project{ - sample.Project(r, 0), - }, - ProjectCounter: 1, - MainnetAccounts: []types.MainnetAccount{ + ProjectList: []types.Project{ { - ProjectID: 0, - Address: "0", - }, - { - ProjectID: 0, - Address: "0", + ProjectID: 1, }, }, - TotalShares: spntypes.TotalShareNumber, + ProjectCount: 0, }, - errorMessage: "duplicated index for mainnetAccount", + valid: false, }, { - name: "should prevent validation of genesis with invalid allocations", + desc: "duplicated projectChains", genState: &types.GenesisState{ - Projects: []types.Project{ + ProjectChainsList: []types.ProjectChains{ { - ProjectID: 0, - ProjectName: "test", - CoordinatorID: 0, - MainnetID: 0, - MainnetInitialized: false, - TotalSupply: nil, - AllocatedShares: types.NewSharesFromCoins(tc2.Coins(t, fmt.Sprintf("%dstake", spntypes.TotalShareNumber+1))), - Metadata: nil, + ProjectID: 0, }, - }, - ProjectCounter: 1, - MainnetAccounts: []types.MainnetAccount{ { ProjectID: 0, - Address: "0", }, }, - TotalShares: spntypes.TotalShareNumber, }, - errorMessage: "invalid project 0: more allocated shares than total shares", + valid: false, }, // this line is used by starport scaffolding # types/genesis/testcase - } { - t.Run(tc.name, func(t *testing.T) { - err := tc.genState.Validate() - if tc.errorMessage != "" { - require.Error(t, err) - require.Equal(t, tc.errorMessage, err.Error()) - return - } - require.NoError(t, err) - - projectIDMap := make(map[uint64]types.Shares) - for _, elem := range tc.genState.Projects { - projectIDMap[elem.ProjectID] = elem.AllocatedShares - } - shares := make(map[uint64]types.Shares) - - for _, acc := range tc.genState.MainnetAccounts { - // check if the project exists for mainnet accounts - _, ok := projectIDMap[acc.ProjectID] - require.True(t, ok) - - // sum mainnet account shares - if _, ok := shares[acc.ProjectID]; !ok { - shares[acc.ProjectID] = types.EmptyShares() - } - shares[acc.ProjectID] = types.IncreaseShares( - shares[acc.ProjectID], - acc.Shares, - ) - } - - for projectID, share := range projectIDMap { - // check if the project shares is equal all accounts shares - accShares, ok := shares[projectID] - require.True(t, ok) - isLowerEqual := accShares.IsAllLTE(share) - require.True(t, isLowerEqual) - } - }) } -} - -func TestGenesisState_ValidateParams(t *testing.T) { - for _, tc := range []struct { - name string - genState types.GenesisState - valid bool - }{ - { - name: "should prevent validation of genesis with max total supply below min total supply", - genState: types.GenesisState{ - Params: types.NewParams( - types.DefaultMinTotalSupply, - types.DefaultMinTotalSupply.Sub(sdkmath.OneInt()), - types.DefaultProjectCreationFee, - types.DefaultMaxMetadataLength, - ), - }, - valid: false, - }, - { - name: "should prevent validation of genesis with valid parameters", - genState: types.GenesisState{ - Params: types.NewParams( - types.DefaultMinTotalSupply, - types.DefaultMinTotalSupply.Add(sdkmath.OneInt()), - types.DefaultProjectCreationFee, - types.DefaultMaxMetadataLength, - ), - }, - valid: true, - }, - } { - t.Run(tc.name, func(t *testing.T) { + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { err := tc.genState.Validate() if tc.valid { require.NoError(t, err) diff --git a/x/project/types/keys.go b/x/project/types/keys.go index 7a643dba..fd29390e 100644 --- a/x/project/types/keys.go +++ b/x/project/types/keys.go @@ -1,6 +1,6 @@ package types -import spntypes "github.com/tendermint/spn/pkg/types" +import "cosmossdk.io/collections" const ( // ModuleName defines the module name @@ -9,60 +9,25 @@ const ( // StoreKey defines the primary module store key StoreKey = ModuleName - // RouterKey is the message route for slashing - RouterKey = ModuleName - - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - // MemStoreKey defines the in-memory store key MemStoreKey = "mem_project" - - // ProjectKey is the prefix to retrieve all Project - ProjectKey = "Project/value/" - - // ProjectCounterKey is the prefix to store project count - ProjectCounterKey = "Project/count/" - - // TotalSharesKey is the prefix to retrieve TotalShares - TotalSharesKey = "TotalShares/value/" - - // ProjectChainsKeyPrefix is the prefix to retrieve all ProjectChains - ProjectChainsKeyPrefix = "ProjectChains/value/" - - // MainnetAccountKeyPrefix is the prefix to retrieve all MainnetAccount - MainnetAccountKeyPrefix = "MainnetAccount/value/" - - // MainnetVestingAccountKeyPrefix is the prefix to retrieve all MainnetVestingAccount - MainnetVestingAccountKeyPrefix = "MainnetVestingAccount/value/" ) -func KeyPrefix(p string) []byte { - return []byte(p) -} +var ( + // ParamsKey is the prefix to retrieve all Params + ParamsKey = collections.NewPrefix("p_project") -// ProjectChainsKey returns the store key to retrieve a ProjectChains from the index fields -func ProjectChainsKey(projectID uint64) []byte { - return append(spntypes.UintBytes(projectID), byte('/')) -} + // ProjectKey is the prefix to retrieve all Project + ProjectKey = collections.NewPrefix("project/value/") + // ProjectCountKey is the prefix to retrieve all ProjectCount + ProjectCountKey = collections.NewPrefix("project/count/") -// AccountKeyPath returns the store key path without prefix for an account defined by a project ID and an address -func AccountKeyPath(projectID uint64, address string) []byte { - projectIDBytes := append(spntypes.UintBytes(projectID), byte('/')) - addressBytes := append([]byte(address), byte('/')) - return append(projectIDBytes, addressBytes...) -} + // ProjectChainsKey is the prefix to retrieve all ProjectChains + ProjectChainsKey = collections.NewPrefix("ProjectChains/value/") -// MainnetAccountAllKey returns the store key to retrieve all MainnetAccount by project id -func MainnetAccountAllKey(projectID uint64) []byte { - prefixBytes := []byte(MainnetAccountKeyPrefix) - projectIDBytes := append(spntypes.UintBytes(projectID), byte('/')) - return append(prefixBytes, projectIDBytes...) -} + // MainnetAccountKey is the prefix to retrieve all MainnetAccount + MainnetAccountKey = collections.NewPrefix("MainnetAccount/value/") -// MainnetVestingAccountAllKey returns the store key to retrieve all MainnetVestingAccount by project id -func MainnetVestingAccountAllKey(projectID uint64) []byte { - prefixBytes := []byte(MainnetVestingAccountKeyPrefix) - projectIDBytes := append(spntypes.UintBytes(projectID), byte('/')) - return append(prefixBytes, projectIDBytes...) -} + // TotalSharesKey is the prefix to retrieve all TotalShares + TotalSharesKey = collections.NewPrefix("TotalShares/value/") +) diff --git a/x/project/types/mainnet_account.pb.go b/x/project/types/mainnet_account.pb.go index f43993f9..e7b5e2da 100644 --- a/x/project/types/mainnet_account.pb.go +++ b/x/project/types/mainnet_account.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/mainnet_account.proto +// source: network/project/v1/mainnet_account.proto package types @@ -8,6 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -36,7 +37,7 @@ func (m *MainnetAccount) Reset() { *m = MainnetAccount{} } func (m *MainnetAccount) String() string { return proto.CompactTextString(m) } func (*MainnetAccount) ProtoMessage() {} func (*MainnetAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_5650b1f89df17362, []int{0} + return fileDescriptor_071f89fc0af8d597, []int{0} } func (m *MainnetAccount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -96,7 +97,7 @@ func (m *MainnetAccountBalance) Reset() { *m = MainnetAccountBalance{} } func (m *MainnetAccountBalance) String() string { return proto.CompactTextString(m) } func (*MainnetAccountBalance) ProtoMessage() {} func (*MainnetAccountBalance) Descriptor() ([]byte, []int) { - return fileDescriptor_5650b1f89df17362, []int{1} + return fileDescriptor_071f89fc0af8d597, []int{1} } func (m *MainnetAccountBalance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -147,36 +148,41 @@ func (m *MainnetAccountBalance) GetCoins() github_com_cosmos_cosmos_sdk_types.Co } func init() { - proto.RegisterType((*MainnetAccount)(nil), "spn.project.MainnetAccount") - proto.RegisterType((*MainnetAccountBalance)(nil), "spn.project.MainnetAccountBalance") + proto.RegisterType((*MainnetAccount)(nil), "network.project.v1.MainnetAccount") + proto.RegisterType((*MainnetAccountBalance)(nil), "network.project.v1.MainnetAccountBalance") } -func init() { proto.RegisterFile("spn/project/mainnet_account.proto", fileDescriptor_5650b1f89df17362) } +func init() { + proto.RegisterFile("network/project/v1/mainnet_account.proto", fileDescriptor_071f89fc0af8d597) +} -var fileDescriptor_5650b1f89df17362 = []byte{ - // 352 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x52, 0x3d, 0x4f, 0xc2, 0x40, - 0x18, 0xee, 0x89, 0x62, 0x28, 0x89, 0x43, 0x83, 0x49, 0x21, 0xe6, 0x40, 0x16, 0xeb, 0x40, 0x2f, - 0xe0, 0xe4, 0x48, 0x71, 0x71, 0x70, 0x29, 0x9b, 0x0e, 0xe4, 0x7a, 0xbd, 0x94, 0x2a, 0xbd, 0x6b, - 0x7a, 0x87, 0xd1, 0xff, 0xe0, 0xe0, 0xef, 0x70, 0xf6, 0x47, 0x30, 0x12, 0x27, 0x27, 0x34, 0xf0, - 0x27, 0x8c, 0x93, 0x69, 0xef, 0xfc, 0xda, 0x70, 0x70, 0x6a, 0xfb, 0x3e, 0xcf, 0xfb, 0x7c, 0x34, - 0xaf, 0xb9, 0x2f, 0x52, 0x86, 0xd2, 0x8c, 0x5f, 0x52, 0x22, 0x51, 0x82, 0x63, 0xc6, 0xa8, 0x1c, - 0x61, 0x42, 0xf8, 0x94, 0x49, 0x37, 0xcd, 0xb8, 0xe4, 0x56, 0x55, 0xa4, 0xcc, 0xd5, 0x94, 0x46, - 0x2d, 0xe2, 0x11, 0x2f, 0xe6, 0x28, 0x7f, 0x53, 0x94, 0x06, 0x24, 0x5c, 0x24, 0x5c, 0xa0, 0x00, - 0x0b, 0x8a, 0xae, 0xbb, 0x01, 0x95, 0xb8, 0x8b, 0x08, 0x8f, 0x99, 0xc6, 0xeb, 0x0a, 0x1f, 0xa9, - 0x45, 0xf5, 0xa1, 0xa0, 0xf6, 0x1c, 0x98, 0x3b, 0x67, 0xca, 0xb7, 0xaf, 0x6c, 0xad, 0x3d, 0xb3, - 0xa2, 0xed, 0x4e, 0x4f, 0x6c, 0xd0, 0x02, 0xce, 0xa6, 0xff, 0x3d, 0xb0, 0x7a, 0xe6, 0x36, 0x0e, - 0xc3, 0x8c, 0x0a, 0x61, 0x6f, 0xb4, 0x80, 0x53, 0xf1, 0xec, 0xa7, 0xc7, 0x4e, 0x4d, 0x6b, 0xf6, - 0x15, 0x32, 0x94, 0x59, 0xcc, 0x22, 0xff, 0x93, 0x68, 0x4d, 0xcc, 0xb2, 0x18, 0xe3, 0x8c, 0x0a, - 0xbb, 0xd4, 0x2a, 0x39, 0xd5, 0x5e, 0xdd, 0xd5, 0xfc, 0x3c, 0xb0, 0xab, 0x03, 0xbb, 0x03, 0x1e, - 0x33, 0xef, 0x78, 0xb6, 0x68, 0x1a, 0xef, 0x8b, 0xe6, 0x41, 0x14, 0xcb, 0xf1, 0x34, 0x70, 0x09, - 0x4f, 0x74, 0x60, 0xfd, 0xe8, 0x88, 0xf0, 0x0a, 0xc9, 0xdb, 0x94, 0x8a, 0x62, 0xe1, 0xe1, 0xa5, - 0x59, 0x1e, 0x16, 0xda, 0xbe, 0xf6, 0x68, 0xbf, 0x01, 0x73, 0xf7, 0x77, 0x25, 0x0f, 0x4f, 0x30, - 0x23, 0xf4, 0x1f, 0x9a, 0xdd, 0x01, 0x73, 0x2b, 0xff, 0xd1, 0x6b, 0x34, 0xbb, 0xf8, 0x7b, 0x33, - 0x67, 0x4d, 0xaa, 0xf0, 0x55, 0x08, 0x6f, 0x30, 0x5b, 0x42, 0x30, 0x5f, 0x42, 0xf0, 0xba, 0x84, - 0xe0, 0x7e, 0x05, 0x8d, 0xf9, 0x0a, 0x1a, 0xcf, 0x2b, 0x68, 0x9c, 0x1f, 0xfe, 0x90, 0x92, 0x94, - 0x85, 0x34, 0x4b, 0x62, 0x26, 0x51, 0x7e, 0x7e, 0x37, 0x5f, 0x07, 0x58, 0x28, 0x06, 0xe5, 0xe2, - 0x32, 0x8e, 0x3e, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xc1, 0xf6, 0xb3, 0x9c, 0x02, 0x00, 0x00, +var fileDescriptor_071f89fc0af8d597 = []byte{ + // 393 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xc8, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x28, 0xca, 0xcf, 0x4a, 0x4d, 0x2e, 0xd1, 0x2f, 0x33, 0xd4, 0xcf, + 0x4d, 0xcc, 0xcc, 0xcb, 0x4b, 0x2d, 0x89, 0x4f, 0x4c, 0x4e, 0xce, 0x2f, 0xcd, 0x2b, 0xd1, 0x2b, + 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0xaa, 0xd4, 0x83, 0xaa, 0xd4, 0x2b, 0x33, 0x94, 0x12, + 0x4c, 0xcc, 0xcd, 0xcc, 0xcb, 0xd7, 0x07, 0x93, 0x10, 0x65, 0x52, 0x72, 0xc9, 0xf9, 0xc5, 0xb9, + 0xf9, 0xc5, 0xfa, 0x49, 0x89, 0xc5, 0xa9, 0xfa, 0x65, 0x86, 0x49, 0xa9, 0x25, 0x89, 0x86, 0xfa, + 0xc9, 0xf9, 0x99, 0x79, 0x50, 0x79, 0x49, 0x88, 0x7c, 0x3c, 0x98, 0xa7, 0x0f, 0xe1, 0x40, 0xa5, + 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0x21, 0xe2, 0x20, 0x16, 0x44, 0x54, 0xe9, 0x39, 0x23, 0x17, 0x9f, + 0x2f, 0xc4, 0x45, 0x8e, 0x10, 0x07, 0x09, 0xc9, 0x70, 0x71, 0x42, 0x1d, 0xe1, 0xe9, 0x22, 0xc1, + 0xa8, 0xc0, 0xa8, 0xc1, 0x12, 0x84, 0x10, 0x10, 0x32, 0xe2, 0x62, 0x4f, 0x4c, 0x49, 0x29, 0x4a, + 0x2d, 0x2e, 0x96, 0x60, 0x52, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xb8, 0xb4, 0x45, 0x57, 0x04, 0x6a, + 0x93, 0x23, 0x44, 0x26, 0xb8, 0xa4, 0x28, 0x33, 0x2f, 0x3d, 0x08, 0xa6, 0x50, 0xa8, 0x89, 0x91, + 0x8b, 0xad, 0x38, 0x23, 0xb1, 0x28, 0xb5, 0x58, 0x82, 0x59, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x52, + 0x0f, 0xaa, 0x01, 0xe4, 0x0f, 0x3d, 0xa8, 0x3f, 0xf4, 0x9c, 0xf3, 0x33, 0xf3, 0x9c, 0xfc, 0x4f, + 0xdc, 0x93, 0x67, 0xf8, 0x75, 0x4f, 0x5e, 0x3d, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, + 0x3f, 0x17, 0xea, 0x0f, 0x28, 0xa5, 0x5b, 0x9c, 0x92, 0xad, 0x5f, 0x52, 0x59, 0x90, 0x5a, 0x0c, + 0xd6, 0xb0, 0xea, 0xbe, 0x3c, 0x5b, 0x30, 0xd8, 0xec, 0x59, 0xcf, 0x37, 0x68, 0xf1, 0xe4, 0xa4, + 0xa6, 0x27, 0x26, 0x57, 0xc6, 0x83, 0x82, 0xa4, 0x78, 0xc5, 0xf3, 0x0d, 0x5a, 0x8c, 0x41, 0x50, + 0x9b, 0x95, 0xfa, 0x98, 0xb8, 0x44, 0x51, 0x7d, 0xea, 0x94, 0x98, 0x93, 0x98, 0x97, 0x9c, 0x4a, + 0x03, 0x0f, 0x2f, 0x62, 0xe4, 0x62, 0x05, 0x3b, 0x81, 0xb0, 0x7f, 0x0b, 0x49, 0xf7, 0xaf, 0x06, + 0x91, 0x4a, 0x71, 0x85, 0x08, 0xc4, 0x69, 0x4e, 0xce, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, + 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, + 0x2c, 0xc7, 0x10, 0xa5, 0x89, 0x64, 0x41, 0x66, 0x7a, 0x5e, 0x66, 0x49, 0xaa, 0x3e, 0x2c, 0x21, + 0x57, 0xc0, 0x93, 0x32, 0xd8, 0x9e, 0x24, 0x36, 0x70, 0x32, 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, + 0xff, 0x15, 0xab, 0xd9, 0x68, 0xea, 0x02, 0x00, 0x00, } func (m *MainnetAccount) Marshal() (dAtA []byte, err error) { diff --git a/x/project/types/mainnet_account_balance.pb.go b/x/project/types/mainnet_account_balance.pb.go new file mode 100644 index 00000000..195c645d --- /dev/null +++ b/x/project/types/mainnet_account_balance.pb.go @@ -0,0 +1,40 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: network/project/v1/mainnet_account_balance.proto + +package types + +import ( + fmt "fmt" + math "math" + + proto "github.com/cosmos/gogoproto/proto" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func init() { + proto.RegisterFile("network/project/v1/mainnet_account_balance.proto", fileDescriptor_aad24c0312827951) +} + +var fileDescriptor_aad24c0312827951 = []byte{ + // 147 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0xc8, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x28, 0xca, 0xcf, 0x4a, 0x4d, 0x2e, 0xd1, 0x2f, 0x33, 0xd4, 0xcf, + 0x4d, 0xcc, 0xcc, 0xcb, 0x4b, 0x2d, 0x89, 0x4f, 0x4c, 0x4e, 0xce, 0x2f, 0xcd, 0x2b, 0x89, 0x4f, + 0x4a, 0xcc, 0x49, 0xcc, 0x4b, 0x4e, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0xea, + 0xd0, 0x83, 0xea, 0xd0, 0x2b, 0x33, 0x74, 0x72, 0x3e, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, + 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, + 0x39, 0x86, 0x28, 0xcd, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xcc, + 0xf4, 0xbc, 0xcc, 0x92, 0x54, 0x7d, 0x98, 0x8d, 0x15, 0x70, 0x3b, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, + 0x93, 0xd8, 0xc0, 0xe6, 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x33, 0x63, 0xc6, 0x72, 0x93, + 0x00, 0x00, 0x00, +} diff --git a/x/project/types/msg_burn_vouchers.go b/x/project/types/msg_burn_vouchers.go deleted file mode 100644 index 90a7bd44..00000000 --- a/x/project/types/msg_burn_vouchers.go +++ /dev/null @@ -1,59 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgBurnVouchers = "burn_vouchers" - -var _ sdk.Msg = &MsgBurnVouchers{} - -func NewMsgBurnVouchers(sender string, projectID uint64, vouchers sdk.Coins) *MsgBurnVouchers { - return &MsgBurnVouchers{ - Sender: sender, - ProjectID: projectID, - Vouchers: vouchers, - } -} - -func (msg *MsgBurnVouchers) Route() string { - return RouterKey -} - -func (msg *MsgBurnVouchers) Type() string { - return TypeMsgBurnVouchers -} - -func (msg *MsgBurnVouchers) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -func (msg *MsgBurnVouchers) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgBurnVouchers) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return sdkerrors.Wrapf(ErrInvalidVoucherAddress, "invalid sender address (%s)", err) - } - - if !msg.Vouchers.IsValid() { - return sdkerrors.Wrap(ErrInvalidVouchers, msg.Vouchers.String()) - } - - if msg.Vouchers.Empty() { - return sdkerrors.Wrap(ErrInvalidVouchers, "vouchers is empty") - } - - if err := CheckVouchers(msg.Vouchers, msg.ProjectID); err != nil { - return sdkerrors.Wrap(ErrNoMatchVouchers, err.Error()) - } - return nil -} diff --git a/x/project/types/msg_burn_vouchers_test.go b/x/project/types/msg_burn_vouchers_test.go deleted file mode 100644 index 63e731d3..00000000 --- a/x/project/types/msg_burn_vouchers_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package types_test - -import ( - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgBurnVouchers_ValidateBasic(t *testing.T) { - invalidCoins := sdk.Coins{sdk.Coin{Denom: "invalid denom", Amount: sdkmath.ZeroInt()}} - - tests := []struct { - name string - msg types.MsgBurnVouchers - err error - }{ - { - name: "should allow validation of valid msg", - msg: types.MsgBurnVouchers{ - Sender: sample.Address(r), - ProjectID: 0, - Vouchers: sample.Vouchers(r, 0), - }, - }, - { - name: "should prevent validation of msg with invalid address", - msg: types.MsgBurnVouchers{ - Sender: "invalid_address", - ProjectID: 0, - Vouchers: sample.Coins(r), - }, - err: types.ErrInvalidVoucherAddress, - }, - { - name: "should prevent validation of msg with invalid vouchers", - msg: types.MsgBurnVouchers{ - Sender: sample.Address(r), - ProjectID: 0, - Vouchers: invalidCoins, - }, - err: types.ErrInvalidVouchers, - }, - { - name: "should prevent validation of msg with empty vouchers", - msg: types.MsgBurnVouchers{ - Sender: sample.Address(r), - ProjectID: 0, - Vouchers: sdk.Coins{}, - }, - err: types.ErrInvalidVouchers, - }, - { - name: "should prevent validation of msg with vouchers not matching project", - msg: types.MsgBurnVouchers{ - Sender: sample.Address(r), - ProjectID: 0, - Vouchers: sdk.NewCoins( - sdk.NewCoin("invalid/foo", sdkmath.NewInt(100)), - ), - }, - err: types.ErrNoMatchVouchers, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msg_create_project.go b/x/project/types/msg_create_project.go deleted file mode 100644 index 4d8874e2..00000000 --- a/x/project/types/msg_create_project.go +++ /dev/null @@ -1,64 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgCreateProject = "create_project" - -var _ sdk.Msg = &MsgCreateProject{} - -func NewMsgCreateProject( - coordinator string, - projectName string, - totalSupply sdk.Coins, - metadata []byte, -) *MsgCreateProject { - return &MsgCreateProject{ - Coordinator: coordinator, - ProjectName: projectName, - TotalSupply: totalSupply, - Metadata: metadata, - } -} - -func (msg *MsgCreateProject) Route() string { - return RouterKey -} - -func (msg *MsgCreateProject) Type() string { - return TypeMsgCreateProject -} - -func (msg *MsgCreateProject) GetSigners() []sdk.AccAddress { - coordinator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{coordinator} -} - -func (msg *MsgCreateProject) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgCreateProject) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - if err := CheckProjectName(msg.ProjectName); err != nil { - return sdkerrors.Wrap(ErrInvalidProjectName, err.Error()) - } - - if !msg.TotalSupply.IsValid() { - return sdkerrors.Wrap(ErrInvalidTotalSupply, "total supply is not a valid Coins object") - } - - return nil -} diff --git a/x/project/types/msg_create_project_test.go b/x/project/types/msg_create_project_test.go deleted file mode 100644 index 42f1f06e..00000000 --- a/x/project/types/msg_create_project_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package types_test - -import ( - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgCreateProject_ValidateBasic(t *testing.T) { - invalidCoins := sdk.Coins{sdk.Coin{Denom: "invalid denom", Amount: sdkmath.ZeroInt()}} - - tests := []struct { - name string - msg types.MsgCreateProject - err error - }{ - { - name: "should allow validation of valid msg", - msg: types.MsgCreateProject{ - Coordinator: sample.Address(r), - ProjectName: sample.ProjectName(r), - TotalSupply: sample.TotalSupply(r), - Metadata: sample.Metadata(r, 20), - }, - }, - { - name: "should prevent validation of msg with invalid address", - msg: types.MsgCreateProject{ - Coordinator: "invalid_address", - ProjectName: sample.ProjectName(r), - TotalSupply: sample.TotalSupply(r), - Metadata: sample.Metadata(r, 20), - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validation of msg with invalid project name", - msg: types.MsgCreateProject{ - Coordinator: sample.Address(r), - ProjectName: invalidProjectName, - TotalSupply: sample.TotalSupply(r), - Metadata: sample.Metadata(r, 20), - }, - err: types.ErrInvalidProjectName, - }, - { - name: "should prevent validation of msg with invalid total supply", - msg: types.MsgCreateProject{ - Coordinator: sample.Address(r), - ProjectName: sample.ProjectName(r), - TotalSupply: invalidCoins, - Metadata: sample.Metadata(r, 20), - }, - err: types.ErrInvalidTotalSupply, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msg_edit_project.go b/x/project/types/msg_edit_project.go deleted file mode 100644 index a89ce5ca..00000000 --- a/x/project/types/msg_edit_project.go +++ /dev/null @@ -1,61 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgEditProject = "edit_project" - -var _ sdk.Msg = &MsgEditProject{} - -func NewMsgEditProject(coordinator string, projectID uint64, name string, metadata []byte) *MsgEditProject { - return &MsgEditProject{ - Coordinator: coordinator, - ProjectID: projectID, - Name: name, - Metadata: metadata, - } -} - -func (msg *MsgEditProject) Route() string { - return RouterKey -} - -func (msg *MsgEditProject) Type() string { - return TypeMsgEditProject -} - -func (msg *MsgEditProject) GetSigners() []sdk.AccAddress { - coordinator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{coordinator} -} - -func (msg *MsgEditProject) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgEditProject) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - if len(msg.Name) == 0 && len(msg.Metadata) == 0 { - return sdkerrors.Wrap(ErrCannotUpdateProject, "must modify at least one field (name or metadata)") - } - - if len(msg.Name) != 0 { - if err := CheckProjectName(msg.Name); err != nil { - return sdkerrors.Wrap(ErrInvalidProjectName, err.Error()) - } - } - - return nil -} diff --git a/x/project/types/msg_edit_project_test.go b/x/project/types/msg_edit_project_test.go deleted file mode 100644 index b961f2c4..00000000 --- a/x/project/types/msg_edit_project_test.go +++ /dev/null @@ -1,87 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgEditProject_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg types.MsgEditProject - err error - }{ - { - name: "should allow validation of msg with both name and metadata modified", - msg: types.MsgEditProject{ - ProjectID: 0, - Coordinator: sample.Address(r), - Name: sample.ProjectName(r), - Metadata: sample.Metadata(r, 20), - }, - }, - { - name: "should allow validation of msg with name modified", - msg: types.MsgEditProject{ - ProjectID: 0, - Coordinator: sample.Address(r), - Name: sample.ProjectName(r), - Metadata: []byte{}, - }, - }, - { - name: "should allow validation of msg with metadata modified", - msg: types.MsgEditProject{ - ProjectID: 0, - Coordinator: sample.Address(r), - Name: "", - Metadata: sample.Metadata(r, 20), - }, - }, - { - name: "should prevent validation of msg with invalid project name", - msg: types.MsgEditProject{ - ProjectID: 0, - Coordinator: sample.Address(r), - Name: invalidProjectName, - Metadata: sample.Metadata(r, 20), - }, - err: types.ErrInvalidProjectName, - }, - { - name: "should prevent validation of msg with invalid coordinator address", - msg: types.MsgEditProject{ - ProjectID: 0, - Coordinator: "invalid_address", - Name: sample.ProjectName(r), - Metadata: sample.Metadata(r, 20), - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validation of msg with no fields modified", - msg: types.MsgEditProject{ - ProjectID: 0, - Coordinator: sample.Address(r), - Name: "", - Metadata: []byte{}, - }, - err: types.ErrCannotUpdateProject, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msg_initialize_mainnet.go b/x/project/types/msg_initialize_mainnet.go deleted file mode 100644 index 273658cc..00000000 --- a/x/project/types/msg_initialize_mainnet.go +++ /dev/null @@ -1,69 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/pkg/chainid" - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgInitializeMainnet = "initialize_mainnet" - -var _ sdk.Msg = &MsgInitializeMainnet{} - -func NewMsgInitializeMainnet( - coordinator string, - projectID uint64, - sourceURL, - sourceHash, - mainnetChainID string, -) *MsgInitializeMainnet { - return &MsgInitializeMainnet{ - Coordinator: coordinator, - ProjectID: projectID, - SourceURL: sourceURL, - SourceHash: sourceHash, - MainnetChainID: mainnetChainID, - } -} - -func (msg *MsgInitializeMainnet) Route() string { - return RouterKey -} - -func (msg *MsgInitializeMainnet) Type() string { - return TypeMsgInitializeMainnet -} - -func (msg *MsgInitializeMainnet) GetSigners() []sdk.AccAddress { - coordinator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{coordinator} -} - -func (msg *MsgInitializeMainnet) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgInitializeMainnet) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - if msg.SourceURL == "" { - return sdkerrors.Wrap(ErrInvalidMainnetInfo, "empty source URL") - } - if msg.SourceHash == "" { - return sdkerrors.Wrap(ErrInvalidMainnetInfo, "empty source hash") - } - if _, _, err := chainid.ParseGenesisChainID(msg.MainnetChainID); err != nil { - return sdkerrors.Wrapf(ErrInvalidMainnetInfo, err.Error()) - } - - return nil -} diff --git a/x/project/types/msg_initialize_mainnet_test.go b/x/project/types/msg_initialize_mainnet_test.go deleted file mode 100644 index 1e8aa87d..00000000 --- a/x/project/types/msg_initialize_mainnet_test.go +++ /dev/null @@ -1,84 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgInitializeMainnet_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg types.MsgInitializeMainnet - err error - }{ - { - name: "should allow validation of valid msg", - msg: types.MsgInitializeMainnet{ - Coordinator: sample.Address(r), - ProjectID: sample.Uint64(r), - SourceURL: sample.String(r, 30), - SourceHash: sample.String(r, 20), - MainnetChainID: sample.GenesisChainID(r), - }, - }, - { - name: "should prevent validation of msg with invalid address", - msg: types.MsgInitializeMainnet{ - Coordinator: "invalid_address", - ProjectID: sample.Uint64(r), - SourceURL: sample.String(r, 30), - SourceHash: sample.String(r, 20), - MainnetChainID: sample.GenesisChainID(r), - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validation of msg with empty source URL", - msg: types.MsgInitializeMainnet{ - Coordinator: sample.Address(r), - ProjectID: sample.Uint64(r), - SourceURL: "", - SourceHash: sample.String(r, 20), - MainnetChainID: sample.GenesisChainID(r), - }, - err: types.ErrInvalidMainnetInfo, - }, - { - name: "should prevent validation of msg with empty source hash", - msg: types.MsgInitializeMainnet{ - Coordinator: sample.Address(r), - ProjectID: sample.Uint64(r), - SourceURL: sample.String(r, 30), - SourceHash: "", - MainnetChainID: sample.GenesisChainID(r), - }, - err: types.ErrInvalidMainnetInfo, - }, - { - name: "should prevent validation of msg with invalid chain id", - msg: types.MsgInitializeMainnet{ - Coordinator: sample.Address(r), - ProjectID: sample.Uint64(r), - SourceURL: sample.String(r, 30), - SourceHash: sample.String(r, 20), - MainnetChainID: "invalid_chain_id", - }, - err: types.ErrInvalidMainnetInfo, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msg_mint_vouchers.go b/x/project/types/msg_mint_vouchers.go deleted file mode 100644 index 495a4d85..00000000 --- a/x/project/types/msg_mint_vouchers.go +++ /dev/null @@ -1,58 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgMintVouchers = "mint_vouchers" - -var _ sdk.Msg = &MsgMintVouchers{} - -func NewMsgMintVouchers(coordinator string, projectID uint64, shares Shares) *MsgMintVouchers { - return &MsgMintVouchers{ - Coordinator: coordinator, - ProjectID: projectID, - Shares: shares, - } -} - -func (msg *MsgMintVouchers) Route() string { - return RouterKey -} - -func (msg *MsgMintVouchers) Type() string { - return TypeMsgMintVouchers -} - -func (msg *MsgMintVouchers) GetSigners() []sdk.AccAddress { - coordinator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{coordinator} -} - -func (msg *MsgMintVouchers) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgMintVouchers) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - if !sdk.Coins(msg.Shares).IsValid() { - return sdkerrors.Wrap(ErrInvalidShares, sdk.Coins(msg.Shares).String()) - } - - if sdk.Coins(msg.Shares).Empty() { - return sdkerrors.Wrap(ErrInvalidShares, "shares is empty") - } - - return nil -} diff --git a/x/project/types/msg_mint_vouchers_test.go b/x/project/types/msg_mint_vouchers_test.go deleted file mode 100644 index d79115db..00000000 --- a/x/project/types/msg_mint_vouchers_test.go +++ /dev/null @@ -1,69 +0,0 @@ -package types_test - -import ( - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgMintVouchers_ValidateBasic(t *testing.T) { - invalidShares := types.Shares{sdk.Coin{Denom: "invalid denom", Amount: sdkmath.ZeroInt()}} - - tests := []struct { - name string - msg types.MsgMintVouchers - err error - }{ - { - name: "should allow validation of valid msg", - msg: types.MsgMintVouchers{ - Coordinator: sample.Address(r), - ProjectID: 0, - Shares: sample.Shares(r), - }, - }, - { - name: "should prevent validation of msg with invalid address", - msg: types.MsgMintVouchers{ - Coordinator: "invalid_address", - ProjectID: 0, - Shares: sample.Shares(r), - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validation of msg with invalid shares", - msg: types.MsgMintVouchers{ - Coordinator: sample.Address(r), - ProjectID: 0, - Shares: invalidShares, - }, - err: types.ErrInvalidShares, - }, - { - name: "should prevent validation of msg with empty shares", - msg: types.MsgMintVouchers{ - Coordinator: sample.Address(r), - ProjectID: 0, - Shares: types.EmptyShares(), - }, - err: types.ErrInvalidShares, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msg_redeem_vouchers.go b/x/project/types/msg_redeem_vouchers.go deleted file mode 100644 index 4502de39..00000000 --- a/x/project/types/msg_redeem_vouchers.go +++ /dev/null @@ -1,65 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgRedeemVouchers = "redeem_vouchers" - -var _ sdk.Msg = &MsgRedeemVouchers{} - -func NewMsgRedeemVouchers(sender, account string, projectID uint64, vouchers sdk.Coins) *MsgRedeemVouchers { - return &MsgRedeemVouchers{ - Sender: sender, - ProjectID: projectID, - Account: account, - Vouchers: vouchers, - } -} - -func (msg *MsgRedeemVouchers) Route() string { - return RouterKey -} - -func (msg *MsgRedeemVouchers) Type() string { - return TypeMsgRedeemVouchers -} - -func (msg *MsgRedeemVouchers) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -func (msg *MsgRedeemVouchers) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgRedeemVouchers) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return sdkerrors.Wrapf(ErrInvalidVoucherAddress, "invalid sender address (%s)", err) - } - - _, err = sdk.AccAddressFromBech32(msg.Account) - if err != nil { - return sdkerrors.Wrapf(ErrInvalidVoucherAddress, "invalid account address (%s)", err) - } - - if !msg.Vouchers.IsValid() { - return sdkerrors.Wrap(ErrInvalidVouchers, msg.Vouchers.String()) - } - - if msg.Vouchers.Empty() { - return sdkerrors.Wrap(ErrInvalidVouchers, "vouchers is empty") - } - - if err := CheckVouchers(msg.Vouchers, msg.ProjectID); err != nil { - return sdkerrors.Wrap(ErrNoMatchVouchers, err.Error()) - } - return nil -} diff --git a/x/project/types/msg_redeem_vouchers_test.go b/x/project/types/msg_redeem_vouchers_test.go deleted file mode 100644 index 902e762f..00000000 --- a/x/project/types/msg_redeem_vouchers_test.go +++ /dev/null @@ -1,114 +0,0 @@ -package types_test - -import ( - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgRedeemVouchers_ValidateBasic(t *testing.T) { - invalidCoins := sdk.Coins{sdk.Coin{Denom: "invalid denom", Amount: sdkmath.ZeroInt()}} - - addr := sample.Address(r) - tests := []struct { - name string - msg types.MsgRedeemVouchers - err error - }{ - { - name: "should allow validation of valid msg", - msg: types.MsgRedeemVouchers{ - Sender: sample.Address(r), - Account: sample.Address(r), - Vouchers: sample.Vouchers(r, 0), - ProjectID: 0, - }, - }, - { - name: "should allow validation of valid msg with same account and sender", - msg: types.MsgRedeemVouchers{ - Sender: addr, - Account: addr, - Vouchers: sample.Vouchers(r, 0), - ProjectID: 0, - }, - }, - { - name: "should prevent validation of msg with invalid sender address", - msg: types.MsgRedeemVouchers{ - Sender: "invalid_address", - Account: sample.Address(r), - Vouchers: sample.Vouchers(r, 0), - ProjectID: 0, - }, - err: types.ErrInvalidVoucherAddress, - }, - { - name: "should prevent validation of msg with invalid account address", - msg: types.MsgRedeemVouchers{ - Sender: sample.Address(r), - Account: "invalid_address", - Vouchers: sample.Vouchers(r, 0), - ProjectID: 0, - }, - err: types.ErrInvalidVoucherAddress, - }, - { - name: "should prevent validation of msg with invalid coin voucher", - msg: types.MsgRedeemVouchers{ - Sender: sample.Address(r), - Account: sample.Address(r), - Vouchers: invalidCoins, - ProjectID: 0, - }, - err: types.ErrInvalidVouchers, - }, - { - name: "should prevent validation of msg with vouchers not matching project", - msg: types.MsgRedeemVouchers{ - Sender: sample.Address(r), - Account: sample.Address(r), - Vouchers: sample.Vouchers(r, 10), - ProjectID: 0, - }, - err: types.ErrNoMatchVouchers, - }, - { - name: "should prevent validation of msg with invalid voucher prefix", - msg: types.MsgRedeemVouchers{ - Sender: sample.Address(r), - Account: sample.Address(r), - Vouchers: sdk.NewCoins( - sdk.NewCoin("invalid/foo", sdkmath.NewInt(100)), - ), - ProjectID: 0, - }, - err: types.ErrNoMatchVouchers, - }, - { - name: "should prevent validation of msg with empty vouchers", - msg: types.MsgRedeemVouchers{ - Sender: sample.Address(r), - Account: sample.Address(r), - Vouchers: sdk.Coins{}, - ProjectID: 0, - }, - err: types.ErrInvalidVouchers, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msg_unredeem_vouchers.go b/x/project/types/msg_unredeem_vouchers.go deleted file mode 100644 index db99d150..00000000 --- a/x/project/types/msg_unredeem_vouchers.go +++ /dev/null @@ -1,56 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgUnredeemVouchers = "unredeem_vouchers" - -var _ sdk.Msg = &MsgUnredeemVouchers{} - -func NewMsgUnredeemVouchers(sender string, projectID uint64, shares Shares) *MsgUnredeemVouchers { - return &MsgUnredeemVouchers{ - Sender: sender, - ProjectID: projectID, - Shares: shares, - } -} - -func (msg *MsgUnredeemVouchers) Route() string { - return RouterKey -} - -func (msg *MsgUnredeemVouchers) Type() string { - return TypeMsgUnredeemVouchers -} - -func (msg *MsgUnredeemVouchers) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -func (msg *MsgUnredeemVouchers) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgUnredeemVouchers) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return sdkerrors.Wrapf(ErrInvalidVoucherAddress, "invalid sender address (%s)", err) - } - - if !sdk.Coins(msg.Shares).IsValid() { - return sdkerrors.Wrap(ErrInvalidShares, sdk.Coins(msg.Shares).String()) - } - - if sdk.Coins(msg.Shares).Empty() { - return sdkerrors.Wrap(ErrInvalidShares, "shares is empty") - } - - return nil -} diff --git a/x/project/types/msg_unredeem_vouchers_test.go b/x/project/types/msg_unredeem_vouchers_test.go deleted file mode 100644 index c8bc177e..00000000 --- a/x/project/types/msg_unredeem_vouchers_test.go +++ /dev/null @@ -1,68 +0,0 @@ -package types_test - -import ( - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgUnredeemVouchers_ValidateBasic(t *testing.T) { - invalidShares := types.Shares{sdk.Coin{Denom: "invalid denom", Amount: sdkmath.ZeroInt()}} - - tests := []struct { - name string - msg types.MsgUnredeemVouchers - err error - }{ - { - name: "should allow validation of valid msg", - msg: types.MsgUnredeemVouchers{ - Sender: sample.Address(r), - ProjectID: 0, - Shares: sample.Shares(r), - }, - }, - { - name: "should prevent validation of msg with invalid address", - msg: types.MsgUnredeemVouchers{ - Sender: "invalid_address", - ProjectID: 0, - Shares: sample.Shares(r), - }, - err: types.ErrInvalidVoucherAddress, - }, - { - name: "should prevent validation of msg with invalid shares", - msg: types.MsgUnredeemVouchers{ - Sender: sample.Address(r), - ProjectID: 0, - Shares: invalidShares, - }, - err: types.ErrInvalidShares, - }, - { - name: "should prevent validation of msg with empty shares", - msg: types.MsgUnredeemVouchers{ - Sender: sample.Address(r), - ProjectID: 0, - Shares: types.EmptyShares(), - }, - err: types.ErrInvalidShares, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msg_update_special_allocations.go b/x/project/types/msg_update_special_allocations.go deleted file mode 100644 index 24bc4811..00000000 --- a/x/project/types/msg_update_special_allocations.go +++ /dev/null @@ -1,55 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgUpdateSpecialAllocations = "update_special_allocations" - -var _ sdk.Msg = &MsgUpdateSpecialAllocations{} - -func NewMsgUpdateSpecialAllocations( - coordinator string, - projectID uint64, - specialAllocations SpecialAllocations, -) *MsgUpdateSpecialAllocations { - return &MsgUpdateSpecialAllocations{ - Coordinator: coordinator, - ProjectID: projectID, - SpecialAllocations: specialAllocations, - } -} - -func (msg *MsgUpdateSpecialAllocations) Route() string { - return RouterKey -} - -func (msg *MsgUpdateSpecialAllocations) Type() string { - return TypeMsgUpdateSpecialAllocations -} - -func (msg *MsgUpdateSpecialAllocations) GetSigners() []sdk.AccAddress { - coordinator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{coordinator} -} - -func (msg *MsgUpdateSpecialAllocations) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgUpdateSpecialAllocations) ValidateBasic() error { - if _, err := sdk.AccAddressFromBech32(msg.Coordinator); err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - if err := msg.SpecialAllocations.Validate(); err != nil { - return sdkerrors.Wrapf(ErrInvalidSpecialAllocations, err.Error()) - } - return nil -} diff --git a/x/project/types/msg_update_special_allocations_test.go b/x/project/types/msg_update_special_allocations_test.go deleted file mode 100644 index 38074dab..00000000 --- a/x/project/types/msg_update_special_allocations_test.go +++ /dev/null @@ -1,60 +0,0 @@ -package types_test - -import ( - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgUpdateSpecialAllocations_ValidateBasic(t *testing.T) { - invalidShares := types.Shares{sdk.Coin{Denom: "invalid denom", Amount: sdkmath.ZeroInt()}} - - tests := []struct { - name string - msg types.MsgUpdateSpecialAllocations - err error - }{ - { - name: "should allow validation of valid msg", - msg: types.MsgUpdateSpecialAllocations{ - Coordinator: sample.Address(r), - ProjectID: 1, - SpecialAllocations: sample.SpecialAllocations(r), - }, - }, - { - name: "should prevent validation of msg with invalid address", - msg: types.MsgUpdateSpecialAllocations{ - Coordinator: "invalid_address", - ProjectID: 1, - SpecialAllocations: sample.SpecialAllocations(r), - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validation of msg with invalid special allocations", - msg: types.MsgUpdateSpecialAllocations{ - Coordinator: sample.Address(r), - ProjectID: 1, - SpecialAllocations: types.NewSpecialAllocations(invalidShares, sample.Shares(r)), - }, - err: types.ErrInvalidSpecialAllocations, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msg_update_total_supply.go b/x/project/types/msg_update_total_supply.go deleted file mode 100644 index 25feed64..00000000 --- a/x/project/types/msg_update_total_supply.go +++ /dev/null @@ -1,58 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - - profile "github.com/tendermint/spn/x/profile/types" -) - -const TypeMsgUpdateTotalSupply = "update_total_supply" - -var _ sdk.Msg = &MsgUpdateTotalSupply{} - -func NewMsgUpdateTotalSupply(coordinator string, projectID uint64, totalSupplyUpdate sdk.Coins) *MsgUpdateTotalSupply { - return &MsgUpdateTotalSupply{ - Coordinator: coordinator, - ProjectID: projectID, - TotalSupplyUpdate: totalSupplyUpdate, - } -} - -func (msg *MsgUpdateTotalSupply) Route() string { - return RouterKey -} - -func (msg *MsgUpdateTotalSupply) Type() string { - return TypeMsgUpdateTotalSupply -} - -func (msg *MsgUpdateTotalSupply) GetSigners() []sdk.AccAddress { - coordinator, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{coordinator} -} - -func (msg *MsgUpdateTotalSupply) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgUpdateTotalSupply) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Coordinator) - if err != nil { - return sdkerrors.Wrap(profile.ErrInvalidCoordAddress, err.Error()) - } - - if !msg.TotalSupplyUpdate.IsValid() { - return sdkerrors.Wrap(ErrInvalidTotalSupply, "total supply is not a valid Coins object") - } - - if msg.TotalSupplyUpdate.Empty() { - return sdkerrors.Wrap(ErrInvalidTotalSupply, "total supply is empty") - } - - return nil -} diff --git a/x/project/types/msg_update_total_supply_test.go b/x/project/types/msg_update_total_supply_test.go deleted file mode 100644 index d4b2c362..00000000 --- a/x/project/types/msg_update_total_supply_test.go +++ /dev/null @@ -1,69 +0,0 @@ -package types_test - -import ( - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - profile "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/project/types" -) - -func TestMsgUpdateTotalSupply_ValidateBasic(t *testing.T) { - invalidCoins := sdk.Coins{sdk.Coin{Denom: "invalid denom", Amount: sdkmath.ZeroInt()}} - - tests := []struct { - name string - msg types.MsgUpdateTotalSupply - err error - }{ - { - name: "should allow validation of valid msg", - msg: types.MsgUpdateTotalSupply{ - Coordinator: sample.Address(r), - ProjectID: 0, - TotalSupplyUpdate: sample.TotalSupply(r), - }, - }, - { - name: "should prevent validation of msg with invalid address", - msg: types.MsgUpdateTotalSupply{ - Coordinator: "invalid_address", - ProjectID: 0, - TotalSupplyUpdate: sample.TotalSupply(r), - }, - err: profile.ErrInvalidCoordAddress, - }, - { - name: "should prevent validation of msg with invalid total supply", - msg: types.MsgUpdateTotalSupply{ - Coordinator: sample.Address(r), - ProjectID: 0, - TotalSupplyUpdate: invalidCoins, - }, - err: types.ErrInvalidTotalSupply, - }, - { - name: "should prevent validation of msg with empty total supply", - msg: types.MsgUpdateTotalSupply{ - Coordinator: sample.Address(r), - ProjectID: 0, - TotalSupplyUpdate: sdk.NewCoins(), - }, - err: types.ErrInvalidTotalSupply, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/msgs.go b/x/project/types/msgs.go new file mode 100644 index 00000000..85849799 --- /dev/null +++ b/x/project/types/msgs.go @@ -0,0 +1,234 @@ +package types + +import ( + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/pkg/chainid" +) + +func NewMsgCreateProject(coordinator string, projectName string, totalSupply sdk.Coins, metadata []byte) *MsgCreateProject { + return &MsgCreateProject{ + Coordinator: coordinator, + ProjectName: projectName, + TotalSupply: totalSupply, + Metadata: metadata, + } +} + +func (msg MsgCreateProject) Type() string { + return sdk.MsgTypeURL(&MsgCreateProject{}) +} + +func (msg *MsgCreateProject) ValidateBasic() error { + if err := CheckProjectName(msg.ProjectName); err != nil { + return sdkerrors.Wrap(ErrInvalidProjectName, err.Error()) + } + + if !msg.TotalSupply.IsValid() { + return sdkerrors.Wrap(ErrInvalidTotalSupply, "total supply is not a valid Coins object") + } + + return nil +} + +func NewMsgEditProject(coordinator string, projectID uint64, name string, metadata []byte) *MsgEditProject { + return &MsgEditProject{ + Coordinator: coordinator, + ProjectID: projectID, + Name: name, + Metadata: metadata, + } +} + +func (msg MsgEditProject) Type() string { + return sdk.MsgTypeURL(&MsgEditProject{}) +} + +func (msg *MsgEditProject) ValidateBasic() error { + if len(msg.Name) == 0 && len(msg.Metadata) == 0 { + return sdkerrors.Wrap(ErrCannotUpdateProject, "must modify at least one field (name or metadata)") + } + + if len(msg.Name) != 0 { + if err := CheckProjectName(msg.Name); err != nil { + return sdkerrors.Wrap(ErrInvalidProjectName, err.Error()) + } + } + + return nil +} + +func NewMsgUpdateTotalSupply(coordinator string, projectID uint64, totalSupplyUpdate sdk.Coins) *MsgUpdateTotalSupply { + return &MsgUpdateTotalSupply{ + Coordinator: coordinator, + ProjectID: projectID, + TotalSupplyUpdate: totalSupplyUpdate, + } +} + +func (msg MsgUpdateTotalSupply) Type() string { + return sdk.MsgTypeURL(&MsgUpdateTotalSupply{}) +} + +func (msg *MsgUpdateTotalSupply) ValidateBasic() error { + if !msg.TotalSupplyUpdate.IsValid() { + return sdkerrors.Wrap(ErrInvalidTotalSupply, "total supply is not a valid Coins object") + } + + if msg.TotalSupplyUpdate.Empty() { + return sdkerrors.Wrap(ErrInvalidTotalSupply, "total supply is empty") + } + + return nil +} + +func NewMsgUpdateSpecialAllocations(coordinator string, projectID uint64, specialAllocations SpecialAllocations) *MsgUpdateSpecialAllocations { + return &MsgUpdateSpecialAllocations{ + Coordinator: coordinator, + ProjectID: projectID, + SpecialAllocations: specialAllocations, + } +} + +func (msg MsgUpdateSpecialAllocations) Type() string { + return sdk.MsgTypeURL(&MsgUpdateSpecialAllocations{}) +} + +func (msg *MsgUpdateSpecialAllocations) ValidateBasic() error { + if err := msg.SpecialAllocations.Validate(); err != nil { + return sdkerrors.Wrapf(ErrInvalidSpecialAllocations, err.Error()) + } + return nil +} + +func NewMsgInitializeMainnet(coordinator string, projectID uint64, sourceURL string, sourceHash string, mainnetChainID string) *MsgInitializeMainnet { + return &MsgInitializeMainnet{ + Coordinator: coordinator, + ProjectID: projectID, + SourceURL: sourceURL, + SourceHash: sourceHash, + MainnetChainID: mainnetChainID, + } +} + +func (msg MsgInitializeMainnet) Type() string { + return sdk.MsgTypeURL(&MsgInitializeMainnet{}) +} + +func (msg *MsgInitializeMainnet) ValidateBasic() error { + if msg.SourceURL == "" { + return sdkerrors.Wrap(ErrInvalidMainnetInfo, "empty source URL") + } + if msg.SourceHash == "" { + return sdkerrors.Wrap(ErrInvalidMainnetInfo, "empty source hash") + } + if _, _, err := chainid.ParseGenesisChainID(msg.MainnetChainID); err != nil { + return sdkerrors.Wrapf(ErrInvalidMainnetInfo, err.Error()) + } + + return nil +} + +func NewMsgMintVouchers(coordinator string, projectID uint64, shares Shares) *MsgMintVouchers { + return &MsgMintVouchers{ + Coordinator: coordinator, + ProjectID: projectID, + Shares: shares, + } +} + +func (msg MsgMintVouchers) Type() string { + return sdk.MsgTypeURL(&MsgMintVouchers{}) +} + +func (msg *MsgMintVouchers) ValidateBasic() error { + if !sdk.Coins(msg.Shares).IsValid() { + return sdkerrors.Wrap(ErrInvalidShares, sdk.Coins(msg.Shares).String()) + } + + if sdk.Coins(msg.Shares).Empty() { + return sdkerrors.Wrap(ErrInvalidShares, "shares is empty") + } + + return nil +} + +func NewMsgBurnVouchers(sender string, projectID uint64, vouchers sdk.Coins) *MsgBurnVouchers { + return &MsgBurnVouchers{ + Sender: sender, + ProjectID: projectID, + Vouchers: vouchers, + } +} + +func (msg MsgBurnVouchers) Type() string { + return sdk.MsgTypeURL(&MsgBurnVouchers{}) +} + +func (msg *MsgBurnVouchers) ValidateBasic() error { + if !msg.Vouchers.IsValid() { + return sdkerrors.Wrap(ErrInvalidVouchers, msg.Vouchers.String()) + } + + if msg.Vouchers.Empty() { + return sdkerrors.Wrap(ErrInvalidVouchers, "vouchers is empty") + } + + if err := CheckVouchers(msg.Vouchers, msg.ProjectID); err != nil { + return sdkerrors.Wrap(ErrNoMatchVouchers, err.Error()) + } + return nil +} + +func NewMsgRedeemVouchers(sender string, projectID uint64, account string, vouchers sdk.Coins) *MsgRedeemVouchers { + return &MsgRedeemVouchers{ + Sender: sender, + ProjectID: projectID, + Account: account, + Vouchers: vouchers, + } +} + +func (msg MsgRedeemVouchers) Type() string { + return sdk.MsgTypeURL(&MsgRedeemVouchers{}) +} + +func (msg *MsgRedeemVouchers) ValidateBasic() error { + if !msg.Vouchers.IsValid() { + return sdkerrors.Wrap(ErrInvalidVouchers, msg.Vouchers.String()) + } + + if msg.Vouchers.Empty() { + return sdkerrors.Wrap(ErrInvalidVouchers, "vouchers is empty") + } + + if err := CheckVouchers(msg.Vouchers, msg.ProjectID); err != nil { + return sdkerrors.Wrap(ErrNoMatchVouchers, err.Error()) + } + return nil +} + +func NewMsgUnredeemVouchers(sender string, projectID uint64, shares Shares) *MsgUnredeemVouchers { + return &MsgUnredeemVouchers{ + Sender: sender, + ProjectID: projectID, + Shares: shares, + } +} + +func (msg MsgUnredeemVouchers) Type() string { + return sdk.MsgTypeURL(&MsgUnredeemVouchers{}) +} + +func (msg *MsgUnredeemVouchers) ValidateBasic() error { + if !sdk.Coins(msg.Shares).IsValid() { + return sdkerrors.Wrap(ErrInvalidShares, sdk.Coins(msg.Shares).String()) + } + + if sdk.Coins(msg.Shares).Empty() { + return sdkerrors.Wrap(ErrInvalidShares, "shares is empty") + } + + return nil +} diff --git a/x/project/types/params.go b/x/project/types/params.go index 922d881d..4d1f12c8 100644 --- a/x/project/types/params.go +++ b/x/project/types/params.go @@ -1,14 +1,10 @@ package types import ( - "errors" "fmt" sdkmath "cosmossdk.io/math" - "gopkg.in/yaml.v2" - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ) var ( @@ -16,17 +12,8 @@ var ( DefaultMaxTotalSupply = sdkmath.NewInt(1_000_000_000_000_000) // One Quadrillion DefaultProjectCreationFee = sdk.Coins(nil) // EmptyCoins DefaultMaxMetadataLength uint64 = 2000 - - KeyTotalSupplyRange = []byte("TotalSupplyRange") - KeyProjectCreationFee = []byte("ProjectCreationFee") - KeyMaxMetadataLength = []byte("MaxMetadataLength") ) -// ParamKeyTable returns the parameter key table. -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - // NewTotalSupplyRange creates a new TotalSupplyRange instance func NewTotalSupplyRange(minTotalSupply, maxTotalSupply sdkmath.Int) TotalSupplyRange { return TotalSupplyRange{ @@ -59,27 +46,14 @@ func DefaultParams() Params { ) } -// String implements stringer interface -func (p Params) String() string { - out, _ := yaml.Marshal(p) - return string(out) -} - -// ParamSetPairs returns the parameter set pairs. -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(KeyTotalSupplyRange, &p.TotalSupplyRange, validateTotalSupplyRange), - paramtypes.NewParamSetPair(KeyProjectCreationFee, &p.ProjectCreationFee, validateProjectCreationFee), - paramtypes.NewParamSetPair(KeyMaxMetadataLength, &p.MaxMetadataLength, validateMaxMetadataLength), - } -} - -// ValidateBasic performs basic validation on project parameters. -func (p Params) ValidateBasic() error { +// Validate validates the set of params. +func (p Params) Validate() error { if err := validateTotalSupplyRange(p.TotalSupplyRange); err != nil { return err } - + if err := validateProjectCreationFee(p.ProjectCreationFee); err != nil { + return err + } if err := validateMaxMetadataLength(p.MaxMetadataLength); err != nil { return err } @@ -93,8 +67,9 @@ func validateTotalSupplyRange(i interface{}) error { return fmt.Errorf("invalid parameter type: %T", i) } if err := v.ValidateBasic(); err != nil { - return errors.New(err.Error()) + return err } + return nil } diff --git a/x/project/types/params.pb.go b/x/project/types/params.pb.go index 0ca53e6a..4e48af60 100644 --- a/x/project/types/params.pb.go +++ b/x/project/types/params.pb.go @@ -1,13 +1,15 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/params.proto +// source: network/project/v1/params.proto package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -26,17 +28,18 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// Params defines the set of params for the project module. +// Params defines the parameters for the module. type Params struct { TotalSupplyRange TotalSupplyRange `protobuf:"bytes,1,opt,name=totalSupplyRange,proto3" json:"totalSupplyRange"` ProjectCreationFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=projectCreationFee,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"projectCreationFee"` MaxMetadataLength uint64 `protobuf:"varint,3,opt,name=maxMetadataLength,proto3" json:"maxMetadataLength,omitempty"` } -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_0959851acf436714, []int{0} + return fileDescriptor_7ba6a528c2821cb1, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -88,15 +91,15 @@ func (m *Params) GetMaxMetadataLength() uint64 { // TotalSupplyRange defines the range of allowed values for total supply type TotalSupplyRange struct { - MinTotalSupply github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=minTotalSupply,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"minTotalSupply"` - MaxTotalSupply github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=maxTotalSupply,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"maxTotalSupply"` + MinTotalSupply cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=minTotalSupply,proto3,customtype=cosmossdk.io/math.Int" json:"minTotalSupply"` + MaxTotalSupply cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=maxTotalSupply,proto3,customtype=cosmossdk.io/math.Int" json:"maxTotalSupply"` } func (m *TotalSupplyRange) Reset() { *m = TotalSupplyRange{} } func (m *TotalSupplyRange) String() string { return proto.CompactTextString(m) } func (*TotalSupplyRange) ProtoMessage() {} func (*TotalSupplyRange) Descriptor() ([]byte, []int) { - return fileDescriptor_0959851acf436714, []int{1} + return fileDescriptor_7ba6a528c2821cb1, []int{1} } func (m *TotalSupplyRange) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -126,41 +129,80 @@ func (m *TotalSupplyRange) XXX_DiscardUnknown() { var xxx_messageInfo_TotalSupplyRange proto.InternalMessageInfo func init() { - proto.RegisterType((*Params)(nil), "spn.project.Params") - proto.RegisterType((*TotalSupplyRange)(nil), "spn.project.TotalSupplyRange") + proto.RegisterType((*Params)(nil), "network.project.v1.Params") + proto.RegisterType((*TotalSupplyRange)(nil), "network.project.v1.TotalSupplyRange") } -func init() { proto.RegisterFile("spn/project/params.proto", fileDescriptor_0959851acf436714) } +func init() { proto.RegisterFile("network/project/v1/params.proto", fileDescriptor_7ba6a528c2821cb1) } -var fileDescriptor_0959851acf436714 = []byte{ - // 398 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x28, 0x2e, 0xc8, 0xd3, - 0x2f, 0x28, 0xca, 0xcf, 0x4a, 0x4d, 0x2e, 0xd1, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2e, 0x2e, 0xc8, 0xd3, 0x83, 0xca, 0x48, 0x89, 0xa4, 0xe7, - 0xa7, 0xe7, 0x83, 0xc5, 0xf5, 0x41, 0x2c, 0x88, 0x12, 0x29, 0xb9, 0xe4, 0xfc, 0xe2, 0xdc, 0xfc, - 0x62, 0xfd, 0xa4, 0xc4, 0xe2, 0x54, 0xfd, 0x32, 0xc3, 0xa4, 0xd4, 0x92, 0x44, 0x43, 0xfd, 0xe4, - 0xfc, 0xcc, 0x3c, 0xa8, 0xbc, 0x24, 0x44, 0x3e, 0x1e, 0xa2, 0x11, 0xc2, 0x81, 0x48, 0x29, 0x6d, - 0x63, 0xe2, 0x62, 0x0b, 0x00, 0x5b, 0x27, 0xe4, 0xcf, 0x25, 0x50, 0x92, 0x5f, 0x92, 0x98, 0x13, - 0x5c, 0x5a, 0x50, 0x90, 0x53, 0x19, 0x94, 0x98, 0x97, 0x9e, 0x2a, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, - 0x6d, 0x24, 0xab, 0x87, 0xe4, 0x06, 0xbd, 0x10, 0x34, 0x45, 0x4e, 0x2c, 0x27, 0xee, 0xc9, 0x33, - 0x04, 0x61, 0x68, 0x16, 0x5a, 0xc6, 0xc8, 0x25, 0x04, 0xd5, 0xe4, 0x5c, 0x94, 0x9a, 0x58, 0x92, - 0x99, 0x9f, 0xe7, 0x96, 0x9a, 0x2a, 0xc1, 0xa4, 0xc0, 0xac, 0xc1, 0x6d, 0x24, 0xa9, 0x07, 0x75, - 0x07, 0xc8, 0xd1, 0x7a, 0x50, 0x47, 0xeb, 0x39, 0xe7, 0x67, 0xe6, 0x39, 0x45, 0x83, 0xcc, 0xfb, - 0x75, 0x4f, 0x5e, 0x3d, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x17, 0xea, 0x68, - 0x28, 0xa5, 0x5b, 0x9c, 0x92, 0xad, 0x5f, 0x52, 0x59, 0x90, 0x5a, 0x0c, 0xd6, 0xb0, 0xea, 0xbe, - 0xbc, 0x06, 0x91, 0x4a, 0x8b, 0x83, 0xb0, 0xb8, 0x48, 0x48, 0x87, 0x4b, 0x30, 0x37, 0xb1, 0xc2, - 0x37, 0xb5, 0x24, 0x31, 0x25, 0xb1, 0x24, 0xd1, 0x27, 0x35, 0x2f, 0xbd, 0x24, 0x43, 0x82, 0x59, - 0x81, 0x51, 0x83, 0x25, 0x08, 0x53, 0xc2, 0x8a, 0x65, 0xc6, 0x02, 0x79, 0x06, 0xa5, 0x7b, 0x8c, - 0x5c, 0x02, 0xe8, 0x21, 0x21, 0x94, 0xc2, 0xc5, 0x97, 0x9b, 0x99, 0x87, 0x24, 0x0c, 0x0e, 0x40, - 0x4e, 0x27, 0x1b, 0x90, 0x8f, 0x6e, 0xdd, 0x93, 0x57, 0x23, 0xc2, 0x99, 0x9e, 0x79, 0x25, 0x97, - 0xb6, 0xe8, 0x72, 0x41, 0x43, 0xc7, 0x33, 0xaf, 0x24, 0x08, 0xcd, 0x4c, 0xb0, 0x2d, 0x89, 0x15, - 0xc8, 0xb6, 0x30, 0x51, 0xc5, 0x16, 0x14, 0x33, 0x9d, 0x9c, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, - 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, - 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x13, 0xc9, 0xfc, 0x92, 0xd4, 0xbc, 0x94, 0xd4, 0xa2, 0xdc, 0xcc, - 0xbc, 0x12, 0x7d, 0x50, 0x0a, 0xae, 0x80, 0xa7, 0x61, 0xb0, 0x35, 0x49, 0x6c, 0xe0, 0x54, 0x66, - 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xc4, 0x77, 0xc6, 0xdf, 0x02, 0x00, 0x00, +var fileDescriptor_7ba6a528c2821cb1 = []byte{ + // 455 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xb1, 0x6f, 0xd3, 0x40, + 0x14, 0xc6, 0x73, 0x69, 0x55, 0x89, 0x2b, 0x42, 0xad, 0x05, 0x52, 0xda, 0xc1, 0x0e, 0x15, 0x12, + 0x21, 0xd0, 0x3b, 0xb9, 0x6c, 0x8c, 0x8e, 0x84, 0x54, 0x09, 0x24, 0xe4, 0x22, 0x06, 0x96, 0xea, + 0xec, 0x9c, 0x9c, 0x23, 0xf1, 0x9d, 0xf1, 0xbd, 0x86, 0xe4, 0x5f, 0x60, 0x62, 0x66, 0x62, 0x44, + 0x4c, 0x19, 0x18, 0xfb, 0x07, 0x74, 0x8c, 0x98, 0x10, 0x43, 0x40, 0xc9, 0x10, 0x46, 0x66, 0x26, + 0xe4, 0xf3, 0x81, 0x42, 0xcc, 0x80, 0xba, 0xd8, 0xbe, 0xf7, 0xbe, 0xfb, 0xf4, 0xbe, 0xdf, 0x33, + 0xf6, 0x24, 0x87, 0x57, 0x2a, 0xef, 0xd3, 0x2c, 0x57, 0x2f, 0x78, 0x0c, 0x74, 0xe8, 0xd3, 0x8c, + 0xe5, 0x2c, 0xd5, 0x24, 0xcb, 0x15, 0x28, 0xc7, 0xb1, 0x02, 0x62, 0x05, 0x64, 0xe8, 0xef, 0xef, + 0xb2, 0x54, 0x48, 0x45, 0xcd, 0xb3, 0x94, 0xed, 0xbb, 0xb1, 0xd2, 0xa9, 0xd2, 0x34, 0x62, 0x9a, + 0xd3, 0xa1, 0x1f, 0x71, 0x60, 0x3e, 0x8d, 0x95, 0x90, 0xb6, 0xbf, 0x57, 0xf6, 0x4f, 0xcd, 0x89, + 0x96, 0x07, 0xdb, 0xba, 0x9e, 0xa8, 0x44, 0x95, 0xf5, 0xe2, 0xab, 0xac, 0x1e, 0xfc, 0xa8, 0xe3, + 0xad, 0x27, 0x66, 0x10, 0xe7, 0x19, 0xde, 0x01, 0x05, 0x6c, 0x70, 0x72, 0x96, 0x65, 0x83, 0x71, + 0xc8, 0x64, 0xc2, 0x1b, 0xa8, 0x89, 0x5a, 0xdb, 0x47, 0xb7, 0x48, 0x75, 0x3a, 0xf2, 0x74, 0x4d, + 0x1b, 0x6c, 0x5e, 0xcc, 0xbc, 0x5a, 0x58, 0xf1, 0x70, 0xce, 0x11, 0x76, 0xec, 0xbd, 0x4e, 0xce, + 0x19, 0x08, 0x25, 0x1f, 0x72, 0xde, 0xa8, 0x37, 0x37, 0x5a, 0xdb, 0x47, 0x7b, 0xc4, 0x0e, 0x59, + 0x24, 0x22, 0x36, 0x11, 0xe9, 0x28, 0x21, 0x83, 0x97, 0x85, 0xdf, 0xcf, 0x99, 0x77, 0x3b, 0x11, + 0xd0, 0x3b, 0x8b, 0x48, 0xac, 0x52, 0x9b, 0xc8, 0xbe, 0x0e, 0x75, 0xb7, 0x4f, 0x61, 0x9c, 0x71, + 0x6d, 0x2e, 0x7c, 0xf8, 0xea, 0xb5, 0xfe, 0x53, 0xaa, 0xdf, 0x2e, 0x27, 0xed, 0xab, 0x03, 0x9e, + 0xb0, 0x78, 0x7c, 0x5a, 0xe0, 0xd3, 0xef, 0x97, 0x93, 0x36, 0x0a, 0xff, 0x31, 0xa7, 0x73, 0x0f, + 0xef, 0xa6, 0x6c, 0xf4, 0x98, 0x03, 0xeb, 0x32, 0x60, 0x8f, 0xb8, 0x4c, 0xa0, 0xd7, 0xd8, 0x68, + 0xa2, 0xd6, 0x66, 0x58, 0x6d, 0x3c, 0xb8, 0xf9, 0xfd, 0x9d, 0x87, 0x5e, 0x2f, 0x27, 0xed, 0xc6, + 0xef, 0x8d, 0x8f, 0xfe, 0xec, 0xbc, 0xe4, 0x7c, 0x70, 0x8e, 0xf0, 0xce, 0x3a, 0x3c, 0xe7, 0x04, + 0x5f, 0x4b, 0x85, 0x5c, 0x29, 0x1b, 0xf4, 0x57, 0x82, 0xbb, 0x05, 0x84, 0x2f, 0x33, 0xef, 0x46, + 0x99, 0x43, 0x77, 0xfb, 0x44, 0x28, 0x9a, 0x32, 0xe8, 0x91, 0x63, 0x09, 0x9f, 0x3e, 0x1e, 0x62, + 0xcb, 0xef, 0x58, 0x42, 0xb8, 0x66, 0x61, 0x4c, 0xd9, 0x68, 0xd5, 0xb4, 0x7e, 0x19, 0xd3, 0xbf, + 0x2c, 0x82, 0xce, 0xc5, 0xdc, 0x45, 0xd3, 0xb9, 0x8b, 0xbe, 0xcd, 0x5d, 0xf4, 0x66, 0xe1, 0xd6, + 0xa6, 0x0b, 0xb7, 0xf6, 0x79, 0xe1, 0xd6, 0x9e, 0xdf, 0x59, 0xa1, 0x2f, 0x12, 0x29, 0x80, 0xd3, + 0x2a, 0x04, 0xb3, 0x84, 0x68, 0xcb, 0xfc, 0x7d, 0xf7, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x3a, + 0x4b, 0xc4, 0x83, 0x18, 0x03, 0x00, 0x00, } +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.TotalSupplyRange.Equal(&that1.TotalSupplyRange) { + return false + } + if len(this.ProjectCreationFee) != len(that1.ProjectCreationFee) { + return false + } + for i := range this.ProjectCreationFee { + if !this.ProjectCreationFee[i].Equal(&that1.ProjectCreationFee[i]) { + return false + } + } + if this.MaxMetadataLength != that1.MaxMetadataLength { + return false + } + return true +} func (m *Params) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) diff --git a/x/project/types/params_test.go b/x/project/types/params_test.go deleted file mode 100644 index b0f7795c..00000000 --- a/x/project/types/params_test.go +++ /dev/null @@ -1,186 +0,0 @@ -package types - -import ( - "errors" - "fmt" - "math/rand" - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" -) - -func TestParamsValidateBasic(t *testing.T) { - tests := []struct { - name string - params Params - err error - }{ - { - name: "should allow validate valid params", - params: NewParams( - DefaultMinTotalSupply, - DefaultMaxTotalSupply, - DefaultProjectCreationFee, - DefaultMaxMetadataLength, - ), - }, - { - name: "should prevent validate invalid min total supply", - params: NewParams( - sdkmath.ZeroInt(), - DefaultMaxTotalSupply, - DefaultProjectCreationFee, - DefaultMaxMetadataLength, - ), - err: errors.New("minimum total supply should be greater than one: invalid total supply range"), - }, - { - name: "should prevent validate min total supply greater than max", - params: NewParams( - DefaultMaxTotalSupply, - DefaultMinTotalSupply, - DefaultProjectCreationFee, - DefaultMaxMetadataLength, - ), - err: errors.New("maximum total supply should be greater or equal than minimum total supply: invalid total supply range"), - }, - { - name: "should prevent validate invalid coins for project creation fee", - params: NewParams( - DefaultMinTotalSupply, - DefaultMaxTotalSupply, - sdk.Coins{sdk.Coin{Denom: "foo", Amount: sdkmath.NewInt(-1)}}, - DefaultMaxMetadataLength, - ), - err: errors.New("coin -1foo amount is not positive"), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.params.ValidateBasic() - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateTotalSupplyRange(t *testing.T) { - tests := []struct { - name string - supplyRange interface{} - err error - }{ - { - name: "invalid interface", - supplyRange: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "invalid range", - supplyRange: TotalSupplyRange{ - MinTotalSupply: DefaultMaxTotalSupply, - MaxTotalSupply: DefaultMinTotalSupply, - }, - err: errors.New("maximum total supply should be greater or equal than minimum total supply: invalid total supply range"), - }, - { - name: "valid range", - supplyRange: TotalSupplyRange{ - MinTotalSupply: DefaultMinTotalSupply, - MaxTotalSupply: DefaultMinTotalSupply.Add(sdkmath.OneInt()), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateTotalSupplyRange(tt.supplyRange) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateProjectCreationFee(t *testing.T) { - tests := []struct { - name string - creationFee interface{} - err error - }{ - { - name: "invalid interface", - creationFee: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "invalid coin", - creationFee: sdk.Coins{sdk.Coin{Denom: "foo", Amount: sdkmath.NewInt(-1)}}, - err: errors.New("coin -1foo amount is not positive"), - }, - { - name: "valid empty param", - creationFee: DefaultProjectCreationFee, - }, - { - name: "valid param", - creationFee: sdk.NewCoins( - sdk.NewInt64Coin("foo", rand.Int63n(1000)+1), - sdk.NewInt64Coin("bar", rand.Int63n(1000)+1), - ), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateProjectCreationFee(tt.creationFee) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestValidateMaxMetadataLength(t *testing.T) { - tests := []struct { - name string - maxMetadataLength interface{} - err error - }{ - { - name: "invalid interface", - maxMetadataLength: "test", - err: fmt.Errorf("invalid parameter type: string"), - }, - { - name: "invalid number type", - maxMetadataLength: 1000, - err: fmt.Errorf("invalid parameter type: int"), - }, - { - name: "valid param", - maxMetadataLength: uint64(1000), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := validateMaxMetadataLength(tt.maxMetadataLength) - if tt.err != nil { - require.Error(t, err, tt.err) - require.Equal(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/project/types/project.pb.go b/x/project/types/project.pb.go index b9c3960c..c16e710a 100644 --- a/x/project/types/project.pb.go +++ b/x/project/types/project.pb.go @@ -1,12 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/project.proto +// source: network/project/v1/project.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -42,7 +44,7 @@ func (m *Project) Reset() { *m = Project{} } func (m *Project) String() string { return proto.CompactTextString(m) } func (*Project) ProtoMessage() {} func (*Project) Descriptor() ([]byte, []int) { - return fileDescriptor_03ee4c9f24356a6e, []int{0} + return fileDescriptor_bce081b9714122e9, []int{0} } func (m *Project) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -142,42 +144,45 @@ func (m *Project) GetMetadata() []byte { } func init() { - proto.RegisterType((*Project)(nil), "spn.project.Project") + proto.RegisterType((*Project)(nil), "network.project.v1.Project") } -func init() { proto.RegisterFile("spn/project/project.proto", fileDescriptor_03ee4c9f24356a6e) } +func init() { proto.RegisterFile("network/project/v1/project.proto", fileDescriptor_bce081b9714122e9) } -var fileDescriptor_03ee4c9f24356a6e = []byte{ - // 452 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0x31, 0x8f, 0xd3, 0x30, - 0x14, 0xae, 0x69, 0xe9, 0xb5, 0x0e, 0x08, 0xc9, 0x62, 0xf0, 0x55, 0x28, 0x8d, 0x10, 0x88, 0x30, - 0xe0, 0xe8, 0x8e, 0x89, 0xf1, 0x7a, 0xb7, 0xdc, 0x82, 0x50, 0x2a, 0x16, 0x18, 0x90, 0xe3, 0x58, - 0x3d, 0x43, 0xe2, 0x67, 0xc5, 0x3e, 0xc4, 0x31, 0xf0, 0x1b, 0x18, 0xf9, 0x0d, 0xfc, 0x92, 0x1b, - 0x6f, 0x64, 0x3a, 0x50, 0x3b, 0xf1, 0x17, 0x98, 0x50, 0x12, 0x5f, 0x1b, 0xa0, 0x12, 0x30, 0x39, - 0xef, 0x7b, 0x9f, 0x9f, 0xbf, 0xf7, 0xe5, 0xc3, 0xbb, 0xd6, 0xe8, 0xc4, 0x54, 0xf0, 0x5a, 0x0a, - 0x77, 0x75, 0x32, 0x53, 0x81, 0x03, 0x12, 0x58, 0xa3, 0x99, 0x87, 0x26, 0xb7, 0x17, 0xb0, 0x80, - 0x06, 0x4f, 0xea, 0xaf, 0x96, 0x32, 0x09, 0x05, 0xd8, 0x12, 0x6c, 0x92, 0x71, 0x2b, 0x93, 0xb7, - 0x7b, 0x99, 0x74, 0x7c, 0x2f, 0x11, 0xa0, 0xb4, 0xef, 0xdf, 0xef, 0x4e, 0xb7, 0x46, 0x0a, 0xc5, - 0x8b, 0x57, 0xbc, 0x28, 0x40, 0x70, 0xa7, 0x40, 0xdb, 0x96, 0x76, 0xf7, 0xfb, 0x00, 0xef, 0x3c, - 0x6b, 0x59, 0xe4, 0x0e, 0x1e, 0xfb, 0x0b, 0xc7, 0x47, 0x14, 0x45, 0x28, 0x1e, 0xa4, 0x1b, 0x80, - 0x44, 0x38, 0xf0, 0xc5, 0x53, 0x5e, 0x4a, 0x7a, 0x2d, 0x42, 0xf1, 0x38, 0xed, 0x42, 0xe4, 0x1e, - 0xbe, 0x29, 0x00, 0xaa, 0x5c, 0x69, 0xee, 0xa0, 0x3a, 0x3e, 0xa2, 0xfd, 0x66, 0xc6, 0xaf, 0x60, - 0xfd, 0x8a, 0xa8, 0x24, 0x77, 0x32, 0x3f, 0x70, 0x74, 0x10, 0xa1, 0xb8, 0x9f, 0x6e, 0x80, 0xba, - 0x5b, 0x72, 0xa5, 0xb5, 0xac, 0x35, 0x5c, 0x6f, 0x35, 0xac, 0x01, 0xc2, 0x30, 0xb9, 0x2a, 0xb4, - 0x72, 0x8a, 0x17, 0xea, 0xbd, 0xcc, 0xe9, 0x30, 0x42, 0xf1, 0x28, 0xdd, 0xd2, 0x21, 0x9f, 0x10, - 0x0e, 0x1c, 0x38, 0x5e, 0xcc, 0x4f, 0x8d, 0x29, 0xce, 0xe8, 0x4e, 0xd4, 0x8f, 0x83, 0xfd, 0x5d, - 0xd6, 0x7a, 0xc7, 0x6a, 0xef, 0x98, 0xf7, 0x8e, 0x1d, 0x82, 0xd2, 0xb3, 0x97, 0xe7, 0x97, 0xd3, - 0xde, 0x8f, 0xcb, 0xe9, 0x83, 0x85, 0x72, 0x27, 0xa7, 0x19, 0x13, 0x50, 0x26, 0xde, 0xe8, 0xf6, - 0x78, 0x64, 0xf3, 0x37, 0x89, 0x3b, 0x33, 0xd2, 0x36, 0x17, 0x3e, 0x7f, 0x9d, 0xc6, 0xff, 0x48, - 0xb5, 0x69, 0x57, 0x0a, 0xf9, 0x80, 0x6f, 0xf9, 0xbf, 0x21, 0xf3, 0xf9, 0x09, 0xaf, 0xa4, 0xa5, - 0xa3, 0xbf, 0xa9, 0x7b, 0xf2, 0xff, 0xea, 0x86, 0xed, 0xec, 0xf4, 0xf7, 0xc7, 0xc8, 0x73, 0x4c, - 0x7c, 0x2a, 0x0e, 0x36, 0xa1, 0xa0, 0xe3, 0x08, 0xc5, 0xc1, 0xfe, 0x94, 0x75, 0xf2, 0xc7, 0xe6, - 0x7f, 0xd0, 0x66, 0x83, 0x5a, 0x48, 0xba, 0x65, 0x00, 0x99, 0xe0, 0x51, 0x29, 0x1d, 0xcf, 0xb9, - 0xe3, 0x14, 0x47, 0x28, 0xbe, 0x91, 0xae, 0xeb, 0xd9, 0xe1, 0xf9, 0x32, 0x44, 0x17, 0xcb, 0x10, - 0x7d, 0x5b, 0x86, 0xe8, 0xe3, 0x2a, 0xec, 0x5d, 0xac, 0xc2, 0xde, 0x97, 0x55, 0xd8, 0x7b, 0xf1, - 0xb0, 0xb3, 0x90, 0x93, 0x3a, 0x97, 0x55, 0xa9, 0x74, 0x1d, 0x5b, 0x9d, 0xbc, 0x5b, 0x87, 0xb8, - 0xd9, 0x2b, 0x1b, 0x36, 0xb9, 0x7d, 0xfc, 0x33, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x8a, 0x34, 0x10, - 0x3e, 0x03, 0x00, 0x00, +var fileDescriptor_bce081b9714122e9 = []byte{ + // 497 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0x4f, 0x6f, 0xd3, 0x30, + 0x1c, 0xad, 0x69, 0xd7, 0xb5, 0xee, 0x10, 0xc2, 0xe2, 0x90, 0x55, 0x28, 0x8d, 0x10, 0x82, 0x30, + 0x41, 0xac, 0x8e, 0x4f, 0xb0, 0x6e, 0x97, 0x5d, 0x00, 0xa5, 0x37, 0x84, 0x54, 0xb9, 0x8e, 0xd5, + 0x99, 0x25, 0xfe, 0x85, 0xd8, 0x2b, 0x94, 0x4f, 0xc1, 0x81, 0x13, 0x12, 0x77, 0xc4, 0x01, 0xed, + 0x63, 0xec, 0xb8, 0x23, 0xa7, 0x81, 0xda, 0xc3, 0xbe, 0x03, 0x27, 0x94, 0xc4, 0xfd, 0x03, 0x2b, + 0x02, 0x2e, 0x89, 0x7f, 0xef, 0x3d, 0xff, 0xfc, 0xfc, 0xf3, 0xc3, 0x9e, 0x12, 0xe6, 0x35, 0x64, + 0xc7, 0x34, 0xcd, 0xe0, 0xa5, 0xe0, 0x86, 0x8e, 0xbb, 0xf3, 0x65, 0x90, 0x66, 0x60, 0x80, 0x10, + 0xab, 0x08, 0xe6, 0xf0, 0xb8, 0xdb, 0xbe, 0xc9, 0x12, 0xa9, 0x80, 0x16, 0xdf, 0x52, 0xd6, 0x76, + 0x39, 0xe8, 0x04, 0x34, 0x1d, 0x32, 0x2d, 0xe8, 0xb8, 0x3b, 0x14, 0x86, 0x75, 0x29, 0x07, 0xa9, + 0x2c, 0xbf, 0x5d, 0xf2, 0x83, 0xa2, 0xa2, 0x65, 0x61, 0xa9, 0x5b, 0x23, 0x18, 0x41, 0x89, 0xe7, + 0x2b, 0x8b, 0x3e, 0x5c, 0xe3, 0x4c, 0xa7, 0x82, 0x4b, 0x16, 0x0f, 0x58, 0x1c, 0x03, 0x67, 0x46, + 0x82, 0xb2, 0x3d, 0xee, 0x7c, 0xdc, 0xc0, 0x9b, 0xcf, 0x4a, 0x21, 0xb9, 0x8d, 0x9b, 0x76, 0xcf, + 0xe1, 0x81, 0x83, 0x3c, 0xe4, 0xd7, 0xc2, 0x25, 0x40, 0x3c, 0xdc, 0xb2, 0xc5, 0x13, 0x96, 0x08, + 0xe7, 0x9a, 0x87, 0xfc, 0x66, 0xb8, 0x0a, 0x91, 0xbb, 0xf8, 0x3a, 0x07, 0xc8, 0x22, 0xa9, 0x98, + 0x81, 0xec, 0xf0, 0xc0, 0xa9, 0x16, 0x3d, 0x7e, 0x05, 0xf3, 0x53, 0x78, 0x26, 0x98, 0x11, 0xd1, + 0x9e, 0x71, 0x6a, 0x1e, 0xf2, 0xab, 0xe1, 0x12, 0xc8, 0xd9, 0x84, 0x49, 0xa5, 0x44, 0xee, 0x61, + 0xa3, 0xf4, 0xb0, 0x00, 0x48, 0x80, 0xc9, 0xbc, 0x50, 0xd2, 0x48, 0x16, 0xcb, 0xb7, 0x22, 0x72, + 0xea, 0x1e, 0xf2, 0x1b, 0xe1, 0x1a, 0x86, 0x7c, 0x41, 0xb8, 0x65, 0xc0, 0xb0, 0xb8, 0x7f, 0x92, + 0xa6, 0xf1, 0xc4, 0xd9, 0xf4, 0xaa, 0x7e, 0x6b, 0x77, 0x3b, 0xb0, 0x63, 0xcc, 0x67, 0x1e, 0xd8, + 0x99, 0x07, 0xfb, 0x20, 0x55, 0xef, 0xd5, 0xd9, 0x45, 0xa7, 0xf2, 0xe3, 0xa2, 0x73, 0x7f, 0x24, + 0xcd, 0xd1, 0xc9, 0x30, 0xe0, 0x90, 0xd8, 0x99, 0xdb, 0xdf, 0x23, 0x1d, 0x1d, 0x53, 0x33, 0x49, + 0x85, 0x2e, 0x36, 0x7c, 0xfe, 0xd6, 0xf1, 0xff, 0x51, 0xaa, 0x3f, 0x5c, 0x9e, 0xee, 0x6c, 0xc5, + 0x62, 0xc4, 0xf8, 0x64, 0x90, 0x3f, 0xb0, 0xfe, 0x74, 0x79, 0xba, 0x83, 0xc2, 0x55, 0x83, 0xe4, + 0x3d, 0xc2, 0x37, 0xec, 0x23, 0x89, 0xa8, 0x7f, 0xc4, 0x32, 0xa1, 0x9d, 0xc6, 0xdf, 0x4c, 0x3f, + 0xfd, 0x7f, 0xd3, 0xf5, 0xb2, 0xf7, 0x1f, 0x2c, 0xfd, 0x6e, 0x81, 0xbc, 0xc0, 0xc4, 0x46, 0x68, + 0x6f, 0x99, 0x20, 0xa7, 0xe9, 0x21, 0xbf, 0xb5, 0x7b, 0x2f, 0xb8, 0x1a, 0xf4, 0xa0, 0x7f, 0x45, + 0xdd, 0xab, 0xe5, 0x2e, 0xc3, 0x35, 0x7d, 0x48, 0x1b, 0x37, 0x12, 0x61, 0x58, 0xc4, 0x0c, 0x73, + 0xb0, 0x87, 0xfc, 0xad, 0x70, 0x51, 0xf7, 0xf6, 0xcf, 0xa6, 0x2e, 0x3a, 0x9f, 0xba, 0xe8, 0xfb, + 0xd4, 0x45, 0xef, 0x66, 0x6e, 0xe5, 0x7c, 0xe6, 0x56, 0xbe, 0xce, 0xdc, 0xca, 0xf3, 0x07, 0x2b, + 0xb7, 0x95, 0x23, 0x25, 0x8d, 0xa0, 0xf3, 0xe4, 0xbf, 0x59, 0x64, 0xbf, 0xb8, 0xf4, 0xb0, 0x5e, + 0x64, 0xfd, 0xf1, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0x52, 0xf8, 0x82, 0xb5, 0x03, 0x00, + 0x00, } func (m *Project) Marshal() (dAtA []byte, err error) { diff --git a/x/project/types/project_chains.pb.go b/x/project/types/project_chains.pb.go index a5e983fd..26e8e286 100644 --- a/x/project/types/project_chains.pb.go +++ b/x/project/types/project_chains.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/project_chains.proto +// source: network/project/v1/project_chains.proto package types @@ -31,7 +31,7 @@ func (m *ProjectChains) Reset() { *m = ProjectChains{} } func (m *ProjectChains) String() string { return proto.CompactTextString(m) } func (*ProjectChains) ProtoMessage() {} func (*ProjectChains) Descriptor() ([]byte, []int) { - return fileDescriptor_954119d7be6667b6, []int{0} + return fileDescriptor_8c4127f02f140670, []int{0} } func (m *ProjectChains) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -75,24 +75,26 @@ func (m *ProjectChains) GetChains() []uint64 { } func init() { - proto.RegisterType((*ProjectChains)(nil), "spn.project.ProjectChains") + proto.RegisterType((*ProjectChains)(nil), "network.project.v1.ProjectChains") } -func init() { proto.RegisterFile("spn/project/project_chains.proto", fileDescriptor_954119d7be6667b6) } +func init() { + proto.RegisterFile("network/project/v1/project_chains.proto", fileDescriptor_8c4127f02f140670) +} -var fileDescriptor_954119d7be6667b6 = []byte{ - // 168 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x2e, 0xc8, 0xd3, - 0x2f, 0x28, 0xca, 0xcf, 0x4a, 0x4d, 0x2e, 0x81, 0xd1, 0xf1, 0xc9, 0x19, 0x89, 0x99, 0x79, 0xc5, - 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0xdc, 0xc5, 0x05, 0x79, 0x7a, 0x50, 0x19, 0x25, 0x57, - 0x2e, 0xde, 0x00, 0x08, 0xd3, 0x19, 0xac, 0x46, 0x48, 0x86, 0x8b, 0x13, 0x2a, 0xe7, 0xe9, 0x22, - 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x12, 0x84, 0x10, 0x10, 0x12, 0xe3, 0x62, 0x83, 0x98, 0x25, 0xc1, - 0xa4, 0xc0, 0xac, 0xc1, 0x12, 0x04, 0xe5, 0x39, 0x39, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, - 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, - 0xb1, 0x1c, 0x43, 0x94, 0x66, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, - 0x49, 0x6a, 0x5e, 0x4a, 0x6a, 0x51, 0x6e, 0x66, 0x5e, 0x89, 0x3e, 0xc8, 0x95, 0x15, 0x70, 0x77, - 0x96, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0xdd, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, - 0xe7, 0x9c, 0x16, 0x84, 0xc3, 0x00, 0x00, 0x00, +var fileDescriptor_8c4127f02f140670 = []byte{ + // 173 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x28, 0xca, 0xcf, 0x4a, 0x4d, 0x2e, 0xd1, 0x2f, 0x33, 0x84, 0x31, + 0xe3, 0x93, 0x33, 0x12, 0x33, 0xf3, 0x8a, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x84, 0xa0, + 0x0a, 0xf5, 0xa0, 0xb2, 0x7a, 0x65, 0x86, 0x4a, 0xae, 0x5c, 0xbc, 0x01, 0x10, 0x9e, 0x33, 0x58, + 0xa9, 0x90, 0x0c, 0x17, 0x27, 0x54, 0xda, 0xd3, 0x45, 0x82, 0x51, 0x81, 0x51, 0x83, 0x25, 0x08, + 0x21, 0x20, 0x24, 0xc6, 0xc5, 0x06, 0x31, 0x52, 0x82, 0x49, 0x81, 0x59, 0x83, 0x25, 0x08, 0xca, + 0x73, 0x72, 0x3e, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, + 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xcd, 0xf4, 0xcc, + 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xcc, 0xf4, 0xbc, 0xcc, 0x92, 0x54, 0x7d, + 0x98, 0x7b, 0x2b, 0xe0, 0x2e, 0x2e, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x3b, 0xd3, 0x18, + 0x10, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x31, 0x54, 0x56, 0xd1, 0x00, 0x00, 0x00, } func (m *ProjectChains) Marshal() (dAtA []byte, err error) { diff --git a/x/project/types/project_test.go b/x/project/types/project_test.go index 42d74bbd..ae1284e2 100644 --- a/x/project/types/project_test.go +++ b/x/project/types/project_test.go @@ -7,9 +7,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/testutil/sample" - project "github.com/tendermint/spn/x/project/types" + networktypes "github.com/ignite/network/pkg/types" + "github.com/ignite/network/testutil/sample" + project "github.com/ignite/network/x/project/types" ) var ( @@ -39,7 +39,7 @@ func TestNewProject(t *testing.T) { require.EqualValues(t, coordinator, c.CoordinatorID) require.EqualValues(t, createdAt, c.CreatedAt) require.False(t, c.MainnetInitialized) - require.True(t, totalSupply.IsEqual(c.TotalSupply)) + require.True(t, totalSupply.Equal(c.TotalSupply)) require.EqualValues(t, project.EmptyShares(), c.AllocatedShares) }) } @@ -60,9 +60,9 @@ func TestProject_Validate(t *testing.T) { invalidAllocatedShares.AllocatedShares = project.NewSharesFromCoins(invalidProjectCoins) totalSharesReached = sample.Project(r, 0) totalSharesReached.AllocatedShares = project.NewSharesFromCoins(sdk.NewCoins( - sdk.NewCoin("foo", sdkmath.NewInt(spntypes.TotalShareNumber+1)), + sdk.NewCoin("foo", sdkmath.NewInt(networktypes.TotalShareNumber+1)), )) - reached, err := project.IsTotalSharesReached(totalSharesReached.AllocatedShares, spntypes.TotalShareNumber) + reached, err := project.IsTotalSharesReached(totalSharesReached.AllocatedShares, networktypes.TotalShareNumber) require.NoError(t, err) require.True(t, reached) }) @@ -131,7 +131,7 @@ func TestProject_Validate(t *testing.T) { }, } { t.Run(tc.desc, func(t *testing.T) { - require.EqualValues(t, tc.valid, tc.project.Validate(spntypes.TotalShareNumber) == nil) + require.EqualValues(t, tc.valid, tc.project.Validate(networktypes.TotalShareNumber) == nil) }) } } diff --git a/x/project/types/query.pb.go b/x/project/types/query.pb.go index cc61c1c4..f91b8d44 100644 --- a/x/project/types/query.pb.go +++ b/x/project/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/query.proto +// source: network/project/v1/query.proto package types @@ -10,6 +10,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -33,22 +34,106 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type QueryGetProjectRequest struct { +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +type QueryGetMainnetAccountRequest struct { ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryGetProjectRequest) Reset() { *m = QueryGetProjectRequest{} } -func (m *QueryGetProjectRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetProjectRequest) ProtoMessage() {} -func (*QueryGetProjectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{0} +func (m *QueryGetMainnetAccountRequest) Reset() { *m = QueryGetMainnetAccountRequest{} } +func (m *QueryGetMainnetAccountRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetMainnetAccountRequest) ProtoMessage() {} +func (*QueryGetMainnetAccountRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{2} } -func (m *QueryGetProjectRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetMainnetAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetMainnetAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetProjectRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetMainnetAccountRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -58,41 +143,48 @@ func (m *QueryGetProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryGetProjectRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetProjectRequest.Merge(m, src) +func (m *QueryGetMainnetAccountRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetMainnetAccountRequest.Merge(m, src) } -func (m *QueryGetProjectRequest) XXX_Size() int { +func (m *QueryGetMainnetAccountRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetProjectRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetProjectRequest.DiscardUnknown(m) +func (m *QueryGetMainnetAccountRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetMainnetAccountRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetProjectRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetMainnetAccountRequest proto.InternalMessageInfo -func (m *QueryGetProjectRequest) GetProjectID() uint64 { +func (m *QueryGetMainnetAccountRequest) GetProjectID() uint64 { if m != nil { return m.ProjectID } return 0 } -type QueryGetProjectResponse struct { - Project Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project"` +func (m *QueryGetMainnetAccountRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" } -func (m *QueryGetProjectResponse) Reset() { *m = QueryGetProjectResponse{} } -func (m *QueryGetProjectResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetProjectResponse) ProtoMessage() {} -func (*QueryGetProjectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{1} +type QueryGetMainnetAccountResponse struct { + MainnetAccount MainnetAccount `protobuf:"bytes,1,opt,name=mainnetAccount,proto3" json:"mainnetAccount"` } -func (m *QueryGetProjectResponse) XXX_Unmarshal(b []byte) error { + +func (m *QueryGetMainnetAccountResponse) Reset() { *m = QueryGetMainnetAccountResponse{} } +func (m *QueryGetMainnetAccountResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetMainnetAccountResponse) ProtoMessage() {} +func (*QueryGetMainnetAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{3} +} +func (m *QueryGetMainnetAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetProjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetMainnetAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetProjectResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetMainnetAccountResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -102,41 +194,42 @@ func (m *QueryGetProjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryGetProjectResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetProjectResponse.Merge(m, src) +func (m *QueryGetMainnetAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetMainnetAccountResponse.Merge(m, src) } -func (m *QueryGetProjectResponse) XXX_Size() int { +func (m *QueryGetMainnetAccountResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetProjectResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetProjectResponse.DiscardUnknown(m) +func (m *QueryGetMainnetAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetMainnetAccountResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetProjectResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetMainnetAccountResponse proto.InternalMessageInfo -func (m *QueryGetProjectResponse) GetProject() Project { +func (m *QueryGetMainnetAccountResponse) GetMainnetAccount() MainnetAccount { if m != nil { - return m.Project + return m.MainnetAccount } - return Project{} + return MainnetAccount{} } -type QueryAllProjectRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryAllMainnetAccountRequest struct { + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllProjectRequest) Reset() { *m = QueryAllProjectRequest{} } -func (m *QueryAllProjectRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllProjectRequest) ProtoMessage() {} -func (*QueryAllProjectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{2} +func (m *QueryAllMainnetAccountRequest) Reset() { *m = QueryAllMainnetAccountRequest{} } +func (m *QueryAllMainnetAccountRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllMainnetAccountRequest) ProtoMessage() {} +func (*QueryAllMainnetAccountRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{4} } -func (m *QueryAllProjectRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllMainnetAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllMainnetAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllProjectRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllMainnetAccountRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -146,42 +239,49 @@ func (m *QueryAllProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryAllProjectRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllProjectRequest.Merge(m, src) +func (m *QueryAllMainnetAccountRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllMainnetAccountRequest.Merge(m, src) } -func (m *QueryAllProjectRequest) XXX_Size() int { +func (m *QueryAllMainnetAccountRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllProjectRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllProjectRequest.DiscardUnknown(m) +func (m *QueryAllMainnetAccountRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllMainnetAccountRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllProjectRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllMainnetAccountRequest proto.InternalMessageInfo -func (m *QueryAllProjectRequest) GetPagination() *query.PageRequest { +func (m *QueryAllMainnetAccountRequest) GetProjectID() uint64 { + if m != nil { + return m.ProjectID + } + return 0 +} + +func (m *QueryAllMainnetAccountRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllProjectResponse struct { - Project []Project `protobuf:"bytes,1,rep,name=project,proto3" json:"project"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryAllMainnetAccountResponse struct { + MainnetAccount []MainnetAccount `protobuf:"bytes,1,rep,name=mainnetAccount,proto3" json:"mainnetAccount"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllProjectResponse) Reset() { *m = QueryAllProjectResponse{} } -func (m *QueryAllProjectResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllProjectResponse) ProtoMessage() {} -func (*QueryAllProjectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{3} +func (m *QueryAllMainnetAccountResponse) Reset() { *m = QueryAllMainnetAccountResponse{} } +func (m *QueryAllMainnetAccountResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllMainnetAccountResponse) ProtoMessage() {} +func (*QueryAllMainnetAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{5} } -func (m *QueryAllProjectResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllMainnetAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllProjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllMainnetAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllProjectResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllMainnetAccountResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -191,48 +291,48 @@ func (m *QueryAllProjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryAllProjectResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllProjectResponse.Merge(m, src) +func (m *QueryAllMainnetAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllMainnetAccountResponse.Merge(m, src) } -func (m *QueryAllProjectResponse) XXX_Size() int { +func (m *QueryAllMainnetAccountResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllProjectResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllProjectResponse.DiscardUnknown(m) +func (m *QueryAllMainnetAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllMainnetAccountResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllProjectResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllMainnetAccountResponse proto.InternalMessageInfo -func (m *QueryAllProjectResponse) GetProject() []Project { +func (m *QueryAllMainnetAccountResponse) GetMainnetAccount() []MainnetAccount { if m != nil { - return m.Project + return m.MainnetAccount } return nil } -func (m *QueryAllProjectResponse) GetPagination() *query.PageResponse { +func (m *QueryAllMainnetAccountResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } return nil } -type QueryGetProjectChainsRequest struct { +type QueryGetProjectRequest struct { ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` } -func (m *QueryGetProjectChainsRequest) Reset() { *m = QueryGetProjectChainsRequest{} } -func (m *QueryGetProjectChainsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetProjectChainsRequest) ProtoMessage() {} -func (*QueryGetProjectChainsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{4} +func (m *QueryGetProjectRequest) Reset() { *m = QueryGetProjectRequest{} } +func (m *QueryGetProjectRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetProjectRequest) ProtoMessage() {} +func (*QueryGetProjectRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{6} } -func (m *QueryGetProjectChainsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetProjectRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetProjectChainsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetProjectChainsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetProjectRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -242,41 +342,41 @@ func (m *QueryGetProjectChainsRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryGetProjectChainsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetProjectChainsRequest.Merge(m, src) +func (m *QueryGetProjectRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetProjectRequest.Merge(m, src) } -func (m *QueryGetProjectChainsRequest) XXX_Size() int { +func (m *QueryGetProjectRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetProjectChainsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetProjectChainsRequest.DiscardUnknown(m) +func (m *QueryGetProjectRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetProjectRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetProjectChainsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetProjectRequest proto.InternalMessageInfo -func (m *QueryGetProjectChainsRequest) GetProjectID() uint64 { +func (m *QueryGetProjectRequest) GetProjectID() uint64 { if m != nil { return m.ProjectID } return 0 } -type QueryGetProjectChainsResponse struct { - ProjectChains ProjectChains `protobuf:"bytes,1,opt,name=projectChains,proto3" json:"projectChains"` +type QueryGetProjectResponse struct { + Project Project `protobuf:"bytes,1,opt,name=Project,proto3" json:"Project"` } -func (m *QueryGetProjectChainsResponse) Reset() { *m = QueryGetProjectChainsResponse{} } -func (m *QueryGetProjectChainsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetProjectChainsResponse) ProtoMessage() {} -func (*QueryGetProjectChainsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{5} +func (m *QueryGetProjectResponse) Reset() { *m = QueryGetProjectResponse{} } +func (m *QueryGetProjectResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetProjectResponse) ProtoMessage() {} +func (*QueryGetProjectResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{7} } -func (m *QueryGetProjectChainsResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetProjectResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetProjectChainsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetProjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetProjectChainsResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetProjectResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -286,41 +386,41 @@ func (m *QueryGetProjectChainsResponse) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } -func (m *QueryGetProjectChainsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetProjectChainsResponse.Merge(m, src) +func (m *QueryGetProjectResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetProjectResponse.Merge(m, src) } -func (m *QueryGetProjectChainsResponse) XXX_Size() int { +func (m *QueryGetProjectResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetProjectChainsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetProjectChainsResponse.DiscardUnknown(m) +func (m *QueryGetProjectResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetProjectResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetProjectChainsResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetProjectResponse proto.InternalMessageInfo -func (m *QueryGetProjectChainsResponse) GetProjectChains() ProjectChains { +func (m *QueryGetProjectResponse) GetProject() Project { if m != nil { - return m.ProjectChains + return m.Project } - return ProjectChains{} + return Project{} } -type QuerySpecialAllocationsBalanceRequest struct { - ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` +type QueryAllProjectRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QuerySpecialAllocationsBalanceRequest) Reset() { *m = QuerySpecialAllocationsBalanceRequest{} } -func (m *QuerySpecialAllocationsBalanceRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySpecialAllocationsBalanceRequest) ProtoMessage() {} -func (*QuerySpecialAllocationsBalanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{6} +func (m *QueryAllProjectRequest) Reset() { *m = QueryAllProjectRequest{} } +func (m *QueryAllProjectRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllProjectRequest) ProtoMessage() {} +func (*QueryAllProjectRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{8} } -func (m *QuerySpecialAllocationsBalanceRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllProjectRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QuerySpecialAllocationsBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QuerySpecialAllocationsBalanceRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllProjectRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -330,44 +430,42 @@ func (m *QuerySpecialAllocationsBalanceRequest) XXX_Marshal(b []byte, determinis return b[:n], nil } } -func (m *QuerySpecialAllocationsBalanceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySpecialAllocationsBalanceRequest.Merge(m, src) +func (m *QueryAllProjectRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllProjectRequest.Merge(m, src) } -func (m *QuerySpecialAllocationsBalanceRequest) XXX_Size() int { +func (m *QueryAllProjectRequest) XXX_Size() int { return m.Size() } -func (m *QuerySpecialAllocationsBalanceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySpecialAllocationsBalanceRequest.DiscardUnknown(m) +func (m *QueryAllProjectRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllProjectRequest.DiscardUnknown(m) } -var xxx_messageInfo_QuerySpecialAllocationsBalanceRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllProjectRequest proto.InternalMessageInfo -func (m *QuerySpecialAllocationsBalanceRequest) GetProjectID() uint64 { +func (m *QueryAllProjectRequest) GetPagination() *query.PageRequest { if m != nil { - return m.ProjectID + return m.Pagination } - return 0 + return nil } -type QuerySpecialAllocationsBalanceResponse struct { - GenesisDistribution github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=genesisDistribution,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"genesisDistribution"` - ClaimableAirdrop github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=claimableAirdrop,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"claimableAirdrop"` +type QueryAllProjectResponse struct { + Project []Project `protobuf:"bytes,1,rep,name=Project,proto3" json:"Project"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QuerySpecialAllocationsBalanceResponse) Reset() { - *m = QuerySpecialAllocationsBalanceResponse{} -} -func (m *QuerySpecialAllocationsBalanceResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySpecialAllocationsBalanceResponse) ProtoMessage() {} -func (*QuerySpecialAllocationsBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{7} +func (m *QueryAllProjectResponse) Reset() { *m = QueryAllProjectResponse{} } +func (m *QueryAllProjectResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllProjectResponse) ProtoMessage() {} +func (*QueryAllProjectResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{9} } -func (m *QuerySpecialAllocationsBalanceResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllProjectResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QuerySpecialAllocationsBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllProjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QuerySpecialAllocationsBalanceResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllProjectResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -377,49 +475,48 @@ func (m *QuerySpecialAllocationsBalanceResponse) XXX_Marshal(b []byte, determini return b[:n], nil } } -func (m *QuerySpecialAllocationsBalanceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySpecialAllocationsBalanceResponse.Merge(m, src) +func (m *QueryAllProjectResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllProjectResponse.Merge(m, src) } -func (m *QuerySpecialAllocationsBalanceResponse) XXX_Size() int { +func (m *QueryAllProjectResponse) XXX_Size() int { return m.Size() } -func (m *QuerySpecialAllocationsBalanceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySpecialAllocationsBalanceResponse.DiscardUnknown(m) +func (m *QueryAllProjectResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllProjectResponse.DiscardUnknown(m) } -var xxx_messageInfo_QuerySpecialAllocationsBalanceResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllProjectResponse proto.InternalMessageInfo -func (m *QuerySpecialAllocationsBalanceResponse) GetGenesisDistribution() github_com_cosmos_cosmos_sdk_types.Coins { +func (m *QueryAllProjectResponse) GetProject() []Project { if m != nil { - return m.GenesisDistribution + return m.Project } return nil } -func (m *QuerySpecialAllocationsBalanceResponse) GetClaimableAirdrop() github_com_cosmos_cosmos_sdk_types.Coins { +func (m *QueryAllProjectResponse) GetPagination() *query.PageResponse { if m != nil { - return m.ClaimableAirdrop + return m.Pagination } return nil } -type QueryGetMainnetAccountRequest struct { +type QueryGetProjectChainsRequest struct { ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryGetMainnetAccountRequest) Reset() { *m = QueryGetMainnetAccountRequest{} } -func (m *QueryGetMainnetAccountRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetMainnetAccountRequest) ProtoMessage() {} -func (*QueryGetMainnetAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{8} +func (m *QueryGetProjectChainsRequest) Reset() { *m = QueryGetProjectChainsRequest{} } +func (m *QueryGetProjectChainsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetProjectChainsRequest) ProtoMessage() {} +func (*QueryGetProjectChainsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{10} } -func (m *QueryGetMainnetAccountRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryGetProjectChainsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetMainnetAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetProjectChainsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetMainnetAccountRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetProjectChainsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -429,48 +526,41 @@ func (m *QueryGetMainnetAccountRequest) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } -func (m *QueryGetMainnetAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetMainnetAccountRequest.Merge(m, src) +func (m *QueryGetProjectChainsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetProjectChainsRequest.Merge(m, src) } -func (m *QueryGetMainnetAccountRequest) XXX_Size() int { +func (m *QueryGetProjectChainsRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetMainnetAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetMainnetAccountRequest.DiscardUnknown(m) +func (m *QueryGetProjectChainsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetProjectChainsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetMainnetAccountRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryGetProjectChainsRequest proto.InternalMessageInfo -func (m *QueryGetMainnetAccountRequest) GetProjectID() uint64 { +func (m *QueryGetProjectChainsRequest) GetProjectID() uint64 { if m != nil { return m.ProjectID } return 0 } -func (m *QueryGetMainnetAccountRequest) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - -type QueryGetMainnetAccountResponse struct { - MainnetAccount MainnetAccount `protobuf:"bytes,1,opt,name=mainnetAccount,proto3" json:"mainnetAccount"` +type QueryGetProjectChainsResponse struct { + ProjectChains ProjectChains `protobuf:"bytes,1,opt,name=projectChains,proto3" json:"projectChains"` } -func (m *QueryGetMainnetAccountResponse) Reset() { *m = QueryGetMainnetAccountResponse{} } -func (m *QueryGetMainnetAccountResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetMainnetAccountResponse) ProtoMessage() {} -func (*QueryGetMainnetAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{9} +func (m *QueryGetProjectChainsResponse) Reset() { *m = QueryGetProjectChainsResponse{} } +func (m *QueryGetProjectChainsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetProjectChainsResponse) ProtoMessage() {} +func (*QueryGetProjectChainsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{11} } -func (m *QueryGetMainnetAccountResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryGetProjectChainsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetMainnetAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryGetProjectChainsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetMainnetAccountResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryGetProjectChainsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -480,42 +570,41 @@ func (m *QueryGetMainnetAccountResponse) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *QueryGetMainnetAccountResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetMainnetAccountResponse.Merge(m, src) +func (m *QueryGetProjectChainsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetProjectChainsResponse.Merge(m, src) } -func (m *QueryGetMainnetAccountResponse) XXX_Size() int { +func (m *QueryGetProjectChainsResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetMainnetAccountResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetMainnetAccountResponse.DiscardUnknown(m) +func (m *QueryGetProjectChainsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetProjectChainsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetMainnetAccountResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryGetProjectChainsResponse proto.InternalMessageInfo -func (m *QueryGetMainnetAccountResponse) GetMainnetAccount() MainnetAccount { +func (m *QueryGetProjectChainsResponse) GetProjectChains() ProjectChains { if m != nil { - return m.MainnetAccount + return m.ProjectChains } - return MainnetAccount{} + return ProjectChains{} } -type QueryAllMainnetAccountRequest struct { - ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` - Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QuerySpecialAllocationsBalanceRequest struct { + ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` } -func (m *QueryAllMainnetAccountRequest) Reset() { *m = QueryAllMainnetAccountRequest{} } -func (m *QueryAllMainnetAccountRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllMainnetAccountRequest) ProtoMessage() {} -func (*QueryAllMainnetAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{10} +func (m *QuerySpecialAllocationsBalanceRequest) Reset() { *m = QuerySpecialAllocationsBalanceRequest{} } +func (m *QuerySpecialAllocationsBalanceRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySpecialAllocationsBalanceRequest) ProtoMessage() {} +func (*QuerySpecialAllocationsBalanceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{12} } -func (m *QueryAllMainnetAccountRequest) XXX_Unmarshal(b []byte) error { +func (m *QuerySpecialAllocationsBalanceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllMainnetAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QuerySpecialAllocationsBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllMainnetAccountRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QuerySpecialAllocationsBalanceRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -525,49 +614,44 @@ func (m *QueryAllMainnetAccountRequest) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } -func (m *QueryAllMainnetAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllMainnetAccountRequest.Merge(m, src) +func (m *QuerySpecialAllocationsBalanceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpecialAllocationsBalanceRequest.Merge(m, src) } -func (m *QueryAllMainnetAccountRequest) XXX_Size() int { +func (m *QuerySpecialAllocationsBalanceRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllMainnetAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllMainnetAccountRequest.DiscardUnknown(m) +func (m *QuerySpecialAllocationsBalanceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpecialAllocationsBalanceRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllMainnetAccountRequest proto.InternalMessageInfo +var xxx_messageInfo_QuerySpecialAllocationsBalanceRequest proto.InternalMessageInfo -func (m *QueryAllMainnetAccountRequest) GetProjectID() uint64 { +func (m *QuerySpecialAllocationsBalanceRequest) GetProjectID() uint64 { if m != nil { return m.ProjectID } return 0 } -func (m *QueryAllMainnetAccountRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil +type QuerySpecialAllocationsBalanceResponse struct { + GenesisDistribution github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=genesisDistribution,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"genesisDistribution"` + ClaimableAirdrop github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=claimableAirdrop,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"claimableAirdrop"` } -type QueryAllMainnetAccountResponse struct { - MainnetAccount []MainnetAccount `protobuf:"bytes,1,rep,name=mainnetAccount,proto3" json:"mainnetAccount"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +func (m *QuerySpecialAllocationsBalanceResponse) Reset() { + *m = QuerySpecialAllocationsBalanceResponse{} } - -func (m *QueryAllMainnetAccountResponse) Reset() { *m = QueryAllMainnetAccountResponse{} } -func (m *QueryAllMainnetAccountResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllMainnetAccountResponse) ProtoMessage() {} -func (*QueryAllMainnetAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{11} +func (m *QuerySpecialAllocationsBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySpecialAllocationsBalanceResponse) ProtoMessage() {} +func (*QuerySpecialAllocationsBalanceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{13} } -func (m *QueryAllMainnetAccountResponse) XXX_Unmarshal(b []byte) error { +func (m *QuerySpecialAllocationsBalanceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllMainnetAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QuerySpecialAllocationsBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllMainnetAccountResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QuerySpecialAllocationsBalanceResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -577,49 +661,49 @@ func (m *QueryAllMainnetAccountResponse) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *QueryAllMainnetAccountResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllMainnetAccountResponse.Merge(m, src) +func (m *QuerySpecialAllocationsBalanceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpecialAllocationsBalanceResponse.Merge(m, src) } -func (m *QueryAllMainnetAccountResponse) XXX_Size() int { +func (m *QuerySpecialAllocationsBalanceResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllMainnetAccountResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllMainnetAccountResponse.DiscardUnknown(m) +func (m *QuerySpecialAllocationsBalanceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpecialAllocationsBalanceResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllMainnetAccountResponse proto.InternalMessageInfo +var xxx_messageInfo_QuerySpecialAllocationsBalanceResponse proto.InternalMessageInfo -func (m *QueryAllMainnetAccountResponse) GetMainnetAccount() []MainnetAccount { +func (m *QuerySpecialAllocationsBalanceResponse) GetGenesisDistribution() github_com_cosmos_cosmos_sdk_types.Coins { if m != nil { - return m.MainnetAccount + return m.GenesisDistribution } return nil } -func (m *QueryAllMainnetAccountResponse) GetPagination() *query.PageResponse { +func (m *QuerySpecialAllocationsBalanceResponse) GetClaimableAirdrop() github_com_cosmos_cosmos_sdk_types.Coins { if m != nil { - return m.Pagination + return m.ClaimableAirdrop } return nil } -type QueryGetMainnetAccountBalanceRequest struct { +type QueryMainnetAccountBalanceRequest struct { ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryGetMainnetAccountBalanceRequest) Reset() { *m = QueryGetMainnetAccountBalanceRequest{} } -func (m *QueryGetMainnetAccountBalanceRequest) String() string { return proto.CompactTextString(m) } -func (*QueryGetMainnetAccountBalanceRequest) ProtoMessage() {} -func (*QueryGetMainnetAccountBalanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{12} +func (m *QueryMainnetAccountBalanceRequest) Reset() { *m = QueryMainnetAccountBalanceRequest{} } +func (m *QueryMainnetAccountBalanceRequest) String() string { return proto.CompactTextString(m) } +func (*QueryMainnetAccountBalanceRequest) ProtoMessage() {} +func (*QueryMainnetAccountBalanceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{14} } -func (m *QueryGetMainnetAccountBalanceRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryMainnetAccountBalanceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetMainnetAccountBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryMainnetAccountBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetMainnetAccountBalanceRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryMainnetAccountBalanceRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -629,48 +713,48 @@ func (m *QueryGetMainnetAccountBalanceRequest) XXX_Marshal(b []byte, determinist return b[:n], nil } } -func (m *QueryGetMainnetAccountBalanceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetMainnetAccountBalanceRequest.Merge(m, src) +func (m *QueryMainnetAccountBalanceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryMainnetAccountBalanceRequest.Merge(m, src) } -func (m *QueryGetMainnetAccountBalanceRequest) XXX_Size() int { +func (m *QueryMainnetAccountBalanceRequest) XXX_Size() int { return m.Size() } -func (m *QueryGetMainnetAccountBalanceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetMainnetAccountBalanceRequest.DiscardUnknown(m) +func (m *QueryMainnetAccountBalanceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryMainnetAccountBalanceRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetMainnetAccountBalanceRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryMainnetAccountBalanceRequest proto.InternalMessageInfo -func (m *QueryGetMainnetAccountBalanceRequest) GetProjectID() uint64 { +func (m *QueryMainnetAccountBalanceRequest) GetProjectID() uint64 { if m != nil { return m.ProjectID } return 0 } -func (m *QueryGetMainnetAccountBalanceRequest) GetAddress() string { +func (m *QueryMainnetAccountBalanceRequest) GetAddress() string { if m != nil { return m.Address } return "" } -type QueryGetMainnetAccountBalanceResponse struct { +type QueryMainnetAccountBalanceResponse struct { MainnetAccountBalance MainnetAccountBalance `protobuf:"bytes,1,opt,name=mainnetAccountBalance,proto3" json:"mainnetAccountBalance"` } -func (m *QueryGetMainnetAccountBalanceResponse) Reset() { *m = QueryGetMainnetAccountBalanceResponse{} } -func (m *QueryGetMainnetAccountBalanceResponse) String() string { return proto.CompactTextString(m) } -func (*QueryGetMainnetAccountBalanceResponse) ProtoMessage() {} -func (*QueryGetMainnetAccountBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{13} +func (m *QueryMainnetAccountBalanceResponse) Reset() { *m = QueryMainnetAccountBalanceResponse{} } +func (m *QueryMainnetAccountBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*QueryMainnetAccountBalanceResponse) ProtoMessage() {} +func (*QueryMainnetAccountBalanceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{15} } -func (m *QueryGetMainnetAccountBalanceResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryMainnetAccountBalanceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryGetMainnetAccountBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryMainnetAccountBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryGetMainnetAccountBalanceResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryMainnetAccountBalanceResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -680,42 +764,42 @@ func (m *QueryGetMainnetAccountBalanceResponse) XXX_Marshal(b []byte, determinis return b[:n], nil } } -func (m *QueryGetMainnetAccountBalanceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryGetMainnetAccountBalanceResponse.Merge(m, src) +func (m *QueryMainnetAccountBalanceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryMainnetAccountBalanceResponse.Merge(m, src) } -func (m *QueryGetMainnetAccountBalanceResponse) XXX_Size() int { +func (m *QueryMainnetAccountBalanceResponse) XXX_Size() int { return m.Size() } -func (m *QueryGetMainnetAccountBalanceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryGetMainnetAccountBalanceResponse.DiscardUnknown(m) +func (m *QueryMainnetAccountBalanceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryMainnetAccountBalanceResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryGetMainnetAccountBalanceResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryMainnetAccountBalanceResponse proto.InternalMessageInfo -func (m *QueryGetMainnetAccountBalanceResponse) GetMainnetAccountBalance() MainnetAccountBalance { +func (m *QueryMainnetAccountBalanceResponse) GetMainnetAccountBalance() MainnetAccountBalance { if m != nil { return m.MainnetAccountBalance } return MainnetAccountBalance{} } -type QueryAllMainnetAccountBalanceRequest struct { +type QueryListMainnetAccountBalanceRequest struct { ProjectID uint64 `protobuf:"varint,1,opt,name=projectID,proto3" json:"projectID,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllMainnetAccountBalanceRequest) Reset() { *m = QueryAllMainnetAccountBalanceRequest{} } -func (m *QueryAllMainnetAccountBalanceRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllMainnetAccountBalanceRequest) ProtoMessage() {} -func (*QueryAllMainnetAccountBalanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{14} +func (m *QueryListMainnetAccountBalanceRequest) Reset() { *m = QueryListMainnetAccountBalanceRequest{} } +func (m *QueryListMainnetAccountBalanceRequest) String() string { return proto.CompactTextString(m) } +func (*QueryListMainnetAccountBalanceRequest) ProtoMessage() {} +func (*QueryListMainnetAccountBalanceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{16} } -func (m *QueryAllMainnetAccountBalanceRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryListMainnetAccountBalanceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllMainnetAccountBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryListMainnetAccountBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllMainnetAccountBalanceRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryListMainnetAccountBalanceRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -725,49 +809,51 @@ func (m *QueryAllMainnetAccountBalanceRequest) XXX_Marshal(b []byte, determinist return b[:n], nil } } -func (m *QueryAllMainnetAccountBalanceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllMainnetAccountBalanceRequest.Merge(m, src) +func (m *QueryListMainnetAccountBalanceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryListMainnetAccountBalanceRequest.Merge(m, src) } -func (m *QueryAllMainnetAccountBalanceRequest) XXX_Size() int { +func (m *QueryListMainnetAccountBalanceRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllMainnetAccountBalanceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllMainnetAccountBalanceRequest.DiscardUnknown(m) +func (m *QueryListMainnetAccountBalanceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryListMainnetAccountBalanceRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllMainnetAccountBalanceRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryListMainnetAccountBalanceRequest proto.InternalMessageInfo -func (m *QueryAllMainnetAccountBalanceRequest) GetProjectID() uint64 { +func (m *QueryListMainnetAccountBalanceRequest) GetProjectID() uint64 { if m != nil { return m.ProjectID } return 0 } -func (m *QueryAllMainnetAccountBalanceRequest) GetPagination() *query.PageRequest { +func (m *QueryListMainnetAccountBalanceRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllMainnetAccountBalanceResponse struct { +type QueryListMainnetAccountBalanceResponse struct { MainnetAccountBalance []MainnetAccountBalance `protobuf:"bytes,1,rep,name=mainnetAccountBalance,proto3" json:"mainnetAccountBalance"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllMainnetAccountBalanceResponse) Reset() { *m = QueryAllMainnetAccountBalanceResponse{} } -func (m *QueryAllMainnetAccountBalanceResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllMainnetAccountBalanceResponse) ProtoMessage() {} -func (*QueryAllMainnetAccountBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{15} +func (m *QueryListMainnetAccountBalanceResponse) Reset() { + *m = QueryListMainnetAccountBalanceResponse{} +} +func (m *QueryListMainnetAccountBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*QueryListMainnetAccountBalanceResponse) ProtoMessage() {} +func (*QueryListMainnetAccountBalanceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d78f73b40e1ec8a7, []int{17} } -func (m *QueryAllMainnetAccountBalanceResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryListMainnetAccountBalanceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllMainnetAccountBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryListMainnetAccountBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllMainnetAccountBalanceResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryListMainnetAccountBalanceResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -777,114 +863,32 @@ func (m *QueryAllMainnetAccountBalanceResponse) XXX_Marshal(b []byte, determinis return b[:n], nil } } -func (m *QueryAllMainnetAccountBalanceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllMainnetAccountBalanceResponse.Merge(m, src) +func (m *QueryListMainnetAccountBalanceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryListMainnetAccountBalanceResponse.Merge(m, src) } -func (m *QueryAllMainnetAccountBalanceResponse) XXX_Size() int { +func (m *QueryListMainnetAccountBalanceResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllMainnetAccountBalanceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllMainnetAccountBalanceResponse.DiscardUnknown(m) +func (m *QueryListMainnetAccountBalanceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryListMainnetAccountBalanceResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllMainnetAccountBalanceResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryListMainnetAccountBalanceResponse proto.InternalMessageInfo -func (m *QueryAllMainnetAccountBalanceResponse) GetMainnetAccountBalance() []MainnetAccountBalance { +func (m *QueryListMainnetAccountBalanceResponse) GetMainnetAccountBalance() []MainnetAccountBalance { if m != nil { return m.MainnetAccountBalance } return nil } -func (m *QueryAllMainnetAccountBalanceResponse) GetPagination() *query.PageResponse { +func (m *QueryListMainnetAccountBalanceResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } return nil } -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { -} - -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{16} -} -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) -} -func (m *QueryParamsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo - -// QueryParamsResponse is response type for the Query/Params RPC method. -type QueryParamsResponse struct { - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` -} - -func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } -func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryParamsResponse) ProtoMessage() {} -func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{17} -} -func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsResponse.Merge(m, src) -} -func (m *QueryParamsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo - -func (m *QueryParamsResponse) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - type QueryTotalSharesRequest struct { } @@ -892,7 +896,7 @@ func (m *QueryTotalSharesRequest) Reset() { *m = QueryTotalSharesRequest func (m *QueryTotalSharesRequest) String() string { return proto.CompactTextString(m) } func (*QueryTotalSharesRequest) ProtoMessage() {} func (*QueryTotalSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{18} + return fileDescriptor_d78f73b40e1ec8a7, []int{18} } func (m *QueryTotalSharesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -929,7 +933,7 @@ func (m *QueryTotalSharesResponse) Reset() { *m = QueryTotalSharesRespon func (m *QueryTotalSharesResponse) String() string { return proto.CompactTextString(m) } func (*QueryTotalSharesResponse) ProtoMessage() {} func (*QueryTotalSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_3f97374b6cfb249e, []int{19} + return fileDescriptor_d78f73b40e1ec8a7, []int{19} } func (m *QueryTotalSharesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -966,103 +970,106 @@ func (m *QueryTotalSharesResponse) GetTotalShares() uint64 { } func init() { - proto.RegisterType((*QueryGetProjectRequest)(nil), "spn.project.QueryGetProjectRequest") - proto.RegisterType((*QueryGetProjectResponse)(nil), "spn.project.QueryGetProjectResponse") - proto.RegisterType((*QueryAllProjectRequest)(nil), "spn.project.QueryAllProjectRequest") - proto.RegisterType((*QueryAllProjectResponse)(nil), "spn.project.QueryAllProjectResponse") - proto.RegisterType((*QueryGetProjectChainsRequest)(nil), "spn.project.QueryGetProjectChainsRequest") - proto.RegisterType((*QueryGetProjectChainsResponse)(nil), "spn.project.QueryGetProjectChainsResponse") - proto.RegisterType((*QuerySpecialAllocationsBalanceRequest)(nil), "spn.project.QuerySpecialAllocationsBalanceRequest") - proto.RegisterType((*QuerySpecialAllocationsBalanceResponse)(nil), "spn.project.QuerySpecialAllocationsBalanceResponse") - proto.RegisterType((*QueryGetMainnetAccountRequest)(nil), "spn.project.QueryGetMainnetAccountRequest") - proto.RegisterType((*QueryGetMainnetAccountResponse)(nil), "spn.project.QueryGetMainnetAccountResponse") - proto.RegisterType((*QueryAllMainnetAccountRequest)(nil), "spn.project.QueryAllMainnetAccountRequest") - proto.RegisterType((*QueryAllMainnetAccountResponse)(nil), "spn.project.QueryAllMainnetAccountResponse") - proto.RegisterType((*QueryGetMainnetAccountBalanceRequest)(nil), "spn.project.QueryGetMainnetAccountBalanceRequest") - proto.RegisterType((*QueryGetMainnetAccountBalanceResponse)(nil), "spn.project.QueryGetMainnetAccountBalanceResponse") - proto.RegisterType((*QueryAllMainnetAccountBalanceRequest)(nil), "spn.project.QueryAllMainnetAccountBalanceRequest") - proto.RegisterType((*QueryAllMainnetAccountBalanceResponse)(nil), "spn.project.QueryAllMainnetAccountBalanceResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "spn.project.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "spn.project.QueryParamsResponse") - proto.RegisterType((*QueryTotalSharesRequest)(nil), "spn.project.QueryTotalSharesRequest") - proto.RegisterType((*QueryTotalSharesResponse)(nil), "spn.project.QueryTotalSharesResponse") -} - -func init() { proto.RegisterFile("spn/project/query.proto", fileDescriptor_3f97374b6cfb249e) } - -var fileDescriptor_3f97374b6cfb249e = []byte{ - // 1127 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x97, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0xc0, 0x33, 0x49, 0x49, 0xd4, 0x89, 0x52, 0xc1, 0x24, 0xa5, 0x8e, 0x09, 0x4e, 0xba, 0xa4, - 0x49, 0x9b, 0x12, 0xaf, 0xec, 0x14, 0x0e, 0xb4, 0x55, 0x65, 0xa7, 0x49, 0xe8, 0xa1, 0x22, 0x38, - 0x9c, 0x40, 0xc2, 0x8c, 0xd7, 0xa3, 0xcd, 0xd2, 0xf5, 0xce, 0x66, 0x67, 0x5d, 0xb5, 0xaa, 0x2a, - 0x21, 0x10, 0x02, 0x24, 0x0e, 0x48, 0x5c, 0x38, 0x73, 0x02, 0x4e, 0x1c, 0xfa, 0x19, 0x50, 0x2f, - 0x48, 0x11, 0x5c, 0x38, 0x15, 0x94, 0xf0, 0x21, 0x10, 0x27, 0xb4, 0x33, 0xcf, 0xf1, 0xae, 0x3d, - 0x1b, 0x6f, 0x4c, 0xa4, 0x9e, 0xe2, 0xec, 0xfb, 0xf7, 0x7b, 0x7f, 0x76, 0xe6, 0x2d, 0xbe, 0x20, - 0x7c, 0xcf, 0xf4, 0x03, 0xfe, 0x31, 0xb3, 0x42, 0x73, 0xaf, 0xcd, 0x82, 0x87, 0x45, 0x3f, 0xe0, - 0x21, 0x27, 0x93, 0xc2, 0xf7, 0x8a, 0x20, 0xc8, 0xcf, 0xd9, 0x9c, 0xdb, 0x2e, 0x33, 0xa9, 0xef, - 0x98, 0xd4, 0xf3, 0x78, 0x48, 0x43, 0x87, 0x7b, 0x42, 0xa9, 0xe6, 0x0b, 0x16, 0x17, 0x2d, 0x2e, - 0xcc, 0x06, 0x15, 0xcc, 0xbc, 0x5f, 0x6a, 0xb0, 0x90, 0x96, 0x4c, 0x8b, 0x3b, 0x1e, 0xc8, 0x57, - 0xe2, 0x72, 0x19, 0xe3, 0x48, 0xcb, 0xa7, 0xb6, 0xe3, 0x49, 0x67, 0xa0, 0x3b, 0x63, 0x73, 0x9b, - 0xcb, 0x9f, 0x66, 0xf4, 0x0b, 0x9e, 0xce, 0x2a, 0x0f, 0x75, 0x25, 0x50, 0xff, 0x80, 0x68, 0x21, - 0x9e, 0x00, 0xfc, 0xad, 0x5b, 0xbb, 0xd4, 0x39, 0xc2, 0x9b, 0xd5, 0x68, 0xe8, 0x44, 0xf7, 0x99, - 0x08, 0x1d, 0xcf, 0x06, 0xd1, 0xc5, 0xb8, 0xa8, 0x45, 0x1d, 0xcf, 0x63, 0x61, 0x9d, 0x5a, 0x16, - 0x6f, 0x7b, 0x1d, 0xeb, 0x5c, 0xc2, 0x31, 0x0d, 0x68, 0x0b, 0x42, 0x1a, 0x6f, 0xe2, 0x97, 0xdf, - 0x8d, 0xf2, 0xdc, 0x62, 0xe1, 0xb6, 0x92, 0xd7, 0xd8, 0x5e, 0x9b, 0x89, 0x90, 0xcc, 0xe1, 0xb3, - 0x60, 0x71, 0xe7, 0x76, 0x0e, 0x2d, 0xa0, 0xcb, 0x67, 0x6a, 0xdd, 0x07, 0xc6, 0x3b, 0xf8, 0x42, - 0x9f, 0x9d, 0xf0, 0xb9, 0x27, 0x18, 0xb9, 0x86, 0x27, 0x40, 0x4f, 0x9a, 0x4d, 0x96, 0x67, 0x8a, - 0xb1, 0x0e, 0x15, 0x41, 0xbd, 0x7a, 0xe6, 0xe9, 0xb3, 0xf9, 0x91, 0x5a, 0x47, 0xd5, 0xf8, 0x08, - 0x40, 0x2a, 0xae, 0xdb, 0x03, 0xb2, 0x89, 0x71, 0xb7, 0xf8, 0xe0, 0x72, 0xa9, 0x08, 0xa5, 0x8d, - 0x3a, 0x55, 0x54, 0xd3, 0x00, 0x9d, 0x2a, 0x6e, 0x53, 0x9b, 0x81, 0x6d, 0x2d, 0x66, 0x69, 0x7c, - 0x87, 0x80, 0x39, 0x1e, 0x42, 0xc7, 0x3c, 0x96, 0x91, 0x99, 0x6c, 0x25, 0xc8, 0x46, 0x25, 0xd9, - 0xf2, 0x40, 0x32, 0x15, 0x32, 0x81, 0x76, 0x03, 0xcf, 0xf5, 0x54, 0x73, 0x5d, 0xce, 0x45, 0xb6, - 0x5e, 0xd8, 0xf8, 0xd5, 0x14, 0x6b, 0xc8, 0x6e, 0x13, 0x4f, 0xf9, 0x71, 0x01, 0x14, 0x31, 0xaf, - 0xcb, 0x51, 0x69, 0x40, 0xa6, 0x49, 0x33, 0x63, 0x03, 0x5f, 0x92, 0x81, 0x76, 0x7c, 0x66, 0x39, - 0xd4, 0xad, 0xb8, 0x2e, 0xb7, 0xd4, 0xfb, 0x55, 0xa5, 0x2e, 0xf5, 0x2c, 0x96, 0x8d, 0xf7, 0x9f, - 0x51, 0xbc, 0x34, 0xc8, 0x0f, 0x90, 0xff, 0x80, 0xf0, 0xb4, 0xcd, 0x3c, 0x26, 0x1c, 0x71, 0xdb, - 0x11, 0x61, 0xe0, 0x34, 0xda, 0x30, 0x05, 0x51, 0x93, 0x66, 0x13, 0xb5, 0xee, 0x54, 0x79, 0x9d, - 0x3b, 0x5e, 0xf5, 0x83, 0x88, 0xff, 0xdf, 0x67, 0xf3, 0xcb, 0xb6, 0x13, 0xee, 0xb6, 0x1b, 0x45, - 0x8b, 0xb7, 0xe0, 0x6d, 0x84, 0x3f, 0xab, 0xa2, 0x79, 0xcf, 0x0c, 0x1f, 0xfa, 0x4c, 0x48, 0x83, - 0x9f, 0xfe, 0x9c, 0xbf, 0x9c, 0x51, 0x55, 0xd4, 0x74, 0x48, 0xe4, 0x7b, 0x84, 0x5f, 0xb4, 0x5c, - 0xea, 0xb4, 0x68, 0xc3, 0x65, 0x15, 0x27, 0x68, 0x06, 0xdc, 0xcf, 0x8d, 0x3e, 0x57, 0xce, 0x3e, - 0x1e, 0x63, 0xaf, 0x3b, 0x2a, 0x77, 0xd5, 0x49, 0x51, 0x51, 0x07, 0x45, 0xa6, 0xce, 0x91, 0x32, - 0x9e, 0xa0, 0xcd, 0x66, 0xc0, 0x84, 0x90, 0xd3, 0x7e, 0xb6, 0x9a, 0xfb, 0xed, 0xc9, 0xea, 0x0c, - 0x24, 0x57, 0x51, 0x92, 0x9d, 0x30, 0x70, 0x3c, 0xbb, 0xd6, 0x51, 0x34, 0xee, 0xe1, 0x42, 0x5a, - 0x48, 0x68, 0xf2, 0x1d, 0x7c, 0xae, 0x95, 0x90, 0xc0, 0x7c, 0xbe, 0x92, 0x98, 0xcf, 0xa4, 0x31, - 0x0c, 0x68, 0x8f, 0xa1, 0xf1, 0x39, 0x82, 0x04, 0x2b, 0xae, 0x3b, 0x4c, 0x82, 0x9b, 0x9a, 0x37, - 0x7a, 0x98, 0xb3, 0xe6, 0x09, 0x82, 0xac, 0x35, 0x1c, 0xc7, 0x64, 0x3d, 0x36, 0x54, 0xd6, 0xa7, - 0x77, 0x0e, 0x3d, 0xc0, 0x8b, 0xfa, 0x5e, 0x9d, 0xe4, 0xfd, 0x1e, 0x6a, 0x4a, 0xbe, 0x40, 0x70, - 0xb6, 0xa4, 0x87, 0x86, 0xba, 0x7d, 0x88, 0xcf, 0xb7, 0x74, 0x0a, 0x30, 0x34, 0xc6, 0x71, 0xe5, - 0x53, 0x9a, 0x50, 0x45, 0xbd, 0x1b, 0xe3, 0x6b, 0x04, 0x45, 0xe8, 0x6b, 0xdd, 0x89, 0x8a, 0x70, - 0x5a, 0x93, 0xb4, 0xdf, 0x29, 0x4c, 0x3a, 0xce, 0xe0, 0xc2, 0x8c, 0x9d, 0x42, 0x61, 0x4e, 0x6f, - 0xca, 0x66, 0x30, 0x91, 0x19, 0x6d, 0xcb, 0x45, 0x04, 0x92, 0x36, 0xde, 0xc6, 0xd3, 0x89, 0xa7, - 0x90, 0x55, 0x09, 0x8f, 0xab, 0x85, 0x05, 0xfa, 0x3b, 0x9d, 0xbc, 0xb4, 0xa4, 0x08, 0xb8, 0x41, - 0xd1, 0x98, 0x85, 0x7b, 0xfe, 0x3d, 0x1e, 0x52, 0x77, 0x67, 0x97, 0x06, 0xec, 0x28, 0xc8, 0x0d, - 0x9c, 0xeb, 0x17, 0x41, 0xa4, 0x05, 0x3c, 0x19, 0x76, 0x1f, 0x43, 0x47, 0xe3, 0x8f, 0xca, 0x9f, - 0x4d, 0xe1, 0x17, 0xa4, 0x39, 0xf9, 0x0a, 0xe1, 0x09, 0xb8, 0x30, 0xc9, 0x6b, 0x09, 0x22, 0xfd, - 0x36, 0x95, 0x5f, 0x3c, 0x5e, 0x49, 0x21, 0x18, 0x6b, 0x9f, 0xfe, 0xfe, 0xf7, 0xb7, 0xa3, 0xab, - 0xe4, 0xaa, 0x19, 0x32, 0xaf, 0xc9, 0x82, 0x96, 0xe3, 0x85, 0xa6, 0x66, 0x29, 0x34, 0x1f, 0x1d, - 0x0d, 0xda, 0x63, 0xf2, 0x09, 0xc2, 0x18, 0x1c, 0x55, 0x5c, 0x57, 0x87, 0xd3, 0xb7, 0x53, 0xe9, - 0x70, 0xfa, 0xb7, 0x22, 0x63, 0x59, 0xe2, 0x5c, 0x24, 0xf3, 0x03, 0x70, 0xa2, 0xbb, 0x6f, 0x2a, - 0xb1, 0x3f, 0x90, 0x2b, 0xc7, 0xe5, 0x9b, 0x58, 0x6e, 0xf2, 0x2b, 0x59, 0x54, 0x81, 0xe8, 0x2d, - 0x49, 0x74, 0x8d, 0x94, 0x07, 0x10, 0xc1, 0x5e, 0x9d, 0xa8, 0xd3, 0xaf, 0x08, 0xcf, 0xa6, 0x6e, - 0x1c, 0xa4, 0xdc, 0x4f, 0x31, 0x68, 0xcd, 0xc9, 0xaf, 0x9d, 0xc8, 0x06, 0x52, 0xd8, 0x92, 0x29, - 0x54, 0xc8, 0xad, 0xb4, 0x14, 0x84, 0x72, 0x51, 0xa7, 0x5d, 0x1f, 0xf5, 0x86, 0x72, 0x92, 0xc8, - 0xe7, 0x67, 0x84, 0xcf, 0x25, 0x5f, 0x63, 0xa2, 0x2f, 0xa5, 0xf6, 0x22, 0xcc, 0x5f, 0xcd, 0xa4, - 0x0b, 0xd0, 0x1b, 0x12, 0xfa, 0x16, 0xb9, 0x99, 0x06, 0xdd, 0xf3, 0xdd, 0x11, 0x07, 0x35, 0x1f, - 0xc1, 0x21, 0xff, 0x98, 0xfc, 0x88, 0xf0, 0x4b, 0xc9, 0x08, 0xd1, 0xc4, 0xae, 0x68, 0x87, 0x31, - 0x33, 0x75, 0xea, 0x15, 0x6b, 0x5c, 0x97, 0xd4, 0x6f, 0x90, 0xb5, 0x21, 0xa8, 0xa3, 0x71, 0x39, - 0xaf, 0x3d, 0x25, 0x49, 0x29, 0x43, 0xe5, 0x7a, 0x26, 0xa5, 0x7c, 0x12, 0x13, 0xa0, 0xbf, 0x2b, - 0xe9, 0xb7, 0xc8, 0x46, 0x46, 0x7a, 0xdd, 0x90, 0xc4, 0x6a, 0xff, 0x0b, 0xc2, 0x39, 0x6d, 0xc0, - 0xa8, 0x05, 0xa5, 0x0c, 0x65, 0x1d, 0x9c, 0xd2, 0xa0, 0x2b, 0xca, 0x58, 0x97, 0x29, 0xdd, 0x24, - 0xd7, 0xff, 0x47, 0x4a, 0x44, 0xe0, 0x71, 0x75, 0xec, 0x93, 0xf9, 0x7e, 0x84, 0xc4, 0x9d, 0x92, - 0x5f, 0x48, 0x57, 0x00, 0xa2, 0x25, 0x49, 0xb4, 0x40, 0x0a, 0xa9, 0x07, 0x8a, 0x0a, 0xf5, 0x25, - 0xc2, 0x93, 0xb1, 0x4b, 0x83, 0x68, 0x0e, 0xd0, 0xfe, 0xeb, 0x26, 0x7f, 0x69, 0x80, 0x16, 0x40, - 0xbc, 0x2e, 0x21, 0x96, 0xc8, 0x62, 0x1a, 0x84, 0xbc, 0x84, 0xea, 0x42, 0x5a, 0x55, 0xd7, 0x9f, - 0x1e, 0x14, 0xd0, 0xfe, 0x41, 0x01, 0xfd, 0x75, 0x50, 0x40, 0xdf, 0x1c, 0x16, 0x46, 0xf6, 0x0f, - 0x0b, 0x23, 0x7f, 0x1c, 0x16, 0x46, 0xde, 0xbf, 0x12, 0xfb, 0x32, 0xe8, 0xf1, 0xf4, 0xa0, 0xeb, - 0x2b, 0xfa, 0x40, 0x68, 0x8c, 0xcb, 0xcf, 0xff, 0xb5, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2f, - 0x1d, 0x3f, 0xbc, 0x56, 0x11, 0x00, 0x00, + proto.RegisterType((*QueryParamsRequest)(nil), "network.project.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "network.project.v1.QueryParamsResponse") + proto.RegisterType((*QueryGetMainnetAccountRequest)(nil), "network.project.v1.QueryGetMainnetAccountRequest") + proto.RegisterType((*QueryGetMainnetAccountResponse)(nil), "network.project.v1.QueryGetMainnetAccountResponse") + proto.RegisterType((*QueryAllMainnetAccountRequest)(nil), "network.project.v1.QueryAllMainnetAccountRequest") + proto.RegisterType((*QueryAllMainnetAccountResponse)(nil), "network.project.v1.QueryAllMainnetAccountResponse") + proto.RegisterType((*QueryGetProjectRequest)(nil), "network.project.v1.QueryGetProjectRequest") + proto.RegisterType((*QueryGetProjectResponse)(nil), "network.project.v1.QueryGetProjectResponse") + proto.RegisterType((*QueryAllProjectRequest)(nil), "network.project.v1.QueryAllProjectRequest") + proto.RegisterType((*QueryAllProjectResponse)(nil), "network.project.v1.QueryAllProjectResponse") + proto.RegisterType((*QueryGetProjectChainsRequest)(nil), "network.project.v1.QueryGetProjectChainsRequest") + proto.RegisterType((*QueryGetProjectChainsResponse)(nil), "network.project.v1.QueryGetProjectChainsResponse") + proto.RegisterType((*QuerySpecialAllocationsBalanceRequest)(nil), "network.project.v1.QuerySpecialAllocationsBalanceRequest") + proto.RegisterType((*QuerySpecialAllocationsBalanceResponse)(nil), "network.project.v1.QuerySpecialAllocationsBalanceResponse") + proto.RegisterType((*QueryMainnetAccountBalanceRequest)(nil), "network.project.v1.QueryMainnetAccountBalanceRequest") + proto.RegisterType((*QueryMainnetAccountBalanceResponse)(nil), "network.project.v1.QueryMainnetAccountBalanceResponse") + proto.RegisterType((*QueryListMainnetAccountBalanceRequest)(nil), "network.project.v1.QueryListMainnetAccountBalanceRequest") + proto.RegisterType((*QueryListMainnetAccountBalanceResponse)(nil), "network.project.v1.QueryListMainnetAccountBalanceResponse") + proto.RegisterType((*QueryTotalSharesRequest)(nil), "network.project.v1.QueryTotalSharesRequest") + proto.RegisterType((*QueryTotalSharesResponse)(nil), "network.project.v1.QueryTotalSharesResponse") +} + +func init() { proto.RegisterFile("network/project/v1/query.proto", fileDescriptor_d78f73b40e1ec8a7) } + +var fileDescriptor_d78f73b40e1ec8a7 = []byte{ + // 1182 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0x24, 0x25, 0x55, 0x26, 0x50, 0xb5, 0xd3, 0x14, 0x12, 0x13, 0x9c, 0x64, 0x81, 0x7c, + 0xb5, 0xf1, 0x62, 0x87, 0x56, 0xa2, 0x1f, 0x2a, 0x76, 0x1a, 0x02, 0x12, 0x91, 0x82, 0x53, 0x71, + 0xe0, 0x62, 0xc6, 0x9b, 0xd1, 0x66, 0xe8, 0x7a, 0xc7, 0xd9, 0x5d, 0x07, 0xa2, 0xaa, 0x17, 0x04, + 0x27, 0x84, 0x40, 0x42, 0xe2, 0xd0, 0x0b, 0x1c, 0x38, 0x20, 0x4e, 0x95, 0xe0, 0x80, 0x84, 0x84, + 0xc4, 0xad, 0xc7, 0x0a, 0x84, 0x54, 0x09, 0x54, 0x50, 0x82, 0xd4, 0xff, 0x81, 0x13, 0xf2, 0xcc, + 0xdb, 0xda, 0xeb, 0xfd, 0x8c, 0x9b, 0x03, 0x97, 0xda, 0x9e, 0xf7, 0x31, 0xbf, 0xdf, 0x7b, 0x6f, + 0xde, 0x7b, 0x0d, 0xce, 0xdb, 0xcc, 0x7b, 0x5f, 0x38, 0x37, 0xf4, 0xa6, 0x23, 0xde, 0x63, 0x86, + 0xa7, 0xef, 0x16, 0xf5, 0x9d, 0x16, 0x73, 0xf6, 0x0a, 0x4d, 0x47, 0x78, 0x82, 0x10, 0x90, 0x17, + 0x40, 0x5e, 0xd8, 0x2d, 0xe6, 0x4e, 0xd1, 0x06, 0xb7, 0x85, 0x2e, 0xff, 0x55, 0x6a, 0xb9, 0x45, + 0x43, 0xb8, 0x0d, 0xe1, 0xea, 0x75, 0xea, 0x32, 0x65, 0xaf, 0xef, 0x16, 0xeb, 0xcc, 0xa3, 0x45, + 0xbd, 0x49, 0x4d, 0x6e, 0x53, 0x8f, 0x0b, 0x1b, 0x74, 0xf3, 0xdd, 0xba, 0xbe, 0x96, 0x21, 0xb8, + 0x2f, 0x9f, 0x50, 0xf2, 0x9a, 0xfc, 0xa5, 0xab, 0x1f, 0x20, 0x1a, 0x33, 0x85, 0x29, 0xd4, 0x79, + 0xfb, 0x1b, 0x9c, 0x4e, 0x9a, 0x42, 0x98, 0x16, 0xd3, 0x69, 0x93, 0xeb, 0xd4, 0xb6, 0x85, 0x27, + 0x6f, 0xf3, 0x6d, 0xe6, 0x23, 0x18, 0x36, 0x28, 0xb7, 0x6d, 0xe6, 0xd5, 0xa8, 0x61, 0x88, 0x96, + 0xed, 0x81, 0xe6, 0x54, 0x84, 0x66, 0x93, 0x3a, 0xb4, 0xe1, 0xbb, 0x9a, 0x8e, 0x52, 0x80, 0xb8, + 0x28, 0x8d, 0xb9, 0x78, 0x8d, 0x9a, 0xb1, 0x4d, 0xb9, 0x8f, 0x4a, 0x1b, 0xc3, 0xe4, 0xad, 0x76, + 0x98, 0x36, 0xa4, 0xff, 0x2a, 0xdb, 0x69, 0x31, 0xd7, 0xd3, 0xae, 0xe3, 0xd3, 0x81, 0x53, 0xb7, + 0x29, 0x6c, 0x97, 0x91, 0x2b, 0x78, 0x58, 0xe1, 0x18, 0x47, 0xd3, 0x68, 0x7e, 0xb4, 0x94, 0x2b, + 0x84, 0xb3, 0x52, 0x50, 0x36, 0x95, 0x91, 0xbb, 0x0f, 0xa6, 0x06, 0xbe, 0x7d, 0x78, 0x67, 0x11, + 0x55, 0xc1, 0x48, 0xdb, 0xc1, 0xcf, 0x49, 0xaf, 0x6b, 0xcc, 0x5b, 0x57, 0xc4, 0xcb, 0x8a, 0x37, + 0x5c, 0x4b, 0x26, 0xf1, 0x08, 0x38, 0x7a, 0xe3, 0x9a, 0xbc, 0xe2, 0x58, 0xb5, 0x73, 0x40, 0x4a, + 0xf8, 0x38, 0xdd, 0xda, 0x72, 0x98, 0xeb, 0x8e, 0x0f, 0x4e, 0xa3, 0xf9, 0x91, 0xca, 0xf8, 0xaf, + 0x3f, 0x2c, 0x8d, 0x41, 0x5e, 0xca, 0x4a, 0xb2, 0xe9, 0x39, 0xdc, 0x36, 0xab, 0xbe, 0xa2, 0xe6, + 0xe0, 0x7c, 0xdc, 0x95, 0xc0, 0x69, 0x03, 0x9f, 0x68, 0x04, 0x24, 0xc0, 0x4d, 0x8b, 0xe2, 0x16, + 0xf4, 0x51, 0x39, 0xd6, 0xe6, 0x58, 0xed, 0xb1, 0xd7, 0x3e, 0x46, 0xc0, 0xb3, 0x6c, 0x59, 0xfd, + 0xf0, 0x7c, 0x0d, 0xe3, 0x4e, 0xad, 0x4a, 0xaa, 0xa3, 0xa5, 0xd9, 0x02, 0xf0, 0x6c, 0x17, 0x6b, + 0x41, 0x3d, 0x0c, 0x28, 0xd9, 0xc2, 0x06, 0x35, 0x19, 0x78, 0xae, 0x76, 0x59, 0x6a, 0x3f, 0x21, + 0x20, 0x1f, 0x81, 0x23, 0x81, 0xfc, 0xd0, 0xe3, 0x90, 0x27, 0x6b, 0x11, 0xe0, 0xe7, 0x52, 0xc1, + 0x2b, 0x38, 0x01, 0xf4, 0x17, 0xf0, 0xd3, 0x7e, 0xe6, 0x36, 0x14, 0x86, 0x4c, 0xd1, 0xd3, 0xde, + 0xc6, 0xcf, 0x84, 0xec, 0x80, 0xed, 0x25, 0x7c, 0x1c, 0x8e, 0x20, 0xc7, 0xcf, 0x46, 0xd6, 0xaf, + 0xfa, 0x0a, 0xfc, 0x7c, 0x0b, 0xed, 0x5d, 0xc0, 0x53, 0xb6, 0xac, 0x1e, 0x3c, 0xc1, 0x7c, 0xa1, + 0xbe, 0xf3, 0xf5, 0x15, 0x02, 0xe8, 0xdd, 0x57, 0x44, 0x41, 0x1f, 0x3a, 0x1c, 0xf4, 0xa3, 0xcb, + 0xc9, 0x65, 0x3c, 0xd9, 0x13, 0xdb, 0x15, 0xd9, 0x4b, 0xb2, 0x65, 0xc6, 0xee, 0x3c, 0xff, 0x1e, + 0x6b, 0x20, 0xb9, 0x8e, 0x9f, 0x6a, 0x76, 0x0b, 0x20, 0x96, 0x33, 0x09, 0x54, 0x95, 0x22, 0x10, + 0x0e, 0x5a, 0x6b, 0xab, 0xf8, 0x45, 0x79, 0xdf, 0x66, 0x93, 0x19, 0x9c, 0x5a, 0x65, 0xcb, 0x12, + 0x86, 0xea, 0xc8, 0x15, 0x6a, 0x51, 0xdb, 0x60, 0xd9, 0x60, 0x7f, 0x33, 0x84, 0x67, 0xd3, 0xfc, + 0x00, 0x81, 0x9f, 0x11, 0x3e, 0x6d, 0x32, 0x9b, 0xb9, 0xdc, 0xbd, 0xc6, 0x5d, 0xcf, 0xe1, 0xf5, + 0x16, 0xd4, 0x44, 0x3b, 0x65, 0x13, 0x81, 0x90, 0xfb, 0xc1, 0x5e, 0x11, 0xdc, 0xae, 0xec, 0xb4, + 0xf1, 0xff, 0xfb, 0x60, 0x6a, 0xce, 0xe4, 0xde, 0x76, 0xab, 0x5e, 0x30, 0x44, 0x03, 0x06, 0x0e, + 0x7c, 0x2c, 0xb9, 0x5b, 0x37, 0x74, 0x6f, 0xaf, 0xc9, 0x5c, 0x69, 0xf0, 0xdd, 0x5f, 0x53, 0xf3, + 0x19, 0x55, 0xdd, 0xdb, 0x0f, 0xef, 0x2c, 0x3e, 0x69, 0x31, 0x93, 0x1a, 0x7b, 0xb5, 0xf6, 0x74, + 0x73, 0x55, 0x53, 0x8e, 0x02, 0x4a, 0x7e, 0x44, 0xf8, 0xa4, 0x61, 0x51, 0xde, 0xa0, 0x75, 0x8b, + 0x95, 0xb9, 0xb3, 0xe5, 0x88, 0xe6, 0xf8, 0xe0, 0xff, 0x10, 0x7d, 0x08, 0xa5, 0xd6, 0xc2, 0x33, + 0x32, 0x4b, 0x3d, 0x5d, 0xea, 0x10, 0x99, 0xee, 0x6b, 0xc0, 0x7c, 0x82, 0xb0, 0x96, 0x74, 0x2f, + 0x54, 0x06, 0xc3, 0x67, 0x1a, 0x51, 0x0a, 0x50, 0xe2, 0x0b, 0x19, 0xfa, 0xad, 0x32, 0x80, 0x52, + 0x8f, 0xf6, 0xa6, 0x7d, 0x8a, 0xa0, 0xe6, 0xdf, 0xe4, 0xae, 0xf7, 0x18, 0x91, 0x38, 0xaa, 0x11, + 0x74, 0x1f, 0xc1, 0xdb, 0x49, 0xc0, 0x93, 0x1e, 0xa1, 0xa1, 0xa3, 0x8b, 0xd0, 0xd1, 0xf5, 0xc2, + 0x09, 0x68, 0xd6, 0xd7, 0x85, 0x47, 0xad, 0xcd, 0x6d, 0xea, 0xb0, 0x47, 0xdb, 0xd3, 0x65, 0x3c, + 0x1e, 0x16, 0x01, 0xcd, 0x69, 0x3c, 0xea, 0x75, 0x8e, 0x21, 0xf2, 0xdd, 0x47, 0xa5, 0xaf, 0x4f, + 0xe0, 0x27, 0xa4, 0x39, 0xf9, 0x08, 0xe1, 0x61, 0xb5, 0x4d, 0x91, 0xd9, 0x28, 0xfa, 0xe1, 0xc5, + 0x2d, 0x37, 0x97, 0xaa, 0xa7, 0x70, 0x68, 0x0b, 0x1f, 0xfe, 0xf6, 0xcf, 0x17, 0x83, 0xcf, 0x93, + 0x19, 0x9d, 0x9b, 0x36, 0xf7, 0x98, 0x1e, 0xbb, 0x73, 0x92, 0x5f, 0x10, 0x3e, 0x15, 0xda, 0x9f, + 0x48, 0x31, 0xf6, 0xa6, 0xb8, 0xf5, 0x2e, 0x57, 0x3a, 0x8c, 0x09, 0xe0, 0x5c, 0x95, 0x38, 0xaf, + 0x92, 0x2b, 0x71, 0x38, 0x7b, 0x56, 0x68, 0xfd, 0xe6, 0xa3, 0x2a, 0xbe, 0xa5, 0xdf, 0x84, 0x57, + 0x7a, 0xab, 0xdd, 0xd8, 0x48, 0xb8, 0x06, 0x13, 0x48, 0xc4, 0xed, 0x6e, 0x09, 0x24, 0x62, 0xd7, + 0x2c, 0xed, 0x92, 0x24, 0x71, 0x9e, 0x2c, 0xf7, 0x41, 0x82, 0xdc, 0x46, 0x18, 0x77, 0x46, 0x26, + 0x59, 0x4c, 0x0a, 0x62, 0x70, 0x33, 0xc9, 0x9d, 0xcd, 0xa4, 0x0b, 0x20, 0x97, 0x25, 0xc8, 0x25, + 0x72, 0x36, 0x0e, 0xa4, 0xff, 0xd9, 0x0d, 0xee, 0x33, 0x84, 0x47, 0xdb, 0x71, 0x4d, 0x47, 0x17, + 0xda, 0x9b, 0x12, 0xd0, 0x85, 0x17, 0x20, 0x6d, 0x4e, 0xa2, 0x9b, 0x21, 0x53, 0x29, 0xe8, 0xc8, + 0xf7, 0x08, 0x9f, 0xec, 0xdd, 0x30, 0xc8, 0x4b, 0x19, 0x02, 0x11, 0x58, 0x65, 0x72, 0xc5, 0x43, + 0x58, 0x00, 0xc4, 0x8b, 0x12, 0xe2, 0xcb, 0xa4, 0x94, 0x02, 0x11, 0xfe, 0x03, 0x16, 0x88, 0xe3, + 0x1f, 0x08, 0x4f, 0xc4, 0xee, 0x17, 0xe4, 0x95, 0x58, 0x30, 0x69, 0xbb, 0x4d, 0xee, 0x62, 0x3f, + 0xa6, 0x40, 0x68, 0x4d, 0x12, 0x2a, 0x93, 0xab, 0x71, 0x84, 0x5c, 0xe5, 0xa2, 0x46, 0x3b, 0x3e, + 0x6a, 0x75, 0xe5, 0x24, 0xc0, 0xee, 0x77, 0x84, 0xcf, 0x44, 0xf6, 0x6a, 0x72, 0x3e, 0x16, 0x5e, + 0xd2, 0xf4, 0xca, 0x5d, 0x38, 0xac, 0x19, 0x30, 0x5a, 0x97, 0x8c, 0xd6, 0xc8, 0x6a, 0xc6, 0x87, + 0x18, 0xc5, 0xa6, 0xab, 0xab, 0xfc, 0x89, 0xf0, 0x44, 0xec, 0x64, 0x4b, 0xc8, 0x5a, 0xda, 0x74, + 0x4e, 0xc8, 0x5a, 0xea, 0x20, 0xd5, 0x5e, 0x97, 0x1c, 0x2b, 0xe4, 0xd5, 0x38, 0x8e, 0x16, 0x77, + 0xbd, 0x5a, 0x06, 0xa2, 0xe4, 0x4b, 0x84, 0x47, 0xbb, 0x66, 0x18, 0x89, 0x7f, 0xb0, 0xe1, 0x21, + 0x98, 0x3b, 0x97, 0x4d, 0x19, 0x40, 0x9f, 0x93, 0xa0, 0x67, 0xc9, 0x0b, 0x71, 0xa0, 0xe5, 0x84, + 0xac, 0xb9, 0xd2, 0xaa, 0xb2, 0x72, 0x77, 0x3f, 0x8f, 0xee, 0xed, 0xe7, 0xd1, 0xdf, 0xfb, 0x79, + 0xf4, 0xf9, 0x41, 0x7e, 0xe0, 0xde, 0x41, 0x7e, 0xe0, 0xfe, 0x41, 0x7e, 0xe0, 0x9d, 0x85, 0xae, + 0xbd, 0xb2, 0xc7, 0xd3, 0x07, 0x1d, 0x5f, 0xed, 0xf5, 0xb2, 0x3e, 0x2c, 0xff, 0x00, 0xb2, 0xfc, + 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x8a, 0xd8, 0xc2, 0x7a, 0x12, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1077,25 +1084,23 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { - // Queries a project by id. - Project(ctx context.Context, in *QueryGetProjectRequest, opts ...grpc.CallOption) (*QueryGetProjectResponse, error) - // Queries a list of project items. - ProjectAll(ctx context.Context, in *QueryAllProjectRequest, opts ...grpc.CallOption) (*QueryAllProjectResponse, error) - // Queries a projectChains by index. - ProjectChains(ctx context.Context, in *QueryGetProjectChainsRequest, opts ...grpc.CallOption) (*QueryGetProjectChainsResponse, error) + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of MainnetAccount items. + GetMainnetAccount(ctx context.Context, in *QueryGetMainnetAccountRequest, opts ...grpc.CallOption) (*QueryGetMainnetAccountResponse, error) + ListMainnetAccount(ctx context.Context, in *QueryAllMainnetAccountRequest, opts ...grpc.CallOption) (*QueryAllMainnetAccountResponse, error) + // Queries a list of Project items. + GetProject(ctx context.Context, in *QueryGetProjectRequest, opts ...grpc.CallOption) (*QueryGetProjectResponse, error) + ListProject(ctx context.Context, in *QueryAllProjectRequest, opts ...grpc.CallOption) (*QueryAllProjectResponse, error) + // Queries a list of ProjectChains items. + GetProjectChains(ctx context.Context, in *QueryGetProjectChainsRequest, opts ...grpc.CallOption) (*QueryGetProjectChainsResponse, error) // Queries a list of SpecialAllocationsBalance items. SpecialAllocationsBalance(ctx context.Context, in *QuerySpecialAllocationsBalanceRequest, opts ...grpc.CallOption) (*QuerySpecialAllocationsBalanceResponse, error) - // Queries a mainnetAccount by index. - MainnetAccount(ctx context.Context, in *QueryGetMainnetAccountRequest, opts ...grpc.CallOption) (*QueryGetMainnetAccountResponse, error) - // Queries a list of mainnetAccount items. - MainnetAccountAll(ctx context.Context, in *QueryAllMainnetAccountRequest, opts ...grpc.CallOption) (*QueryAllMainnetAccountResponse, error) - // Queries a mainnetAccountBalance by index. - MainnetAccountBalance(ctx context.Context, in *QueryGetMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryGetMainnetAccountBalanceResponse, error) - // Queries a list of mainnetAccountBalance items. - MainnetAccountBalanceAll(ctx context.Context, in *QueryAllMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryAllMainnetAccountBalanceResponse, error) - // Params queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) - // Queries the TotalShares value + // Queries a list of MainnetAccountBalance items. + MainnetAccountBalance(ctx context.Context, in *QueryMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryMainnetAccountBalanceResponse, error) + // Queries a list of ListMainnetAccountBalance items. + ListMainnetAccountBalance(ctx context.Context, in *QueryListMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryListMainnetAccountBalanceResponse, error) + // Queries a list of TotalShares items. TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) } @@ -1107,81 +1112,81 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Project(ctx context.Context, in *QueryGetProjectRequest, opts ...grpc.CallOption) (*QueryGetProjectResponse, error) { - out := new(QueryGetProjectResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/Project", in, out, opts...) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ProjectAll(ctx context.Context, in *QueryAllProjectRequest, opts ...grpc.CallOption) (*QueryAllProjectResponse, error) { - out := new(QueryAllProjectResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/ProjectAll", in, out, opts...) +func (c *queryClient) GetMainnetAccount(ctx context.Context, in *QueryGetMainnetAccountRequest, opts ...grpc.CallOption) (*QueryGetMainnetAccountResponse, error) { + out := new(QueryGetMainnetAccountResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/GetMainnetAccount", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ProjectChains(ctx context.Context, in *QueryGetProjectChainsRequest, opts ...grpc.CallOption) (*QueryGetProjectChainsResponse, error) { - out := new(QueryGetProjectChainsResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/ProjectChains", in, out, opts...) +func (c *queryClient) ListMainnetAccount(ctx context.Context, in *QueryAllMainnetAccountRequest, opts ...grpc.CallOption) (*QueryAllMainnetAccountResponse, error) { + out := new(QueryAllMainnetAccountResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/ListMainnetAccount", in, out, opts...) if err != nil { return nil, err } return out, nil } - -func (c *queryClient) SpecialAllocationsBalance(ctx context.Context, in *QuerySpecialAllocationsBalanceRequest, opts ...grpc.CallOption) (*QuerySpecialAllocationsBalanceResponse, error) { - out := new(QuerySpecialAllocationsBalanceResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/SpecialAllocationsBalance", in, out, opts...) + +func (c *queryClient) GetProject(ctx context.Context, in *QueryGetProjectRequest, opts ...grpc.CallOption) (*QueryGetProjectResponse, error) { + out := new(QueryGetProjectResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/GetProject", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) MainnetAccount(ctx context.Context, in *QueryGetMainnetAccountRequest, opts ...grpc.CallOption) (*QueryGetMainnetAccountResponse, error) { - out := new(QueryGetMainnetAccountResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/MainnetAccount", in, out, opts...) +func (c *queryClient) ListProject(ctx context.Context, in *QueryAllProjectRequest, opts ...grpc.CallOption) (*QueryAllProjectResponse, error) { + out := new(QueryAllProjectResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/ListProject", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) MainnetAccountAll(ctx context.Context, in *QueryAllMainnetAccountRequest, opts ...grpc.CallOption) (*QueryAllMainnetAccountResponse, error) { - out := new(QueryAllMainnetAccountResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/MainnetAccountAll", in, out, opts...) +func (c *queryClient) GetProjectChains(ctx context.Context, in *QueryGetProjectChainsRequest, opts ...grpc.CallOption) (*QueryGetProjectChainsResponse, error) { + out := new(QueryGetProjectChainsResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/GetProjectChains", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) MainnetAccountBalance(ctx context.Context, in *QueryGetMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryGetMainnetAccountBalanceResponse, error) { - out := new(QueryGetMainnetAccountBalanceResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/MainnetAccountBalance", in, out, opts...) +func (c *queryClient) SpecialAllocationsBalance(ctx context.Context, in *QuerySpecialAllocationsBalanceRequest, opts ...grpc.CallOption) (*QuerySpecialAllocationsBalanceResponse, error) { + out := new(QuerySpecialAllocationsBalanceResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/SpecialAllocationsBalance", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) MainnetAccountBalanceAll(ctx context.Context, in *QueryAllMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryAllMainnetAccountBalanceResponse, error) { - out := new(QueryAllMainnetAccountBalanceResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/MainnetAccountBalanceAll", in, out, opts...) +func (c *queryClient) MainnetAccountBalance(ctx context.Context, in *QueryMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryMainnetAccountBalanceResponse, error) { + out := new(QueryMainnetAccountBalanceResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/MainnetAccountBalance", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/Params", in, out, opts...) +func (c *queryClient) ListMainnetAccountBalance(ctx context.Context, in *QueryListMainnetAccountBalanceRequest, opts ...grpc.CallOption) (*QueryListMainnetAccountBalanceResponse, error) { + out := new(QueryListMainnetAccountBalanceResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/ListMainnetAccountBalance", in, out, opts...) if err != nil { return nil, err } @@ -1190,7 +1195,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . func (c *queryClient) TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) { out := new(QueryTotalSharesResponse) - err := c.cc.Invoke(ctx, "/spn.project.Query/TotalShares", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Query/TotalShares", in, out, opts...) if err != nil { return nil, err } @@ -1199,25 +1204,23 @@ func (c *queryClient) TotalShares(ctx context.Context, in *QueryTotalSharesReque // QueryServer is the server API for Query service. type QueryServer interface { - // Queries a project by id. - Project(context.Context, *QueryGetProjectRequest) (*QueryGetProjectResponse, error) - // Queries a list of project items. - ProjectAll(context.Context, *QueryAllProjectRequest) (*QueryAllProjectResponse, error) - // Queries a projectChains by index. - ProjectChains(context.Context, *QueryGetProjectChainsRequest) (*QueryGetProjectChainsResponse, error) + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of MainnetAccount items. + GetMainnetAccount(context.Context, *QueryGetMainnetAccountRequest) (*QueryGetMainnetAccountResponse, error) + ListMainnetAccount(context.Context, *QueryAllMainnetAccountRequest) (*QueryAllMainnetAccountResponse, error) + // Queries a list of Project items. + GetProject(context.Context, *QueryGetProjectRequest) (*QueryGetProjectResponse, error) + ListProject(context.Context, *QueryAllProjectRequest) (*QueryAllProjectResponse, error) + // Queries a list of ProjectChains items. + GetProjectChains(context.Context, *QueryGetProjectChainsRequest) (*QueryGetProjectChainsResponse, error) // Queries a list of SpecialAllocationsBalance items. SpecialAllocationsBalance(context.Context, *QuerySpecialAllocationsBalanceRequest) (*QuerySpecialAllocationsBalanceResponse, error) - // Queries a mainnetAccount by index. - MainnetAccount(context.Context, *QueryGetMainnetAccountRequest) (*QueryGetMainnetAccountResponse, error) - // Queries a list of mainnetAccount items. - MainnetAccountAll(context.Context, *QueryAllMainnetAccountRequest) (*QueryAllMainnetAccountResponse, error) - // Queries a mainnetAccountBalance by index. - MainnetAccountBalance(context.Context, *QueryGetMainnetAccountBalanceRequest) (*QueryGetMainnetAccountBalanceResponse, error) - // Queries a list of mainnetAccountBalance items. - MainnetAccountBalanceAll(context.Context, *QueryAllMainnetAccountBalanceRequest) (*QueryAllMainnetAccountBalanceResponse, error) - // Params queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) - // Queries the TotalShares value + // Queries a list of MainnetAccountBalance items. + MainnetAccountBalance(context.Context, *QueryMainnetAccountBalanceRequest) (*QueryMainnetAccountBalanceResponse, error) + // Queries a list of ListMainnetAccountBalance items. + ListMainnetAccountBalance(context.Context, *QueryListMainnetAccountBalanceRequest) (*QueryListMainnetAccountBalanceResponse, error) + // Queries a list of TotalShares items. TotalShares(context.Context, *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) } @@ -1225,32 +1228,32 @@ type QueryServer interface { type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Project(ctx context.Context, req *QueryGetProjectRequest) (*QueryGetProjectResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Project not implemented") +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) ProjectAll(ctx context.Context, req *QueryAllProjectRequest) (*QueryAllProjectResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProjectAll not implemented") +func (*UnimplementedQueryServer) GetMainnetAccount(ctx context.Context, req *QueryGetMainnetAccountRequest) (*QueryGetMainnetAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMainnetAccount not implemented") } -func (*UnimplementedQueryServer) ProjectChains(ctx context.Context, req *QueryGetProjectChainsRequest) (*QueryGetProjectChainsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProjectChains not implemented") +func (*UnimplementedQueryServer) ListMainnetAccount(ctx context.Context, req *QueryAllMainnetAccountRequest) (*QueryAllMainnetAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListMainnetAccount not implemented") } -func (*UnimplementedQueryServer) SpecialAllocationsBalance(ctx context.Context, req *QuerySpecialAllocationsBalanceRequest) (*QuerySpecialAllocationsBalanceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SpecialAllocationsBalance not implemented") +func (*UnimplementedQueryServer) GetProject(ctx context.Context, req *QueryGetProjectRequest) (*QueryGetProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProject not implemented") } -func (*UnimplementedQueryServer) MainnetAccount(ctx context.Context, req *QueryGetMainnetAccountRequest) (*QueryGetMainnetAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MainnetAccount not implemented") +func (*UnimplementedQueryServer) ListProject(ctx context.Context, req *QueryAllProjectRequest) (*QueryAllProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListProject not implemented") } -func (*UnimplementedQueryServer) MainnetAccountAll(ctx context.Context, req *QueryAllMainnetAccountRequest) (*QueryAllMainnetAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MainnetAccountAll not implemented") +func (*UnimplementedQueryServer) GetProjectChains(ctx context.Context, req *QueryGetProjectChainsRequest) (*QueryGetProjectChainsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProjectChains not implemented") } -func (*UnimplementedQueryServer) MainnetAccountBalance(ctx context.Context, req *QueryGetMainnetAccountBalanceRequest) (*QueryGetMainnetAccountBalanceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MainnetAccountBalance not implemented") +func (*UnimplementedQueryServer) SpecialAllocationsBalance(ctx context.Context, req *QuerySpecialAllocationsBalanceRequest) (*QuerySpecialAllocationsBalanceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SpecialAllocationsBalance not implemented") } -func (*UnimplementedQueryServer) MainnetAccountBalanceAll(ctx context.Context, req *QueryAllMainnetAccountBalanceRequest) (*QueryAllMainnetAccountBalanceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MainnetAccountBalanceAll not implemented") +func (*UnimplementedQueryServer) MainnetAccountBalance(ctx context.Context, req *QueryMainnetAccountBalanceRequest) (*QueryMainnetAccountBalanceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MainnetAccountBalance not implemented") } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +func (*UnimplementedQueryServer) ListMainnetAccountBalance(ctx context.Context, req *QueryListMainnetAccountBalanceRequest) (*QueryListMainnetAccountBalanceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListMainnetAccountBalance not implemented") } func (*UnimplementedQueryServer) TotalShares(ctx context.Context, req *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TotalShares not implemented") @@ -1260,164 +1263,164 @@ func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } -func _Query_Project_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetProjectRequest) +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Project(ctx, in) + return srv.(QueryServer).Params(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/Project", + FullMethod: "/network.project.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Project(ctx, req.(*QueryGetProjectRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ProjectAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllProjectRequest) +func _Query_GetMainnetAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetMainnetAccountRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ProjectAll(ctx, in) + return srv.(QueryServer).GetMainnetAccount(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/ProjectAll", + FullMethod: "/network.project.v1.Query/GetMainnetAccount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ProjectAll(ctx, req.(*QueryAllProjectRequest)) + return srv.(QueryServer).GetMainnetAccount(ctx, req.(*QueryGetMainnetAccountRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ProjectChains_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetProjectChainsRequest) +func _Query_ListMainnetAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllMainnetAccountRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ProjectChains(ctx, in) + return srv.(QueryServer).ListMainnetAccount(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/ProjectChains", + FullMethod: "/network.project.v1.Query/ListMainnetAccount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ProjectChains(ctx, req.(*QueryGetProjectChainsRequest)) + return srv.(QueryServer).ListMainnetAccount(ctx, req.(*QueryAllMainnetAccountRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_SpecialAllocationsBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySpecialAllocationsBalanceRequest) +func _Query_GetProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetProjectRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).SpecialAllocationsBalance(ctx, in) + return srv.(QueryServer).GetProject(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/SpecialAllocationsBalance", + FullMethod: "/network.project.v1.Query/GetProject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).SpecialAllocationsBalance(ctx, req.(*QuerySpecialAllocationsBalanceRequest)) + return srv.(QueryServer).GetProject(ctx, req.(*QueryGetProjectRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_MainnetAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetMainnetAccountRequest) +func _Query_ListProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllProjectRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).MainnetAccount(ctx, in) + return srv.(QueryServer).ListProject(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/MainnetAccount", + FullMethod: "/network.project.v1.Query/ListProject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).MainnetAccount(ctx, req.(*QueryGetMainnetAccountRequest)) + return srv.(QueryServer).ListProject(ctx, req.(*QueryAllProjectRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_MainnetAccountAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllMainnetAccountRequest) +func _Query_GetProjectChains_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetProjectChainsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).MainnetAccountAll(ctx, in) + return srv.(QueryServer).GetProjectChains(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/MainnetAccountAll", + FullMethod: "/network.project.v1.Query/GetProjectChains", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).MainnetAccountAll(ctx, req.(*QueryAllMainnetAccountRequest)) + return srv.(QueryServer).GetProjectChains(ctx, req.(*QueryGetProjectChainsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_MainnetAccountBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetMainnetAccountBalanceRequest) +func _Query_SpecialAllocationsBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySpecialAllocationsBalanceRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).MainnetAccountBalance(ctx, in) + return srv.(QueryServer).SpecialAllocationsBalance(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/MainnetAccountBalance", + FullMethod: "/network.project.v1.Query/SpecialAllocationsBalance", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).MainnetAccountBalance(ctx, req.(*QueryGetMainnetAccountBalanceRequest)) + return srv.(QueryServer).SpecialAllocationsBalance(ctx, req.(*QuerySpecialAllocationsBalanceRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_MainnetAccountBalanceAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllMainnetAccountBalanceRequest) +func _Query_MainnetAccountBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryMainnetAccountBalanceRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).MainnetAccountBalanceAll(ctx, in) + return srv.(QueryServer).MainnetAccountBalance(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/MainnetAccountBalanceAll", + FullMethod: "/network.project.v1.Query/MainnetAccountBalance", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).MainnetAccountBalanceAll(ctx, req.(*QueryAllMainnetAccountBalanceRequest)) + return srv.(QueryServer).MainnetAccountBalance(ctx, req.(*QueryMainnetAccountBalanceRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) +func _Query_ListMainnetAccountBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryListMainnetAccountBalanceRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) + return srv.(QueryServer).ListMainnetAccountBalance(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/Params", + FullMethod: "/network.project.v1.Query/ListMainnetAccountBalance", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).ListMainnetAccountBalance(ctx, req.(*QueryListMainnetAccountBalanceRequest)) } return interceptor(ctx, in, info, handler) } @@ -1432,7 +1435,7 @@ func _Query_TotalShares_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Query/TotalShares", + FullMethod: "/network.project.v1.Query/TotalShares", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).TotalShares(ctx, req.(*QueryTotalSharesRequest)) @@ -1441,44 +1444,44 @@ func _Query_TotalShares_Handler(srv interface{}, ctx context.Context, dec func(i } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.project.Query", + ServiceName: "network.project.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "Project", - Handler: _Query_Project_Handler, + MethodName: "Params", + Handler: _Query_Params_Handler, }, { - MethodName: "ProjectAll", - Handler: _Query_ProjectAll_Handler, + MethodName: "GetMainnetAccount", + Handler: _Query_GetMainnetAccount_Handler, }, { - MethodName: "ProjectChains", - Handler: _Query_ProjectChains_Handler, + MethodName: "ListMainnetAccount", + Handler: _Query_ListMainnetAccount_Handler, }, { - MethodName: "SpecialAllocationsBalance", - Handler: _Query_SpecialAllocationsBalance_Handler, + MethodName: "GetProject", + Handler: _Query_GetProject_Handler, }, { - MethodName: "MainnetAccount", - Handler: _Query_MainnetAccount_Handler, + MethodName: "ListProject", + Handler: _Query_ListProject_Handler, }, { - MethodName: "MainnetAccountAll", - Handler: _Query_MainnetAccountAll_Handler, + MethodName: "GetProjectChains", + Handler: _Query_GetProjectChains_Handler, }, { - MethodName: "MainnetAccountBalance", - Handler: _Query_MainnetAccountBalance_Handler, + MethodName: "SpecialAllocationsBalance", + Handler: _Query_SpecialAllocationsBalance_Handler, }, { - MethodName: "MainnetAccountBalanceAll", - Handler: _Query_MainnetAccountBalanceAll_Handler, + MethodName: "MainnetAccountBalance", + Handler: _Query_MainnetAccountBalance_Handler, }, { - MethodName: "Params", - Handler: _Query_Params_Handler, + MethodName: "ListMainnetAccountBalance", + Handler: _Query_ListMainnetAccountBalance_Handler, }, { MethodName: "TotalShares", @@ -1486,10 +1489,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/project/query.proto", + Metadata: "network/project/v1/query.proto", } -func (m *QueryGetProjectRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1499,16 +1502,79 @@ func (m *QueryGetProjectRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetProjectRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetProjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryGetMainnetAccountRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetMainnetAccountRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetMainnetAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } if m.ProjectID != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.ProjectID)) i-- @@ -1517,7 +1583,7 @@ func (m *QueryGetProjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryGetProjectResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetMainnetAccountResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1527,18 +1593,18 @@ func (m *QueryGetProjectResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetProjectResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetMainnetAccountResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetProjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetMainnetAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Project.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.MainnetAccount.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1550,7 +1616,7 @@ func (m *QueryGetProjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryAllProjectRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllMainnetAccountRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1560,12 +1626,12 @@ func (m *QueryAllProjectRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllProjectRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllMainnetAccountRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllProjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllMainnetAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1580,12 +1646,17 @@ func (m *QueryAllProjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 + } + if m.ProjectID != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.ProjectID)) + i-- + dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryAllProjectResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllMainnetAccountResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1595,12 +1666,12 @@ func (m *QueryAllProjectResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllProjectResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllMainnetAccountResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllProjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllMainnetAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1617,10 +1688,10 @@ func (m *QueryAllProjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x12 } - if len(m.Project) > 0 { - for iNdEx := len(m.Project) - 1; iNdEx >= 0; iNdEx-- { + if len(m.MainnetAccount) > 0 { + for iNdEx := len(m.MainnetAccount) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Project[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.MainnetAccount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1634,7 +1705,7 @@ func (m *QueryAllProjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryGetProjectChainsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetProjectRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1644,12 +1715,12 @@ func (m *QueryGetProjectChainsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetProjectChainsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetProjectRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetProjectChainsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetProjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1662,7 +1733,7 @@ func (m *QueryGetProjectChainsRequest) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryGetProjectChainsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetProjectResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1672,18 +1743,18 @@ func (m *QueryGetProjectChainsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetProjectChainsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetProjectResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetProjectChainsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetProjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.ProjectChains.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Project.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1695,7 +1766,7 @@ func (m *QueryGetProjectChainsResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QuerySpecialAllocationsBalanceRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllProjectRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1705,25 +1776,32 @@ func (m *QuerySpecialAllocationsBalanceRequest) Marshal() (dAtA []byte, err erro return dAtA[:n], nil } -func (m *QuerySpecialAllocationsBalanceRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllProjectRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QuerySpecialAllocationsBalanceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllProjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.ProjectID != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.ProjectID)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x8 + dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QuerySpecialAllocationsBalanceResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllProjectResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1733,34 +1811,32 @@ func (m *QuerySpecialAllocationsBalanceResponse) Marshal() (dAtA []byte, err err return dAtA[:n], nil } -func (m *QuerySpecialAllocationsBalanceResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllProjectResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QuerySpecialAllocationsBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllProjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.ClaimableAirdrop) > 0 { - for iNdEx := len(m.ClaimableAirdrop) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.ClaimableAirdrop[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x12 + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - if len(m.GenesisDistribution) > 0 { - for iNdEx := len(m.GenesisDistribution) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Project) > 0 { + for iNdEx := len(m.Project) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.GenesisDistribution[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Project[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1774,7 +1850,7 @@ func (m *QuerySpecialAllocationsBalanceResponse) MarshalToSizedBuffer(dAtA []byt return len(dAtA) - i, nil } -func (m *QueryGetMainnetAccountRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetProjectChainsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1784,23 +1860,16 @@ func (m *QueryGetMainnetAccountRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetMainnetAccountRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetProjectChainsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetMainnetAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetProjectChainsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0x12 - } if m.ProjectID != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.ProjectID)) i-- @@ -1809,7 +1878,7 @@ func (m *QueryGetMainnetAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryGetMainnetAccountResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetProjectChainsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1819,18 +1888,18 @@ func (m *QueryGetMainnetAccountResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetMainnetAccountResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetProjectChainsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetMainnetAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetProjectChainsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.MainnetAccount.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ProjectChains.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1842,7 +1911,7 @@ func (m *QueryGetMainnetAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryAllMainnetAccountRequest) Marshal() (dAtA []byte, err error) { +func (m *QuerySpecialAllocationsBalanceRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1852,28 +1921,16 @@ func (m *QueryAllMainnetAccountRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllMainnetAccountRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QuerySpecialAllocationsBalanceRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllMainnetAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QuerySpecialAllocationsBalanceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } if m.ProjectID != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.ProjectID)) i-- @@ -1882,7 +1939,7 @@ func (m *QueryAllMainnetAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryAllMainnetAccountResponse) Marshal() (dAtA []byte, err error) { +func (m *QuerySpecialAllocationsBalanceResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1892,32 +1949,34 @@ func (m *QueryAllMainnetAccountResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllMainnetAccountResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QuerySpecialAllocationsBalanceResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllMainnetAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QuerySpecialAllocationsBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if len(m.ClaimableAirdrop) > 0 { + for iNdEx := len(m.ClaimableAirdrop) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClaimableAirdrop[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 } - if len(m.MainnetAccount) > 0 { - for iNdEx := len(m.MainnetAccount) - 1; iNdEx >= 0; iNdEx-- { + if len(m.GenesisDistribution) > 0 { + for iNdEx := len(m.GenesisDistribution) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.MainnetAccount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.GenesisDistribution[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1931,7 +1990,7 @@ func (m *QueryAllMainnetAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QueryGetMainnetAccountBalanceRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryMainnetAccountBalanceRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1941,12 +2000,12 @@ func (m *QueryGetMainnetAccountBalanceRequest) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *QueryGetMainnetAccountBalanceRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryMainnetAccountBalanceRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetMainnetAccountBalanceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryMainnetAccountBalanceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1966,7 +2025,7 @@ func (m *QueryGetMainnetAccountBalanceRequest) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *QueryGetMainnetAccountBalanceResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryMainnetAccountBalanceResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1976,12 +2035,12 @@ func (m *QueryGetMainnetAccountBalanceResponse) Marshal() (dAtA []byte, err erro return dAtA[:n], nil } -func (m *QueryGetMainnetAccountBalanceResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryMainnetAccountBalanceResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetMainnetAccountBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryMainnetAccountBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1999,7 +2058,7 @@ func (m *QueryGetMainnetAccountBalanceResponse) MarshalToSizedBuffer(dAtA []byte return len(dAtA) - i, nil } -func (m *QueryAllMainnetAccountBalanceRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryListMainnetAccountBalanceRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2009,12 +2068,12 @@ func (m *QueryAllMainnetAccountBalanceRequest) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *QueryAllMainnetAccountBalanceRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryListMainnetAccountBalanceRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllMainnetAccountBalanceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryListMainnetAccountBalanceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2039,7 +2098,7 @@ func (m *QueryAllMainnetAccountBalanceRequest) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *QueryAllMainnetAccountBalanceResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryListMainnetAccountBalanceResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2049,12 +2108,12 @@ func (m *QueryAllMainnetAccountBalanceResponse) Marshal() (dAtA []byte, err erro return dAtA[:n], nil } -func (m *QueryAllMainnetAccountBalanceResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryListMainnetAccountBalanceResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllMainnetAccountBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryListMainnetAccountBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2088,62 +2147,6 @@ func (m *QueryAllMainnetAccountBalanceResponse) MarshalToSizedBuffer(dAtA []byte return len(dAtA) - i, nil } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - func (m *QueryTotalSharesRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2206,7 +2209,27 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryGetProjectRequest) Size() (n int) { +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryGetMainnetAccountRequest) Size() (n int) { if m == nil { return 0 } @@ -2215,26 +2238,33 @@ func (m *QueryGetProjectRequest) Size() (n int) { if m.ProjectID != 0 { n += 1 + sovQuery(uint64(m.ProjectID)) } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } return n } -func (m *QueryGetProjectResponse) Size() (n int) { +func (m *QueryGetMainnetAccountResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.Project.Size() + l = m.MainnetAccount.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllProjectRequest) Size() (n int) { +func (m *QueryAllMainnetAccountRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l + if m.ProjectID != 0 { + n += 1 + sovQuery(uint64(m.ProjectID)) + } if m.Pagination != nil { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) @@ -2242,14 +2272,14 @@ func (m *QueryAllProjectRequest) Size() (n int) { return n } -func (m *QueryAllProjectResponse) Size() (n int) { +func (m *QueryAllMainnetAccountResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Project) > 0 { - for _, e := range m.Project { + if len(m.MainnetAccount) > 0 { + for _, e := range m.MainnetAccount { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -2261,7 +2291,7 @@ func (m *QueryAllProjectResponse) Size() (n int) { return n } -func (m *QueryGetProjectChainsRequest) Size() (n int) { +func (m *QueryGetProjectRequest) Size() (n int) { if m == nil { return 0 } @@ -2273,51 +2303,50 @@ func (m *QueryGetProjectChainsRequest) Size() (n int) { return n } -func (m *QueryGetProjectChainsResponse) Size() (n int) { +func (m *QueryGetProjectResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.ProjectChains.Size() + l = m.Project.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QuerySpecialAllocationsBalanceRequest) Size() (n int) { +func (m *QueryAllProjectRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.ProjectID != 0 { - n += 1 + sovQuery(uint64(m.ProjectID)) + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } return n } -func (m *QuerySpecialAllocationsBalanceResponse) Size() (n int) { +func (m *QueryAllProjectResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.GenesisDistribution) > 0 { - for _, e := range m.GenesisDistribution { + if len(m.Project) > 0 { + for _, e := range m.Project { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } } - if len(m.ClaimableAirdrop) > 0 { - for _, e := range m.ClaimableAirdrop { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } return n } -func (m *QueryGetMainnetAccountRequest) Size() (n int) { +func (m *QueryGetProjectChainsRequest) Size() (n int) { if m == nil { return 0 } @@ -2326,25 +2355,21 @@ func (m *QueryGetMainnetAccountRequest) Size() (n int) { if m.ProjectID != 0 { n += 1 + sovQuery(uint64(m.ProjectID)) } - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } return n } -func (m *QueryGetMainnetAccountResponse) Size() (n int) { +func (m *QueryGetProjectChainsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.MainnetAccount.Size() + l = m.ProjectChains.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllMainnetAccountRequest) Size() (n int) { +func (m *QuerySpecialAllocationsBalanceRequest) Size() (n int) { if m == nil { return 0 } @@ -2353,33 +2378,31 @@ func (m *QueryAllMainnetAccountRequest) Size() (n int) { if m.ProjectID != 0 { n += 1 + sovQuery(uint64(m.ProjectID)) } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } return n } -func (m *QueryAllMainnetAccountResponse) Size() (n int) { +func (m *QuerySpecialAllocationsBalanceResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.MainnetAccount) > 0 { - for _, e := range m.MainnetAccount { + if len(m.GenesisDistribution) > 0 { + for _, e := range m.GenesisDistribution { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) + if len(m.ClaimableAirdrop) > 0 { + for _, e := range m.ClaimableAirdrop { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } } return n } -func (m *QueryGetMainnetAccountBalanceRequest) Size() (n int) { +func (m *QueryMainnetAccountBalanceRequest) Size() (n int) { if m == nil { return 0 } @@ -2395,7 +2418,7 @@ func (m *QueryGetMainnetAccountBalanceRequest) Size() (n int) { return n } -func (m *QueryGetMainnetAccountBalanceResponse) Size() (n int) { +func (m *QueryMainnetAccountBalanceResponse) Size() (n int) { if m == nil { return 0 } @@ -2406,7 +2429,7 @@ func (m *QueryGetMainnetAccountBalanceResponse) Size() (n int) { return n } -func (m *QueryAllMainnetAccountBalanceRequest) Size() (n int) { +func (m *QueryListMainnetAccountBalanceRequest) Size() (n int) { if m == nil { return 0 } @@ -2422,7 +2445,7 @@ func (m *QueryAllMainnetAccountBalanceRequest) Size() (n int) { return n } -func (m *QueryAllMainnetAccountBalanceResponse) Size() (n int) { +func (m *QueryListMainnetAccountBalanceResponse) Size() (n int) { if m == nil { return 0 } @@ -2441,7 +2464,7 @@ func (m *QueryAllMainnetAccountBalanceResponse) Size() (n int) { return n } -func (m *QueryParamsRequest) Size() (n int) { +func (m *QueryTotalSharesRequest) Size() (n int) { if m == nil { return 0 } @@ -2450,45 +2473,158 @@ func (m *QueryParamsRequest) Size() (n int) { return n } -func (m *QueryParamsResponse) Size() (n int) { +func (m *QueryTotalSharesResponse) Size() (n int) { if m == nil { return 0 } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} + var l int + _ = l + if m.TotalShares != 0 { + n += 1 + sovQuery(uint64(m.TotalShares)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } -func (m *QueryTotalSharesRequest) Size() (n int) { - if m == nil { - return 0 + if iNdEx > l { + return io.ErrUnexpectedEOF } - var l int - _ = l - return n + return nil } - -func (m *QueryTotalSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TotalShares != 0 { - n += 1 + sovQuery(uint64(m.TotalShares)) +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - return n -} -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil } -func (m *QueryGetProjectRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetMainnetAccountRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2511,10 +2647,10 @@ func (m *QueryGetProjectRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetProjectRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetMainnetAccountRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetProjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetMainnetAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2536,6 +2672,38 @@ func (m *QueryGetProjectRequest) Unmarshal(dAtA []byte) error { break } } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2557,7 +2725,7 @@ func (m *QueryGetProjectRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetProjectResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetMainnetAccountResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2580,15 +2748,15 @@ func (m *QueryGetProjectResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetProjectResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetMainnetAccountResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetProjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetMainnetAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Project", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MainnetAccount", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2615,7 +2783,7 @@ func (m *QueryGetProjectResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Project.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.MainnetAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2640,7 +2808,7 @@ func (m *QueryGetProjectResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllProjectRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllMainnetAccountRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2663,13 +2831,32 @@ func (m *QueryAllProjectRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllProjectRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllMainnetAccountRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllProjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllMainnetAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + m.ProjectID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ProjectID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } @@ -2726,7 +2913,7 @@ func (m *QueryAllProjectRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllProjectResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllMainnetAccountResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2749,15 +2936,15 @@ func (m *QueryAllProjectResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllProjectResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllMainnetAccountResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllProjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllMainnetAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Project", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MainnetAccount", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2784,8 +2971,8 @@ func (m *QueryAllProjectResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Project = append(m.Project, Project{}) - if err := m.Project[len(m.Project)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.MainnetAccount = append(m.MainnetAccount, MainnetAccount{}) + if err := m.MainnetAccount[len(m.MainnetAccount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2846,7 +3033,7 @@ func (m *QueryAllProjectResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetProjectChainsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetProjectRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2869,10 +3056,10 @@ func (m *QueryGetProjectChainsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetProjectChainsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetProjectRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetProjectChainsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetProjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2915,7 +3102,7 @@ func (m *QueryGetProjectChainsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetProjectChainsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetProjectResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2938,15 +3125,15 @@ func (m *QueryGetProjectChainsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetProjectChainsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetProjectResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetProjectChainsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetProjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProjectChains", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Project", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2973,7 +3160,7 @@ func (m *QueryGetProjectChainsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ProjectChains.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Project.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2998,7 +3185,7 @@ func (m *QueryGetProjectChainsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QuerySpecialAllocationsBalanceRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllProjectRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3021,17 +3208,17 @@ func (m *QuerySpecialAllocationsBalanceRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QuerySpecialAllocationsBalanceRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllProjectRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySpecialAllocationsBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllProjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - m.ProjectID = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -3041,11 +3228,28 @@ func (m *QuerySpecialAllocationsBalanceRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ProjectID |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -3067,7 +3271,7 @@ func (m *QuerySpecialAllocationsBalanceRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QuerySpecialAllocationsBalanceResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllProjectResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3090,15 +3294,15 @@ func (m *QuerySpecialAllocationsBalanceResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QuerySpecialAllocationsBalanceResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllProjectResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySpecialAllocationsBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllProjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenesisDistribution", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Project", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3125,14 +3329,14 @@ func (m *QuerySpecialAllocationsBalanceResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.GenesisDistribution = append(m.GenesisDistribution, github_com_cosmos_cosmos_sdk_types.Coin{}) - if err := m.GenesisDistribution[len(m.GenesisDistribution)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Project = append(m.Project, Project{}) + if err := m.Project[len(m.Project)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClaimableAirdrop", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3159,8 +3363,10 @@ func (m *QuerySpecialAllocationsBalanceResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ClaimableAirdrop = append(m.ClaimableAirdrop, github_com_cosmos_cosmos_sdk_types.Coin{}) - if err := m.ClaimableAirdrop[len(m.ClaimableAirdrop)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3185,7 +3391,7 @@ func (m *QuerySpecialAllocationsBalanceResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetMainnetAccountRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetProjectChainsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3208,10 +3414,10 @@ func (m *QueryGetMainnetAccountRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetMainnetAccountRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetProjectChainsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetMainnetAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetProjectChainsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3233,38 +3439,6 @@ func (m *QueryGetMainnetAccountRequest) Unmarshal(dAtA []byte) error { break } } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -3286,7 +3460,7 @@ func (m *QueryGetMainnetAccountRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetMainnetAccountResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetProjectChainsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3309,15 +3483,15 @@ func (m *QueryGetMainnetAccountResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetMainnetAccountResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetProjectChainsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetMainnetAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetProjectChainsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MainnetAccount", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProjectChains", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3344,7 +3518,7 @@ func (m *QueryGetMainnetAccountResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.MainnetAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ProjectChains.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3369,7 +3543,7 @@ func (m *QueryGetMainnetAccountResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllMainnetAccountRequest) Unmarshal(dAtA []byte) error { +func (m *QuerySpecialAllocationsBalanceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3392,10 +3566,10 @@ func (m *QueryAllMainnetAccountRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllMainnetAccountRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySpecialAllocationsBalanceRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllMainnetAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySpecialAllocationsBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3417,42 +3591,6 @@ func (m *QueryAllMainnetAccountRequest) Unmarshal(dAtA []byte) error { break } } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -3474,7 +3612,7 @@ func (m *QueryAllMainnetAccountRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllMainnetAccountResponse) Unmarshal(dAtA []byte) error { +func (m *QuerySpecialAllocationsBalanceResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3497,15 +3635,15 @@ func (m *QueryAllMainnetAccountResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllMainnetAccountResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QuerySpecialAllocationsBalanceResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllMainnetAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QuerySpecialAllocationsBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MainnetAccount", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field GenesisDistribution", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3532,14 +3670,14 @@ func (m *QueryAllMainnetAccountResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.MainnetAccount = append(m.MainnetAccount, MainnetAccount{}) - if err := m.MainnetAccount[len(m.MainnetAccount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.GenesisDistribution = append(m.GenesisDistribution, github_com_cosmos_cosmos_sdk_types.Coin{}) + if err := m.GenesisDistribution[len(m.GenesisDistribution)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ClaimableAirdrop", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3566,10 +3704,8 @@ func (m *QueryAllMainnetAccountResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ClaimableAirdrop = append(m.ClaimableAirdrop, github_com_cosmos_cosmos_sdk_types.Coin{}) + if err := m.ClaimableAirdrop[len(m.ClaimableAirdrop)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3594,7 +3730,7 @@ func (m *QueryAllMainnetAccountResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetMainnetAccountBalanceRequest) Unmarshal(dAtA []byte) error { +func (m *QueryMainnetAccountBalanceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3617,10 +3753,10 @@ func (m *QueryGetMainnetAccountBalanceRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetMainnetAccountBalanceRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryMainnetAccountBalanceRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetMainnetAccountBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryMainnetAccountBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3695,7 +3831,7 @@ func (m *QueryGetMainnetAccountBalanceRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetMainnetAccountBalanceResponse) Unmarshal(dAtA []byte) error { +func (m *QueryMainnetAccountBalanceResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3718,10 +3854,10 @@ func (m *QueryGetMainnetAccountBalanceResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetMainnetAccountBalanceResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryMainnetAccountBalanceResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetMainnetAccountBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryMainnetAccountBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3778,7 +3914,7 @@ func (m *QueryGetMainnetAccountBalanceResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllMainnetAccountBalanceRequest) Unmarshal(dAtA []byte) error { +func (m *QueryListMainnetAccountBalanceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3801,10 +3937,10 @@ func (m *QueryAllMainnetAccountBalanceRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllMainnetAccountBalanceRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryListMainnetAccountBalanceRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllMainnetAccountBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryListMainnetAccountBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3883,7 +4019,7 @@ func (m *QueryAllMainnetAccountBalanceRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllMainnetAccountBalanceResponse) Unmarshal(dAtA []byte) error { +func (m *QueryListMainnetAccountBalanceResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3906,10 +4042,10 @@ func (m *QueryAllMainnetAccountBalanceResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllMainnetAccountBalanceResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryListMainnetAccountBalanceResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllMainnetAccountBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryListMainnetAccountBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4003,139 +4139,6 @@ func (m *QueryAllMainnetAccountBalanceResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *QueryTotalSharesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/project/types/query.pb.gw.go b/x/project/types/query.pb.gw.go index 8cf99d70..6e2945ac 100644 --- a/x/project/types/query.pb.gw.go +++ b/x/project/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: spn/project/query.proto +// source: network/project/v1/query.proto /* Package types is a reverse proxy. @@ -33,8 +33,26 @@ var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage var _ = metadata.Join -func request_Query_Project_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetProjectRequest +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_GetMainnetAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetMainnetAccountRequest var metadata runtime.ServerMetadata var ( @@ -55,13 +73,24 @@ func request_Query_Project_0(ctx context.Context, marshaler runtime.Marshaler, c return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - msg, err := client.Project(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := client.GetMainnetAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Project_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetProjectRequest +func local_request_Query_GetMainnetAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetMainnetAccountRequest var metadata runtime.ServerMetadata var ( @@ -82,49 +111,62 @@ func local_request_Query_Project_0(ctx context.Context, marshaler runtime.Marsha return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - msg, err := server.Project(ctx, &protoReq) + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := server.GetMainnetAccount(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ProjectAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_ListMainnetAccount_0 = &utilities.DoubleArray{Encoding: map[string]int{"projectID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_ProjectAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllProjectRequest +func request_Query_ListMainnetAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllMainnetAccountRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ProjectAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } + var ( + val string + ok bool + err error + _ = err + ) - msg, err := client.ProjectAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + val, ok = pathParams["projectID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "projectID") + } -} + protoReq.ProjectID, err = runtime.Uint64(val) -func local_request_Query_ProjectAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllProjectRequest - var metadata runtime.ServerMetadata + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) + } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ProjectAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListMainnetAccount_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ProjectAll(ctx, &protoReq) + msg, err := client.ListMainnetAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_Query_ProjectChains_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetProjectChainsRequest +func local_request_Query_ListMainnetAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllMainnetAccountRequest var metadata runtime.ServerMetadata var ( @@ -145,13 +187,20 @@ func request_Query_ProjectChains_0(ctx context.Context, marshaler runtime.Marsha return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - msg, err := client.ProjectChains(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListMainnetAccount_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListMainnetAccount(ctx, &protoReq) return msg, metadata, err } -func local_request_Query_ProjectChains_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetProjectChainsRequest +func request_Query_GetProject_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetProjectRequest var metadata runtime.ServerMetadata var ( @@ -172,13 +221,13 @@ func local_request_Query_ProjectChains_0(ctx context.Context, marshaler runtime. return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - msg, err := server.ProjectChains(ctx, &protoReq) + msg, err := client.GetProject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_Query_SpecialAllocationsBalance_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySpecialAllocationsBalanceRequest +func local_request_Query_GetProject_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetProjectRequest var metadata runtime.ServerMetadata var ( @@ -199,40 +248,49 @@ func request_Query_SpecialAllocationsBalance_0(ctx context.Context, marshaler ru return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - msg, err := client.SpecialAllocationsBalance(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := server.GetProject(ctx, &protoReq) return msg, metadata, err } -func local_request_Query_SpecialAllocationsBalance_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySpecialAllocationsBalanceRequest - var metadata runtime.ServerMetadata +var ( + filter_Query_ListProject_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) - var ( - val string - ok bool - err error - _ = err - ) +func request_Query_ListProject_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllProjectRequest + var metadata runtime.ServerMetadata - val, ok = pathParams["projectID"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "projectID") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListProject_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - protoReq.ProjectID, err = runtime.Uint64(val) + msg, err := client.ListProject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) +} + +func local_request_Query_ListProject_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllProjectRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListProject_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.SpecialAllocationsBalance(ctx, &protoReq) + msg, err := server.ListProject(ctx, &protoReq) return msg, metadata, err } -func request_Query_MainnetAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetMainnetAccountRequest +func request_Query_GetProjectChains_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetProjectChainsRequest var metadata runtime.ServerMetadata var ( @@ -253,24 +311,13 @@ func request_Query_MainnetAccount_0(ctx context.Context, marshaler runtime.Marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - val, ok = pathParams["address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") - } - - protoReq.Address, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) - } - - msg, err := client.MainnetAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetProjectChains(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_MainnetAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetMainnetAccountRequest +func local_request_Query_GetProjectChains_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetProjectChainsRequest var metadata runtime.ServerMetadata var ( @@ -291,28 +338,13 @@ func local_request_Query_MainnetAccount_0(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - val, ok = pathParams["address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") - } - - protoReq.Address, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) - } - - msg, err := server.MainnetAccount(ctx, &protoReq) + msg, err := server.GetProjectChains(ctx, &protoReq) return msg, metadata, err } -var ( - filter_Query_MainnetAccountAll_0 = &utilities.DoubleArray{Encoding: map[string]int{"projectID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Query_MainnetAccountAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllMainnetAccountRequest +func request_Query_SpecialAllocationsBalance_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySpecialAllocationsBalanceRequest var metadata runtime.ServerMetadata var ( @@ -333,20 +365,13 @@ func request_Query_MainnetAccountAll_0(ctx context.Context, marshaler runtime.Ma return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_MainnetAccountAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.MainnetAccountAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.SpecialAllocationsBalance(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_MainnetAccountAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllMainnetAccountRequest +func local_request_Query_SpecialAllocationsBalance_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySpecialAllocationsBalanceRequest var metadata runtime.ServerMetadata var ( @@ -367,20 +392,13 @@ func local_request_Query_MainnetAccountAll_0(ctx context.Context, marshaler runt return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectID", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_MainnetAccountAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.MainnetAccountAll(ctx, &protoReq) + msg, err := server.SpecialAllocationsBalance(ctx, &protoReq) return msg, metadata, err } func request_Query_MainnetAccountBalance_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetMainnetAccountBalanceRequest + var protoReq QueryMainnetAccountBalanceRequest var metadata runtime.ServerMetadata var ( @@ -418,7 +436,7 @@ func request_Query_MainnetAccountBalance_0(ctx context.Context, marshaler runtim } func local_request_Query_MainnetAccountBalance_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetMainnetAccountBalanceRequest + var protoReq QueryMainnetAccountBalanceRequest var metadata runtime.ServerMetadata var ( @@ -456,11 +474,11 @@ func local_request_Query_MainnetAccountBalance_0(ctx context.Context, marshaler } var ( - filter_Query_MainnetAccountBalanceAll_0 = &utilities.DoubleArray{Encoding: map[string]int{"projectID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Query_ListMainnetAccountBalance_0 = &utilities.DoubleArray{Encoding: map[string]int{"projectID": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_Query_MainnetAccountBalanceAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllMainnetAccountBalanceRequest +func request_Query_ListMainnetAccountBalance_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryListMainnetAccountBalanceRequest var metadata runtime.ServerMetadata var ( @@ -484,17 +502,17 @@ func request_Query_MainnetAccountBalanceAll_0(ctx context.Context, marshaler run if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_MainnetAccountBalanceAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListMainnetAccountBalance_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.MainnetAccountBalanceAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListMainnetAccountBalance(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_MainnetAccountBalanceAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllMainnetAccountBalanceRequest +func local_request_Query_ListMainnetAccountBalance_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryListMainnetAccountBalanceRequest var metadata runtime.ServerMetadata var ( @@ -518,29 +536,11 @@ func local_request_Query_MainnetAccountBalanceAll_0(ctx context.Context, marshal if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_MainnetAccountBalanceAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListMainnetAccountBalance_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.MainnetAccountBalanceAll(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata - - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata - - msg, err := server.Params(ctx, &protoReq) + msg, err := server.ListMainnetAccountBalance(ctx, &protoReq) return msg, metadata, err } @@ -569,7 +569,7 @@ func local_request_Query_TotalShares_0(ctx context.Context, marshaler runtime.Ma // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - mux.Handle("GET", pattern_Query_Project_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -580,7 +580,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Project_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -588,11 +588,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Project_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProjectAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetMainnetAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -603,7 +603,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ProjectAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetMainnetAccount_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -611,11 +611,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ProjectAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetMainnetAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProjectChains_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListMainnetAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -626,7 +626,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ProjectChains_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListMainnetAccount_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -634,11 +634,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ProjectChains_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListMainnetAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_SpecialAllocationsBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -649,7 +649,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_SpecialAllocationsBalance_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetProject_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -657,11 +657,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_SpecialAllocationsBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetProject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MainnetAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -672,7 +672,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_MainnetAccount_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListProject_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -680,11 +680,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_MainnetAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListProject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MainnetAccountAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetProjectChains_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -695,7 +695,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_MainnetAccountAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetProjectChains_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -703,11 +703,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_MainnetAccountAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetProjectChains_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MainnetAccountBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_SpecialAllocationsBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -718,7 +718,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_MainnetAccountBalance_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_SpecialAllocationsBalance_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -726,11 +726,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_MainnetAccountBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_SpecialAllocationsBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MainnetAccountBalanceAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_MainnetAccountBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -741,7 +741,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_MainnetAccountBalanceAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_MainnetAccountBalance_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -749,11 +749,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_MainnetAccountBalanceAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_MainnetAccountBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListMainnetAccountBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -764,7 +764,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListMainnetAccountBalance_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -772,7 +772,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListMainnetAccountBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -840,7 +840,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - mux.Handle("GET", pattern_Query_Project_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -849,18 +849,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Project_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Project_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProjectAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetMainnetAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -869,18 +869,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ProjectAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetMainnetAccount_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ProjectAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetMainnetAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProjectChains_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListMainnetAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -889,18 +889,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ProjectChains_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListMainnetAccount_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ProjectChains_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListMainnetAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_SpecialAllocationsBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -909,18 +909,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_SpecialAllocationsBalance_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetProject_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_SpecialAllocationsBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetProject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MainnetAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -929,18 +929,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_MainnetAccount_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListProject_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_MainnetAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListProject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MainnetAccountAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetProjectChains_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -949,18 +949,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_MainnetAccountAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetProjectChains_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_MainnetAccountAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetProjectChains_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MainnetAccountBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_SpecialAllocationsBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -969,18 +969,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_MainnetAccountBalance_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_SpecialAllocationsBalance_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_MainnetAccountBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_SpecialAllocationsBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_MainnetAccountBalanceAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_MainnetAccountBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -989,18 +989,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_MainnetAccountBalanceAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_MainnetAccountBalance_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_MainnetAccountBalanceAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_MainnetAccountBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListMainnetAccountBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1009,14 +1009,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListMainnetAccountBalance_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListMainnetAccountBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1044,45 +1044,45 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Project_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"tendermint", "spn", "project", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ignite", "network", "project", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ProjectAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 2}, []string{"tendermint", "spn", "project"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetMainnetAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"ignite", "network", "project", "mainnet_account", "projectID", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ProjectChains_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "project", "project_chains", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListMainnetAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "project", "mainnet_account", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_SpecialAllocationsBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "project", "special_allocations_balance", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetProject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"ignite", "network", "project", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_MainnetAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"tendermint", "spn", "project", "mainnet_account", "projectID", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListProject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 2}, []string{"ignite", "network", "project"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_MainnetAccountAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "project", "mainnet_account", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetProjectChains_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "project", "project_chains", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_MainnetAccountBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"tendermint", "spn", "project", "mainnet_account_balance", "projectID", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_SpecialAllocationsBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "project", "special_allocations_balance", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_MainnetAccountBalanceAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "project", "mainnet_account_balance", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_MainnetAccountBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"ignite", "network", "project", "mainnet_account_balance", "projectID", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "project", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListMainnetAccountBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "project", "list_mainnet_account_balance", "projectID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_TotalShares_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "project", "total_shares"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_TotalShares_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "project", "total_shares"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( - forward_Query_Project_0 = runtime.ForwardResponseMessage + forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_ProjectAll_0 = runtime.ForwardResponseMessage + forward_Query_GetMainnetAccount_0 = runtime.ForwardResponseMessage - forward_Query_ProjectChains_0 = runtime.ForwardResponseMessage + forward_Query_ListMainnetAccount_0 = runtime.ForwardResponseMessage - forward_Query_SpecialAllocationsBalance_0 = runtime.ForwardResponseMessage + forward_Query_GetProject_0 = runtime.ForwardResponseMessage - forward_Query_MainnetAccount_0 = runtime.ForwardResponseMessage + forward_Query_ListProject_0 = runtime.ForwardResponseMessage - forward_Query_MainnetAccountAll_0 = runtime.ForwardResponseMessage + forward_Query_GetProjectChains_0 = runtime.ForwardResponseMessage - forward_Query_MainnetAccountBalance_0 = runtime.ForwardResponseMessage + forward_Query_SpecialAllocationsBalance_0 = runtime.ForwardResponseMessage - forward_Query_MainnetAccountBalanceAll_0 = runtime.ForwardResponseMessage + forward_Query_MainnetAccountBalance_0 = runtime.ForwardResponseMessage - forward_Query_Params_0 = runtime.ForwardResponseMessage + forward_Query_ListMainnetAccountBalance_0 = runtime.ForwardResponseMessage forward_Query_TotalShares_0 = runtime.ForwardResponseMessage ) diff --git a/x/project/types/share_vesting_options_test.go b/x/project/types/share_vesting_options_test.go index a9ba6909..0674edc4 100644 --- a/x/project/types/share_vesting_options_test.go +++ b/x/project/types/share_vesting_options_test.go @@ -8,9 +8,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - tc "github.com/tendermint/spn/testutil/constructor" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" + tc "github.com/ignite/network/testutil/constructor" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/types" ) func TestNewDelayedVesting(t *testing.T) { @@ -22,7 +22,7 @@ func TestNewDelayedVesting(t *testing.T) { vestingOptions := types.NewShareDelayedVesting(totalShares, vesting, endTime) delayedVesting := vestingOptions.GetDelayedVesting() require.NotNil(t, delayedVesting) - require.True(t, sdk.Coins(vesting).IsEqual(sdk.Coins(delayedVesting.Vesting))) + require.True(t, sdk.Coins(vesting).Equal(sdk.Coins(delayedVesting.Vesting))) require.EqualValues(t, endTime, delayedVesting.EndTime) }) } diff --git a/x/project/types/shares.go b/x/project/types/shares.go index 27b93280..7a78de1a 100644 --- a/x/project/types/shares.go +++ b/x/project/types/shares.go @@ -55,7 +55,7 @@ func CheckShares(shares Shares) error { // IsEqualShares returns true if the two sets of Shares have the same value func IsEqualShares(shares, newShares Shares) bool { - return sdk.Coins(shares).IsEqual(sdk.Coins(newShares)) + return sdk.Coins(shares).Equal(sdk.Coins(newShares)) } // IncreaseShares increases the number of shares diff --git a/x/project/types/shares_test.go b/x/project/types/shares_test.go index 51143886..19405a5f 100644 --- a/x/project/types/shares_test.go +++ b/x/project/types/shares_test.go @@ -8,10 +8,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - spntypes "github.com/tendermint/spn/pkg/types" - tc "github.com/tendermint/spn/testutil/constructor" - "github.com/tendermint/spn/testutil/sample" - project "github.com/tendermint/spn/x/project/types" + networktypes "github.com/ignite/network/pkg/types" + tc "github.com/ignite/network/testutil/constructor" + "github.com/ignite/network/testutil/sample" + project "github.com/ignite/network/x/project/types" ) var ( @@ -218,24 +218,24 @@ func TestIsEqualShares(t *testing.T) { { name: "should be equal shares", args: args{ - share1: tc.Shares(t, fmt.Sprintf("%dfoo,101bar", spntypes.TotalShareNumber)), - share2: tc.Shares(t, fmt.Sprintf("%dfoo,101bar", spntypes.TotalShareNumber)), + share1: tc.Shares(t, fmt.Sprintf("%dfoo,101bar", networktypes.TotalShareNumber)), + share2: tc.Shares(t, fmt.Sprintf("%dfoo,101bar", networktypes.TotalShareNumber)), }, want: true, }, { name: "should be not equal values", args: args{ - share1: tc.Shares(t, fmt.Sprintf("%dfoo,10bar", spntypes.TotalShareNumber)), - share2: tc.Shares(t, fmt.Sprintf("%dfoo,101bar", spntypes.TotalShareNumber)), + share1: tc.Shares(t, fmt.Sprintf("%dfoo,10bar", networktypes.TotalShareNumber)), + share2: tc.Shares(t, fmt.Sprintf("%dfoo,101bar", networktypes.TotalShareNumber)), }, want: false, }, { name: "should be false with invalid coin number between sets", args: args{ - share1: tc.Shares(t, fmt.Sprintf("%dfoo,10bar", spntypes.TotalShareNumber)), - share2: tc.Shares(t, fmt.Sprintf("%dfoo", spntypes.TotalShareNumber)), + share1: tc.Shares(t, fmt.Sprintf("%dfoo,10bar", networktypes.TotalShareNumber)), + share2: tc.Shares(t, fmt.Sprintf("%dfoo", networktypes.TotalShareNumber)), }, want: false, }, @@ -498,7 +498,7 @@ func TestShares_CoinsFromTotalSupply(t *testing.T) { require.Error(t, err) } else { require.NoError(t, err) - require.True(t, coins.IsEqual(tt.expected), + require.True(t, coins.Equal(tt.expected), "%s should be %s", coins.String(), tt.expected.String(), diff --git a/x/project/types/special_allocations.pb.go b/x/project/types/special_allocations.pb.go index 91ad2224..a4d037bf 100644 --- a/x/project/types/special_allocations.pb.go +++ b/x/project/types/special_allocations.pb.go @@ -1,12 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/special_allocations.proto +// source: network/project/v1/special_allocations.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -34,7 +36,7 @@ func (m *SpecialAllocations) Reset() { *m = SpecialAllocations{} } func (m *SpecialAllocations) String() string { return proto.CompactTextString(m) } func (*SpecialAllocations) ProtoMessage() {} func (*SpecialAllocations) Descriptor() ([]byte, []int) { - return fileDescriptor_2b1f4826f7237cca, []int{0} + return fileDescriptor_852078d75dac502a, []int{0} } func (m *SpecialAllocations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -78,34 +80,37 @@ func (m *SpecialAllocations) GetClaimableAirdrop() Shares { } func init() { - proto.RegisterType((*SpecialAllocations)(nil), "spn.project.SpecialAllocations") + proto.RegisterType((*SpecialAllocations)(nil), "network.project.v1.SpecialAllocations") } func init() { - proto.RegisterFile("spn/project/special_allocations.proto", fileDescriptor_2b1f4826f7237cca) + proto.RegisterFile("network/project/v1/special_allocations.proto", fileDescriptor_852078d75dac502a) } -var fileDescriptor_2b1f4826f7237cca = []byte{ - // 298 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x91, 0xbf, 0x4e, 0xc3, 0x30, - 0x10, 0x87, 0xe3, 0x22, 0x75, 0x48, 0x17, 0x14, 0x18, 0x4a, 0x07, 0x17, 0x21, 0x21, 0x60, 0xc0, - 0x56, 0x61, 0x62, 0x6c, 0xcb, 0x13, 0xd0, 0x8d, 0x05, 0xd9, 0xae, 0x95, 0x1a, 0x12, 0x9f, 0xe5, - 0x73, 0x11, 0x6c, 0x4c, 0xcc, 0x3c, 0x02, 0x33, 0x4f, 0xd2, 0xb1, 0x23, 0x53, 0x41, 0xcd, 0x5b, - 0x30, 0xa1, 0xfc, 0x11, 0x20, 0xc1, 0xca, 0x64, 0xcb, 0x77, 0xfe, 0xbe, 0xd3, 0xfd, 0xe2, 0x7d, - 0x74, 0x96, 0x3b, 0x0f, 0xd7, 0x5a, 0x05, 0x8e, 0x4e, 0x2b, 0x23, 0xb2, 0x2b, 0x91, 0x65, 0xa0, - 0x44, 0x30, 0x60, 0x91, 0x39, 0x0f, 0x01, 0x92, 0x0e, 0x3a, 0xcb, 0x9a, 0xb6, 0xde, 0x76, 0x0a, - 0x29, 0x54, 0xef, 0xbc, 0xbc, 0xd5, 0x2d, 0x3d, 0xaa, 0x00, 0x73, 0x40, 0x2e, 0x05, 0x6a, 0x7e, - 0x3b, 0x90, 0x3a, 0x88, 0x01, 0x57, 0x60, 0x6c, 0x5d, 0xdf, 0x7b, 0x6e, 0xc5, 0xc9, 0xa4, 0x16, - 0x0c, 0xbf, 0xf9, 0xc9, 0x23, 0x89, 0xb7, 0x52, 0x6d, 0x35, 0x1a, 0x3c, 0x37, 0x18, 0xbc, 0x91, - 0xf3, 0xb2, 0xd0, 0x25, 0xbb, 0x1b, 0x87, 0x9d, 0x93, 0x1d, 0x56, 0x53, 0x59, 0x49, 0x65, 0x0d, - 0x95, 0x8d, 0xc1, 0xd8, 0xd1, 0xd9, 0x62, 0xd5, 0x8f, 0x3e, 0x56, 0xfd, 0x83, 0xd4, 0x84, 0xd9, - 0x5c, 0x32, 0x05, 0x39, 0x6f, 0x46, 0xa8, 0x8f, 0x63, 0x9c, 0xde, 0xf0, 0x70, 0xef, 0x34, 0x56, - 0x1f, 0x5e, 0xde, 0xfa, 0xed, 0xc9, 0x4c, 0x78, 0x8d, 0x17, 0x7f, 0x09, 0x93, 0x07, 0x12, 0x6f, - 0xaa, 0x4c, 0x98, 0x5c, 0xc8, 0x4c, 0x0f, 0x8d, 0x9f, 0x7a, 0x70, 0xdd, 0xd6, 0x3f, 0x4e, 0xf1, - 0xcb, 0x36, 0x1a, 0x2f, 0xd6, 0x94, 0x2c, 0xd7, 0x94, 0xbc, 0xaf, 0x29, 0x79, 0x2a, 0x68, 0xb4, - 0x2c, 0x68, 0xf4, 0x5a, 0xd0, 0xe8, 0xf2, 0xe8, 0x07, 0x3e, 0x68, 0x3b, 0xd5, 0x3e, 0x37, 0xb6, - 0x0c, 0xcc, 0xf2, 0xbb, 0xaf, 0xf8, 0x2a, 0x8b, 0x6c, 0x57, 0xeb, 0x3e, 0xfd, 0x0c, 0x00, 0x00, - 0xff, 0xff, 0x57, 0xfb, 0x53, 0x10, 0xda, 0x01, 0x00, 0x00, +var fileDescriptor_852078d75dac502a = []byte{ + // 343 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x92, 0xbf, 0x4e, 0xc3, 0x30, + 0x10, 0xc6, 0x93, 0x22, 0x75, 0x08, 0x0c, 0x10, 0x18, 0xda, 0x0e, 0x2e, 0x62, 0x01, 0x2a, 0xb0, + 0x15, 0x78, 0x82, 0xb6, 0xec, 0x48, 0x74, 0x63, 0xa9, 0x1c, 0xd7, 0x4a, 0x4d, 0x13, 0x5f, 0x64, + 0xbb, 0x85, 0xbe, 0x05, 0x13, 0x03, 0xe2, 0x01, 0x10, 0x53, 0x1f, 0xa3, 0x03, 0x43, 0x47, 0xa6, + 0x82, 0xda, 0xa1, 0xef, 0xc0, 0x84, 0x92, 0x98, 0x3f, 0x12, 0xcc, 0x2c, 0xb6, 0xef, 0xbe, 0xcf, + 0xbe, 0x9f, 0x75, 0xe7, 0x1d, 0x49, 0x6e, 0xae, 0x41, 0x0d, 0x48, 0xaa, 0xe0, 0x8a, 0x33, 0x43, + 0x46, 0x01, 0xd1, 0x29, 0x67, 0x82, 0xc6, 0x5d, 0x1a, 0xc7, 0xc0, 0xa8, 0x11, 0x20, 0x35, 0x4e, + 0x15, 0x18, 0xf0, 0x7d, 0xeb, 0xc6, 0xd6, 0x8d, 0x47, 0x41, 0x6d, 0x8b, 0x26, 0x42, 0x02, 0xc9, + 0xd7, 0xc2, 0x56, 0x43, 0x0c, 0x74, 0x02, 0x9a, 0x84, 0x54, 0x73, 0x32, 0x0a, 0x42, 0x6e, 0x68, + 0x40, 0x18, 0x08, 0x69, 0xf5, 0x6a, 0xa1, 0x77, 0xf3, 0x88, 0x14, 0x81, 0x95, 0x76, 0x22, 0x88, + 0xa0, 0xc8, 0x67, 0xa7, 0x22, 0xbb, 0xf7, 0x5c, 0xf2, 0xfc, 0x4e, 0x41, 0xd5, 0xfc, 0x86, 0xf2, + 0x1f, 0x5c, 0x6f, 0x3b, 0xe2, 0x92, 0x6b, 0xa1, 0xcf, 0x84, 0x36, 0x4a, 0x84, 0xc3, 0x4c, 0xa8, + 0xb8, 0xbb, 0x6b, 0x07, 0xeb, 0x27, 0x55, 0x6c, 0x5f, 0xce, 0x30, 0xb0, 0xc5, 0xc0, 0x6d, 0x10, + 0xb2, 0x75, 0x3e, 0x9d, 0xd7, 0x9d, 0xf7, 0x79, 0x7d, 0x3f, 0x12, 0xa6, 0x3f, 0x0c, 0x31, 0x83, + 0xc4, 0x62, 0xd8, 0xed, 0x58, 0xf7, 0x06, 0xc4, 0x8c, 0x53, 0xae, 0xf3, 0x0b, 0x4f, 0xaf, 0xf5, + 0x72, 0xa7, 0x4f, 0x15, 0xd7, 0xf7, 0xab, 0x49, 0x63, 0x23, 0xe6, 0x11, 0x65, 0xe3, 0x6e, 0xf6, + 0x23, 0xfd, 0xb8, 0x9a, 0x34, 0xdc, 0x8b, 0xbf, 0x30, 0xfc, 0x3b, 0xd7, 0xdb, 0x64, 0x31, 0x15, + 0x09, 0x0d, 0x63, 0xde, 0x14, 0xaa, 0xa7, 0x20, 0xad, 0x94, 0xfe, 0x9d, 0xed, 0x17, 0x43, 0xab, + 0x3d, 0x5d, 0x20, 0x77, 0xb6, 0x40, 0xee, 0xdb, 0x02, 0xb9, 0xb7, 0x4b, 0xe4, 0xcc, 0x96, 0xc8, + 0x79, 0x59, 0x22, 0xe7, 0xf2, 0xf0, 0x47, 0x51, 0x11, 0x49, 0x61, 0x38, 0xf9, 0x1c, 0x90, 0x9b, + 0xaf, 0x11, 0xc9, 0x6b, 0x87, 0xe5, 0xbc, 0x35, 0xa7, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x4c, + 0xe5, 0xa7, 0xae, 0x42, 0x02, 0x00, 0x00, } func (m *SpecialAllocations) Marshal() (dAtA []byte, err error) { diff --git a/x/project/types/special_allocations_test.go b/x/project/types/special_allocations_test.go index de2146c0..490b4a81 100644 --- a/x/project/types/special_allocations_test.go +++ b/x/project/types/special_allocations_test.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/project/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/project/types" ) func TestNewSpecialAllocation(t *testing.T) { diff --git a/x/project/types/total_supply.go b/x/project/types/total_supply.go index 6242288f..8f46cd42 100644 --- a/x/project/types/total_supply.go +++ b/x/project/types/total_supply.go @@ -74,3 +74,13 @@ func (sr TotalSupplyRange) ValidateBasic() error { return nil } + +func (sr *TotalSupplyRange) Equal(cmp *TotalSupplyRange) bool { + switch { + case !sr.MinTotalSupply.Equal(cmp.MinTotalSupply): + return false + case !sr.MaxTotalSupply.Equal(cmp.MaxTotalSupply): + return false + } + return true +} diff --git a/x/project/types/total_supply_test.go b/x/project/types/total_supply_test.go index ff9fc9c4..887da87e 100644 --- a/x/project/types/total_supply_test.go +++ b/x/project/types/total_supply_test.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - tc "github.com/tendermint/spn/testutil/constructor" - project "github.com/tendermint/spn/x/project/types" + tc "github.com/ignite/network/testutil/constructor" + project "github.com/ignite/network/x/project/types" ) func TestUpdateTotalSupply(t *testing.T) { @@ -52,7 +52,7 @@ func TestUpdateTotalSupply(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { newCoins := project.UpdateTotalSupply(tt.previousCoins, tt.updatedCoins) - require.True(t, newCoins.IsEqual(tt.wantedCoins)) + require.True(t, newCoins.Equal(tt.wantedCoins)) }) } } diff --git a/x/project/types/tx.pb.go b/x/project/types/tx.pb.go index 7f29ceca..3c455241 100644 --- a/x/project/types/tx.pb.go +++ b/x/project/types/tx.pb.go @@ -1,13 +1,16 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/tx.proto +// source: network/project/v1/tx.proto package types import ( context "context" fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -30,6 +33,99 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_13d45921548d5494, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_13d45921548d5494, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + type MsgCreateProject struct { Coordinator string `protobuf:"bytes,1,opt,name=coordinator,proto3" json:"coordinator,omitempty"` ProjectName string `protobuf:"bytes,2,opt,name=projectName,proto3" json:"projectName,omitempty"` @@ -41,7 +137,7 @@ func (m *MsgCreateProject) Reset() { *m = MsgCreateProject{} } func (m *MsgCreateProject) String() string { return proto.CompactTextString(m) } func (*MsgCreateProject) ProtoMessage() {} func (*MsgCreateProject) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{0} + return fileDescriptor_13d45921548d5494, []int{2} } func (m *MsgCreateProject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -106,7 +202,7 @@ func (m *MsgCreateProjectResponse) Reset() { *m = MsgCreateProjectRespon func (m *MsgCreateProjectResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateProjectResponse) ProtoMessage() {} func (*MsgCreateProjectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{1} + return fileDescriptor_13d45921548d5494, []int{3} } func (m *MsgCreateProjectResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -153,7 +249,7 @@ func (m *MsgEditProject) Reset() { *m = MsgEditProject{} } func (m *MsgEditProject) String() string { return proto.CompactTextString(m) } func (*MsgEditProject) ProtoMessage() {} func (*MsgEditProject) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{2} + return fileDescriptor_13d45921548d5494, []int{4} } func (m *MsgEditProject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -217,7 +313,7 @@ func (m *MsgEditProjectResponse) Reset() { *m = MsgEditProjectResponse{} func (m *MsgEditProjectResponse) String() string { return proto.CompactTextString(m) } func (*MsgEditProjectResponse) ProtoMessage() {} func (*MsgEditProjectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{3} + return fileDescriptor_13d45921548d5494, []int{5} } func (m *MsgEditProjectResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -256,7 +352,7 @@ func (m *MsgUpdateTotalSupply) Reset() { *m = MsgUpdateTotalSupply{} } func (m *MsgUpdateTotalSupply) String() string { return proto.CompactTextString(m) } func (*MsgUpdateTotalSupply) ProtoMessage() {} func (*MsgUpdateTotalSupply) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{4} + return fileDescriptor_13d45921548d5494, []int{6} } func (m *MsgUpdateTotalSupply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -313,7 +409,7 @@ func (m *MsgUpdateTotalSupplyResponse) Reset() { *m = MsgUpdateTotalSupp func (m *MsgUpdateTotalSupplyResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateTotalSupplyResponse) ProtoMessage() {} func (*MsgUpdateTotalSupplyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{5} + return fileDescriptor_13d45921548d5494, []int{7} } func (m *MsgUpdateTotalSupplyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -352,7 +448,7 @@ func (m *MsgUpdateSpecialAllocations) Reset() { *m = MsgUpdateSpecialAll func (m *MsgUpdateSpecialAllocations) String() string { return proto.CompactTextString(m) } func (*MsgUpdateSpecialAllocations) ProtoMessage() {} func (*MsgUpdateSpecialAllocations) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{6} + return fileDescriptor_13d45921548d5494, []int{8} } func (m *MsgUpdateSpecialAllocations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -409,7 +505,7 @@ func (m *MsgUpdateSpecialAllocationsResponse) Reset() { *m = MsgUpdateSp func (m *MsgUpdateSpecialAllocationsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateSpecialAllocationsResponse) ProtoMessage() {} func (*MsgUpdateSpecialAllocationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{7} + return fileDescriptor_13d45921548d5494, []int{9} } func (m *MsgUpdateSpecialAllocationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -450,7 +546,7 @@ func (m *MsgInitializeMainnet) Reset() { *m = MsgInitializeMainnet{} } func (m *MsgInitializeMainnet) String() string { return proto.CompactTextString(m) } func (*MsgInitializeMainnet) ProtoMessage() {} func (*MsgInitializeMainnet) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{8} + return fileDescriptor_13d45921548d5494, []int{10} } func (m *MsgInitializeMainnet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -522,7 +618,7 @@ func (m *MsgInitializeMainnetResponse) Reset() { *m = MsgInitializeMainn func (m *MsgInitializeMainnetResponse) String() string { return proto.CompactTextString(m) } func (*MsgInitializeMainnetResponse) ProtoMessage() {} func (*MsgInitializeMainnetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{9} + return fileDescriptor_13d45921548d5494, []int{11} } func (m *MsgInitializeMainnetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -568,7 +664,7 @@ func (m *MsgMintVouchers) Reset() { *m = MsgMintVouchers{} } func (m *MsgMintVouchers) String() string { return proto.CompactTextString(m) } func (*MsgMintVouchers) ProtoMessage() {} func (*MsgMintVouchers) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{10} + return fileDescriptor_13d45921548d5494, []int{12} } func (m *MsgMintVouchers) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -625,7 +721,7 @@ func (m *MsgMintVouchersResponse) Reset() { *m = MsgMintVouchersResponse func (m *MsgMintVouchersResponse) String() string { return proto.CompactTextString(m) } func (*MsgMintVouchersResponse) ProtoMessage() {} func (*MsgMintVouchersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{11} + return fileDescriptor_13d45921548d5494, []int{13} } func (m *MsgMintVouchersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -664,7 +760,7 @@ func (m *MsgBurnVouchers) Reset() { *m = MsgBurnVouchers{} } func (m *MsgBurnVouchers) String() string { return proto.CompactTextString(m) } func (*MsgBurnVouchers) ProtoMessage() {} func (*MsgBurnVouchers) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{12} + return fileDescriptor_13d45921548d5494, []int{14} } func (m *MsgBurnVouchers) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -721,7 +817,7 @@ func (m *MsgBurnVouchersResponse) Reset() { *m = MsgBurnVouchersResponse func (m *MsgBurnVouchersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBurnVouchersResponse) ProtoMessage() {} func (*MsgBurnVouchersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{13} + return fileDescriptor_13d45921548d5494, []int{15} } func (m *MsgBurnVouchersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -761,7 +857,7 @@ func (m *MsgRedeemVouchers) Reset() { *m = MsgRedeemVouchers{} } func (m *MsgRedeemVouchers) String() string { return proto.CompactTextString(m) } func (*MsgRedeemVouchers) ProtoMessage() {} func (*MsgRedeemVouchers) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{14} + return fileDescriptor_13d45921548d5494, []int{16} } func (m *MsgRedeemVouchers) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -825,7 +921,7 @@ func (m *MsgRedeemVouchersResponse) Reset() { *m = MsgRedeemVouchersResp func (m *MsgRedeemVouchersResponse) String() string { return proto.CompactTextString(m) } func (*MsgRedeemVouchersResponse) ProtoMessage() {} func (*MsgRedeemVouchersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{15} + return fileDescriptor_13d45921548d5494, []int{17} } func (m *MsgRedeemVouchersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -857,14 +953,14 @@ var xxx_messageInfo_MsgRedeemVouchersResponse proto.InternalMessageInfo type MsgUnredeemVouchers struct { Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` ProjectID uint64 `protobuf:"varint,2,opt,name=projectID,proto3" json:"projectID,omitempty"` - Shares Shares `protobuf:"bytes,4,rep,name=shares,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=Shares" json:"shares"` + Shares Shares `protobuf:"bytes,3,rep,name=shares,proto3,casttype=github.com/cosmos/cosmos-sdk/types.Coin,castrepeated=Shares" json:"shares"` } func (m *MsgUnredeemVouchers) Reset() { *m = MsgUnredeemVouchers{} } func (m *MsgUnredeemVouchers) String() string { return proto.CompactTextString(m) } func (*MsgUnredeemVouchers) ProtoMessage() {} func (*MsgUnredeemVouchers) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{16} + return fileDescriptor_13d45921548d5494, []int{18} } func (m *MsgUnredeemVouchers) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -921,7 +1017,7 @@ func (m *MsgUnredeemVouchersResponse) Reset() { *m = MsgUnredeemVouchers func (m *MsgUnredeemVouchersResponse) String() string { return proto.CompactTextString(m) } func (*MsgUnredeemVouchersResponse) ProtoMessage() {} func (*MsgUnredeemVouchersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fad83f62571a1808, []int{17} + return fileDescriptor_13d45921548d5494, []int{19} } func (m *MsgUnredeemVouchersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -951,86 +1047,101 @@ func (m *MsgUnredeemVouchersResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUnredeemVouchersResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgCreateProject)(nil), "spn.project.MsgCreateProject") - proto.RegisterType((*MsgCreateProjectResponse)(nil), "spn.project.MsgCreateProjectResponse") - proto.RegisterType((*MsgEditProject)(nil), "spn.project.MsgEditProject") - proto.RegisterType((*MsgEditProjectResponse)(nil), "spn.project.MsgEditProjectResponse") - proto.RegisterType((*MsgUpdateTotalSupply)(nil), "spn.project.MsgUpdateTotalSupply") - proto.RegisterType((*MsgUpdateTotalSupplyResponse)(nil), "spn.project.MsgUpdateTotalSupplyResponse") - proto.RegisterType((*MsgUpdateSpecialAllocations)(nil), "spn.project.MsgUpdateSpecialAllocations") - proto.RegisterType((*MsgUpdateSpecialAllocationsResponse)(nil), "spn.project.MsgUpdateSpecialAllocationsResponse") - proto.RegisterType((*MsgInitializeMainnet)(nil), "spn.project.MsgInitializeMainnet") - proto.RegisterType((*MsgInitializeMainnetResponse)(nil), "spn.project.MsgInitializeMainnetResponse") - proto.RegisterType((*MsgMintVouchers)(nil), "spn.project.MsgMintVouchers") - proto.RegisterType((*MsgMintVouchersResponse)(nil), "spn.project.MsgMintVouchersResponse") - proto.RegisterType((*MsgBurnVouchers)(nil), "spn.project.MsgBurnVouchers") - proto.RegisterType((*MsgBurnVouchersResponse)(nil), "spn.project.MsgBurnVouchersResponse") - proto.RegisterType((*MsgRedeemVouchers)(nil), "spn.project.MsgRedeemVouchers") - proto.RegisterType((*MsgRedeemVouchersResponse)(nil), "spn.project.MsgRedeemVouchersResponse") - proto.RegisterType((*MsgUnredeemVouchers)(nil), "spn.project.MsgUnredeemVouchers") - proto.RegisterType((*MsgUnredeemVouchersResponse)(nil), "spn.project.MsgUnredeemVouchersResponse") -} - -func init() { proto.RegisterFile("spn/project/tx.proto", fileDescriptor_fad83f62571a1808) } - -var fileDescriptor_fad83f62571a1808 = []byte{ - // 888 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4f, 0x8f, 0xdb, 0x44, - 0x14, 0x5f, 0x6f, 0x42, 0x68, 0x5e, 0xca, 0xd2, 0x35, 0xab, 0xe2, 0x78, 0x53, 0x27, 0xb8, 0x6c, - 0x49, 0x0f, 0xd8, 0x74, 0xb9, 0x80, 0xc4, 0x85, 0xa4, 0x48, 0xac, 0x84, 0x01, 0x79, 0x09, 0x42, - 0x20, 0x81, 0x26, 0xce, 0xc8, 0x31, 0x24, 0x33, 0x96, 0x67, 0x12, 0xb5, 0x9c, 0xf8, 0x02, 0x48, - 0x88, 0x13, 0x1f, 0x80, 0x13, 0x67, 0x2e, 0x48, 0x48, 0x5c, 0x7b, 0x41, 0xea, 0x91, 0x03, 0x2a, - 0x68, 0xf7, 0x4b, 0x20, 0x24, 0x24, 0xe4, 0x3f, 0x71, 0xc6, 0x9e, 0x34, 0x59, 0x14, 0xc4, 0x72, - 0xda, 0xcc, 0x7b, 0xbf, 0xf9, 0xcd, 0xfb, 0xbd, 0x79, 0xef, 0xcd, 0x1a, 0x0e, 0x58, 0x48, 0xec, - 0x30, 0xa2, 0x9f, 0x62, 0x8f, 0xdb, 0xfc, 0x9e, 0x15, 0x46, 0x94, 0x53, 0xb5, 0xc1, 0x42, 0x62, - 0x65, 0x56, 0xfd, 0xc0, 0xa7, 0x3e, 0x4d, 0xec, 0x76, 0xfc, 0x2b, 0x85, 0xe8, 0x86, 0x47, 0xd9, - 0x94, 0x32, 0x7b, 0x88, 0x18, 0xb6, 0xe7, 0x77, 0x86, 0x98, 0xa3, 0x3b, 0xb6, 0x47, 0x03, 0x92, - 0xf9, 0x9b, 0x22, 0xf1, 0x1c, 0x33, 0x1e, 0x10, 0x3f, 0x73, 0x1d, 0x89, 0x2e, 0x16, 0x62, 0x2f, - 0x40, 0x93, 0x4f, 0xd0, 0x64, 0x42, 0x3d, 0xc4, 0x03, 0x4a, 0x58, 0x0a, 0x33, 0xbf, 0xdc, 0x85, - 0x6b, 0x0e, 0xf3, 0xfb, 0x11, 0x46, 0x1c, 0xbf, 0x9b, 0xc2, 0xd5, 0x0e, 0x34, 0x3c, 0x4a, 0xa3, - 0x51, 0x40, 0x10, 0xa7, 0x91, 0xa6, 0x74, 0x94, 0x6e, 0xdd, 0x15, 0x4d, 0x31, 0x22, 0xe3, 0x7e, - 0x1b, 0x4d, 0xb1, 0xb6, 0x9b, 0x22, 0x04, 0x93, 0xfa, 0x8d, 0x02, 0x0d, 0x4e, 0x39, 0x9a, 0x9c, - 0xce, 0xc2, 0x70, 0x72, 0x5f, 0xab, 0x74, 0x2a, 0xdd, 0xc6, 0x71, 0xd3, 0x4a, 0x15, 0x59, 0xb1, - 0x22, 0x2b, 0x53, 0x64, 0xf5, 0x69, 0x40, 0x7a, 0x1f, 0x3d, 0x78, 0xd4, 0xde, 0xf9, 0xf3, 0x51, - 0xfb, 0x05, 0x3f, 0xe0, 0xe3, 0xd9, 0xd0, 0xf2, 0xe8, 0xd4, 0xce, 0xe4, 0xa7, 0x7f, 0x5e, 0x64, - 0xa3, 0xcf, 0x6c, 0x7e, 0x3f, 0xc4, 0x2c, 0xd9, 0xf0, 0xdd, 0x6f, 0xed, 0xee, 0x05, 0xa1, 0xcc, - 0x15, 0x43, 0x51, 0x75, 0xb8, 0x32, 0xc5, 0x1c, 0x8d, 0x10, 0x47, 0x5a, 0xb5, 0xa3, 0x74, 0xaf, - 0xba, 0xf9, 0xda, 0x7c, 0x05, 0xb4, 0x72, 0x3a, 0x5c, 0xcc, 0x42, 0x4a, 0x18, 0x56, 0x5b, 0x50, - 0xcf, 0x14, 0x9e, 0xdc, 0x4d, 0x92, 0x52, 0x75, 0x97, 0x06, 0xf3, 0x0b, 0x05, 0xf6, 0x1c, 0xe6, - 0xbf, 0x31, 0x0a, 0xf8, 0xc5, 0xf3, 0x58, 0xa0, 0xdc, 0x2d, 0x51, 0xaa, 0x2a, 0x54, 0x49, 0x9c, - 0xde, 0x4a, 0xb2, 0x31, 0xf9, 0xbd, 0x36, 0x78, 0x0d, 0xae, 0x17, 0x23, 0x58, 0x84, 0x6e, 0xfe, - 0xa5, 0xc0, 0x81, 0xc3, 0xfc, 0x41, 0x38, 0x42, 0x1c, 0xbf, 0x27, 0xe4, 0x62, 0xdb, 0x10, 0xbf, - 0x55, 0x60, 0x5f, 0xc8, 0x6d, 0x7a, 0xc0, 0x25, 0x5f, 0xb6, 0x1c, 0x90, 0x69, 0x40, 0x6b, 0x95, - 0xfc, 0x3c, 0x3f, 0xdf, 0x2b, 0x70, 0x98, 0x03, 0x4e, 0xd3, 0x6e, 0x79, 0x7d, 0xd9, 0x2c, 0x5b, - 0xa7, 0x69, 0x00, 0x2a, 0x93, 0x58, 0x93, 0x7b, 0x6d, 0x1c, 0xb7, 0x2d, 0x61, 0x10, 0x58, 0xf2, - 0xe1, 0xbd, 0x6a, 0x9c, 0x2c, 0x77, 0x05, 0x81, 0x79, 0x04, 0x37, 0xd7, 0x44, 0x9d, 0xab, 0xfb, - 0x31, 0xbd, 0xfd, 0x13, 0x12, 0xf0, 0x00, 0x4d, 0x82, 0xcf, 0xb1, 0x83, 0x02, 0x42, 0xf0, 0xf6, - 0x05, 0xda, 0x82, 0x3a, 0xa3, 0xb3, 0xc8, 0xc3, 0x03, 0xf7, 0xad, 0xac, 0x4a, 0x97, 0x06, 0xd5, - 0x00, 0x48, 0x17, 0x6f, 0x22, 0x36, 0x4e, 0x8a, 0xb5, 0xee, 0x0a, 0x16, 0xf5, 0x16, 0xec, 0x4d, - 0xd3, 0x40, 0xfa, 0x63, 0x14, 0x90, 0x93, 0xbb, 0xda, 0x13, 0x09, 0xa6, 0x64, 0x35, 0x5f, 0x4b, - 0x2e, 0x4f, 0x8a, 0x5e, 0xec, 0xcb, 0x6c, 0xc7, 0xb2, 0x2f, 0x73, 0x83, 0xf9, 0x93, 0x02, 0x4f, - 0x3b, 0xcc, 0x77, 0x02, 0xc2, 0xdf, 0xa7, 0x33, 0x6f, 0x8c, 0xa3, 0xed, 0xaf, 0x73, 0x02, 0x35, - 0x36, 0x46, 0x11, 0x66, 0x9b, 0x2b, 0xfd, 0xd5, 0x7f, 0x5e, 0xe9, 0xb5, 0xd3, 0x84, 0xdb, 0xcd, - 0xce, 0x30, 0x9b, 0xf0, 0x6c, 0x49, 0x40, 0x7e, 0xb3, 0xbf, 0xa6, 0xe2, 0x7a, 0xb3, 0x88, 0xe4, - 0xe2, 0xae, 0x43, 0x8d, 0x61, 0x32, 0xc2, 0x0b, 0x5d, 0xd9, 0x6a, 0x83, 0xa4, 0xaf, 0x15, 0xb8, - 0x32, 0xcf, 0x28, 0x2e, 0xb9, 0x7f, 0xf3, 0x38, 0x32, 0xe5, 0xa2, 0xba, 0x5c, 0xf9, 0x1f, 0x0a, - 0xec, 0x3b, 0xcc, 0x77, 0xf1, 0x08, 0xe3, 0xe9, 0x96, 0xda, 0x35, 0x78, 0x12, 0x79, 0x1e, 0x9d, - 0x11, 0x9e, 0x15, 0xf1, 0x62, 0x59, 0xcc, 0x4a, 0xf5, 0x7f, 0x92, 0x95, 0x43, 0x68, 0x4a, 0xca, - 0xf3, 0xbc, 0xfc, 0xa0, 0xc0, 0x33, 0xf1, 0x4c, 0x20, 0xd1, 0xbf, 0x91, 0x99, 0x65, 0xa1, 0x57, - 0xff, 0x83, 0x42, 0xbf, 0x91, 0x0e, 0xe1, 0x52, 0xe8, 0x0b, 0x69, 0xc7, 0x3f, 0xd7, 0xa0, 0xe2, - 0x30, 0x5f, 0x1d, 0xc0, 0x53, 0xc5, 0xff, 0x57, 0x6e, 0x14, 0x26, 0x68, 0xf9, 0xfd, 0xd6, 0x8f, - 0xd6, 0xba, 0xf3, 0x31, 0xf2, 0x0e, 0x34, 0xc4, 0xc7, 0xfb, 0xb0, 0xbc, 0x4b, 0x70, 0xea, 0x37, - 0xd7, 0x38, 0x73, 0x42, 0x04, 0xfb, 0xf2, 0x83, 0xfb, 0x5c, 0x79, 0xa7, 0x04, 0xd1, 0x6f, 0x6f, - 0x84, 0xe4, 0x47, 0xcc, 0x41, 0x7b, 0xec, 0x9b, 0xd5, 0x5d, 0x4d, 0x23, 0x23, 0xf5, 0x97, 0x2e, - 0x8a, 0x14, 0xa5, 0xc9, 0xaf, 0x89, 0x24, 0x4d, 0x82, 0xc8, 0xd2, 0x1e, 0x3f, 0xd5, 0x5d, 0xb8, - 0x5a, 0x98, 0xd9, 0xad, 0xf2, 0x56, 0xd1, 0xab, 0x3f, 0xbf, 0xce, 0x2b, 0x72, 0x16, 0x46, 0xa5, - 0xc4, 0x29, 0x7a, 0x65, 0xce, 0x55, 0x83, 0x48, 0xfd, 0x00, 0xf6, 0x4a, 0x43, 0xc8, 0x28, 0xef, - 0x2b, 0xfa, 0xf5, 0x5b, 0xeb, 0xfd, 0x39, 0xf3, 0xc7, 0x70, 0x4d, 0x6a, 0xe3, 0x8e, 0x74, 0x55, - 0x25, 0x84, 0xde, 0xdd, 0x84, 0x58, 0xf0, 0xf7, 0xfa, 0x0f, 0xce, 0x0c, 0xe5, 0xe1, 0x99, 0xa1, - 0xfc, 0x7e, 0x66, 0x28, 0x5f, 0x9d, 0x1b, 0x3b, 0x0f, 0xcf, 0x8d, 0x9d, 0x5f, 0xce, 0x8d, 0x9d, - 0x0f, 0x6f, 0x0b, 0x3d, 0xcc, 0x93, 0x39, 0x31, 0x0d, 0x48, 0xfc, 0x19, 0x41, 0xec, 0x7b, 0xcb, - 0x0f, 0x99, 0xb8, 0x95, 0x87, 0xb5, 0xe4, 0x3b, 0xe2, 0xe5, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, - 0xd8, 0x10, 0xde, 0xbb, 0xe4, 0x0c, 0x00, 0x00, + proto.RegisterType((*MsgUpdateParams)(nil), "network.project.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "network.project.v1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgCreateProject)(nil), "network.project.v1.MsgCreateProject") + proto.RegisterType((*MsgCreateProjectResponse)(nil), "network.project.v1.MsgCreateProjectResponse") + proto.RegisterType((*MsgEditProject)(nil), "network.project.v1.MsgEditProject") + proto.RegisterType((*MsgEditProjectResponse)(nil), "network.project.v1.MsgEditProjectResponse") + proto.RegisterType((*MsgUpdateTotalSupply)(nil), "network.project.v1.MsgUpdateTotalSupply") + proto.RegisterType((*MsgUpdateTotalSupplyResponse)(nil), "network.project.v1.MsgUpdateTotalSupplyResponse") + proto.RegisterType((*MsgUpdateSpecialAllocations)(nil), "network.project.v1.MsgUpdateSpecialAllocations") + proto.RegisterType((*MsgUpdateSpecialAllocationsResponse)(nil), "network.project.v1.MsgUpdateSpecialAllocationsResponse") + proto.RegisterType((*MsgInitializeMainnet)(nil), "network.project.v1.MsgInitializeMainnet") + proto.RegisterType((*MsgInitializeMainnetResponse)(nil), "network.project.v1.MsgInitializeMainnetResponse") + proto.RegisterType((*MsgMintVouchers)(nil), "network.project.v1.MsgMintVouchers") + proto.RegisterType((*MsgMintVouchersResponse)(nil), "network.project.v1.MsgMintVouchersResponse") + proto.RegisterType((*MsgBurnVouchers)(nil), "network.project.v1.MsgBurnVouchers") + proto.RegisterType((*MsgBurnVouchersResponse)(nil), "network.project.v1.MsgBurnVouchersResponse") + proto.RegisterType((*MsgRedeemVouchers)(nil), "network.project.v1.MsgRedeemVouchers") + proto.RegisterType((*MsgRedeemVouchersResponse)(nil), "network.project.v1.MsgRedeemVouchersResponse") + proto.RegisterType((*MsgUnredeemVouchers)(nil), "network.project.v1.MsgUnredeemVouchers") + proto.RegisterType((*MsgUnredeemVouchersResponse)(nil), "network.project.v1.MsgUnredeemVouchersResponse") +} + +func init() { proto.RegisterFile("network/project/v1/tx.proto", fileDescriptor_13d45921548d5494) } + +var fileDescriptor_13d45921548d5494 = []byte{ + // 1090 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0x3a, 0xae, 0xa9, 0x9f, 0x43, 0x48, 0x96, 0x88, 0x3a, 0x9b, 0xe0, 0x18, 0x97, 0xb6, + 0xc6, 0x34, 0xde, 0xc6, 0x20, 0x40, 0x11, 0x1c, 0xea, 0x14, 0x89, 0x48, 0x18, 0xd0, 0x86, 0x72, + 0x40, 0xa0, 0x74, 0xb2, 0x1e, 0xd6, 0x4b, 0xbd, 0x33, 0x66, 0x67, 0x1c, 0x1a, 0x4e, 0x28, 0xe2, + 0xc4, 0x89, 0x2b, 0x7c, 0x82, 0x0a, 0x21, 0x94, 0x03, 0x5c, 0x38, 0xc0, 0xb5, 0x37, 0x2a, 0x4e, + 0x9c, 0x0a, 0x4a, 0x0e, 0xe6, 0x1b, 0x20, 0x71, 0x42, 0xbb, 0x3b, 0x5e, 0xef, 0xdf, 0xd8, 0x91, + 0xb0, 0x14, 0x2e, 0xc9, 0xce, 0x9b, 0xdf, 0xfb, 0xf7, 0x9b, 0x37, 0x6f, 0x5e, 0x02, 0x2b, 0x04, + 0xf3, 0x4f, 0xa9, 0x7d, 0x57, 0xed, 0xd9, 0xf4, 0x63, 0xac, 0x73, 0x75, 0x7f, 0x43, 0xe5, 0xf7, + 0xea, 0x3d, 0x9b, 0x72, 0x2a, 0xcb, 0x62, 0xb3, 0x2e, 0x36, 0xeb, 0xfb, 0x1b, 0xca, 0x22, 0xb2, + 0x4c, 0x42, 0x55, 0xf7, 0xa7, 0x07, 0x53, 0x4a, 0x3a, 0x65, 0x16, 0x65, 0xea, 0x1e, 0x62, 0x58, + 0xdd, 0xdf, 0xd8, 0xc3, 0x1c, 0x6d, 0xa8, 0x3a, 0x35, 0x89, 0xd8, 0xbf, 0x24, 0xf6, 0x2d, 0x66, + 0x38, 0xe6, 0x2d, 0x66, 0x88, 0x8d, 0x65, 0x6f, 0x63, 0xd7, 0x5d, 0xa9, 0xde, 0x42, 0x6c, 0x2d, + 0x19, 0xd4, 0xa0, 0x9e, 0xdc, 0xf9, 0x12, 0xd2, 0xb5, 0x84, 0x68, 0x7b, 0xc8, 0x46, 0xd6, 0x50, + 0xed, 0x7a, 0x02, 0x80, 0xf5, 0xb0, 0x6e, 0xa2, 0xee, 0x2e, 0xea, 0x76, 0xa9, 0x8e, 0xb8, 0x49, + 0x89, 0x40, 0x57, 0x7e, 0x96, 0xe0, 0x89, 0x16, 0x33, 0x6e, 0xf7, 0xda, 0x88, 0xe3, 0x77, 0x5c, + 0x3b, 0xf2, 0x4b, 0x90, 0x47, 0x7d, 0xde, 0xa1, 0xb6, 0xc9, 0x0f, 0x8a, 0x52, 0x59, 0xaa, 0xe6, + 0x9b, 0xc5, 0xdf, 0x7e, 0x58, 0x5f, 0x12, 0xd1, 0xdd, 0x6c, 0xb7, 0x6d, 0xcc, 0xd8, 0x0e, 0xb7, + 0x4d, 0x62, 0x68, 0x23, 0xa8, 0xfc, 0x1a, 0xe4, 0xbc, 0x48, 0x8a, 0x99, 0xb2, 0x54, 0x2d, 0x34, + 0x94, 0x7a, 0x9c, 0xbc, 0xba, 0xe7, 0xa3, 0x99, 0x7f, 0xf0, 0x68, 0x6d, 0xe6, 0xfe, 0xe0, 0xa8, + 0x26, 0x69, 0x42, 0x69, 0xf3, 0xc5, 0xc3, 0xc1, 0x51, 0x6d, 0x64, 0xee, 0xcb, 0xc1, 0x51, 0xed, + 0x99, 0x61, 0x2e, 0xf7, 0xfc, 0x6c, 0x22, 0xc1, 0x56, 0x96, 0xe1, 0x52, 0x44, 0xa4, 0x61, 0xd6, + 0xa3, 0x84, 0xe1, 0xca, 0xaf, 0x19, 0x58, 0x68, 0x31, 0x63, 0xcb, 0xc6, 0xce, 0x9e, 0xa7, 0x2f, + 0x6f, 0x42, 0x41, 0xa7, 0xd4, 0x6e, 0x9b, 0x04, 0x71, 0x6a, 0x8f, 0x4d, 0x2f, 0x08, 0x96, 0xcb, + 0x50, 0x10, 0x61, 0xbc, 0x85, 0x2c, 0xec, 0x66, 0x99, 0xd7, 0x82, 0x22, 0xf9, 0x7b, 0x09, 0x0a, + 0x9c, 0x72, 0xd4, 0xdd, 0xe9, 0xf7, 0x7a, 0xdd, 0x83, 0xe2, 0x6c, 0x79, 0xb6, 0x5a, 0x68, 0x2c, + 0xd7, 0x85, 0x6d, 0xa7, 0x3c, 0xea, 0xa2, 0x3c, 0xea, 0x5b, 0xd4, 0x24, 0xcd, 0x4f, 0x1c, 0x1e, + 0xfe, 0x79, 0xb4, 0x76, 0xcd, 0x30, 0x79, 0xa7, 0xbf, 0x57, 0xd7, 0xa9, 0x25, 0xaa, 0x40, 0xfc, + 0x5a, 0x67, 0xed, 0xbb, 0x2a, 0x3f, 0xe8, 0x61, 0xe6, 0x2a, 0x7c, 0xfb, 0xc7, 0x5a, 0x75, 0x42, + 0x28, 0xfb, 0x66, 0x70, 0x54, 0x9b, 0xeb, 0x62, 0x03, 0xe9, 0x07, 0xbb, 0x4e, 0x2d, 0x32, 0x8f, + 0xef, 0x60, 0x80, 0xb2, 0x02, 0x17, 0x2d, 0xcc, 0x51, 0x1b, 0x71, 0x54, 0xcc, 0x96, 0xa5, 0xea, + 0x9c, 0xe6, 0xaf, 0x37, 0x17, 0x9c, 0x03, 0x09, 0x12, 0x50, 0x79, 0x05, 0x8a, 0x51, 0x42, 0x87, + 0x6c, 0xcb, 0xab, 0x90, 0x17, 0x4c, 0x6c, 0xdf, 0x72, 0x69, 0xcd, 0x6a, 0x23, 0x41, 0xe5, 0x3b, + 0x09, 0xe6, 0x5b, 0xcc, 0x78, 0xbd, 0x6d, 0xf2, 0xff, 0xe2, 0x24, 0x42, 0xce, 0x32, 0x11, 0x67, + 0xb2, 0x0c, 0x59, 0xe2, 0x1c, 0xd0, 0xac, 0x7b, 0x40, 0xee, 0xf7, 0x19, 0x13, 0x2d, 0xc2, 0x53, + 0xe1, 0x68, 0xfd, 0xa2, 0xfa, 0x25, 0x03, 0x4b, 0x7e, 0xc1, 0xbd, 0x1b, 0x60, 0x72, 0x7a, 0xe9, + 0xfc, 0x24, 0xc1, 0x62, 0xe0, 0xcc, 0x3c, 0xd7, 0xe7, 0xb2, 0xb4, 0xe2, 0x61, 0x26, 0x70, 0x5b, + 0x82, 0xd5, 0x24, 0x02, 0x7d, 0x86, 0x07, 0x12, 0xac, 0xf8, 0x80, 0x1d, 0xaf, 0x73, 0xdd, 0x1c, + 0x35, 0xae, 0x29, 0x12, 0xfd, 0x01, 0xc8, 0x2c, 0xe6, 0xcf, 0xad, 0xa2, 0x42, 0xe3, 0x6a, 0x52, + 0x33, 0x8b, 0x47, 0xd7, 0xcc, 0x3a, 0xac, 0x6b, 0x09, 0x76, 0x12, 0x98, 0xb8, 0x02, 0x97, 0x4f, + 0x49, 0xd4, 0x27, 0xe4, 0x2f, 0xc9, 0x2d, 0xb9, 0x6d, 0x62, 0x72, 0x13, 0x75, 0xcd, 0xcf, 0x70, + 0x0b, 0x99, 0x84, 0xe0, 0x69, 0xde, 0xa0, 0x55, 0xc8, 0x33, 0xda, 0xb7, 0x75, 0x7c, 0x5b, 0x7b, + 0x53, 0x5c, 0xa3, 0x91, 0x40, 0x2e, 0x01, 0x78, 0x8b, 0x37, 0x10, 0xeb, 0xb8, 0xb7, 0x29, 0xaf, + 0x05, 0x24, 0xf2, 0x55, 0x98, 0xb7, 0xbc, 0x10, 0xb7, 0x3a, 0xc8, 0x24, 0xdb, 0xb7, 0x8a, 0x17, + 0x5c, 0x4c, 0x44, 0x9a, 0xc0, 0xc8, 0xab, 0x6e, 0x6d, 0xc4, 0x32, 0x0d, 0x36, 0x19, 0x61, 0x63, + 0xd4, 0x64, 0x7c, 0x41, 0xe5, 0x30, 0xe3, 0x3e, 0x66, 0x2d, 0x93, 0xf0, 0xf7, 0x68, 0x5f, 0xef, + 0x60, 0x7b, 0x9a, 0xd5, 0x72, 0x28, 0x41, 0x8e, 0x75, 0x90, 0x8d, 0xd9, 0xf8, 0xbb, 0xf8, 0xf6, + 0xd9, 0xef, 0x62, 0x6e, 0xc7, 0xb5, 0x9d, 0x72, 0xd3, 0x84, 0xe7, 0x04, 0x0a, 0xbd, 0x07, 0x31, + 0xc8, 0x81, 0x5f, 0x48, 0x5f, 0x7b, 0xfc, 0x34, 0xfb, 0x36, 0xf1, 0xf9, 0xb9, 0x01, 0x39, 0x86, + 0x49, 0x1b, 0x8f, 0xa7, 0x46, 0xe0, 0xc6, 0xb0, 0x72, 0x5f, 0x82, 0x8b, 0xfb, 0xc2, 0xf8, 0xb9, + 0xec, 0x51, 0x7e, 0x74, 0x9b, 0x05, 0x87, 0x3b, 0x91, 0x95, 0xa0, 0x2d, 0x48, 0x4d, 0x70, 0x8e, + 0x58, 0x6c, 0x31, 0x43, 0xc3, 0x6d, 0x8c, 0xad, 0xa9, 0x11, 0xd7, 0x80, 0xc7, 0x90, 0xae, 0xd3, + 0x3e, 0xe1, 0xde, 0x85, 0x3b, 0xc5, 0xe0, 0x10, 0x18, 0x26, 0x3b, 0xfb, 0xff, 0x21, 0x7b, 0x05, + 0x96, 0x63, 0x84, 0xfa, 0x74, 0xff, 0x2d, 0xc1, 0x93, 0x4e, 0x5b, 0x24, 0xf6, 0x74, 0x09, 0x3f, + 0x17, 0xf7, 0x37, 0x44, 0xcb, 0xd3, 0xde, 0xc3, 0x17, 0x49, 0x7c, 0x48, 0x4c, 0xe3, 0xc7, 0x8b, + 0x30, 0xdb, 0x62, 0x86, 0x7c, 0x07, 0xe6, 0x42, 0xf3, 0xfa, 0xe5, 0xa4, 0xa7, 0x29, 0x32, 0x14, + 0x2b, 0xcf, 0x4f, 0x00, 0xf2, 0xdb, 0xac, 0x0e, 0x8f, 0x87, 0xa7, 0xe6, 0x67, 0x53, 0xb4, 0x43, + 0x28, 0xe5, 0xfa, 0x24, 0x28, 0xdf, 0xc9, 0x87, 0x50, 0x08, 0x8e, 0x83, 0x95, 0x14, 0xe5, 0x00, + 0x46, 0xa9, 0x8d, 0xc7, 0xf8, 0xe6, 0x29, 0x2c, 0xc6, 0x87, 0xb4, 0xea, 0xa9, 0x2c, 0x04, 0x90, + 0xca, 0x8d, 0x49, 0x91, 0xbe, 0xc3, 0x2f, 0x24, 0x28, 0xa6, 0x0e, 0x2d, 0xea, 0xa9, 0xe6, 0xe2, + 0x0a, 0xca, 0xcb, 0x67, 0x54, 0x08, 0xe6, 0x1d, 0x9f, 0x14, 0xd2, 0xf2, 0x8e, 0x21, 0x53, 0xf3, + 0x4e, 0x7f, 0x93, 0xef, 0xc0, 0x5c, 0xe8, 0xc5, 0x4d, 0x2b, 0xc7, 0x20, 0x28, 0xb5, 0x1c, 0x93, + 0xde, 0x2d, 0xc7, 0x43, 0xe8, 0xcd, 0x4a, 0xf3, 0x10, 0x04, 0xa5, 0x7a, 0x48, 0x6a, 0xf1, 0xf2, + 0x47, 0x30, 0x1f, 0x69, 0xef, 0x57, 0x52, 0xd4, 0xc3, 0x30, 0x65, 0x7d, 0x22, 0x98, 0xef, 0xa7, + 0x0b, 0x0b, 0xb1, 0xbe, 0x76, 0x2d, 0xed, 0xa4, 0x23, 0x40, 0x45, 0x9d, 0x10, 0x38, 0xf4, 0xa6, + 0x5c, 0xf8, 0xdc, 0xe9, 0x35, 0xcd, 0xad, 0x07, 0xc7, 0x25, 0xe9, 0xe1, 0x71, 0x49, 0xfa, 0xf3, + 0xb8, 0x24, 0x7d, 0x75, 0x52, 0x9a, 0x79, 0x78, 0x52, 0x9a, 0xf9, 0xfd, 0xa4, 0x34, 0xf3, 0xfe, + 0x73, 0x81, 0x76, 0x66, 0x1a, 0xc4, 0xe4, 0x58, 0x8d, 0xff, 0xc5, 0xed, 0x76, 0xb5, 0xbd, 0x9c, + 0xfb, 0xff, 0x82, 0x17, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xde, 0x23, 0xa1, 0x3a, 0x2e, 0x11, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1045,6 +1156,9 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) CreateProject(ctx context.Context, in *MsgCreateProject, opts ...grpc.CallOption) (*MsgCreateProjectResponse, error) EditProject(ctx context.Context, in *MsgEditProject, opts ...grpc.CallOption) (*MsgEditProjectResponse, error) UpdateTotalSupply(ctx context.Context, in *MsgUpdateTotalSupply, opts ...grpc.CallOption) (*MsgUpdateTotalSupplyResponse, error) @@ -1064,9 +1178,18 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) CreateProject(ctx context.Context, in *MsgCreateProject, opts ...grpc.CallOption) (*MsgCreateProjectResponse, error) { out := new(MsgCreateProjectResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/CreateProject", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/CreateProject", in, out, opts...) if err != nil { return nil, err } @@ -1075,7 +1198,7 @@ func (c *msgClient) CreateProject(ctx context.Context, in *MsgCreateProject, opt func (c *msgClient) EditProject(ctx context.Context, in *MsgEditProject, opts ...grpc.CallOption) (*MsgEditProjectResponse, error) { out := new(MsgEditProjectResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/EditProject", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/EditProject", in, out, opts...) if err != nil { return nil, err } @@ -1084,7 +1207,7 @@ func (c *msgClient) EditProject(ctx context.Context, in *MsgEditProject, opts .. func (c *msgClient) UpdateTotalSupply(ctx context.Context, in *MsgUpdateTotalSupply, opts ...grpc.CallOption) (*MsgUpdateTotalSupplyResponse, error) { out := new(MsgUpdateTotalSupplyResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/UpdateTotalSupply", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/UpdateTotalSupply", in, out, opts...) if err != nil { return nil, err } @@ -1093,7 +1216,7 @@ func (c *msgClient) UpdateTotalSupply(ctx context.Context, in *MsgUpdateTotalSup func (c *msgClient) UpdateSpecialAllocations(ctx context.Context, in *MsgUpdateSpecialAllocations, opts ...grpc.CallOption) (*MsgUpdateSpecialAllocationsResponse, error) { out := new(MsgUpdateSpecialAllocationsResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/UpdateSpecialAllocations", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/UpdateSpecialAllocations", in, out, opts...) if err != nil { return nil, err } @@ -1102,7 +1225,7 @@ func (c *msgClient) UpdateSpecialAllocations(ctx context.Context, in *MsgUpdateS func (c *msgClient) InitializeMainnet(ctx context.Context, in *MsgInitializeMainnet, opts ...grpc.CallOption) (*MsgInitializeMainnetResponse, error) { out := new(MsgInitializeMainnetResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/InitializeMainnet", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/InitializeMainnet", in, out, opts...) if err != nil { return nil, err } @@ -1111,7 +1234,7 @@ func (c *msgClient) InitializeMainnet(ctx context.Context, in *MsgInitializeMain func (c *msgClient) MintVouchers(ctx context.Context, in *MsgMintVouchers, opts ...grpc.CallOption) (*MsgMintVouchersResponse, error) { out := new(MsgMintVouchersResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/MintVouchers", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/MintVouchers", in, out, opts...) if err != nil { return nil, err } @@ -1120,7 +1243,7 @@ func (c *msgClient) MintVouchers(ctx context.Context, in *MsgMintVouchers, opts func (c *msgClient) BurnVouchers(ctx context.Context, in *MsgBurnVouchers, opts ...grpc.CallOption) (*MsgBurnVouchersResponse, error) { out := new(MsgBurnVouchersResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/BurnVouchers", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/BurnVouchers", in, out, opts...) if err != nil { return nil, err } @@ -1129,7 +1252,7 @@ func (c *msgClient) BurnVouchers(ctx context.Context, in *MsgBurnVouchers, opts func (c *msgClient) RedeemVouchers(ctx context.Context, in *MsgRedeemVouchers, opts ...grpc.CallOption) (*MsgRedeemVouchersResponse, error) { out := new(MsgRedeemVouchersResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/RedeemVouchers", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/RedeemVouchers", in, out, opts...) if err != nil { return nil, err } @@ -1138,7 +1261,7 @@ func (c *msgClient) RedeemVouchers(ctx context.Context, in *MsgRedeemVouchers, o func (c *msgClient) UnredeemVouchers(ctx context.Context, in *MsgUnredeemVouchers, opts ...grpc.CallOption) (*MsgUnredeemVouchersResponse, error) { out := new(MsgUnredeemVouchersResponse) - err := c.cc.Invoke(ctx, "/spn.project.Msg/UnredeemVouchers", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.project.v1.Msg/UnredeemVouchers", in, out, opts...) if err != nil { return nil, err } @@ -1147,6 +1270,9 @@ func (c *msgClient) UnredeemVouchers(ctx context.Context, in *MsgUnredeemVoucher // MsgServer is the server API for Msg service. type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) CreateProject(context.Context, *MsgCreateProject) (*MsgCreateProjectResponse, error) EditProject(context.Context, *MsgEditProject) (*MsgEditProjectResponse, error) UpdateTotalSupply(context.Context, *MsgUpdateTotalSupply) (*MsgUpdateTotalSupplyResponse, error) @@ -1162,6 +1288,9 @@ type MsgServer interface { type UnimplementedMsgServer struct { } +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} func (*UnimplementedMsgServer) CreateProject(ctx context.Context, req *MsgCreateProject) (*MsgCreateProjectResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateProject not implemented") } @@ -1194,6 +1323,24 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/network.project.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_CreateProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgCreateProject) if err := dec(in); err != nil { @@ -1204,7 +1351,7 @@ func _Msg_CreateProject_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/CreateProject", + FullMethod: "/network.project.v1.Msg/CreateProject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).CreateProject(ctx, req.(*MsgCreateProject)) @@ -1222,7 +1369,7 @@ func _Msg_EditProject_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/EditProject", + FullMethod: "/network.project.v1.Msg/EditProject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).EditProject(ctx, req.(*MsgEditProject)) @@ -1240,7 +1387,7 @@ func _Msg_UpdateTotalSupply_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/UpdateTotalSupply", + FullMethod: "/network.project.v1.Msg/UpdateTotalSupply", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateTotalSupply(ctx, req.(*MsgUpdateTotalSupply)) @@ -1258,7 +1405,7 @@ func _Msg_UpdateSpecialAllocations_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/UpdateSpecialAllocations", + FullMethod: "/network.project.v1.Msg/UpdateSpecialAllocations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateSpecialAllocations(ctx, req.(*MsgUpdateSpecialAllocations)) @@ -1276,7 +1423,7 @@ func _Msg_InitializeMainnet_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/InitializeMainnet", + FullMethod: "/network.project.v1.Msg/InitializeMainnet", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).InitializeMainnet(ctx, req.(*MsgInitializeMainnet)) @@ -1294,7 +1441,7 @@ func _Msg_MintVouchers_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/MintVouchers", + FullMethod: "/network.project.v1.Msg/MintVouchers", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).MintVouchers(ctx, req.(*MsgMintVouchers)) @@ -1312,7 +1459,7 @@ func _Msg_BurnVouchers_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/BurnVouchers", + FullMethod: "/network.project.v1.Msg/BurnVouchers", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).BurnVouchers(ctx, req.(*MsgBurnVouchers)) @@ -1330,7 +1477,7 @@ func _Msg_RedeemVouchers_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/RedeemVouchers", + FullMethod: "/network.project.v1.Msg/RedeemVouchers", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RedeemVouchers(ctx, req.(*MsgRedeemVouchers)) @@ -1348,7 +1495,7 @@ func _Msg_UnredeemVouchers_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.project.Msg/UnredeemVouchers", + FullMethod: "/network.project.v1.Msg/UnredeemVouchers", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UnredeemVouchers(ctx, req.(*MsgUnredeemVouchers)) @@ -1357,9 +1504,13 @@ func _Msg_UnredeemVouchers_Handler(srv interface{}, ctx context.Context, dec fun } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.project.Msg", + ServiceName: "network.project.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, { MethodName: "CreateProject", Handler: _Msg_CreateProject_Handler, @@ -1398,7 +1549,70 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/project/tx.proto", + Metadata: "network/project/v1/tx.proto", +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil } func (m *MsgCreateProject) Marshal() (dAtA []byte, err error) { @@ -2037,7 +2251,7 @@ func (m *MsgUnredeemVouchers) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintTx(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x1a } } if m.ProjectID != 0 { @@ -2089,6 +2303,30 @@ func encodeVarintTx(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgCreateProject) Size() (n int) { if m == nil { return 0 @@ -2393,6 +2631,171 @@ func sovTx(x uint64) (n int) { func sozTx(x uint64) (n int) { return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgCreateProject) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4163,7 +4566,7 @@ func (m *MsgUnredeemVouchers) Unmarshal(dAtA []byte) error { break } } - case 4: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) } diff --git a/x/project/types/vesting.pb.go b/x/project/types/vesting.pb.go index bbeddce3..6d778047 100644 --- a/x/project/types/vesting.pb.go +++ b/x/project/types/vesting.pb.go @@ -1,12 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/project/vesting.proto +// source: network/project/v1/vesting.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" @@ -39,7 +41,7 @@ func (m *ShareVestingOptions) Reset() { *m = ShareVestingOptions{} } func (m *ShareVestingOptions) String() string { return proto.CompactTextString(m) } func (*ShareVestingOptions) ProtoMessage() {} func (*ShareVestingOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffa7a33cd775a24, []int{0} + return fileDescriptor_5db7ebf41d291562, []int{0} } func (m *ShareVestingOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -114,7 +116,7 @@ func (m *ShareDelayedVesting) Reset() { *m = ShareDelayedVesting{} } func (m *ShareDelayedVesting) String() string { return proto.CompactTextString(m) } func (*ShareDelayedVesting) ProtoMessage() {} func (*ShareDelayedVesting) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffa7a33cd775a24, []int{1} + return fileDescriptor_5db7ebf41d291562, []int{1} } func (m *ShareDelayedVesting) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -165,38 +167,41 @@ func (m *ShareDelayedVesting) GetEndTime() time.Time { } func init() { - proto.RegisterType((*ShareVestingOptions)(nil), "spn.project.ShareVestingOptions") - proto.RegisterType((*ShareDelayedVesting)(nil), "spn.project.ShareDelayedVesting") -} - -func init() { proto.RegisterFile("spn/project/vesting.proto", fileDescriptor_0ffa7a33cd775a24) } - -var fileDescriptor_0ffa7a33cd775a24 = []byte{ - // 372 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x92, 0xbf, 0x4e, 0xf3, 0x30, - 0x14, 0xc5, 0x93, 0x56, 0x6a, 0xbf, 0x2f, 0x91, 0x18, 0x02, 0x43, 0xda, 0x21, 0xa9, 0xba, 0x50, - 0x06, 0x6c, 0xb5, 0x4c, 0x2c, 0x0c, 0x29, 0x03, 0x62, 0x41, 0x2a, 0x15, 0x03, 0x5b, 0xfe, 0x98, - 0xd4, 0x90, 0xf8, 0x46, 0xb1, 0x5b, 0xd1, 0xb7, 0xe8, 0x73, 0xf0, 0x0e, 0xec, 0x1d, 0x3b, 0x32, - 0xb5, 0xa8, 0x7d, 0x0b, 0x26, 0x14, 0x3b, 0x41, 0x2d, 0x3b, 0x53, 0xac, 0x1c, 0x9f, 0xfb, 0x3b, - 0xbe, 0xf7, 0x1a, 0x2d, 0x9e, 0x31, 0x9c, 0xe5, 0xf0, 0x4c, 0x42, 0x81, 0x67, 0x84, 0x0b, 0xca, - 0x62, 0x94, 0xe5, 0x20, 0xc0, 0x32, 0x79, 0xc6, 0x50, 0x29, 0xb5, 0xdd, 0x18, 0x20, 0x4e, 0x08, - 0x96, 0x52, 0x30, 0x7d, 0xc2, 0x82, 0xa6, 0x84, 0x0b, 0x3f, 0xcd, 0xd4, 0xed, 0xf6, 0x49, 0x0c, - 0x31, 0xc8, 0x23, 0x2e, 0x4e, 0xe5, 0x5f, 0x27, 0x04, 0x9e, 0x02, 0xc7, 0x81, 0xcf, 0x09, 0x9e, - 0xf5, 0x03, 0x22, 0xfc, 0x3e, 0x0e, 0x81, 0x32, 0xa5, 0x77, 0x13, 0xe3, 0xf8, 0x7e, 0xe2, 0xe7, - 0xe4, 0x41, 0x91, 0xef, 0x32, 0x41, 0x81, 0x71, 0xeb, 0xd6, 0x38, 0x8a, 0x48, 0xe2, 0xcf, 0x49, - 0x54, 0x0a, 0xb6, 0xde, 0xd1, 0x7b, 0xe6, 0xa0, 0x83, 0xf6, 0x32, 0x21, 0xe9, 0xbc, 0x3e, 0xb8, - 0x77, 0xa3, 0x8d, 0x7e, 0x39, 0xbd, 0xff, 0x46, 0x13, 0x54, 0xd9, 0xee, 0x7b, 0xad, 0xc4, 0x1d, - 0x9a, 0xac, 0x99, 0x61, 0x0a, 0x10, 0x7e, 0x22, 0x35, 0x6e, 0xeb, 0x9d, 0x7a, 0xcf, 0x1c, 0xb4, - 0x90, 0xca, 0x8e, 0x8a, 0xec, 0xa8, 0xcc, 0x8e, 0x86, 0x40, 0x99, 0x77, 0xb9, 0x5c, 0xbb, 0xda, - 0xd7, 0xda, 0x3d, 0x8d, 0xa9, 0x98, 0x4c, 0x03, 0x14, 0x42, 0x8a, 0xcb, 0x87, 0xaa, 0xcf, 0x39, - 0x8f, 0x5e, 0xb0, 0x98, 0x67, 0x84, 0x4b, 0xc3, 0xdb, 0xc6, 0x6d, 0xa8, 0xda, 0xa3, 0x7d, 0x90, - 0xc5, 0x8c, 0x66, 0xd9, 0x72, 0xbb, 0xf6, 0x87, 0xcc, 0x0a, 0x62, 0x5d, 0x19, 0x4d, 0xc2, 0xa2, - 0x31, 0x4d, 0x89, 0x5d, 0x97, 0xfd, 0x6c, 0x23, 0x35, 0x56, 0x54, 0x8d, 0x15, 0x8d, 0xab, 0xb1, - 0x7a, 0xff, 0x0a, 0xe0, 0x62, 0xe3, 0xea, 0xa3, 0xca, 0xe4, 0x0d, 0x97, 0x5b, 0x47, 0x5f, 0x6d, - 0x1d, 0xfd, 0x73, 0xeb, 0xe8, 0x8b, 0x9d, 0xa3, 0xad, 0x76, 0x8e, 0xf6, 0xb1, 0x73, 0xb4, 0xc7, - 0xb3, 0xbd, 0x54, 0x82, 0xb0, 0x88, 0xe4, 0x29, 0x65, 0x02, 0x17, 0xcb, 0xf5, 0xfa, 0xb3, 0x5e, - 0x32, 0x5c, 0xd0, 0x90, 0xac, 0x8b, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x05, 0x04, 0x09, 0xa2, - 0x7a, 0x02, 0x00, 0x00, + proto.RegisterType((*ShareVestingOptions)(nil), "network.project.v1.ShareVestingOptions") + proto.RegisterType((*ShareDelayedVesting)(nil), "network.project.v1.ShareDelayedVesting") +} + +func init() { proto.RegisterFile("network/project/v1/vesting.proto", fileDescriptor_5db7ebf41d291562) } + +var fileDescriptor_5db7ebf41d291562 = []byte{ + // 422 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x52, 0x3f, 0x6f, 0xd4, 0x30, + 0x14, 0x8f, 0x5b, 0xa9, 0x07, 0x39, 0x84, 0x44, 0x60, 0x48, 0x6f, 0x48, 0x4e, 0x5d, 0x5a, 0x2a, + 0x61, 0x2b, 0x65, 0x67, 0x48, 0x19, 0xd8, 0x2a, 0x8e, 0x8a, 0x81, 0xa5, 0x72, 0x12, 0xe3, 0x9a, + 0x26, 0x7e, 0x51, 0xec, 0x06, 0x6e, 0x67, 0x64, 0xe8, 0xcc, 0x27, 0x40, 0x4c, 0xfd, 0x18, 0x1d, + 0x3b, 0x32, 0xdd, 0xa1, 0xbb, 0xe1, 0x06, 0xbe, 0x01, 0x13, 0x8a, 0xed, 0xa0, 0x3b, 0xd8, 0xbb, + 0x24, 0xb6, 0xdf, 0xfb, 0xfd, 0xf1, 0xf3, 0xcf, 0x1f, 0x4b, 0xa6, 0x3f, 0x42, 0x73, 0x41, 0xea, + 0x06, 0x3e, 0xb0, 0x5c, 0x93, 0x36, 0x21, 0x2d, 0x53, 0x5a, 0x48, 0x8e, 0xeb, 0x06, 0x34, 0x04, + 0x81, 0xeb, 0xc0, 0xae, 0x03, 0xb7, 0xc9, 0x28, 0xca, 0x41, 0x55, 0xa0, 0x48, 0x46, 0x15, 0x23, + 0x6d, 0x92, 0x31, 0x4d, 0x13, 0x92, 0x83, 0x90, 0x16, 0x33, 0x7a, 0xc2, 0x81, 0x83, 0x59, 0x92, + 0x6e, 0xe5, 0x4e, 0x63, 0x0e, 0xc0, 0x4b, 0x46, 0xcc, 0x2e, 0xbb, 0x7c, 0x4f, 0xb4, 0xa8, 0x98, + 0xd2, 0xb4, 0xaa, 0x5d, 0xc3, 0x23, 0x5a, 0x09, 0x09, 0xc4, 0x7c, 0xdd, 0xd1, 0xae, 0x55, 0x3a, + 0xb3, 0x64, 0x76, 0x63, 0x4b, 0x7b, 0xca, 0x7f, 0xfc, 0xe6, 0x9c, 0x36, 0xec, 0xad, 0xb5, 0x7b, + 0x52, 0x6b, 0x01, 0x52, 0x05, 0xaf, 0xfd, 0x87, 0x05, 0x2b, 0xe9, 0x94, 0x15, 0xae, 0x10, 0xa2, + 0x31, 0x3a, 0x18, 0x1e, 0xed, 0xe3, 0xff, 0x2f, 0x82, 0x0d, 0xc1, 0xcb, 0x8d, 0xf6, 0x57, 0xde, + 0xe4, 0x1f, 0x82, 0xf4, 0xbe, 0x3f, 0x00, 0xcb, 0xbe, 0xf7, 0x6b, 0xcb, 0xa9, 0x6e, 0x82, 0x82, + 0x2f, 0xc8, 0x1f, 0x6a, 0xd0, 0xb4, 0x34, 0x45, 0x15, 0xa2, 0xf1, 0xf6, 0xc1, 0xf0, 0x68, 0x17, + 0x3b, 0xc7, 0xdd, 0xa0, 0xb0, 0x1b, 0x14, 0x3e, 0x06, 0x21, 0xd3, 0x93, 0x9b, 0x59, 0xec, 0xfd, + 0x9e, 0xc5, 0xfb, 0x5c, 0xe8, 0xf3, 0xcb, 0x0c, 0xe7, 0x50, 0xb9, 0xeb, 0xb9, 0xdf, 0x33, 0x55, + 0x5c, 0x10, 0x3d, 0xad, 0x99, 0x32, 0x80, 0xef, 0xf3, 0x78, 0xc7, 0x72, 0x7f, 0x5d, 0x5d, 0x1f, + 0x3e, 0x28, 0x19, 0xa7, 0xf9, 0xf4, 0xac, 0x9b, 0xb9, 0xfa, 0xb6, 0xba, 0x3e, 0x44, 0x93, 0x75, + 0xf9, 0xe0, 0x33, 0xf2, 0x07, 0xee, 0x19, 0xc3, 0xad, 0x3b, 0xb7, 0xd2, 0x4b, 0x07, 0x2f, 0xfc, + 0x01, 0x93, 0xc5, 0xa9, 0xa8, 0x58, 0xb8, 0x6d, 0x1e, 0x61, 0x84, 0x6d, 0x06, 0x70, 0x9f, 0x01, + 0x7c, 0xda, 0x67, 0x20, 0xbd, 0xd7, 0xd9, 0xb8, 0x9a, 0xc7, 0x68, 0xd2, 0x83, 0xd2, 0xe3, 0x9b, + 0x45, 0x84, 0x6e, 0x17, 0x11, 0xfa, 0xb9, 0x88, 0xd0, 0xd5, 0x32, 0xf2, 0x6e, 0x97, 0x91, 0xf7, + 0x63, 0x19, 0x79, 0xef, 0x9e, 0xae, 0x79, 0x15, 0x5c, 0x0a, 0xcd, 0x48, 0x9f, 0xe4, 0x4f, 0x7f, + 0xb3, 0x6c, 0x2c, 0x67, 0x3b, 0x46, 0xeb, 0xf9, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x9c, + 0x8f, 0xb0, 0xeb, 0x02, 0x00, 0x00, } func (m *ShareVestingOptions) Marshal() (dAtA []byte, err error) { diff --git a/x/project/types/voucher_test.go b/x/project/types/voucher_test.go index 23021fe8..cc503ad5 100644 --- a/x/project/types/voucher_test.go +++ b/x/project/types/voucher_test.go @@ -8,8 +8,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - tc "github.com/tendermint/spn/testutil/constructor" - project "github.com/tendermint/spn/x/project/types" + tc "github.com/ignite/network/testutil/constructor" + project "github.com/ignite/network/x/project/types" ) var ( diff --git a/x/reward/client/cli/query.go b/x/reward/client/cli/query.go deleted file mode 100644 index f59afd20..00000000 --- a/x/reward/client/cli/query.go +++ /dev/null @@ -1,36 +0,0 @@ -package cli - -import ( - "fmt" - // "strings" - - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client" - // "github.com/cosmos/cosmos-sdk/client/flags" - // sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/reward/types" -) - -// GetQueryCmd returns the cli query commands for this module -func GetQueryCmd(queryRoute string) *cobra.Command { - // Group reward queries under a subcommand - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand( - CmdShowRewardPool(), - CmdListRewardPool(), - CmdQueryParams(), - ) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/reward/client/cli/query_params.go b/x/reward/client/cli/query_params.go deleted file mode 100644 index 4e71a310..00000000 --- a/x/reward/client/cli/query_params.go +++ /dev/null @@ -1,35 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/reward/types" -) - -func CmdQueryParams() *cobra.Command { - cmd := &cobra.Command{ - Use: "params", - Short: "Shows the parameters of the module", - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/reward/client/cli/query_reward_pool.go b/x/reward/client/cli/query_reward_pool.go deleted file mode 100644 index e6d136f8..00000000 --- a/x/reward/client/cli/query_reward_pool.go +++ /dev/null @@ -1,78 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/reward/types" -) - -func CmdListRewardPool() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-reward-pool", - Short: "List all reward pools", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllRewardPoolRequest{ - Pagination: pageReq, - } - - res, err := queryClient.RewardPoolAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowRewardPool() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-reward-pool [launch-id]", - Short: "Shows the reward pool for a launch", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argLaunchID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - - request := &types.QueryGetRewardPoolRequest{ - LaunchID: argLaunchID, - } - - res, err := queryClient.RewardPool(context.Background(), request) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/reward/client/cli/query_reward_pool_test.go b/x/reward/client/cli/query_reward_pool_test.go deleted file mode 100644 index 3fb4c8e2..00000000 --- a/x/reward/client/cli/query_reward_pool_test.go +++ /dev/null @@ -1,138 +0,0 @@ -package cli_test - -import ( - "fmt" - "strconv" - "testing" - - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/reward/client/cli" - "github.com/tendermint/spn/x/reward/types" -) - -func (suite *QueryTestSuite) TestShowRewardPool() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.RewardState.RewardPools - - common := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - for _, tc := range []struct { - name string - idLaunchID uint64 - - args []string - err error - obj types.RewardPool - }{ - { - name: "should allow valid query", - idLaunchID: objs[0].LaunchID, - - args: common, - obj: objs[0], - }, - { - name: "should return not found", - idLaunchID: 100000, - - args: common, - err: status.Error(codes.NotFound, "not found"), - }, - } { - suite.T().Run(tc.name, func(t *testing.T) { - args := []string{ - strconv.Itoa(int(tc.idLaunchID)), - } - args = append(args, tc.args...) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowRewardPool(), args) - if tc.err != nil { - stat, ok := status.FromError(tc.err) - require.True(t, ok) - require.ErrorIs(t, stat.Err(), tc.err) - } else { - require.NoError(t, err) - var resp types.QueryGetRewardPoolResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NotNil(t, resp.RewardPool) - require.Equal(t, - nullify.Fill(&tc.obj), - nullify.Fill(&resp.RewardPool), - ) - } - }) - } -} - -func (suite *QueryTestSuite) TestListRewardPool() { - ctx := suite.Network.Validators[0].ClientCtx - objs := suite.RewardState.RewardPools - - request := func(next []byte, offset, limit uint64, total bool) []string { - args := []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - } - if next == nil { - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) - } else { - args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) - } - args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) - if total { - args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) - } - return args - } - suite.T().Run("should paginate by offset", func(t *testing.T) { - step := 2 - for i := 0; i < len(objs); i += step { - args := request(nil, uint64(i), uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListRewardPool(), args) - require.NoError(t, err) - var resp types.QueryAllRewardPoolResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.RewardPool), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.RewardPool), - ) - } - }) - suite.T().Run("should paginate by key", func(t *testing.T) { - step := 2 - var next []byte - for i := 0; i < len(objs); i += step { - args := request(next, 0, uint64(step), false) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListRewardPool(), args) - require.NoError(t, err) - var resp types.QueryAllRewardPoolResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.LessOrEqual(t, len(resp.RewardPool), step) - require.Subset(t, - nullify.Fill(objs), - nullify.Fill(resp.RewardPool), - ) - next = resp.Pagination.NextKey - } - }) - suite.T().Run("should paginate all", func(t *testing.T) { - args := request(nil, 0, uint64(len(objs)), true) - out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListRewardPool(), args) - require.NoError(t, err) - var resp types.QueryAllRewardPoolResponse - require.NoError(t, suite.Network.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) - require.NoError(t, err) - require.Equal(t, len(objs), int(resp.Pagination.Total)) - require.ElementsMatch(t, - nullify.Fill(objs), - nullify.Fill(resp.RewardPool), - ) - }) -} diff --git a/x/reward/client/cli/query_test.go b/x/reward/client/cli/query_test.go deleted file mode 100644 index d7b54620..00000000 --- a/x/reward/client/cli/query_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package cli_test - -import ( - "testing" - - "github.com/stretchr/testify/suite" - - "github.com/tendermint/spn/testutil/networksuite" -) - -// QueryTestSuite is a test suite for query tests -type QueryTestSuite struct { - networksuite.NetworkTestSuite -} - -// TestQueryTestSuite runs test of the query suite -func TestQueryTestSuite(t *testing.T) { - suite.Run(t, new(QueryTestSuite)) -} diff --git a/x/reward/client/cli/tx.go b/x/reward/client/cli/tx.go deleted file mode 100644 index 200b786c..00000000 --- a/x/reward/client/cli/tx.go +++ /dev/null @@ -1,27 +0,0 @@ -package cli - -import ( - "fmt" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/reward/types" -) - -// GetTxCmd returns the transaction commands for this module -func GetTxCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, - } - - cmd.AddCommand(CmdSetRewards()) - - // this line is used by starport scaffolding # 1 - - return cmd -} diff --git a/x/reward/client/cli/tx_set_reward.go b/x/reward/client/cli/tx_set_reward.go deleted file mode 100644 index 0d2ce120..00000000 --- a/x/reward/client/cli/tx_set_reward.go +++ /dev/null @@ -1,54 +0,0 @@ -package cli - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/reward/types" -) - -func CmdSetRewards() *cobra.Command { - cmd := &cobra.Command{ - Use: "set-rewards [launch-id] [coins] [last-reward-height]", - Short: "Set rewards for being validator of a chain", - Args: cobra.ExactArgs(3), - RunE: func(cmd *cobra.Command, args []string) (err error) { - launchID, err := cast.ToUint64E(args[0]) - if err != nil { - return err - } - coins, err := sdk.ParseCoinsNormalized(args[1]) - if err != nil { - return err - } - lastRewardHeight, err := cast.ToInt64E(args[2]) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgSetRewards( - clientCtx.GetFromAddress().String(), - launchID, - lastRewardHeight, - coins, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/reward/genesis.go b/x/reward/genesis.go deleted file mode 100644 index fb4d3c81..00000000 --- a/x/reward/genesis.go +++ /dev/null @@ -1,30 +0,0 @@ -package reward - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/reward/keeper" - "github.com/tendermint/spn/x/reward/types" -) - -// InitGenesis initializes the reward module's state from a provided genesis -// state. -func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { - // Set all the rewardPool - for _, elem := range genState.RewardPools { - k.SetRewardPool(ctx, elem) - } - // this line is used by starport scaffolding # genesis/module/init - k.SetParams(ctx, genState.Params) -} - -// ExportGenesis returns the reward module's exported genesis. -func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - genesis := types.DefaultGenesis() - genesis.Params = k.GetParams(ctx) - - genesis.RewardPools = k.GetAllRewardPool(ctx) - // this line is used by starport scaffolding # genesis/module/export - - return genesis -} diff --git a/x/reward/genesis_test.go b/x/reward/genesis_test.go deleted file mode 100644 index 44d6cc98..00000000 --- a/x/reward/genesis_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package reward_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/reward" - "github.com/tendermint/spn/x/reward/types" -) - -func TestGenesis(t *testing.T) { - genesisState := types.GenesisState{ - Params: types.DefaultParams(), - - RewardPools: []types.RewardPool{ - { - LaunchID: 0, - }, - { - LaunchID: 1, - }, - }, - // this line is used by starport scaffolding # genesis/test/state - } - - t.Run("should allow importing and exporting genesis", func(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - reward.InitGenesis(ctx, *tk.RewardKeeper, genesisState) - got := reward.ExportGenesis(ctx, *tk.RewardKeeper) - require.NotNil(t, got) - - nullify.Fill(&genesisState) - nullify.Fill(got) - - require.ElementsMatch(t, genesisState.RewardPools, got.RewardPools) - }) - // this line is used by starport scaffolding # genesis/test/assert -} diff --git a/x/reward/keeper/grpc.go b/x/reward/keeper/grpc.go deleted file mode 100644 index 1f0d22c0..00000000 --- a/x/reward/keeper/grpc.go +++ /dev/null @@ -1,7 +0,0 @@ -package keeper - -import ( - "github.com/tendermint/spn/x/reward/types" -) - -var _ types.QueryServer = Keeper{} diff --git a/x/reward/keeper/grpc_params.go b/x/reward/keeper/grpc_params.go deleted file mode 100644 index 744fa3a3..00000000 --- a/x/reward/keeper/grpc_params.go +++ /dev/null @@ -1,20 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/reward/types" -) - -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil -} diff --git a/x/reward/keeper/grpc_params_test.go b/x/reward/keeper/grpc_params_test.go deleted file mode 100644 index 2cea0102..00000000 --- a/x/reward/keeper/grpc_params_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/reward/types" -) - -func TestParamsQuery(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - params := types.DefaultParams() - - t.Run("should allow query for params", func(t *testing.T) { - tk.RewardKeeper.SetParams(ctx, params) - response, err := tk.RewardKeeper.Params(wctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.Equal(t, &types.QueryParamsResponse{Params: params}, response) - - _, err = tk.RewardKeeper.Params(wctx, nil) - require.Error(t, err) - }) -} diff --git a/x/reward/keeper/grpc_reward_pool.go b/x/reward/keeper/grpc_reward_pool.go deleted file mode 100644 index 36239666..00000000 --- a/x/reward/keeper/grpc_reward_pool.go +++ /dev/null @@ -1,57 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/tendermint/spn/x/reward/types" -) - -func (k Keeper) RewardPoolAll(c context.Context, req *types.QueryAllRewardPoolRequest) (*types.QueryAllRewardPoolResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var rewardPools []types.RewardPool - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - rewardPoolStore := prefix.NewStore(store, types.KeyPrefix(types.RewardPoolKeyPrefix)) - - pageRes, err := query.Paginate(rewardPoolStore, req.Pagination, func(key []byte, value []byte) error { - var rewardPool types.RewardPool - if err := k.cdc.Unmarshal(value, &rewardPool); err != nil { - return err - } - - rewardPools = append(rewardPools, rewardPool) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllRewardPoolResponse{RewardPool: rewardPools, Pagination: pageRes}, nil -} - -func (k Keeper) RewardPool(c context.Context, req *types.QueryGetRewardPoolRequest) (*types.QueryGetRewardPoolResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetRewardPool( - ctx, - req.LaunchID, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryGetRewardPoolResponse{RewardPool: val}, nil -} diff --git a/x/reward/keeper/invariants.go b/x/reward/keeper/invariants.go index 248331ce..0b0cbb43 100644 --- a/x/reward/keeper/invariants.go +++ b/x/reward/keeper/invariants.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/reward/types" + "github.com/ignite/network/x/reward/types" ) const ( @@ -27,13 +27,16 @@ func AllInvariants(k Keeper) sdk.Invariant { // `remainingCoins` for all reward pools func InsufficientRewardsBalanceInvariant(k Keeper) sdk.Invariant { return func(ctx sdk.Context) (string, bool) { - all := k.GetAllRewardPool(ctx) + all, err := k.ListRewardPool(ctx) + if err != nil { + return "", false + } totalRewards := sdk.NewCoins() for _, rewardPool := range all { // we don't need to check if reward pool is `closed` since properly closed pools should have no remaining coins totalRewards = totalRewards.Add(rewardPool.RemainingCoins...) } - moduleAddr := k.authKeeper.GetModuleAddress(types.ModuleName) + moduleAddr := k.accountKeeper.GetModuleAddress(types.ModuleName) balance := k.bankKeeper.SpendableCoins(ctx, moduleAddr) if !balance.IsAllGTE(totalRewards) { return sdk.FormatInvariant( diff --git a/x/reward/keeper/invariants_test.go b/x/reward/keeper/invariants_test.go index 8594b642..b7fda119 100644 --- a/x/reward/keeper/invariants_test.go +++ b/x/reward/keeper/invariants_test.go @@ -7,10 +7,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/reward/keeper" - "github.com/tendermint/spn/x/reward/types" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" ) func TestInsufficientRewardsBalanceInvariant(t *testing.T) { @@ -20,9 +20,9 @@ func TestInsufficientRewardsBalanceInvariant(t *testing.T) { for i := uint64(0); i < uint64(10); i++ { pool := sample.RewardPoolWithCoinsRangeAmount(r, i, denoms[0], denoms[1], denoms[2], 1, 10000) tk.MintModule(ctx, types.ModuleName, pool.RemainingCoins) - tk.RewardKeeper.SetRewardPool(ctx, pool) + require.NoError(t, tk.RewardKeeper.RewardPool.Set(ctx, pool.LaunchID, pool)) } - msg, broken := keeper.InsufficientRewardsBalanceInvariant(*tk.RewardKeeper)(ctx) + msg, broken := keeper.InsufficientRewardsBalanceInvariant(tk.RewardKeeper)(ctx) require.False(t, broken, msg) }) @@ -33,7 +33,7 @@ func TestInsufficientRewardsBalanceInvariant(t *testing.T) { for i := uint64(0); i < uint64(10); i++ { pool := sample.RewardPoolWithCoinsRangeAmount(r, i, denoms[0], denoms[1], denoms[2], 1, 10000) tk.MintModule(ctx, types.ModuleName, pool.RemainingCoins) - tk.RewardKeeper.SetRewardPool(ctx, pool) + require.NoError(t, tk.RewardKeeper.RewardPool.Set(ctx, pool.LaunchID, pool)) } // add some invalid pools - mint a bit less for some coins for i := uint64(10); i < uint64(20); i++ { @@ -42,9 +42,9 @@ func TestInsufficientRewardsBalanceInvariant(t *testing.T) { // decrease amount for coin at index 0 before minting mintCoins = mintCoins.Sub(sdk.NewCoins(sdk.NewCoin(mintCoins.GetDenomByIndex(0), sdkmath.OneInt()))...) tk.MintModule(ctx, types.ModuleName, mintCoins) - tk.RewardKeeper.SetRewardPool(ctx, pool) + require.NoError(t, tk.RewardKeeper.RewardPool.Set(ctx, pool.LaunchID, pool)) } - msg, broken := keeper.InsufficientRewardsBalanceInvariant(*tk.RewardKeeper)(ctx) + msg, broken := keeper.InsufficientRewardsBalanceInvariant(tk.RewardKeeper)(ctx) require.True(t, broken, msg) }) @@ -55,14 +55,14 @@ func TestInsufficientRewardsBalanceInvariant(t *testing.T) { for i := uint64(0); i < uint64(10); i++ { pool := sample.RewardPoolWithCoinsRangeAmount(r, i, denoms[0], denoms[1], denoms[2], 1, 10000) tk.MintModule(ctx, types.ModuleName, pool.RemainingCoins) - tk.RewardKeeper.SetRewardPool(ctx, pool) + require.NoError(t, tk.RewardKeeper.RewardPool.Set(ctx, pool.LaunchID, pool)) } // add some invalid pools - do not mint coins for i := uint64(10); i < uint64(20); i++ { pool := sample.RewardPool(r, i) - tk.RewardKeeper.SetRewardPool(ctx, pool) + require.NoError(t, tk.RewardKeeper.RewardPool.Set(ctx, pool.LaunchID, pool)) } - msg, broken := keeper.InsufficientRewardsBalanceInvariant(*tk.RewardKeeper)(ctx) + msg, broken := keeper.InsufficientRewardsBalanceInvariant(tk.RewardKeeper)(ctx) require.True(t, broken, msg) }) } diff --git a/x/reward/keeper/keeper.go b/x/reward/keeper/keeper.go index 7709f16d..ebd7af66 100644 --- a/x/reward/keeper/keeper.go +++ b/x/reward/keeper/keeper.go @@ -3,22 +3,32 @@ package keeper import ( "fmt" - "github.com/cometbft/cometbft/libs/log" + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + "cosmossdk.io/core/store" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/tendermint/spn/x/reward/types" + "github.com/ignite/network/x/reward/types" ) type ( Keeper struct { - cdc codec.BinaryCodec - storeKey storetypes.StoreKey - memKey storetypes.StoreKey - paramstore paramtypes.Subspace - authKeeper types.AccountKeeper + cdc codec.BinaryCodec + addressCodec address.Codec + storeService store.KVStoreService + logger log.Logger + + // the address capable of executing a MsgUpdateParams message. + // Typically, this should be the x/gov module account. + authority string + + Schema collections.Schema + Params collections.Item[types.Params] + RewardPool collections.Map[uint64, types.RewardPool] + // this line is used by starport scaffolding # collection/type + + accountKeeper types.AccountKeeper bankKeeper types.BankKeeper profileKeeper types.ProfileKeeper launchKeeper types.LaunchKeeper @@ -27,32 +37,58 @@ type ( func NewKeeper( cdc codec.BinaryCodec, - storeKey, - memKey storetypes.StoreKey, - ps paramtypes.Subspace, - authKeeper types.AccountKeeper, + addressCodec address.Codec, + storeService store.KVStoreService, + logger log.Logger, + authority string, + accountKeeper types.AccountKeeper, bankKeeper types.BankKeeper, profileKeeper types.ProfileKeeper, launchKeeper types.LaunchKeeper, -) *Keeper { - // set KeyTable if it has not already been set - if !ps.HasKeyTable() { - ps = ps.WithKeyTable(types.ParamKeyTable()) +) Keeper { + if _, err := addressCodec.StringToBytes(authority); err != nil { + panic(fmt.Sprintf("invalid authority address %s: %s", authority, err)) } - return &Keeper{ + + sb := collections.NewSchemaBuilder(storeService) + + k := Keeper{ cdc: cdc, - storeKey: storeKey, - memKey: memKey, - paramstore: ps, - authKeeper: authKeeper, + addressCodec: addressCodec, + storeService: storeService, + authority: authority, + logger: logger, + accountKeeper: accountKeeper, bankKeeper: bankKeeper, profileKeeper: profileKeeper, launchKeeper: launchKeeper, + Params: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + RewardPool: collections.NewMap(sb, types.RewardPoolKey, "rewardPool", collections.Uint64Key, codec.CollValue[types.RewardPool](cdc)), + // this line is used by starport scaffolding # collection/instantiate + } + + schema, err := sb.Build() + if err != nil { + panic(err) } + k.Schema = schema + + return k +} + +// GetAuthority returns the module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger() log.Logger { + return k.logger.With("module", fmt.Sprintf("x/%s", types.ModuleName)) } -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +// AddressCodec returns the address codec. +func (k Keeper) AddressCodec() address.Codec { + return k.addressCodec } // GetProfileKeeper gets the profile keeper interface of the module diff --git a/x/reward/keeper/msg.go b/x/reward/keeper/msg_server.go similarity index 86% rename from x/reward/keeper/msg.go rename to x/reward/keeper/msg_server.go index 7258d05f..a7cc2493 100644 --- a/x/reward/keeper/msg.go +++ b/x/reward/keeper/msg_server.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/tendermint/spn/x/reward/types" + "github.com/ignite/network/x/reward/types" ) type msgServer struct { diff --git a/x/reward/keeper/msg_set_reward.go b/x/reward/keeper/msg_server_set_rewards.go similarity index 62% rename from x/reward/keeper/msg_set_reward.go rename to x/reward/keeper/msg_server_set_rewards.go index 930f5fae..57bd785c 100644 --- a/x/reward/keeper/msg_set_reward.go +++ b/x/reward/keeper/msg_server_set_rewards.go @@ -3,25 +3,34 @@ package keeper import ( "context" + "cosmossdk.io/collections" sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/pkg/errors" - ignterrors "github.com/ignite/modules/pkg/errors" - - launchtypes "github.com/tendermint/spn/x/launch/types" - "github.com/tendermint/spn/x/reward/types" + ignterrors "github.com/ignite/network/pkg/errors" + launchtypes "github.com/ignite/network/x/launch/types" + "github.com/ignite/network/x/reward/types" ) -func (k msgServer) SetRewards(goCtx context.Context, msg *types.MsgSetRewards) (*types.MsgSetRewardsResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) SetRewards(ctx context.Context, msg *types.MsgSetRewards) (*types.MsgSetRewardsResponse, error) { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + + provider, err := k.addressCodec.StringToBytes(msg.Provider) + if err != nil { + return nil, sdkerrors.Wrap(err, "invalid authority address") + } // determine if the chain exists - chain, chainFound := k.launchKeeper.GetChain(ctx, msg.LaunchID) - if !chainFound { - return nil, sdkerrors.Wrapf(launchtypes.ErrChainNotFound, "%d", msg.LaunchID) + chain, err := k.launchKeeper.GetChain(ctx, msg.LaunchID) + if err != nil { + return nil, sdkerrors.Wrapf(err, "%d", msg.LaunchID) } + // check coordinator - coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, msg.Provider) + coordID, err := k.profileKeeper.CoordinatorIDFromAddress(ctx, provider) if err != nil { return nil, err } @@ -34,23 +43,23 @@ func (k msgServer) SetRewards(goCtx context.Context, msg *types.MsgSetRewards) ( return nil, sdkerrors.Wrapf(launchtypes.ErrTriggeredLaunch, "%d", msg.LaunchID) } - provider, err := sdk.AccAddressFromBech32(msg.Provider) - if err != nil { - return nil, ignterrors.Criticalf("can't parse provider address %s", err.Error()) - } - var ( previousCoins sdk.Coins previousLastRewardHeight int64 + poolFound bool ) - rewardPool, poolFound := k.GetRewardPool(ctx, msg.LaunchID) - if !poolFound { + rewardPool, err := k.RewardPool.Get(ctx, msg.LaunchID) + if errors.Is(err, collections.ErrNotFound) { + poolFound = false // create the reward pool and transfer tokens if not created yet if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, provider, types.ModuleName, msg.Coins); err != nil { return nil, sdkerrors.Wrap(types.ErrInsufficientFunds, err.Error()) } rewardPool = types.NewRewardPool(msg.LaunchID, 0) + } else if err != nil { + return nil, err } else { + poolFound = true previousCoins = rewardPool.RemainingCoins previousLastRewardHeight = rewardPool.LastRewardHeight if err := SetBalance(ctx, k.bankKeeper, provider, msg.Coins, rewardPool.RemainingCoins); err != nil { @@ -58,23 +67,32 @@ func (k msgServer) SetRewards(goCtx context.Context, msg *types.MsgSetRewards) ( } } + sdkCtx := sdk.UnwrapSDKContext(ctx) if msg.Coins.Empty() || msg.LastRewardHeight == 0 { rewardPool.InitialCoins = sdk.NewCoins() rewardPool.RemainingCoins = sdk.NewCoins() rewardPool.LastRewardHeight = 0 - k.RemoveRewardPool(ctx, msg.LaunchID) - err = ctx.EventManager().EmitTypedEvent(&types.EventRewardPoolRemoved{LaunchID: msg.LaunchID}) + if err := k.RewardPool.Remove(ctx, msg.LaunchID); err != nil { + return nil, err + } + if err := sdkCtx.EventManager().EmitTypedEvent(&types.EventRewardPoolRemoved{LaunchID: msg.LaunchID}); err != nil { + return nil, err + } } else { rewardPool.InitialCoins = msg.Coins rewardPool.RemainingCoins = msg.Coins rewardPool.Provider = msg.Provider rewardPool.LastRewardHeight = msg.LastRewardHeight - k.SetRewardPool(ctx, rewardPool) + if err := k.RewardPool.Set(ctx, rewardPool.LaunchID, rewardPool); err != nil { + return nil, err + } if !poolFound { - err = ctx.EventManager().EmitTypedEvent(&types.EventRewardPoolCreated{ + if err := sdkCtx.EventManager().EmitTypedEvent(&types.EventRewardPoolCreated{ LaunchID: rewardPool.LaunchID, Provider: rewardPool.Provider, - }) + }); err != nil { + return nil, err + } } } @@ -83,19 +101,19 @@ func (k msgServer) SetRewards(goCtx context.Context, msg *types.MsgSetRewards) ( PreviousLastRewardHeight: previousLastRewardHeight, NewCoins: rewardPool.InitialCoins, NewLastRewardHeight: rewardPool.LastRewardHeight, - }, err + }, nil } // SetBalance set balance to Coins on the module account // calling the transfer depending on the balance difference func SetBalance( - ctx sdk.Context, + ctx context.Context, bankKeeper types.BankKeeper, provider sdk.AccAddress, coins sdk.Coins, poolCoins sdk.Coins, ) error { - if coins.DenomsSubsetOf(poolCoins) && coins.IsEqual(poolCoins) { + if coins.DenomsSubsetOf(poolCoins) && coins.Equal(poolCoins) { return nil } if poolCoins != nil && !poolCoins.IsZero() { diff --git a/x/reward/keeper/msg_set_reward_test.go b/x/reward/keeper/msg_set_reward_test.go deleted file mode 100644 index cf4fd985..00000000 --- a/x/reward/keeper/msg_set_reward_test.go +++ /dev/null @@ -1,312 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - launchtypes "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/reward/keeper" - "github.com/tendermint/spn/x/reward/types" -) - -func initRewardPool( - t *testing.T, - sdkCtx sdk.Context, - tk testkeeper.TestKeepers, - ts testkeeper.TestMsgServers, -) types.RewardPool { - var ( - ctx = sdk.WrapSDKContext(sdkCtx) - coordID, provider = ts.CreateCoordinator(ctx, r) - coins = sample.Coins(r) - ) - - launchID := tk.LaunchKeeper.AppendChain(sdkCtx, sample.Chain(r, 1, coordID)) - rewardPool := types.RewardPool{ - Provider: provider.String(), - LaunchID: launchID, - InitialCoins: coins, - RemainingCoins: coins, - LastRewardHeight: 100, - CurrentRewardHeight: 30, - Closed: false, - } - tk.RewardKeeper.SetRewardPool(sdkCtx, rewardPool) - - t.Run("should allow minting of coins to account", func(t *testing.T) { - err := tk.BankKeeper.MintCoins(sdkCtx, types.ModuleName, coins.Add(coins...)) - require.NoError(t, err) - err = tk.BankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, provider, coins) - require.NoError(t, err) - }) - - return rewardPool -} - -func TestMsgSetRewards(t *testing.T) { - var ( - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - ctx = sdk.WrapSDKContext(sdkCtx) - invalidCoord = sample.Address(r) - - rewardPool = initRewardPool(t, sdkCtx, tk, ts) - noBalanceRewardPool = initRewardPool(t, sdkCtx, tk, ts) - emptyCoinsRewardPool = initRewardPool(t, sdkCtx, tk, ts) - zeroRewardHeightRewardPool = initRewardPool(t, sdkCtx, tk, ts) - launchedRewardPool = initRewardPool(t, sdkCtx, tk, ts) - ) - - t.Run("should allow create coordinator", func(t *testing.T) { - invalidCoordMsg := sample.MsgCreateCoordinator(invalidCoord) - _, err := ts.ProfileSrv.CreateCoordinator(ctx, &invalidCoordMsg) - require.NoError(t, err) - }) - - t.Run("should allow find chain", func(t *testing.T) { - launchTriggeredChain, found := tk.LaunchKeeper.GetChain(sdkCtx, launchedRewardPool.LaunchID) - require.True(t, found) - launchTriggeredChain.LaunchTriggered = true - tk.LaunchKeeper.SetChain(sdkCtx, launchTriggeredChain) - }) - - // setup a chain with no reward pool - noPoolCoordID, noPoolCoordAddr := ts.CreateCoordinator(ctx, r) - noPoolChainID := tk.LaunchKeeper.AppendChain(sdkCtx, sample.Chain(r, 0, noPoolCoordID)) - noPoolCoins := sample.Coins(r) - tk.Mint(sdkCtx, noPoolCoordAddr.String(), noPoolCoins) - - noPoolInsufficientFundsChainID := tk.LaunchKeeper.AppendChain(sdkCtx, sample.Chain(r, 0, noPoolCoordID)) - - tests := []struct { - name string - msg types.MsgSetRewards - err error - }{ - { - name: "should allow empty coins to remove the reward pool", - msg: types.MsgSetRewards{ - Provider: emptyCoinsRewardPool.Provider, - LaunchID: emptyCoinsRewardPool.LaunchID, - Coins: sdk.NewCoins(), - LastRewardHeight: 1000, - }, - }, - { - name: "should allow zero reward height to remove the reward pool", - msg: types.MsgSetRewards{ - Provider: zeroRewardHeightRewardPool.Provider, - LaunchID: zeroRewardHeightRewardPool.LaunchID, - Coins: zeroRewardHeightRewardPool.RemainingCoins, - LastRewardHeight: 0, - }, - }, - { - name: "should allow to update rewards in an existent pool", - msg: types.MsgSetRewards{ - Provider: rewardPool.Provider, - LaunchID: rewardPool.LaunchID, - Coins: rewardPool.RemainingCoins, - LastRewardHeight: 1000, - }, - }, - { - name: "should allow to set rewards for a new pool", - msg: types.MsgSetRewards{ - Provider: noPoolCoordAddr.String(), - LaunchID: noPoolChainID, - Coins: noPoolCoins, - LastRewardHeight: 1000, - }, - }, - { - name: "should prevent set rewards when chain not found", - msg: types.MsgSetRewards{ - Provider: rewardPool.Provider, - LaunchID: 9999, - Coins: rewardPool.RemainingCoins, - LastRewardHeight: 1000, - }, - err: launchtypes.ErrChainNotFound, - }, - { - name: "should prevent set rewards when coordinator address not found", - msg: types.MsgSetRewards{ - Provider: sample.Address(r), - LaunchID: rewardPool.LaunchID, - Coins: rewardPool.RemainingCoins, - LastRewardHeight: 1000, - }, - err: profiletypes.ErrCoordAddressNotFound, - }, - { - name: "should prevent set rewards when invalid coordinator id", - msg: types.MsgSetRewards{ - Provider: invalidCoord, - LaunchID: rewardPool.LaunchID, - Coins: rewardPool.RemainingCoins, - LastRewardHeight: 1000, - }, - err: types.ErrInvalidCoordinatorID, - }, - { - name: "should prevent set rewards when launch is triggered for the chain", - msg: types.MsgSetRewards{ - Provider: launchedRewardPool.Provider, - LaunchID: launchedRewardPool.LaunchID, - Coins: launchedRewardPool.RemainingCoins, - LastRewardHeight: 1000, - }, - err: launchtypes.ErrTriggeredLaunch, - }, - { - name: "should prevent update rewards in existing pool when coordinator has insufficient funds", - msg: types.MsgSetRewards{ - Provider: noBalanceRewardPool.Provider, - LaunchID: noBalanceRewardPool.LaunchID, - Coins: sample.Coins(r), - LastRewardHeight: 1000, - }, - err: types.ErrInsufficientFunds, - }, - { - name: "should prevent set rewards for new pool when coordinator has insufficient funds", - msg: types.MsgSetRewards{ - Provider: noPoolCoordAddr.String(), - LaunchID: noPoolInsufficientFundsChainID, - Coins: sample.Coins(r), - LastRewardHeight: 1000, - }, - err: types.ErrInsufficientFunds, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - previousRewardPool, _ := tk.RewardKeeper.GetRewardPool(sdkCtx, tt.msg.LaunchID) - got, err := ts.RewardSrv.SetRewards(ctx, &tt.msg) - if tt.err != nil { - require.ErrorIs(t, tt.err, err) - return - } - require.NoError(t, err) - - require.Equal(t, previousRewardPool.RemainingCoins, got.PreviousCoins) - require.Equal(t, previousRewardPool.LastRewardHeight, got.PreviousLastRewardHeight) - - rewardPool, found := tk.RewardKeeper.GetRewardPool(sdkCtx, tt.msg.LaunchID) - if tt.msg.Coins.Empty() || tt.msg.LastRewardHeight == 0 { - require.False(t, found) - require.Equal(t, int64(0), got.NewLastRewardHeight) - require.Equal(t, sdk.NewCoins(), got.NewCoins) - return - } - require.True(t, found) - require.False(t, rewardPool.Closed) - require.Equal(t, tt.msg.Coins, rewardPool.InitialCoins) - require.Equal(t, tt.msg.Coins, rewardPool.RemainingCoins) - require.Equal(t, tt.msg.Provider, rewardPool.Provider) - require.Equal(t, tt.msg.LastRewardHeight, rewardPool.LastRewardHeight) - - require.Equal(t, tt.msg.Coins, got.NewCoins) - require.Equal(t, tt.msg.LastRewardHeight, got.NewLastRewardHeight) - }) - } -} - -func TestSetBalance(t *testing.T) { - var ( - sdkCtx, tk, _ = testkeeper.NewTestSetup(t) - provider = sample.AccAddress(r) - ) - - type args struct { - provider sdk.AccAddress - coins sdk.Coins - poolCoins sdk.Coins - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "should set new balance", - args: args{ - provider: provider, - coins: sample.Coins(r), - poolCoins: sample.Coins(r), - }, - }, - { - name: "should result in empty reward pool", - args: args{ - provider: provider, - coins: sample.Coins(r), - poolCoins: sdk.NewCoins(), - }, - }, - { - name: "should do nothing with equal coins and pool coins", - args: args{ - provider: provider, - coins: tc.Coins(t, "101aaa,102bbb"), - poolCoins: tc.Coins(t, "101aaa,102bbb"), - }, - }, - { - name: "should send extra coin", - args: args{ - provider: provider, - coins: tc.Coins(t, "101aaa,102bbb"), - poolCoins: tc.Coins(t, "33aaa,22bbb"), - }, - }, - { - name: "should send extra pool coin", - args: args{ - provider: provider, - coins: tc.Coins(t, "101aaa,102bbb"), - poolCoins: tc.Coins(t, "33aaa,22bbb,11ccc"), - }, - }, - { - name: "should send coins to module", - args: args{ - provider: provider, - coins: sample.Coins(r), - poolCoins: nil, - }, - }, - { - name: "should prevent with no account balance", - args: args{ - provider: sample.AccAddress(r), - coins: sample.Coins(r), - poolCoins: sample.Coins(r), - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tk.BankKeeper.MintCoins(sdkCtx, types.ModuleName, tt.args.coins.Add(tt.args.poolCoins...)) - require.NoError(t, err) - err = tk.BankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, provider, tt.args.coins) - require.NoError(t, err) - - err = keeper.SetBalance(sdkCtx, tk.BankKeeper, tt.args.provider, tt.args.coins, tt.args.poolCoins) - if tt.wantErr { - require.Error(t, err) - return - } - - // TODO verify that balances are being set - require.NoError(t, err) - }) - } -} diff --git a/x/reward/keeper/msg_update_params.go b/x/reward/keeper/msg_update_params.go new file mode 100644 index 00000000..b4965f2d --- /dev/null +++ b/x/reward/keeper/msg_update_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + + "github.com/ignite/network/x/reward/types" +) + +func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if _, err := k.addressCodec.StringToBytes(req.Authority); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + + if k.GetAuthority() != req.Authority { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) + } + + if err := req.Params.Validate(); err != nil { + return nil, err + } + + if err := k.Params.Set(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/reward/keeper/msg_update_params_test.go b/x/reward/keeper/msg_update_params_test.go new file mode 100644 index 00000000..c5315443 --- /dev/null +++ b/x/reward/keeper/msg_update_params_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" +) + +func TestMsgUpdateParams(t *testing.T) { + k, ctx, _ := keepertest.RewardKeeper(t) + ms := keeper.NewMsgServerImpl(k) + + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + // default params + testCases := []struct { + name string + input *types.MsgUpdateParams + expErr bool + expErrMsg string + }{ + { + name: "invalid authority", + input: &types.MsgUpdateParams{ + Authority: "invalid", + Params: params, + }, + expErr: true, + expErrMsg: "invalid authority", + }, + { + name: "send enabled param", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: types.Params{}, + }, + expErr: false, + }, + { + name: "all good", + input: &types.MsgUpdateParams{ + Authority: k.GetAuthority(), + Params: params, + }, + expErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + _, err := ms.UpdateParams(ctx, tc.input) + + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expErrMsg) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/reward/keeper/params.go b/x/reward/keeper/params.go deleted file mode 100644 index 74fbf5e8..00000000 --- a/x/reward/keeper/params.go +++ /dev/null @@ -1,17 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/tendermint/spn/x/reward/types" -) - -// GetParams get all parameters as types.Params -func (k Keeper) GetParams(ctx sdk.Context) types.Params { - return types.NewParams() -} - -// SetParams set the params -func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { - k.paramstore.SetParamSet(ctx, ¶ms) -} diff --git a/x/reward/keeper/params_test.go b/x/reward/keeper/params_test.go deleted file mode 100644 index 6a300c0e..00000000 --- a/x/reward/keeper/params_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/x/reward/types" -) - -func TestGetParams(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - params := types.DefaultParams() - - tk.RewardKeeper.SetParams(ctx, params) - - require.EqualValues(t, params, tk.RewardKeeper.GetParams(ctx)) -} diff --git a/x/reward/keeper/query.go b/x/reward/keeper/query.go new file mode 100644 index 00000000..063d446e --- /dev/null +++ b/x/reward/keeper/query.go @@ -0,0 +1,17 @@ +package keeper + +import ( + "github.com/ignite/network/x/reward/types" +) + +var _ types.QueryServer = queryServer{} + +// NewQueryServerImpl returns an implementation of the QueryServer interface +// for the provided Keeper. +func NewQueryServerImpl(k Keeper) types.QueryServer { + return queryServer{k} +} + +type queryServer struct { + k Keeper +} diff --git a/x/reward/keeper/query_params.go b/x/reward/keeper/query_params.go new file mode 100644 index 00000000..06dca029 --- /dev/null +++ b/x/reward/keeper/query_params.go @@ -0,0 +1,29 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/reward/types" +) + +func (q queryServer) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + params, err := q.k.Params.Get(ctx) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/x/reward/keeper/query_params_test.go b/x/reward/keeper/query_params_test.go new file mode 100644 index 00000000..f693a9fa --- /dev/null +++ b/x/reward/keeper/query_params_test.go @@ -0,0 +1,23 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" +) + +func TestParamsQuery(t *testing.T) { + k, ctx, _ := keepertest.RewardKeeper(t) + + qs := keeper.NewQueryServerImpl(k) + params := types.DefaultParams() + require.NoError(t, k.Params.Set(ctx, params)) + + response, err := qs.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/reward/keeper/query_reward_pool.go b/x/reward/keeper/query_reward_pool.go new file mode 100644 index 00000000..8c9eb686 --- /dev/null +++ b/x/reward/keeper/query_reward_pool.go @@ -0,0 +1,50 @@ +package keeper + +import ( + "context" + "errors" + + "cosmossdk.io/collections" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ignite/network/x/reward/types" +) + +func (q queryServer) ListRewardPool(ctx context.Context, req *types.QueryAllRewardPoolRequest) (*types.QueryAllRewardPoolResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + rewardPools, pageRes, err := query.CollectionPaginate( + ctx, + q.k.RewardPool, + req.Pagination, + func(_ uint64, value types.RewardPool) (types.RewardPool, error) { + return value, nil + }, + ) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllRewardPoolResponse{RewardPool: rewardPools, Pagination: pageRes}, nil +} + +func (q queryServer) GetRewardPool(ctx context.Context, req *types.QueryGetRewardPoolRequest) (*types.QueryGetRewardPoolResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + val, err := q.k.RewardPool.Get(ctx, req.LaunchID) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return nil, status.Error(codes.NotFound, "not found") + } + + return nil, status.Error(codes.Internal, "internal error") + } + + return &types.QueryGetRewardPoolResponse{RewardPool: val}, nil +} diff --git a/x/reward/keeper/grpc_reward_pool_test.go b/x/reward/keeper/query_reward_pool_test.go similarity index 64% rename from x/reward/keeper/grpc_reward_pool_test.go rename to x/reward/keeper/query_reward_pool_test.go index 043c39a1..4d847818 100644 --- a/x/reward/keeper/grpc_reward_pool_test.go +++ b/x/reward/keeper/query_reward_pool_test.go @@ -1,57 +1,73 @@ package keeper_test import ( + "context" + "strconv" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/reward/types" + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" ) +// Prevent strconv unused error +var _ = strconv.IntSize + +func createNRewardPool(keeper keeper.Keeper, ctx context.Context, n int) []types.RewardPool { + items := make([]types.RewardPool, n) + for i := range items { + items[i].LaunchID = uint64(i) + + _ = keeper.RewardPool.Set(ctx, items[i].LaunchID, items[i]) + } + return items +} + func TestRewardPoolQuerySingle(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNRewardPool(tk.RewardKeeper, ctx, 2) - for _, tc := range []struct { - name string + k, ctx, _ := keepertest.RewardKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNRewardPool(k, ctx, 2) + tests := []struct { + desc string request *types.QueryGetRewardPoolRequest response *types.QueryGetRewardPoolResponse err error }{ { - name: "should allow valid query 1", + desc: "First", request: &types.QueryGetRewardPoolRequest{ LaunchID: msgs[0].LaunchID, }, response: &types.QueryGetRewardPoolResponse{RewardPool: msgs[0]}, }, { - name: "should allow valid query 2", + desc: "Second", request: &types.QueryGetRewardPoolRequest{ LaunchID: msgs[1].LaunchID, }, response: &types.QueryGetRewardPoolResponse{RewardPool: msgs[1]}, }, { - name: "should return KeyNotFound", + desc: "KeyNotFound", request: &types.QueryGetRewardPoolRequest{ LaunchID: 100000, }, err: status.Error(codes.NotFound, "not found"), }, { - name: "should return InvalidRequest", + desc: "InvalidRequest", err: status.Error(codes.InvalidArgument, "invalid request"), }, - } { - t.Run(tc.name, func(t *testing.T) { - response, err := tk.RewardKeeper.RewardPool(wctx, tc.request) + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + response, err := qs.GetRewardPool(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) } else { @@ -66,9 +82,9 @@ func TestRewardPoolQuerySingle(t *testing.T) { } func TestRewardPoolQueryPaginated(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - wctx := sdk.WrapSDKContext(ctx) - msgs := createNRewardPool(tk.RewardKeeper, ctx, 5) + k, ctx, _ := keepertest.RewardKeeper(t) + qs := keeper.NewQueryServerImpl(k) + msgs := createNRewardPool(k, ctx, 5) request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllRewardPoolRequest { return &types.QueryAllRewardPoolRequest{ @@ -83,7 +99,7 @@ func TestRewardPoolQueryPaginated(t *testing.T) { t.Run("ByOffset", func(t *testing.T) { step := 2 for i := 0; i < len(msgs); i += step { - resp, err := tk.RewardKeeper.RewardPoolAll(wctx, request(nil, uint64(i), uint64(step), false)) + resp, err := qs.ListRewardPool(ctx, request(nil, uint64(i), uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.RewardPool), step) require.Subset(t, @@ -96,7 +112,7 @@ func TestRewardPoolQueryPaginated(t *testing.T) { step := 2 var next []byte for i := 0; i < len(msgs); i += step { - resp, err := tk.RewardKeeper.RewardPoolAll(wctx, request(next, 0, uint64(step), false)) + resp, err := qs.ListRewardPool(ctx, request(next, 0, uint64(step), false)) require.NoError(t, err) require.LessOrEqual(t, len(resp.RewardPool), step) require.Subset(t, @@ -107,7 +123,7 @@ func TestRewardPoolQueryPaginated(t *testing.T) { } }) t.Run("Total", func(t *testing.T) { - resp, err := tk.RewardKeeper.RewardPoolAll(wctx, request(nil, 0, 0, true)) + resp, err := qs.ListRewardPool(ctx, request(nil, 0, 0, true)) require.NoError(t, err) require.Equal(t, len(msgs), int(resp.Pagination.Total)) require.ElementsMatch(t, @@ -116,7 +132,7 @@ func TestRewardPoolQueryPaginated(t *testing.T) { ) }) t.Run("InvalidRequest", func(t *testing.T) { - _, err := tk.RewardKeeper.RewardPoolAll(wctx, nil) + _, err := qs.ListRewardPool(ctx, nil) require.ErrorIs(t, err, status.Error(codes.InvalidArgument, "invalid request")) }) } diff --git a/x/reward/keeper/reward_distribution.go b/x/reward/keeper/reward_distribution.go index c6138fbe..5562e0d9 100644 --- a/x/reward/keeper/reward_distribution.go +++ b/x/reward/keeper/reward_distribution.go @@ -1,16 +1,18 @@ package keeper import ( + "context" + "errors" "fmt" sdkerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - ignterrors "github.com/ignite/modules/pkg/errors" - - spntypes "github.com/tendermint/spn/pkg/types" - "github.com/tendermint/spn/x/reward/types" + ignterrors "github.com/ignite/network/pkg/errors" + networktypes "github.com/ignite/network/pkg/types" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/reward/types" ) // DistributeRewards distributes rewards based on the monitoring packet @@ -25,15 +27,15 @@ import ( // so the reward pool is not closed as long as `lastBlockHeight` does not // reach `rewardPool.LastRewardHeight` func (k Keeper) DistributeRewards( - ctx sdk.Context, + ctx context.Context, launchID uint64, - signatureCounts spntypes.SignatureCounts, + signatureCounts networktypes.SignatureCounts, lastBlockHeight int64, closeRewardPool bool, ) error { // get the reward pool related to the chain - rewardPool, found := k.GetRewardPool(ctx, launchID) - if !found { + rewardPool, err := k.RewardPool.Get(ctx, launchID) + if err != nil { return sdkerrors.Wrapf(types.ErrRewardPoolNotFound, "%d", launchID) } @@ -41,7 +43,7 @@ func (k Keeper) DistributeRewards( return sdkerrors.Wrapf(types.ErrRewardPoolClosed, "%d", launchID) } - provider, err := sdk.AccAddressFromBech32(rewardPool.Provider) + provider, err := k.addressCodec.StringToBytes(rewardPool.Provider) if err != nil { return ignterrors.Criticalf("can't parse the provider address %s", err.Error()) } @@ -57,15 +59,15 @@ func (k Keeper) DistributeRewards( } // only the monitored blocks relative to last reward height are rewarded - blockRatioNumerator := sdk.NewDec(lastBlockHeight).Sub(sdk.NewDec(rewardPool.CurrentRewardHeight)) - blockRatioDenominator := sdk.NewDec(rewardPool.LastRewardHeight).Sub(sdk.NewDec(rewardPool.CurrentRewardHeight)) + blockRatioNumerator := sdkmath.LegacyNewDec(lastBlockHeight).Sub(sdkmath.LegacyNewDec(rewardPool.CurrentRewardHeight)) + blockRatioDenominator := sdkmath.LegacyNewDec(rewardPool.LastRewardHeight).Sub(sdkmath.LegacyNewDec(rewardPool.CurrentRewardHeight)) blockRatio := blockRatioNumerator.Quo(blockRatioDenominator) - if blockRatio.GT(sdk.OneDec()) { - blockRatio = sdk.OneDec() + if blockRatio.GT(sdkmath.LegacyOneDec()) { + blockRatio = sdkmath.LegacyOneDec() } // store the total relative signature distributed to calculate the refund for the round - totalRelativeSignaturesDistributed := sdk.ZeroDec() + totalRelativeSignaturesDistributed := sdkmath.LegacyZeroDec() // store rewards to distributes per address rewardsToDistribute := make(map[string]sdk.Coins) @@ -86,9 +88,11 @@ func (k Keeper) DistributeRewards( // if the operator address is associated with a validator profile, this address is used to receive rewwards // otherwise rewards are distributed to the operator address account valAddr := opAddr - validatorByOpAddr, found := k.profileKeeper.GetValidatorByOperatorAddress(ctx, opAddr) - if found { + validatorByOpAddr, err := k.profileKeeper.GetValidatorByOperatorAddress(ctx, opAddr) + if errors.Is(err, profiletypes.ErrValidatorByOperatorAddressNotFound) { valAddr = validatorByOpAddr.ValidatorAddress + } else if err != nil { + return ignterrors.Criticalf("can't get validator by operator address: %s", err.Error()) } // calculate the total relative signature distributed to calculate the refund for the round @@ -97,7 +101,7 @@ func (k Keeper) DistributeRewards( // compute reward relative to the signature and block count // and update reward pool signatureRatio := signatureCount.RelativeSignatures.Quo( - sdk.NewDecFromInt(sdkmath.NewIntFromUint64(signatureCounts.BlockCount)), + sdkmath.LegacyNewDecFromInt(sdkmath.NewIntFromUint64(signatureCounts.BlockCount)), ) rewards, err := CalculateRewards(blockRatio, signatureRatio, rewardPool.RemainingCoins) if err != nil { @@ -116,14 +120,14 @@ func (k Keeper) DistributeRewards( rewardPool.RemainingCoins = coins // send rewards to the address - account, err := sdk.AccAddressFromBech32(address) + account, err := k.addressCodec.StringToBytes(address) if err != nil { return ignterrors.Criticalf("can't parse address %s", err.Error()) } if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, account, rewards); err != nil { return ignterrors.Criticalf("send rewards error: %s", err.Error()) } - if err := ctx.EventManager().EmitTypedEvent(&types.EventRewardsDistributed{ + if err := sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&types.EventRewardsDistributed{ LaunchID: launchID, Receiver: address, Rewards: rewards, @@ -146,15 +150,13 @@ func (k Keeper) DistributeRewards( // close the pool rewardPool.Closed = true rewardPool.RemainingCoins = rewardPool.RemainingCoins.Sub(rewardPool.RemainingCoins...) // sub coins transferred - k.SetRewardPool(ctx, rewardPool) - - return nil + return k.RewardPool.Set(ctx, rewardPool.LaunchID, rewardPool) } // Otherwise, the refund is relative to the block ratio and the reward pool is updated // refundRatio is blockCount. // This is sum of signaturesRelative values from validator to compute refund - blockCount := sdk.NewDecFromInt(sdkmath.NewIntFromUint64(signatureCounts.BlockCount)) + blockCount := sdkmath.LegacyNewDecFromInt(sdkmath.NewIntFromUint64(signatureCounts.BlockCount)) refundRatioNumerator := blockCount.Sub(totalRelativeSignaturesDistributed) refundRatio := refundRatioNumerator.Quo(blockCount) refund, err := CalculateRewards(blockRatio, refundRatio, rewardPool.RemainingCoins) @@ -182,17 +184,16 @@ func (k Keeper) DistributeRewards( // update the current reward height for next reward rewardPool.CurrentRewardHeight = lastBlockHeight - k.SetRewardPool(ctx, rewardPool) - return nil + return k.RewardPool.Set(ctx, rewardPool.LaunchID, rewardPool) } // CalculateRewards calculates the reward relative to the signature and block ratio -func CalculateRewards(blockRatio, signatureRatio sdk.Dec, coins sdk.Coins) (sdk.Coins, error) { +func CalculateRewards(blockRatio, signatureRatio sdkmath.LegacyDec, coins sdk.Coins) (sdk.Coins, error) { // ratio can't be greater than one - if blockRatio.GT(sdk.OneDec()) { + if blockRatio.GT(sdkmath.LegacyOneDec()) { return nil, fmt.Errorf("block ratio is greater than 1 %s", blockRatio.String()) } - if signatureRatio.GT(sdk.OneDec()) { + if signatureRatio.GT(sdkmath.LegacyOneDec()) { return nil, fmt.Errorf("signature ratio is greater than 1 %s", signatureRatio.String()) } @@ -204,7 +205,7 @@ func CalculateRewards(blockRatio, signatureRatio sdk.Dec, coins sdk.Coins) (sdk. // calculate rewards rewards := sdk.NewCoins() for _, coin := range coins { - amount := blockRatio.Mul(signatureRatio).Mul(sdk.NewDecFromInt(coin.Amount)) + amount := blockRatio.Mul(signatureRatio).Mul(sdkmath.LegacyNewDecFromInt(coin.Amount)) coin.Amount = amount.TruncateInt() rewards = rewards.Add(coin) } diff --git a/x/reward/keeper/reward_distribution_test.go b/x/reward/keeper/reward_distribution_test.go index 994ffd29..d5a33dfa 100644 --- a/x/reward/keeper/reward_distribution_test.go +++ b/x/reward/keeper/reward_distribution_test.go @@ -4,24 +4,25 @@ import ( "fmt" "testing" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - ignterrors "github.com/ignite/modules/pkg/errors" - - spntypes "github.com/tendermint/spn/pkg/types" - tc "github.com/tendermint/spn/testutil/constructor" - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - profiletypes "github.com/tendermint/spn/x/profile/types" - "github.com/tendermint/spn/x/reward/keeper" - "github.com/tendermint/spn/x/reward/types" + ignterrors "github.com/ignite/network/pkg/errors" + spntypes "github.com/ignite/network/pkg/types" + tc "github.com/ignite/network/testutil/constructor" + testkeeper "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/sample" + profiletypes "github.com/ignite/network/x/profile/types" + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" ) func TestCalculateRewards(t *testing.T) { type args struct { - blockRatio sdk.Dec - sigRatio sdk.Dec + blockRatio sdkmath.LegacyDec + sigRatio sdkmath.LegacyDec coins sdk.Coins } tests := []struct { @@ -33,8 +34,8 @@ func TestCalculateRewards(t *testing.T) { { name: "should give zero rewards with zero ratios and zero coins ", args: args{ - blockRatio: sdk.ZeroDec(), - sigRatio: sdk.ZeroDec(), + blockRatio: sdkmath.LegacyZeroDec(), + sigRatio: sdkmath.LegacyZeroDec(), coins: sdk.NewCoins(), }, want: sdk.NewCoins(), @@ -42,8 +43,8 @@ func TestCalculateRewards(t *testing.T) { { name: "should give zero rewards with nil coins ", args: args{ - blockRatio: sdk.OneDec(), - sigRatio: sdk.OneDec(), + blockRatio: sdkmath.LegacyOneDec(), + sigRatio: sdkmath.LegacyOneDec(), coins: nil, }, want: sdk.NewCoins(), @@ -51,8 +52,8 @@ func TestCalculateRewards(t *testing.T) { { name: "should give 0 rewards with 0 block ratio ", args: args{ - blockRatio: sdk.ZeroDec(), - sigRatio: sdk.OneDec(), + blockRatio: sdkmath.LegacyZeroDec(), + sigRatio: sdkmath.LegacyOneDec(), coins: tc.Coins(t, "10aaa,10bbb,10ccc"), }, want: sdk.NewCoins(), @@ -60,8 +61,8 @@ func TestCalculateRewards(t *testing.T) { { name: "should give 0 rewards with 0 signature ratio ", args: args{ - blockRatio: sdk.OneDec(), - sigRatio: sdk.ZeroDec(), + blockRatio: sdkmath.LegacyOneDec(), + sigRatio: sdkmath.LegacyZeroDec(), coins: tc.Coins(t, "10aaa,10bbb,10ccc"), }, want: sdk.NewCoins(), @@ -69,8 +70,8 @@ func TestCalculateRewards(t *testing.T) { { name: "should give all rewards with full block and signature ratios ", args: args{ - blockRatio: sdk.OneDec(), - sigRatio: sdk.OneDec(), + blockRatio: sdkmath.LegacyOneDec(), + sigRatio: sdkmath.LegacyOneDec(), coins: tc.Coins(t, "10aaa,10bbb,10ccc"), }, want: tc.Coins(t, "10aaa,10bbb,10ccc"), @@ -79,7 +80,7 @@ func TestCalculateRewards(t *testing.T) { name: "should give half rewards with 0.5 block ratio ", args: args{ blockRatio: tc.Dec(t, "0.5"), - sigRatio: sdk.OneDec(), + sigRatio: sdkmath.LegacyOneDec(), coins: tc.Coins(t, "10aaa,100bbb,1000ccc"), }, want: tc.Coins(t, "5aaa,50bbb,500ccc"), @@ -87,7 +88,7 @@ func TestCalculateRewards(t *testing.T) { { name: "should give half rewards with 0.5 signature ratio ", args: args{ - blockRatio: sdk.OneDec(), + blockRatio: sdkmath.LegacyOneDec(), sigRatio: tc.Dec(t, "0.5"), coins: tc.Coins(t, "10aaa,100bbb,1000ccc"), }, @@ -106,7 +107,7 @@ func TestCalculateRewards(t *testing.T) { name: "should be truncate with decimal rewards ", args: args{ blockRatio: tc.Dec(t, "0.5"), - sigRatio: sdk.OneDec(), + sigRatio: sdkmath.LegacyOneDec(), coins: tc.Coins(t, "1aaa,11bbb,101ccc"), }, want: tc.Coins(t, "5bbb,50ccc"), @@ -124,7 +125,7 @@ func TestCalculateRewards(t *testing.T) { name: "should be empty coins rewards if all rewards are fully truncated", args: args{ blockRatio: tc.Dec(t, "0.0001"), - sigRatio: sdk.OneDec(), + sigRatio: sdkmath.LegacyOneDec(), coins: tc.Coins(t, "10aaa,100bbb,1000ccc"), }, want: sdk.NewCoins(), @@ -132,8 +133,8 @@ func TestCalculateRewards(t *testing.T) { { name: "should return empty coins with empty coins ", args: args{ - blockRatio: sdk.OneDec(), - sigRatio: sdk.OneDec(), + blockRatio: sdkmath.LegacyOneDec(), + sigRatio: sdkmath.LegacyOneDec(), coins: sdk.NewCoins(), }, want: sdk.NewCoins(), @@ -142,7 +143,7 @@ func TestCalculateRewards(t *testing.T) { name: "should prevent using block ratio greater than 1", args: args{ blockRatio: tc.Dec(t, "1.000001"), - sigRatio: sdk.ZeroDec(), + sigRatio: sdkmath.LegacyZeroDec(), coins: sample.Coins(r), }, wantErr: true, @@ -150,7 +151,7 @@ func TestCalculateRewards(t *testing.T) { { name: "should prevent using signature ratio greater than 1", args: args{ - blockRatio: sdk.ZeroDec(), + blockRatio: sdkmath.LegacyZeroDec(), sigRatio: tc.Dec(t, "1.000001"), coins: sample.Coins(r), }, @@ -165,7 +166,7 @@ func TestCalculateRewards(t *testing.T) { return } require.NoError(t, err) - require.True(t, got.IsEqual(tt.want), + require.True(t, got.Equal(tt.want), fmt.Sprintf("want: %s, got: %s", tt.want.String(), got.String()), ) }) @@ -185,26 +186,35 @@ func TestKeeper_DistributeRewards(t *testing.T) { ) // set validator profiles - tk.ProfileKeeper.SetValidator(ctx, profiletypes.Validator{ + err := tk.ProfileKeeper.Validator.Set(ctx, valFoo, profiletypes.Validator{ Address: valFoo, OperatorAddresses: []string{valOpAddrFoo}, }) - tk.ProfileKeeper.SetValidatorByOperatorAddress(ctx, profiletypes.ValidatorByOperatorAddress{ + require.NoError(t, err) + + err = tk.ProfileKeeper.ValidatorByOperatorAddress.Set(ctx, valOpAddrFoo, profiletypes.ValidatorByOperatorAddress{ ValidatorAddress: valFoo, OperatorAddress: valOpAddrFoo, }) - tk.ProfileKeeper.SetValidator(ctx, profiletypes.Validator{ + require.NoError(t, err) + + err = tk.ProfileKeeper.Validator.Set(ctx, valBar, profiletypes.Validator{ Address: valBar, OperatorAddresses: []string{valOpAddrBar}, }) - tk.ProfileKeeper.SetValidatorByOperatorAddress(ctx, profiletypes.ValidatorByOperatorAddress{ + require.NoError(t, err) + + err = tk.ProfileKeeper.ValidatorByOperatorAddress.Set(ctx, valOpAddrBar, profiletypes.ValidatorByOperatorAddress{ ValidatorAddress: valBar, OperatorAddress: valOpAddrBar, }) - tk.ProfileKeeper.SetValidatorByOperatorAddress(ctx, profiletypes.ValidatorByOperatorAddress{ + require.NoError(t, err) + + err = tk.ProfileKeeper.ValidatorByOperatorAddress.Set(ctx, notFoundValAddr, profiletypes.ValidatorByOperatorAddress{ ValidatorAddress: sample.Address(r), OperatorAddress: notFoundValAddr, }) + require.NoError(t, err) type args struct { launchID uint64 @@ -623,7 +633,7 @@ func TestKeeper_DistributeRewards(t *testing.T) { t.Run(tt.name, func(t *testing.T) { // set test reward pool if contains coins if tt.rewardPool.RemainingCoins != nil { - tk.RewardKeeper.SetRewardPool(ctx, tt.rewardPool) + require.NoError(t, tk.RewardKeeper.RewardPool.Set(ctx, tt.rewardPool.LaunchID, tt.rewardPool)) err := tk.BankKeeper.MintCoins(ctx, types.ModuleName, tt.rewardPool.RemainingCoins) require.NoError(t, err) } @@ -640,8 +650,8 @@ func TestKeeper_DistributeRewards(t *testing.T) { } require.NoError(t, err) - rewardPool, found := tk.RewardKeeper.GetRewardPool(ctx, tt.args.launchID) - require.True(t, found) + rewardPool, err := tk.RewardKeeper.RewardPool.Get(ctx, tt.args.launchID) + require.NoError(t, err) require.Equal(t, tt.rewardPool.InitialCoins, rewardPool.InitialCoins) require.Equal(t, tt.rewardPool.Provider, rewardPool.Provider) @@ -659,7 +669,7 @@ func TestKeeper_DistributeRewards(t *testing.T) { require.NoError(t, err) balance := tk.BankKeeper.GetAllBalances(ctx, wantAcc) - require.True(t, balance.IsEqual(wantBalance), + require.True(t, balance.Equal(wantBalance), fmt.Sprintf("address: %s, want: %s, got: %s", wantAddr, wantBalance.String(), balance.String(), ), @@ -680,13 +690,13 @@ func TestKeeper_DistributeRewards(t *testing.T) { totalDistributedBalances.String(), tt.rewardPool.RemainingCoins.String(), ) - require.True(t, rewardPool.RemainingCoins.IsEqual(expectedRemainingCoins), "expected remaining coins %s, got %s", + require.True(t, rewardPool.RemainingCoins.Equal(expectedRemainingCoins), "expected remaining coins %s, got %s", expectedRemainingCoins.String(), rewardPool.RemainingCoins.String(), ) // remove the reward pool used for the test - tk.RewardKeeper.RemoveRewardPool(ctx, tt.rewardPool.LaunchID) + require.NoError(t, tk.RewardKeeper.RewardPool.Remove(ctx, tt.rewardPool.LaunchID)) }) } } diff --git a/x/reward/keeper/reward_pool.go b/x/reward/keeper/reward_pool.go index e726b133..0f48c1d2 100644 --- a/x/reward/keeper/reward_pool.go +++ b/x/reward/keeper/reward_pool.go @@ -1,54 +1,17 @@ package keeper import ( - "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/spn/x/reward/types" + "github.com/ignite/network/x/reward/types" ) -// SetRewardPool set a specific rewardPool in the store from its index -func (k Keeper) SetRewardPool(ctx sdk.Context, rewardPool types.RewardPool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RewardPoolKeyPrefix)) - b := k.cdc.MustMarshal(&rewardPool) - store.Set(types.RewardPoolKey(rewardPool.LaunchID), b) -} - -// GetRewardPool returns a rewardPool from its index -func (k Keeper) GetRewardPool(ctx sdk.Context, launchID uint64) (val types.RewardPool, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RewardPoolKeyPrefix)) - - b := store.Get(types.RewardPoolKey( - launchID, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveRewardPool removes a rewardPool from the store -func (k Keeper) RemoveRewardPool(ctx sdk.Context, launchID uint64) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RewardPoolKeyPrefix)) - store.Delete(types.RewardPoolKey( - launchID, - )) -} - -// GetAllRewardPool returns all rewardPool -func (k Keeper) GetAllRewardPool(ctx sdk.Context) (list []types.RewardPool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.RewardPoolKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.RewardPool - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return +// ListRewardPool returns all rewardPool +func (k Keeper) ListRewardPool(ctx sdk.Context) ([]types.RewardPool, error) { + rewardPools := make([]types.RewardPool, 0) + err := k.RewardPool.Walk(ctx, nil, func(_ uint64, rewardPool types.RewardPool) (bool, error) { + rewardPools = append(rewardPools, rewardPool) + return false, nil + }) + return rewardPools, err } diff --git a/x/reward/keeper/reward_pool_test.go b/x/reward/keeper/reward_pool_test.go deleted file mode 100644 index c4afcfcb..00000000 --- a/x/reward/keeper/reward_pool_test.go +++ /dev/null @@ -1,60 +0,0 @@ -package keeper_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/nullify" - "github.com/tendermint/spn/x/reward/keeper" - "github.com/tendermint/spn/x/reward/types" -) - -func createNRewardPool(k *keeper.Keeper, ctx sdk.Context, n int) []types.RewardPool { - items := make([]types.RewardPool, n) - for i := range items { - items[i].LaunchID = uint64(i) - k.SetRewardPool(ctx, items[i]) - } - return items -} - -func TestRewardPoolGet(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNRewardPool(tk.RewardKeeper, ctx, 10) - for _, item := range items { - rst, found := tk.RewardKeeper.GetRewardPool(ctx, - item.LaunchID, - ) - require.True(t, found) - require.Equal(t, - nullify.Fill(&item), - nullify.Fill(&rst), - ) - } -} - -func TestRewardPoolRemove(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNRewardPool(tk.RewardKeeper, ctx, 10) - for _, item := range items { - tk.RewardKeeper.RemoveRewardPool(ctx, - item.LaunchID, - ) - _, found := tk.RewardKeeper.GetRewardPool(ctx, - item.LaunchID, - ) - require.False(t, found) - } -} - -func TestRewardPoolGetAll(t *testing.T) { - ctx, tk, _ := testkeeper.NewTestSetup(t) - items := createNRewardPool(tk.RewardKeeper, ctx, 10) - require.ElementsMatch(t, - nullify.Fill(items), - nullify.Fill(tk.RewardKeeper.GetAllRewardPool(ctx)), - ) -} diff --git a/x/reward/module.go b/x/reward/module.go deleted file mode 100644 index 09e987ff..00000000 --- a/x/reward/module.go +++ /dev/null @@ -1,167 +0,0 @@ -package reward - -import ( - "context" - "encoding/json" - "fmt" - - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - - "github.com/tendermint/spn/x/reward/client/cli" - "github.com/tendermint/spn/x/reward/keeper" - "github.com/tendermint/spn/x/reward/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} -) - -// ---------------------------------------------------------------------------- -// AppModuleBasic -// ---------------------------------------------------------------------------- - -// AppModuleBasic implements the AppModuleBasic interface for the reward module. -type AppModuleBasic struct { - cdc codec.BinaryCodec -} - -func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { - return AppModuleBasic{cdc: cdc} -} - -// Name returns the reward module's name. -func (AppModuleBasic) Name() string { - return types.ModuleName -} - -func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - types.RegisterCodec(cdc) -} - -// RegisterInterfaces registers the reward module's interface types -func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { - types.RegisterInterfaces(reg) -} - -// DefaultGenesis returns the reward module's default genesis state. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesis()) -} - -// ValidateGenesis performs genesis state validation for the reward module. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - var genState types.GenesisState - if err := cdc.UnmarshalJSON(bz, &genState); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - return genState.Validate() -} - -// RegisterRESTRoutes registers the reward module's REST service handlers. -func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { -} - -// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the reward module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint -} - -// GetTxCmd returns the reward module's root tx command. -func (a AppModuleBasic) GetTxCmd() *cobra.Command { - return cli.GetTxCmd() -} - -// GetQueryCmd returns the reward module's root query command. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd(types.StoreKey) -} - -// ---------------------------------------------------------------------------- -// AppModule -// ---------------------------------------------------------------------------- - -// AppModule implements the AppModule interface for the reward module. -type AppModule struct { - AppModuleBasic - - keeper keeper.Keeper - accountKeeper types.AccountKeeper - bankKeeper types.BankKeeper -} - -func NewAppModule( - cdc codec.Codec, - keeper keeper.Keeper, - accountKeeper types.AccountKeeper, - bankKeeper types.BankKeeper, -) AppModule { - return AppModule{ - AppModuleBasic: NewAppModuleBasic(cdc), - keeper: keeper, - accountKeeper: accountKeeper, - bankKeeper: bankKeeper, - } -} - -// Name returns the reward module's name. -func (am AppModule) Name() string { - return am.AppModuleBasic.Name() -} - -// QuerierRoute returns the reward module's query routing key. -func (AppModule) QuerierRoute() string { return types.QuerierRoute } - -// RegisterServices registers a GRPC query service to respond to the -// module-specific GRPC queries. -func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) -} - -// RegisterInvariants registers the reward module's invariants. -func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { - keeper.RegisterInvariants(ir, am.keeper) -} - -// InitGenesis performs the reward module's genesis initialization It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { - var genState types.GenesisState - // Initialize global index to index in genesis state - cdc.MustUnmarshalJSON(gs, &genState) - - InitGenesis(ctx, am.keeper, genState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the reward module's exported genesis state as raw JSON bytes. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - genState := ExportGenesis(ctx, am.keeper) - return cdc.MustMarshalJSON(genState) -} - -// ConsensusVersion implements ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 2 } - -// BeginBlock executes all ABCI BeginBlock logic respective to the reward module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock executes all ABCI EndBlock logic respective to the reward module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} diff --git a/x/reward/module/autocli.go b/x/reward/module/autocli.go new file mode 100644 index 00000000..408aac02 --- /dev/null +++ b/x/reward/module/autocli.go @@ -0,0 +1,53 @@ +package reward + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + + modulev1 "github.com/ignite/network/api/network/reward/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Query_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Shows the parameters of the module", + }, + { + RpcMethod: "ListRewardPool", + Use: "list-reward-pool", + Short: "List all RewardPool", + }, + { + RpcMethod: "GetRewardPool", + Use: "get-reward-pool [launch-id]", + Short: "Gets a RewardPool", + Alias: []string{"show-reward-pool"}, + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}}, + }, + // this line is used by ignite scaffolding # autocli/query + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: modulev1.Msg_ServiceDesc.ServiceName, + EnhanceCustomCommand: true, // only required if you want to use the custom command + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "UpdateParams", + Skip: true, // skipped because authority gated + }, + { + RpcMethod: "SetRewards", + Use: "set-rewards [launch-id] [coins] [last-reward-height]", + Short: "Send a SetRewards tx", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "launchID"}, {ProtoField: "coins"}, {ProtoField: "lastRewardHeight"}}, + }, + // this line is used by ignite scaffolding # autocli/tx + }, + }, + } +} diff --git a/x/reward/module/genesis.go b/x/reward/module/genesis.go new file mode 100644 index 00000000..a1b1ede8 --- /dev/null +++ b/x/reward/module/genesis.go @@ -0,0 +1,44 @@ +package reward + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) error { + // Set all the rewardPool + for _, elem := range genState.RewardPoolList { + if err := k.RewardPool.Set(ctx, elem.LaunchID, elem); err != nil { + return err + } + } + + // this line is used by starport scaffolding # genesis/module/init + + return k.Params.Set(ctx, genState.Params) +} + +// ExportGenesis returns the module's exported genesis. +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) { + var err error + + genesis := types.DefaultGenesis() + genesis.Params, err = k.Params.Get(ctx) + if err != nil { + return nil, err + } + + if err := k.RewardPool.Walk(ctx, nil, func(_ uint64, val types.RewardPool) (stop bool, err error) { + genesis.RewardPoolList = append(genesis.RewardPoolList, val) + return false, nil + }); err != nil { + return nil, err + } + + // this line is used by starport scaffolding # genesis/module/export + + return genesis, nil +} diff --git a/x/reward/module/genesis_test.go b/x/reward/module/genesis_test.go new file mode 100644 index 00000000..5c0c69c4 --- /dev/null +++ b/x/reward/module/genesis_test.go @@ -0,0 +1,41 @@ +package reward_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/ignite/network/testutil/keeper" + "github.com/ignite/network/testutil/nullify" + reward "github.com/ignite/network/x/reward/module" + "github.com/ignite/network/x/reward/types" +) + +func TestGenesis(t *testing.T) { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + + RewardPoolList: []types.RewardPool{ + { + LaunchID: 0, + }, + { + LaunchID: 1, + }, + }, + // this line is used by starport scaffolding # genesis/test/state + } + + k, ctx, _ := keepertest.RewardKeeper(t) + err := reward.InitGenesis(ctx, k, genesisState) + require.NoError(t, err) + got, err := reward.ExportGenesis(ctx, k) + require.NoError(t, err) + require.NotNil(t, got) + + nullify.Fill(&genesisState) + nullify.Fill(got) + + require.ElementsMatch(t, genesisState.RewardPoolList, got.RewardPoolList) + // this line is used by starport scaffolding # genesis/test/assert +} diff --git a/x/reward/module/module.go b/x/reward/module/module.go new file mode 100644 index 00000000..d9f9aba0 --- /dev/null +++ b/x/reward/module/module.go @@ -0,0 +1,229 @@ +package reward + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + + // this line is used by starport scaffolding # 1 + + modulev1 "github.com/ignite/network/api/network/reward/module/v1" + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasInvariants = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface that defines the +// independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module, which is used +// to marshal and unmarshal structs to/from []byte in order to persist them in the module's KVStore. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers a module's interface types and their concrete implementations as proto.Message. +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns a default GenesisState for the module, marshalled to json.RawMessage. +// The default GenesisState need to be defined by the module developer and is primarily used for testing. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis used to validate the GenesisState, given in its json.RawMessage form. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper)) +} + +// RegisterInvariants registers the invariants of the module. If an invariant deviates from its predicted value, the InvariantRegistry triggers appropriate logic (most often the chain will be halted) +func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { + keeper.RegisterInvariants(ir, am.keeper) +} + +// InitGenesis performs the module's genesis initialization. It returns no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + if err := InitGenesis(ctx, am.keeper, genState); err != nil { + panic(err) + } +} + +// ExportGenesis returns the module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState, err := ExportGenesis(ctx, am.keeper) + if err != nil { + panic(err) + } + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion is a sequence number for state-breaking change of the module. +// It should be incremented on each consensus-breaking change introduced by the module. +// To avoid wrong/empty versions, the initial version should be set to 1. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block. +// The end block implementation is optional. +func (am AppModule) EndBlock(_ context.Context) error { + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// ---------------------------------------------------------------------------- +// App Wiring Setup +// ---------------------------------------------------------------------------- + +func init() { + appmodule.Register( + &modulev1.Module{}, + appmodule.Provide(ProvideModule), + ) +} + +type ModuleInputs struct { + depinject.In + + AddressCodec address.Codec + StoreService store.KVStoreService + Cdc codec.Codec + Config *modulev1.Module + Logger log.Logger + + AccountKeeper types.AccountKeeper + BankKeeper types.BankKeeper + ProfileKeeper types.ProfileKeeper + LaunchKeeper types.LaunchKeeper +} + +type ModuleOutputs struct { + depinject.Out + + RewardKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + k := keeper.NewKeeper( + in.Cdc, + in.AddressCodec, + in.StoreService, + in.Logger, + authority.String(), + in.AccountKeeper, + in.BankKeeper, + in.ProfileKeeper, + in.LaunchKeeper, + ) + m := NewAppModule( + in.Cdc, + k, + in.AccountKeeper, + in.BankKeeper, + ) + + return ModuleOutputs{RewardKeeper: k, Module: m} +} diff --git a/x/reward/module_simulation.go b/x/reward/module/simulation.go similarity index 58% rename from x/reward/module_simulation.go rename to x/reward/module/simulation.go index 777d846d..5f949e9a 100644 --- a/x/reward/module_simulation.go +++ b/x/reward/module/simulation.go @@ -8,10 +8,14 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - rewardsimulation "github.com/tendermint/spn/x/reward/simulation" - "github.com/tendermint/spn/x/reward/types" + "github.com/ignite/network/testutil/sample" + rewardsimulation "github.com/ignite/network/x/reward/simulation" + "github.com/ignite/network/x/reward/types" ) +// avoid unused import issue +var _ = sample.AccAddress + const ( opWeightMsgSetRewards = "op_weight_msg_set_rewards" defaultWeightMsgSetRewards int = 50 @@ -19,47 +23,53 @@ const ( // this line is used by starport scaffolding # simapp/module/const ) -// GenerateGenesisState creates a randomized GenState of the module +// GenerateGenesisState creates a randomized GenState of the module. func (AppModule) GenerateGenesisState(simState *module.SimulationState) { accs := make([]string, len(simState.Accounts)) for i, acc := range simState.Accounts { accs[i] = acc.Address.String() } rewardGenesis := types.GenesisState{ + Params: types.DefaultParams(), // this line is used by starport scaffolding # simapp/module/genesisState } simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&rewardGenesis) } -// ProposalContents doesn't return any content functions for governance proposals -func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { - return nil -} - -// RandomizedParams creates randomized param changes for the simulator -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { - return []simtypes.LegacyParamChange{} -} - -// RegisterStoreDecoder registers a decoder -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} +// RegisterStoreDecoder registers a decoder. +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} // WeightedOperations returns the all the gov module operations with their respective weights. func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { operations := make([]simtypes.WeightedOperation, 0) var weightMsgSetRewards int - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgSetRewards, &weightMsgSetRewards, nil, + simState.AppParams.GetOrGenerate(opWeightMsgSetRewards, &weightMsgSetRewards, nil, func(_ *rand.Rand) { weightMsgSetRewards = defaultWeightMsgSetRewards }, ) operations = append(operations, simulation.NewWeightedOperation( weightMsgSetRewards, - rewardsimulation.SimulateMsgSetRewards(am.accountKeeper, am.bankKeeper, am.keeper), + rewardsimulation.SimulateMsgSetRewards(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig), )) // this line is used by starport scaffolding # simapp/module/operation return operations } + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (am AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + simulation.NewWeightedProposalMsg( + opWeightMsgSetRewards, + defaultWeightMsgSetRewards, + func(r *rand.Rand, ctx sdk.Context, accs []simtypes.Account) sdk.Msg { + rewardsimulation.SimulateMsgSetRewards(am.accountKeeper, am.bankKeeper, am.keeper, simState.TxConfig) + return nil + }, + ), + // this line is used by starport scaffolding # simapp/module/OpMsg + } +} diff --git a/x/reward/simulation/store.go b/x/reward/simulation/helpers.go similarity index 59% rename from x/reward/simulation/store.go rename to x/reward/simulation/helpers.go index d8ab2816..2b43a41b 100644 --- a/x/reward/simulation/store.go +++ b/x/reward/simulation/helpers.go @@ -5,9 +5,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - launchtypes "github.com/tendermint/spn/x/launch/types" - "github.com/tendermint/spn/x/reward/keeper" - "github.com/tendermint/spn/x/reward/types" + launchtypes "github.com/ignite/network/x/launch/types" + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" ) // FindRandomChainWithCoordBalance find a random chain from store @@ -20,13 +20,16 @@ func FindRandomChainWithCoordBalance( checkBalance bool, wantCoins sdk.Coins, ) (chain launchtypes.Chain, found bool) { - chains := k.GetLaunchKeeper().GetAllChain(ctx) + chains, err := k.GetLaunchKeeper().Chains(ctx) + if err != nil { + return launchtypes.Chain{}, false + } r.Shuffle(len(chains), func(i, j int) { chains[i], chains[j] = chains[j], chains[i] }) for _, c := range chains { - _, poolFound := k.GetRewardPool(ctx, c.LaunchID) - if hasRewardPool != poolFound { + _, err := k.RewardPool.Get(ctx, c.LaunchID) + if hasRewardPool != (err != nil) { continue } @@ -36,18 +39,18 @@ func FindRandomChainWithCoordBalance( } // check if the coordinator is still in the store and active - coord, coordFound := k.GetProfileKeeper().GetCoordinator(ctx, c.CoordinatorID) - if !coordFound || !coord.Active { + coordinator, err := k.GetProfileKeeper().GetCoordinator(ctx, c.CoordinatorID) + if err != nil || !coordinator.Active { continue } - coordAccAddr, err := sdk.AccAddressFromBech32(coord.Address) + coordinatorAccAddr, err := k.AddressCodec().StringToBytes(coordinator.Address) if err != nil { continue } if checkBalance { - balance := bk.SpendableCoins(ctx, coordAccAddr) + balance := bk.SpendableCoins(ctx, coordinatorAccAddr) if !balance.IsAllGTE(wantCoins) { continue } diff --git a/x/reward/simulation/simulation.go b/x/reward/simulation/set_rewards.go similarity index 75% rename from x/reward/simulation/simulation.go rename to x/reward/simulation/set_rewards.go index bea0102b..4eb514ac 100644 --- a/x/reward/simulation/simulation.go +++ b/x/reward/simulation/set_rewards.go @@ -5,14 +5,13 @@ import ( sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/baseapp" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + "github.com/cosmos/cosmos-sdk/client" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - sdksimulation "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/tendermint/spn/testutil/encoding" - "github.com/tendermint/spn/testutil/simulation" - "github.com/tendermint/spn/x/reward/keeper" - "github.com/tendermint/spn/x/reward/types" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/ignite/network/x/reward/keeper" + "github.com/ignite/network/x/reward/types" ) const ( @@ -28,6 +27,7 @@ func SimulateMsgSetRewards( ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper, + txGen client.TxConfig, ) simtypes.Operation { return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { @@ -51,17 +51,17 @@ func SimulateMsgSetRewards( return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "no viable chain to be found"), nil, nil } - coordinator, found := k.GetProfileKeeper().GetCoordinator(ctx, chain.CoordinatorID) - if !found { + coordinator, err := k.GetProfileKeeper().GetCoordinator(ctx, chain.CoordinatorID) + if err != nil { return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "chain does not have a coordinator"), nil, nil } - coordAccAddr, err := sdk.AccAddressFromBech32(coordinator.Address) + coordAccAddr, err := k.AddressCodec().StringToBytes(coordinator.Address) if err != nil { return simtypes.NoOpMsg(types.ModuleName, msg.Type(), err.Error()), nil, err } - simAccount, found := simtypes.FindAccount(accs, coordAccAddr) + simAccount, found := simtypes.FindAccount(accs, sdk.AccAddress(coordAccAddr)) if !found { return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "simulation account not found for chain coordinator"), nil, nil } @@ -78,7 +78,10 @@ func SimulateMsgSetRewards( msg.LastRewardHeight = ctx.BlockHeight() + r.Int63n(1000) msg.Coins = wantCoin case ActionEdit: - pool, _ := k.GetRewardPool(ctx, chain.LaunchID) + pool, err := k.RewardPool.Get(ctx, chain.LaunchID) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), err.Error()), nil, err + } msg.LastRewardHeight = pool.LastRewardHeight + r.Int63n(1000) msg.Coins = wantCoin case ActionClose: @@ -86,13 +89,12 @@ func SimulateMsgSetRewards( msg.Coins = sdk.NewCoins() } - txCtx := sdksimulation.OperationInput{ + txCtx := simulation.OperationInput{ R: r, App: app, - TxGen: encoding.MakeTestEncodingConfig().TxConfig, + TxGen: txGen, Cdc: nil, Msg: msg, - MsgType: msg.Type(), Context: ctx, SimAccount: simAccount, AccountKeeper: ak, @@ -100,7 +102,6 @@ func SimulateMsgSetRewards( ModuleName: types.ModuleName, CoinsSpentInMsg: wantCoin, } - - return simulation.GenAndDeliverTxWithRandFees(txCtx, simtestutil.DefaultGenTxGas) + return simulation.GenAndDeliverTxWithRandFees(txCtx) } } diff --git a/x/reward/simulation/store_test.go b/x/reward/simulation/store_test.go deleted file mode 100644 index 087a3e8b..00000000 --- a/x/reward/simulation/store_test.go +++ /dev/null @@ -1,110 +0,0 @@ -package simulation_test - -import ( - "testing" - - profiletypes "github.com/tendermint/spn/x/profile/types" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - testkeeper "github.com/tendermint/spn/testutil/keeper" - "github.com/tendermint/spn/testutil/sample" - launchtypes "github.com/tendermint/spn/x/launch/types" - rewardsimulation "github.com/tendermint/spn/x/reward/simulation" - "github.com/tendermint/spn/x/reward/types" -) - -func TestFindRandomChainWithCoordBalance(t *testing.T) { - var ( - sdkCtx, tk, ts = testkeeper.NewTestSetup(t) - r = sample.Rand() - ctx = sdk.WrapSDKContext(sdkCtx) - msgCreateCoord = sample.MsgCreateCoordinator(sample.Address(r)) - coordBalance = sample.Coins(r) - res *profiletypes.MsgCreateCoordinatorResponse - coord profiletypes.Coordinator - chain launchtypes.Chain - found bool - err error - ) - - t.Run("should find no chains", func(t *testing.T) { - _, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, true, false, sdk.NewCoins()) - require.False(t, found) - _, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, true, true, sample.Coins(r)) - require.False(t, found) - }) - - t.Run("should allow create coordinator and set balance", func(t *testing.T) { - res, err = ts.ProfileSrv.CreateCoordinator(ctx, &msgCreateCoord) - require.NoError(t, err) - coord, found = tk.ProfileKeeper.GetCoordinator(sdkCtx, res.CoordinatorID) - require.True(t, found) - // set balance - tk.Mint(sdkCtx, coord.Address, coordBalance) - }) - - t.Run("should find no chain with non existing coordinator", func(t *testing.T) { - tk.LaunchKeeper.AppendChain(sdkCtx, launchtypes.Chain{ - CoordinatorID: 1000, - LaunchTriggered: true, - }) - _, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, true, false, sdk.NewCoins()) - require.False(t, found) - }) - - t.Run("should find chain with launch triggered", func(t *testing.T) { - tk.LaunchKeeper.AppendChain(sdkCtx, launchtypes.Chain{ - CoordinatorID: res.CoordinatorID, - LaunchTriggered: true, - }) - _, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, true, false, sdk.NewCoins()) - require.False(t, found) - _, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, true, true, coordBalance) - require.False(t, found) - _, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, false, false, sdk.NewCoins()) - require.False(t, found) - _, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, false, true, coordBalance) - require.False(t, found) - }) - - t.Run("should find multiple valid chains", func(t *testing.T) { - norewardPoolID := tk.LaunchKeeper.AppendChain(sdkCtx, launchtypes.Chain{ - CoordinatorID: res.CoordinatorID, - LaunchTriggered: false, - }) - - hasRewardPoolID := tk.LaunchKeeper.AppendChain(sdkCtx, launchtypes.Chain{ - CoordinatorID: res.CoordinatorID, - LaunchTriggered: false, - }) - - tk.RewardKeeper.SetRewardPool(sdkCtx, types.RewardPool{ - LaunchID: hasRewardPoolID, - Provider: coord.Address, - }) - - chain, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, true, false, sdk.NewCoins()) - require.True(t, found) - require.Equal(t, res.CoordinatorID, chain.CoordinatorID) - require.Equal(t, hasRewardPoolID, chain.LaunchID) - chain, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, true, true, coordBalance) - require.True(t, found) - require.Equal(t, res.CoordinatorID, chain.CoordinatorID) - require.Equal(t, hasRewardPoolID, chain.LaunchID) - chain, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, true, true, coordBalance.Add(sample.Coin(r))) - require.False(t, found) - - chain, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, false, false, sdk.NewCoins()) - require.True(t, found) - require.Equal(t, res.CoordinatorID, chain.CoordinatorID) - require.Equal(t, norewardPoolID, chain.LaunchID) - chain, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, false, true, coordBalance) - require.True(t, found) - require.Equal(t, res.CoordinatorID, chain.CoordinatorID) - require.Equal(t, norewardPoolID, chain.LaunchID) - chain, found = rewardsimulation.FindRandomChainWithCoordBalance(r, sdkCtx, *tk.RewardKeeper, tk.BankKeeper, false, true, coordBalance.Add(sample.Coin(r))) - require.False(t, found) - }) -} diff --git a/x/reward/types/codec.go b/x/reward/types/codec.go index 6aff06ea..ab1c54ea 100644 --- a/x/reward/types/codec.go +++ b/x/reward/types/codec.go @@ -1,27 +1,20 @@ package types import ( - "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" + // this line is used by starport scaffolding # 1 ) -func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgSetRewards{}, "reward/SetRewards", nil) - // this line is used by starport scaffolding # 2 -} - func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSetRewards{}, ) // this line is used by starport scaffolding # 3 + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } - -var ( - Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) -) diff --git a/x/reward/types/errors.go b/x/reward/types/errors.go index 1814ed8a..e6eff8c7 100644 --- a/x/reward/types/errors.go +++ b/x/reward/types/errors.go @@ -6,14 +6,15 @@ import ( sdkerrors "cosmossdk.io/errors" ) +// x/reward module sentinel errors var ( - ErrInvalidRewardPoolCoins = sdkerrors.Register(ModuleName, 2, "invalid coins for reward pool") - ErrInvalidCoordinatorID = sdkerrors.Register(ModuleName, 3, "invalid coordinator id for reward pool") - ErrRewardPoolNotFound = sdkerrors.Register(ModuleName, 4, "reward pool not found") - ErrRewardPoolClosed = sdkerrors.Register(ModuleName, 5, "reward pool is closed") - ErrInvalidSignatureCounts = sdkerrors.Register(ModuleName, 6, "invalid signature counts") - ErrInvalidLastBlockHeight = sdkerrors.Register(ModuleName, 7, "invalid last block height") - ErrInvalidRewardHeight = sdkerrors.Register(ModuleName, 8, "invalid reward height") - ErrInvalidProviderAddress = sdkerrors.Register(ModuleName, 9, "invalid provider address") - ErrInsufficientFunds = sdkerrors.Register(ModuleName, 10, "insufficient funds") + ErrInvalidSigner = sdkerrors.Register(ModuleName, 1101, "expected gov account as only signer for proposal message") + ErrInvalidRewardPoolCoins = sdkerrors.Register(ModuleName, 1102, "invalid coins for reward pool") + ErrInvalidCoordinatorID = sdkerrors.Register(ModuleName, 1103, "invalid coordinator id for reward pool") + ErrRewardPoolNotFound = sdkerrors.Register(ModuleName, 1104, "reward pool not found") + ErrRewardPoolClosed = sdkerrors.Register(ModuleName, 1105, "reward pool is closed") + ErrInvalidSignatureCounts = sdkerrors.Register(ModuleName, 1106, "invalid signature counts") + ErrInvalidLastBlockHeight = sdkerrors.Register(ModuleName, 1107, "invalid last block height") + ErrInvalidRewardHeight = sdkerrors.Register(ModuleName, 1108, "invalid reward height") + ErrInsufficientFunds = sdkerrors.Register(ModuleName, 1109, "insufficient funds") ) diff --git a/x/reward/types/events.pb.go b/x/reward/types/events.pb.go index 0cb34353..9119ea6b 100644 --- a/x/reward/types/events.pb.go +++ b/x/reward/types/events.pb.go @@ -1,12 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/reward/events.proto +// source: network/reward/v1/events.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -34,7 +36,7 @@ func (m *EventRewardPoolCreated) Reset() { *m = EventRewardPoolCreated{} func (m *EventRewardPoolCreated) String() string { return proto.CompactTextString(m) } func (*EventRewardPoolCreated) ProtoMessage() {} func (*EventRewardPoolCreated) Descriptor() ([]byte, []int) { - return fileDescriptor_169f73667c05bc72, []int{0} + return fileDescriptor_c8864807f722abba, []int{0} } func (m *EventRewardPoolCreated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -85,7 +87,7 @@ func (m *EventRewardPoolRemoved) Reset() { *m = EventRewardPoolRemoved{} func (m *EventRewardPoolRemoved) String() string { return proto.CompactTextString(m) } func (*EventRewardPoolRemoved) ProtoMessage() {} func (*EventRewardPoolRemoved) Descriptor() ([]byte, []int) { - return fileDescriptor_169f73667c05bc72, []int{1} + return fileDescriptor_c8864807f722abba, []int{1} } func (m *EventRewardPoolRemoved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -131,7 +133,7 @@ func (m *EventRewardsDistributed) Reset() { *m = EventRewardsDistributed func (m *EventRewardsDistributed) String() string { return proto.CompactTextString(m) } func (*EventRewardsDistributed) ProtoMessage() {} func (*EventRewardsDistributed) Descriptor() ([]byte, []int) { - return fileDescriptor_169f73667c05bc72, []int{2} + return fileDescriptor_c8864807f722abba, []int{2} } func (m *EventRewardsDistributed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -182,37 +184,41 @@ func (m *EventRewardsDistributed) GetRewards() github_com_cosmos_cosmos_sdk_type } func init() { - proto.RegisterType((*EventRewardPoolCreated)(nil), "spn.reward.EventRewardPoolCreated") - proto.RegisterType((*EventRewardPoolRemoved)(nil), "spn.reward.EventRewardPoolRemoved") - proto.RegisterType((*EventRewardsDistributed)(nil), "spn.reward.EventRewardsDistributed") -} - -func init() { proto.RegisterFile("spn/reward/events.proto", fileDescriptor_169f73667c05bc72) } - -var fileDescriptor_169f73667c05bc72 = []byte{ - // 337 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x51, 0xcd, 0x4e, 0xf2, 0x40, - 0x14, 0xed, 0x7c, 0x7c, 0xf1, 0xa7, 0xee, 0x88, 0x11, 0x24, 0x66, 0x20, 0x6c, 0xec, 0xc6, 0x99, - 0xa0, 0x3e, 0x01, 0xe0, 0xc2, 0x1d, 0xe9, 0x52, 0x17, 0xa6, 0x3f, 0x37, 0x30, 0x91, 0xce, 0x6d, - 0x66, 0x86, 0xaa, 0x6f, 0xc1, 0x73, 0xf8, 0x24, 0x2c, 0x59, 0xba, 0x42, 0x03, 0x3e, 0x85, 0x2b, - 0xd3, 0x0e, 0x60, 0x13, 0x13, 0xc3, 0xea, 0xf6, 0xf6, 0xdc, 0x73, 0xe6, 0xe4, 0x1c, 0xb7, 0xa6, - 0x53, 0xc9, 0x15, 0x3c, 0x05, 0x2a, 0xe6, 0x90, 0x81, 0x34, 0x9a, 0xa5, 0x0a, 0x0d, 0x56, 0x5d, - 0x9d, 0x4a, 0x66, 0x81, 0xc6, 0xf1, 0x10, 0x87, 0x58, 0xfc, 0xe6, 0xf9, 0x97, 0xbd, 0x68, 0x9c, - 0x95, 0xa8, 0x76, 0x3c, 0xa4, 0x88, 0xe3, 0x35, 0x4a, 0x23, 0xd4, 0x09, 0x6a, 0x1e, 0x06, 0x1a, - 0x78, 0xd6, 0x09, 0xc1, 0x04, 0x1d, 0x1e, 0xa1, 0x90, 0x16, 0x6f, 0x0f, 0xdc, 0x93, 0x9b, 0xfc, - 0x3d, 0xbf, 0x60, 0x0e, 0x10, 0xc7, 0x3d, 0x05, 0x81, 0x81, 0xb8, 0xda, 0x70, 0x0f, 0xc6, 0xc1, - 0x44, 0x46, 0xa3, 0xdb, 0x7e, 0x9d, 0xb4, 0x88, 0xf7, 0xdf, 0xdf, 0xee, 0x39, 0x96, 0x2a, 0xcc, - 0x44, 0x0c, 0xaa, 0xfe, 0xaf, 0x45, 0xbc, 0x43, 0x7f, 0xbb, 0xb7, 0xaf, 0x7f, 0x29, 0xfa, 0x90, - 0x60, 0xf6, 0xb7, 0x62, 0xfb, 0x93, 0xb8, 0xb5, 0x12, 0x4d, 0xf7, 0x85, 0x36, 0x4a, 0x84, 0x93, - 0x1d, 0x9c, 0x28, 0x88, 0x40, 0x64, 0x3f, 0x4e, 0x36, 0x7b, 0x75, 0x4a, 0xdc, 0x7d, 0x9b, 0x88, - 0xae, 0x57, 0x5a, 0x15, 0xef, 0xe8, 0xf2, 0x94, 0xd9, 0x38, 0x58, 0x1e, 0x07, 0x5b, 0xc7, 0xc1, - 0x7a, 0x28, 0x64, 0xf7, 0x7e, 0xb6, 0x68, 0x3a, 0x5f, 0x8b, 0xe6, 0xf9, 0x50, 0x98, 0xd1, 0x24, - 0x64, 0x11, 0x26, 0x7c, 0x9d, 0x9d, 0x1d, 0x17, 0x3a, 0x7e, 0xe4, 0xe6, 0x25, 0x05, 0x5d, 0x10, - 0x5e, 0xdf, 0x9b, 0xde, 0x8e, 0xa7, 0xda, 0xdf, 0xd8, 0xe8, 0x76, 0x67, 0x4b, 0x4a, 0xe6, 0x4b, - 0x4a, 0x3e, 0x96, 0x94, 0x4c, 0x57, 0xd4, 0x99, 0xaf, 0xa8, 0xf3, 0xb6, 0xa2, 0xce, 0x5d, 0x59, - 0xcc, 0x80, 0x8c, 0x41, 0x25, 0x42, 0x1a, 0x9e, 0x97, 0xfb, 0xbc, 0xa9, 0xb7, 0x90, 0x0c, 0xf7, - 0x8a, 0xe6, 0xae, 0xbe, 0x03, 0x00, 0x00, 0xff, 0xff, 0x03, 0xbc, 0xe0, 0x1c, 0x34, 0x02, 0x00, - 0x00, + proto.RegisterType((*EventRewardPoolCreated)(nil), "network.reward.v1.EventRewardPoolCreated") + proto.RegisterType((*EventRewardPoolRemoved)(nil), "network.reward.v1.EventRewardPoolRemoved") + proto.RegisterType((*EventRewardsDistributed)(nil), "network.reward.v1.EventRewardsDistributed") +} + +func init() { proto.RegisterFile("network/reward/v1/events.proto", fileDescriptor_c8864807f722abba) } + +var fileDescriptor_c8864807f722abba = []byte{ + // 410 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xbd, 0x6e, 0xd4, 0x40, + 0x10, 0xf6, 0x26, 0x08, 0x82, 0xa1, 0x89, 0x15, 0x81, 0x73, 0xc5, 0xde, 0xe9, 0x28, 0xb0, 0x22, + 0xc5, 0x2b, 0x43, 0x5e, 0x00, 0x27, 0x14, 0x74, 0xc8, 0x74, 0x34, 0x27, 0xff, 0x8c, 0x9c, 0x25, + 0xf6, 0x8e, 0xd9, 0xdd, 0x73, 0xc8, 0x5b, 0x50, 0x50, 0xf1, 0x00, 0x08, 0x51, 0xa5, 0xe0, 0x21, + 0x52, 0x46, 0x54, 0x54, 0x01, 0xdd, 0x15, 0x79, 0x07, 0x2a, 0x64, 0xef, 0x3a, 0x8a, 0x74, 0x52, + 0x74, 0x8d, 0x3d, 0x33, 0xdf, 0x37, 0xfa, 0x3e, 0xed, 0x7c, 0x2e, 0x15, 0xa0, 0x4f, 0x51, 0x9e, + 0x30, 0x09, 0xa7, 0xa9, 0x2c, 0x58, 0x1b, 0x31, 0x68, 0x41, 0x68, 0x15, 0x36, 0x12, 0x35, 0x7a, + 0xdb, 0x16, 0x0f, 0x0d, 0x1e, 0xb6, 0xd1, 0x68, 0x3b, 0xad, 0xb9, 0x40, 0xd6, 0x7f, 0x0d, 0x6b, + 0x44, 0x73, 0x54, 0x35, 0x2a, 0x96, 0xa5, 0x0a, 0x58, 0x1b, 0x65, 0xa0, 0xd3, 0x88, 0xe5, 0xc8, + 0x85, 0xc5, 0x77, 0x0d, 0x3e, 0xeb, 0x3b, 0x66, 0x1a, 0x0b, 0xed, 0x94, 0x58, 0xa2, 0x99, 0x77, + 0x95, 0x9d, 0x3e, 0x5b, 0xb5, 0x65, 0xaa, 0x59, 0x83, 0x58, 0x19, 0xd2, 0xf4, 0x83, 0xfb, 0xe4, + 0x75, 0xe7, 0x35, 0xe9, 0x91, 0xb7, 0x88, 0xd5, 0xa1, 0x84, 0x54, 0x43, 0xe1, 0x8d, 0xdc, 0xad, + 0x2a, 0x9d, 0x8b, 0xfc, 0xf8, 0xcd, 0x91, 0x4f, 0x26, 0x24, 0xb8, 0x97, 0xdc, 0xf4, 0xde, 0x81, + 0xbb, 0xd5, 0x48, 0x6c, 0x79, 0x01, 0xd2, 0xdf, 0x98, 0x90, 0xe0, 0x61, 0xec, 0xff, 0xfa, 0xb9, + 0xbf, 0x63, 0x4d, 0xbd, 0x2a, 0x0a, 0x09, 0x4a, 0xbd, 0xd3, 0x92, 0x8b, 0x32, 0xb9, 0x61, 0x4e, + 0x0f, 0x56, 0xb4, 0x12, 0xa8, 0xb1, 0xbd, 0x5b, 0x6b, 0xfa, 0x65, 0xc3, 0x7d, 0x7a, 0x6b, 0x4d, + 0x1d, 0x71, 0xa5, 0x25, 0xcf, 0xe6, 0x6b, 0x78, 0x94, 0x90, 0x03, 0x6f, 0xd7, 0xf1, 0x38, 0x30, + 0xbd, 0x6f, 0xc4, 0x7d, 0x60, 0x5e, 0x49, 0xf9, 0x9b, 0x93, 0xcd, 0xe0, 0xd1, 0x8b, 0xdd, 0xd0, + 0xae, 0x74, 0x87, 0x09, 0xed, 0x61, 0xc2, 0x43, 0xe4, 0x22, 0xfe, 0x78, 0x71, 0x35, 0x76, 0xfe, + 0x5d, 0x8d, 0x9f, 0x97, 0x5c, 0x1f, 0xcf, 0xb3, 0x30, 0xc7, 0xda, 0x1e, 0xc6, 0xfe, 0xf6, 0x55, + 0x71, 0xc2, 0xf4, 0x59, 0x03, 0xaa, 0x5f, 0xf8, 0xf1, 0x67, 0x1c, 0xac, 0x49, 0x55, 0x5f, 0xaf, + 0xcf, 0xf7, 0x1e, 0x57, 0x50, 0xa6, 0xf9, 0xd9, 0xac, 0x4b, 0x81, 0xfa, 0x7e, 0x7d, 0xbe, 0x47, + 0x92, 0xc1, 0x5c, 0x1c, 0x5f, 0x2c, 0x28, 0xb9, 0x5c, 0x50, 0xf2, 0x77, 0x41, 0xc9, 0xe7, 0x25, + 0x75, 0x2e, 0x97, 0xd4, 0xf9, 0xbd, 0xa4, 0xce, 0xfb, 0xdb, 0x12, 0xbc, 0x14, 0x5c, 0x03, 0x1b, + 0x92, 0xf0, 0x69, 0xc8, 0x42, 0x2f, 0x94, 0xdd, 0xef, 0x33, 0xf0, 0xf2, 0x7f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x9c, 0x1e, 0x6a, 0x04, 0xc1, 0x02, 0x00, 0x00, } func (m *EventRewardPoolCreated) Marshal() (dAtA []byte, err error) { diff --git a/x/reward/types/expected_keepers.go b/x/reward/types/expected_keepers.go index a1d72f3c..b49528e6 100644 --- a/x/reward/types/expected_keepers.go +++ b/x/reward/types/expected_keepers.go @@ -1,35 +1,42 @@ package types import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - launchtypes "github.com/tendermint/spn/x/launch/types" - profiletypes "github.com/tendermint/spn/x/profile/types" + launchtypes "github.com/ignite/network/x/launch/types" + profiletypes "github.com/ignite/network/x/profile/types" ) type ProfileKeeper interface { - GetValidator(ctx sdk.Context, address string) (profiletypes.Validator, bool) - GetValidatorByOperatorAddress(ctx sdk.Context, operatorAddress string) (profiletypes.ValidatorByOperatorAddress, bool) - GetCoordinator(ctx sdk.Context, id uint64) (profiletypes.Coordinator, bool) - CoordinatorIDFromAddress(ctx sdk.Context, address string) (uint64, error) + GetValidator(ctx context.Context, address string) (profiletypes.Validator, error) + GetValidatorByOperatorAddress(ctx context.Context, operatorAddress string) (profiletypes.ValidatorByOperatorAddress, error) + GetCoordinator(ctx context.Context, coordinatorID uint64) (profiletypes.Coordinator, error) + CoordinatorIDFromAddress(ctx context.Context, address sdk.AccAddress) (uint64, error) } type LaunchKeeper interface { - GetChain(ctx sdk.Context, launchID uint64) (launchtypes.Chain, bool) - GetAllChain(ctx sdk.Context) []launchtypes.Chain + GetChain(ctx context.Context, launchID uint64) (launchtypes.Chain, error) + Chains(ctx context.Context) ([]launchtypes.Chain, error) } // AccountKeeper defines the expected account keeper used for simulations type AccountKeeper interface { - GetModuleAddress(moduleName string) sdk.AccAddress - GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI + GetModuleAddress(name string) sdk.AccAddress + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI } // BankKeeper defines the expected interface needed to retrieve account balances. type BankKeeper interface { - SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins - GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin - SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error - SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins + GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin + SendCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error +} + +// ParamSubspace defines the expected Subspace interface for parameters. +type ParamSubspace interface { + Get(context.Context, []byte, interface{}) + Set(context.Context, []byte, interface{}) } diff --git a/x/reward/types/genesis.go b/x/reward/types/genesis.go index c328ae17..2b4f4f1f 100644 --- a/x/reward/types/genesis.go +++ b/x/reward/types/genesis.go @@ -1,13 +1,11 @@ package types -import ( - "fmt" -) +import "fmt" -// DefaultGenesis returns the default Capability genesis state +// DefaultGenesis returns the default genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ - RewardPools: []RewardPool{}, + RewardPoolList: []RewardPool{}, // this line is used by starport scaffolding # genesis/types/default Params: DefaultParams(), } @@ -19,16 +17,14 @@ func (gs GenesisState) Validate() error { // Check for duplicated index in rewardPool rewardPoolIndexMap := make(map[string]struct{}) - for _, elem := range gs.RewardPools { - if err := elem.Validate(); err != nil { - return err - } - index := string(RewardPoolKey(elem.LaunchID)) + for _, elem := range gs.RewardPoolList { + index := fmt.Sprint(elem.LaunchID) if _, ok := rewardPoolIndexMap[index]; ok { return fmt.Errorf("duplicated index for rewardPool") } rewardPoolIndexMap[index] = struct{}{} } // this line is used by starport scaffolding # genesis/types/validate + return gs.Params.Validate() } diff --git a/x/reward/types/genesis.pb.go b/x/reward/types/genesis.pb.go index 57ec13c7..59ee4be7 100644 --- a/x/reward/types/genesis.pb.go +++ b/x/reward/types/genesis.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/reward/genesis.proto +// source: network/reward/v1/genesis.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -25,15 +26,16 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the reward module's genesis state. type GenesisState struct { - RewardPools []RewardPool `protobuf:"bytes,1,rep,name=rewardPools,proto3" json:"rewardPools"` - Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + RewardPoolList []RewardPool `protobuf:"bytes,2,rep,name=rewardPoolList,proto3" json:"rewardPoolList"` } func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_6b625f51106f241b, []int{0} + return fileDescriptor_9b5beee417452870, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -62,43 +64,45 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetRewardPools() []RewardPool { +func (m *GenesisState) GetParams() Params { if m != nil { - return m.RewardPools + return m.Params } - return nil + return Params{} } -func (m *GenesisState) GetParams() Params { +func (m *GenesisState) GetRewardPoolList() []RewardPool { if m != nil { - return m.Params + return m.RewardPoolList } - return Params{} + return nil } func init() { - proto.RegisterType((*GenesisState)(nil), "spn.reward.GenesisState") + proto.RegisterType((*GenesisState)(nil), "network.reward.v1.GenesisState") } -func init() { proto.RegisterFile("spn/reward/genesis.proto", fileDescriptor_6b625f51106f241b) } +func init() { proto.RegisterFile("network/reward/v1/genesis.proto", fileDescriptor_9b5beee417452870) } -var fileDescriptor_6b625f51106f241b = []byte{ - // 233 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x28, 0x2e, 0xc8, 0xd3, - 0x2f, 0x4a, 0x2d, 0x4f, 0x2c, 0x4a, 0xd1, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2a, 0x2e, 0xc8, 0xd3, 0x83, 0xc8, 0x48, 0x89, 0xa4, 0xe7, - 0xa7, 0xe7, 0x83, 0x85, 0xf5, 0x41, 0x2c, 0x88, 0x0a, 0x29, 0x71, 0x24, 0xbd, 0x05, 0x89, 0x45, - 0x89, 0xb9, 0x50, 0xad, 0x52, 0x32, 0x48, 0x12, 0x10, 0x2a, 0xbe, 0x20, 0x3f, 0x3f, 0x07, 0x22, - 0xab, 0xd4, 0xc0, 0xc8, 0xc5, 0xe3, 0x0e, 0xb1, 0x2a, 0xb8, 0x24, 0xb1, 0x24, 0x55, 0xc8, 0x8e, - 0x8b, 0x1b, 0xa2, 0x2a, 0x20, 0x3f, 0x3f, 0xa7, 0x58, 0x82, 0x51, 0x81, 0x59, 0x83, 0xdb, 0x48, - 0x4c, 0x0f, 0x61, 0xbf, 0x5e, 0x10, 0x5c, 0xda, 0x89, 0xe5, 0xc4, 0x3d, 0x79, 0x86, 0x20, 0x64, - 0x0d, 0x42, 0x06, 0x5c, 0x6c, 0x10, 0xeb, 0x25, 0x98, 0x14, 0x18, 0x35, 0xb8, 0x8d, 0x84, 0x90, - 0xb5, 0x06, 0x80, 0x65, 0xa0, 0xda, 0xa0, 0xea, 0x9c, 0x9c, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, - 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, - 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x23, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, - 0xbf, 0x24, 0x35, 0x2f, 0x25, 0xb5, 0x28, 0x37, 0x33, 0xaf, 0x44, 0x1f, 0xe4, 0xa1, 0x0a, 0x98, - 0x97, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xbe, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, - 0xff, 0x0e, 0xc5, 0xd1, 0x09, 0x42, 0x01, 0x00, 0x00, +var fileDescriptor_9b5beee417452870 = []byte{ + // 262 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcf, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x4a, 0x2d, 0x4f, 0x2c, 0x4a, 0xd1, 0x2f, 0x33, 0xd4, 0x4f, 0x4f, + 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x84, 0x2a, 0xd0, + 0x83, 0x28, 0xd0, 0x2b, 0x33, 0x94, 0x12, 0x4c, 0xcc, 0xcd, 0xcc, 0xcb, 0xd7, 0x07, 0x93, 0x10, + 0x55, 0x52, 0x22, 0xe9, 0xf9, 0xe9, 0xf9, 0x60, 0xa6, 0x3e, 0x88, 0x05, 0x15, 0x95, 0xc3, 0x34, + 0xbc, 0x20, 0xb1, 0x28, 0x31, 0x17, 0x6a, 0xb6, 0x94, 0x32, 0xa6, 0x3c, 0x84, 0x15, 0x5f, 0x90, + 0x9f, 0x9f, 0x03, 0x51, 0xa4, 0x34, 0x93, 0x91, 0x8b, 0xc7, 0x1d, 0xe2, 0xa4, 0xe0, 0x92, 0xc4, + 0x92, 0x54, 0x21, 0x1b, 0x2e, 0x36, 0x88, 0x29, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0x92, + 0x7a, 0x18, 0x4e, 0xd4, 0x0b, 0x00, 0x2b, 0x70, 0xe2, 0x3c, 0x71, 0x4f, 0x9e, 0x61, 0xc5, 0xf3, + 0x0d, 0x5a, 0x8c, 0x41, 0x50, 0x3d, 0x42, 0xde, 0x5c, 0x7c, 0x10, 0x65, 0x01, 0xf9, 0xf9, 0x39, + 0x3e, 0x99, 0xc5, 0x25, 0x12, 0x4c, 0x0a, 0xcc, 0x1a, 0xdc, 0x46, 0xb2, 0x58, 0x4c, 0x09, 0x82, + 0x2b, 0x74, 0x62, 0x01, 0x99, 0x14, 0x84, 0xa6, 0xd5, 0xc9, 0xe9, 0xc4, 0x23, 0x39, 0xc6, 0x0b, + 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, + 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x34, 0xd2, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, + 0xf5, 0x33, 0xd3, 0xf3, 0x32, 0x4b, 0x52, 0xf5, 0x61, 0x9e, 0xad, 0x80, 0x79, 0xb7, 0xa4, 0xb2, + 0x20, 0xb5, 0x38, 0x89, 0x0d, 0xec, 0x4d, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x7b, + 0x2c, 0xd1, 0x8a, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -121,20 +125,10 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.RewardPools) > 0 { - for iNdEx := len(m.RewardPools) - 1; iNdEx >= 0; iNdEx-- { + if len(m.RewardPoolList) > 0 { + for iNdEx := len(m.RewardPoolList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.RewardPools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.RewardPoolList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -142,9 +136,19 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 } } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -165,14 +169,14 @@ func (m *GenesisState) Size() (n int) { } var l int _ = l - if len(m.RewardPools) > 0 { - for _, e := range m.RewardPools { + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.RewardPoolList) > 0 { + for _, e := range m.RewardPoolList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } } - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) return n } @@ -213,7 +217,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RewardPools", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -240,14 +244,13 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RewardPools = append(m.RewardPools, RewardPool{}) - if err := m.RewardPools[len(m.RewardPools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RewardPoolList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -274,7 +277,8 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.RewardPoolList = append(m.RewardPoolList, RewardPool{}) + if err := m.RewardPoolList[len(m.RewardPoolList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/reward/types/genesis_test.go b/x/reward/types/genesis_test.go index 9eed0a99..7fb5e0f9 100644 --- a/x/reward/types/genesis_test.go +++ b/x/reward/types/genesis_test.go @@ -5,25 +5,25 @@ import ( "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/reward/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/reward/types" ) func TestGenesisState_Validate(t *testing.T) { - for _, tc := range []struct { - name string + tests := []struct { + desc string genState *types.GenesisState valid bool }{ { - name: "should allow valid default genesis", + desc: "default is valid", genState: types.DefaultGenesis(), valid: true, }, { - name: "should allow valid genesis state", + desc: "valid genesis state", genState: &types.GenesisState{ - RewardPools: []types.RewardPool{ + RewardPoolList: []types.RewardPool{ sample.RewardPool(r, 1), sample.RewardPool(r, 2), }, @@ -31,11 +31,10 @@ func TestGenesisState_Validate(t *testing.T) { }, valid: true, }, - // this line is used by starport scaffolding # types/genesis/testcase { - name: "should prevent duplicated rewardPool", + desc: "duplicated rewardPool", genState: &types.GenesisState{ - RewardPools: []types.RewardPool{ + RewardPoolList: []types.RewardPool{ sample.RewardPool(r, 1), sample.RewardPool(r, 1), }, @@ -43,17 +42,19 @@ func TestGenesisState_Validate(t *testing.T) { valid: false, }, { - name: "should prevent invalid rewardPool", + desc: "should prevent invalid rewardPool", genState: &types.GenesisState{ - RewardPools: []types.RewardPool{ + RewardPoolList: []types.RewardPool{ sample.RewardPool(r, 1), {}, // invalid reward pool }, }, valid: false, }, - } { - t.Run(tc.name, func(t *testing.T) { + // this line is used by starport scaffolding # types/genesis/testcase + } + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { err := tc.genState.Validate() if tc.valid { require.NoError(t, err) diff --git a/x/reward/types/keys.go b/x/reward/types/keys.go index ef95e809..47ebc586 100644 --- a/x/reward/types/keys.go +++ b/x/reward/types/keys.go @@ -1,6 +1,6 @@ package types -import spntypes "github.com/tendermint/spn/pkg/types" +import "cosmossdk.io/collections" const ( // ModuleName defines the module name @@ -9,24 +9,14 @@ const ( // StoreKey defines the primary module store key StoreKey = ModuleName - // RouterKey is the message route for slashing - RouterKey = ModuleName - - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - // MemStoreKey defines the in-memory store key MemStoreKey = "mem_reward" - - // RewardPoolKeyPrefix is the prefix to retrieve all RewardPool - RewardPoolKeyPrefix = "RewardPool/value/" ) -func KeyPrefix(p string) []byte { - return []byte(p) -} +var ( + // ParamsKey is the prefix to retrieve all Params + ParamsKey = collections.NewPrefix("p_reward") -// RewardPoolKey returns the store key to retrieve a RewardPool from the index fields -func RewardPoolKey(launchID uint64) []byte { - return append(spntypes.UintBytes(launchID), byte('/')) -} + // RewardPoolKey is the prefix to retrieve all RewardPool + RewardPoolKey = collections.NewPrefix("RewardPool/value/") +) diff --git a/x/reward/types/msg_set_reward.go b/x/reward/types/msg_set_reward.go deleted file mode 100644 index 28502dd3..00000000 --- a/x/reward/types/msg_set_reward.go +++ /dev/null @@ -1,55 +0,0 @@ -package types - -import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const TypeMsgSetRewards = "set_rewards" - -var _ sdk.Msg = &MsgSetRewards{} - -func NewMsgSetRewards(provider string, launchID uint64, lastRewardHeight int64, initialCoins sdk.Coins) *MsgSetRewards { - return &MsgSetRewards{ - Provider: provider, - LaunchID: launchID, - Coins: initialCoins, - LastRewardHeight: lastRewardHeight, - } -} - -func (msg *MsgSetRewards) Route() string { - return RouterKey -} - -func (msg *MsgSetRewards) Type() string { - return TypeMsgSetRewards -} - -func (msg *MsgSetRewards) GetSigners() []sdk.AccAddress { - provider, err := sdk.AccAddressFromBech32(msg.Provider) - if err != nil { - panic(err) - } - return []sdk.AccAddress{provider} -} - -func (msg *MsgSetRewards) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgSetRewards) ValidateBasic() error { - if _, err := sdk.AccAddressFromBech32(msg.Provider); err != nil { - return sdkerrors.Wrap(ErrInvalidProviderAddress, err.Error()) - } - if err := msg.Coins.Validate(); err != nil { - return sdkerrors.Wrap(ErrInvalidRewardPoolCoins, err.Error()) - } - - if msg.LastRewardHeight < 0 { - return sdkerrors.Wrap(ErrInvalidRewardHeight, "last reward height must be non-negative") - } - - return nil -} diff --git a/x/reward/types/msg_set_reward_test.go b/x/reward/types/msg_set_reward_test.go deleted file mode 100644 index cdcb3223..00000000 --- a/x/reward/types/msg_set_reward_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package types_test - -import ( - "testing" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/reward/types" -) - -func TestMsgSetRewards_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg types.MsgSetRewards - err error - }{ - { - name: "should allow valid reward pool msg", - msg: types.MsgSetRewards{ - LaunchID: 1, - Provider: sample.Address(r), - Coins: sample.Coins(r), - LastRewardHeight: 50, - }, - }, - { - name: "should allow valid reward pool msg with empty coins", - msg: types.MsgSetRewards{ - LaunchID: 1, - Provider: sample.Address(r), - Coins: sdk.NewCoins(), - LastRewardHeight: 50, - }, - }, - { - name: "should prevent msg with invalid provider address", - msg: types.MsgSetRewards{ - LaunchID: 1, - Provider: "invalid address", - Coins: sample.Coins(r), - LastRewardHeight: 50, - }, - err: types.ErrInvalidProviderAddress, - }, - { - name: "should prevent msg with invalid coins", - msg: types.MsgSetRewards{ - LaunchID: 1, - Provider: sample.Address(r), - Coins: sdk.Coins{sdk.Coin{ - Denom: "invalid denom", - Amount: sdkmath.ZeroInt(), - }}, - LastRewardHeight: 50, - }, - err: types.ErrInvalidRewardPoolCoins, - }, - { - name: "should prevent msg with negative last reward height", - msg: types.MsgSetRewards{ - LaunchID: 1, - Provider: sample.Address(r), - Coins: sample.Coins(r), - LastRewardHeight: -1, - }, - err: types.ErrInvalidRewardHeight, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/reward/types/msgs.go b/x/reward/types/msgs.go new file mode 100644 index 00000000..fdfc0248 --- /dev/null +++ b/x/reward/types/msgs.go @@ -0,0 +1,30 @@ +package types + +import ( + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func NewMsgSetRewards(provider string, launchID uint64, coins sdk.Coins, lastRewardHeight int64) *MsgSetRewards { + return &MsgSetRewards{ + Provider: provider, + LaunchID: launchID, + Coins: coins, + LastRewardHeight: lastRewardHeight, + } +} + +func (msg MsgSetRewards) Type() string { + return sdk.MsgTypeURL(&MsgSetRewards{}) +} + +func (msg *MsgSetRewards) ValidateBasic() error { + if err := msg.Coins.Validate(); err != nil { + return sdkerrors.Wrap(ErrInvalidRewardPoolCoins, err.Error()) + } + + if msg.LastRewardHeight < 0 { + return sdkerrors.Wrap(ErrInvalidRewardHeight, "last reward height must be non-negative") + } + return nil +} diff --git a/x/reward/types/params.go b/x/reward/types/params.go index 357196ad..c81359ea 100644 --- a/x/reward/types/params.go +++ b/x/reward/types/params.go @@ -1,39 +1,16 @@ package types -import ( - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "gopkg.in/yaml.v2" -) - -var _ paramtypes.ParamSet = (*Params)(nil) - -// ParamKeyTable the param key table for launch module -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - -// NewParams creates a new Params instance +// NewParams creates a new Params instance. func NewParams() Params { return Params{} } -// DefaultParams returns a default set of parameters +// DefaultParams returns a default set of parameters. func DefaultParams() Params { return NewParams() } -// ParamSetPairs get the params.ParamSet -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{} -} - -// Validate validates the set of params +// Validate validates the set of params. func (p Params) Validate() error { return nil } - -// String implements the Stringer interface. -func (p Params) String() string { - out, _ := yaml.Marshal(p) - return string(out) -} diff --git a/x/reward/types/params.pb.go b/x/reward/types/params.pb.go index 24793a82..a5ff15f5 100644 --- a/x/reward/types/params.pb.go +++ b/x/reward/types/params.pb.go @@ -1,10 +1,11 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/reward/params.proto +// source: network/reward/v1/params.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -27,10 +28,11 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type Params struct { } -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_27177e20b9cac2b9, []int{0} + return fileDescriptor_0f63bc6600cc8196, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -60,25 +62,47 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo func init() { - proto.RegisterType((*Params)(nil), "spn.reward.Params") + proto.RegisterType((*Params)(nil), "network.reward.v1.Params") } -func init() { proto.RegisterFile("spn/reward/params.proto", fileDescriptor_27177e20b9cac2b9) } +func init() { proto.RegisterFile("network/reward/v1/params.proto", fileDescriptor_0f63bc6600cc8196) } -var fileDescriptor_27177e20b9cac2b9 = []byte{ - // 150 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2f, 0x2e, 0xc8, 0xd3, - 0x2f, 0x4a, 0x2d, 0x4f, 0x2c, 0x4a, 0xd1, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, - 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x2a, 0x2e, 0xc8, 0xd3, 0x83, 0x48, 0x48, 0x89, 0xa4, 0xe7, 0xa7, - 0xe7, 0x83, 0x85, 0xf5, 0x41, 0x2c, 0x88, 0x0a, 0x25, 0x3e, 0x2e, 0xb6, 0x00, 0xb0, 0x0e, 0x2b, - 0x96, 0x19, 0x0b, 0xe4, 0x19, 0x9c, 0x9c, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, - 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, - 0x21, 0x4a, 0x23, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0xbf, 0x24, 0x35, - 0x2f, 0x25, 0xb5, 0x28, 0x37, 0x33, 0xaf, 0x44, 0x1f, 0x64, 0x75, 0x05, 0xcc, 0xf2, 0x92, 0xca, - 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0xd1, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x04, - 0x3d, 0x0d, 0x97, 0x00, 0x00, 0x00, +var fileDescriptor_0f63bc6600cc8196 = []byte{ + // 176 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcb, 0x4b, 0x2d, 0x29, + 0xcf, 0x2f, 0xca, 0xd6, 0x2f, 0x4a, 0x2d, 0x4f, 0x2c, 0x4a, 0xd1, 0x2f, 0x33, 0xd4, 0x2f, 0x48, + 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x84, 0xca, 0xeb, 0x41, + 0xe4, 0xf5, 0xca, 0x0c, 0xa5, 0x04, 0x13, 0x73, 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x44, 0x95, + 0x94, 0x48, 0x7a, 0x7e, 0x7a, 0x3e, 0x98, 0xa9, 0x0f, 0x62, 0x41, 0x44, 0x95, 0xb4, 0xb8, 0xd8, + 0x02, 0xc0, 0x66, 0x59, 0x29, 0xbc, 0x58, 0x20, 0xcf, 0xd8, 0xf5, 0x7c, 0x83, 0x96, 0x38, 0xcc, + 0xba, 0x0a, 0x98, 0x85, 0x10, 0x15, 0x4e, 0x4e, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, + 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, + 0xc7, 0x10, 0xa5, 0x91, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, 0x99, + 0x9e, 0x97, 0x59, 0x92, 0xaa, 0x8f, 0x61, 0x48, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, + 0x5a, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x23, 0xe0, 0xf6, 0xfe, 0xd4, 0x00, 0x00, 0x00, } +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + return true +} func (m *Params) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) diff --git a/x/reward/types/query.pb.go b/x/reward/types/query.pb.go index 0e473529..c083f8a4 100644 --- a/x/reward/types/query.pb.go +++ b/x/reward/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/reward/query.proto +// source: network/reward/v1/query.proto package types @@ -8,6 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -31,6 +32,89 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_2fd7d2f7ee599ea2, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_2fd7d2f7ee599ea2, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + type QueryGetRewardPoolRequest struct { LaunchID uint64 `protobuf:"varint,1,opt,name=launchID,proto3" json:"launchID,omitempty"` } @@ -39,7 +123,7 @@ func (m *QueryGetRewardPoolRequest) Reset() { *m = QueryGetRewardPoolReq func (m *QueryGetRewardPoolRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetRewardPoolRequest) ProtoMessage() {} func (*QueryGetRewardPoolRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1f245591884c6468, []int{0} + return fileDescriptor_2fd7d2f7ee599ea2, []int{2} } func (m *QueryGetRewardPoolRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -83,7 +167,7 @@ func (m *QueryGetRewardPoolResponse) Reset() { *m = QueryGetRewardPoolRe func (m *QueryGetRewardPoolResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetRewardPoolResponse) ProtoMessage() {} func (*QueryGetRewardPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1f245591884c6468, []int{1} + return fileDescriptor_2fd7d2f7ee599ea2, []int{3} } func (m *QueryGetRewardPoolResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -127,7 +211,7 @@ func (m *QueryAllRewardPoolRequest) Reset() { *m = QueryAllRewardPoolReq func (m *QueryAllRewardPoolRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllRewardPoolRequest) ProtoMessage() {} func (*QueryAllRewardPoolRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1f245591884c6468, []int{2} + return fileDescriptor_2fd7d2f7ee599ea2, []int{4} } func (m *QueryAllRewardPoolRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -172,7 +256,7 @@ func (m *QueryAllRewardPoolResponse) Reset() { *m = QueryAllRewardPoolRe func (m *QueryAllRewardPoolResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllRewardPoolResponse) ProtoMessage() {} func (*QueryAllRewardPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1f245591884c6468, []int{3} + return fileDescriptor_2fd7d2f7ee599ea2, []int{5} } func (m *QueryAllRewardPoolResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -215,133 +299,53 @@ func (m *QueryAllRewardPoolResponse) GetPagination() *query.PageResponse { return nil } -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { -} - -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1f245591884c6468, []int{4} -} -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) -} -func (m *QueryParamsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo - -// QueryParamsResponse is response type for the Query/Params RPC method. -type QueryParamsResponse struct { - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` -} - -func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } -func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryParamsResponse) ProtoMessage() {} -func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_1f245591884c6468, []int{5} -} -func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsResponse.Merge(m, src) -} -func (m *QueryParamsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo - -func (m *QueryParamsResponse) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - func init() { - proto.RegisterType((*QueryGetRewardPoolRequest)(nil), "spn.reward.QueryGetRewardPoolRequest") - proto.RegisterType((*QueryGetRewardPoolResponse)(nil), "spn.reward.QueryGetRewardPoolResponse") - proto.RegisterType((*QueryAllRewardPoolRequest)(nil), "spn.reward.QueryAllRewardPoolRequest") - proto.RegisterType((*QueryAllRewardPoolResponse)(nil), "spn.reward.QueryAllRewardPoolResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "spn.reward.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "spn.reward.QueryParamsResponse") -} - -func init() { proto.RegisterFile("spn/reward/query.proto", fileDescriptor_1f245591884c6468) } - -var fileDescriptor_1f245591884c6468 = []byte{ - // 506 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x31, 0x6f, 0x13, 0x31, - 0x14, 0xc7, 0x73, 0x6d, 0x89, 0xd0, 0x43, 0x2c, 0xa6, 0x2a, 0x70, 0x2a, 0x17, 0x74, 0xa2, 0xa5, - 0xaa, 0x84, 0x4d, 0x8b, 0x10, 0x0b, 0x4b, 0x23, 0x44, 0xc4, 0x16, 0x32, 0x76, 0x41, 0xce, 0xd5, - 0xba, 0x9e, 0x74, 0xf1, 0x73, 0xcf, 0x0e, 0x50, 0x21, 0x16, 0x46, 0x26, 0x04, 0x23, 0x23, 0x5f, - 0xa6, 0x63, 0x25, 0x16, 0x26, 0x84, 0x12, 0x3e, 0x08, 0x8a, 0xed, 0xeb, 0x5d, 0xda, 0x8b, 0x22, - 0xa6, 0x38, 0xf6, 0x7b, 0xff, 0xf7, 0xfb, 0xbf, 0xf7, 0x0e, 0x36, 0xb4, 0x92, 0xac, 0x10, 0xef, - 0x78, 0x71, 0xc4, 0x4e, 0xc6, 0xa2, 0x38, 0xa5, 0xaa, 0x40, 0x83, 0x04, 0xb4, 0x92, 0xd4, 0xdd, - 0x87, 0x9b, 0x29, 0x62, 0x9a, 0x0b, 0xc6, 0x55, 0xc6, 0xb8, 0x94, 0x68, 0xb8, 0xc9, 0x50, 0x6a, - 0x17, 0x19, 0xee, 0x26, 0xa8, 0x47, 0xa8, 0xd9, 0x90, 0x6b, 0xe1, 0x24, 0xd8, 0xdb, 0xbd, 0xa1, - 0x30, 0x7c, 0x8f, 0x29, 0x9e, 0x66, 0xd2, 0x06, 0xfb, 0xd8, 0xdb, 0xb5, 0x6a, 0x8a, 0x17, 0x7c, - 0x54, 0x8a, 0x6c, 0xd6, 0x1e, 0xdc, 0xcf, 0x1b, 0x85, 0x98, 0xfb, 0xd7, 0xa8, 0x5e, 0xa2, 0x14, - 0x4f, 0x30, 0x2b, 0x65, 0xd7, 0x53, 0x4c, 0xd1, 0x1e, 0xd9, 0xec, 0xe4, 0x6e, 0xe3, 0x67, 0x70, - 0xf7, 0xf5, 0x0c, 0xa7, 0x27, 0xcc, 0xc0, 0x4a, 0xf6, 0x11, 0xf3, 0x81, 0x38, 0x19, 0x0b, 0x6d, - 0x48, 0x08, 0xd7, 0x73, 0x3e, 0x96, 0xc9, 0xf1, 0xab, 0x17, 0x77, 0x82, 0xfb, 0xc1, 0xce, 0xda, - 0xe0, 0xe2, 0x7f, 0x7c, 0x08, 0x61, 0x53, 0xa2, 0x56, 0x28, 0xb5, 0x20, 0xcf, 0x01, 0x8a, 0x8b, - 0x5b, 0x9b, 0x7b, 0x63, 0x7f, 0x83, 0x56, 0xed, 0xa2, 0x55, 0x4e, 0x77, 0xed, 0xec, 0x77, 0xa7, - 0x35, 0xa8, 0xc5, 0xc7, 0x89, 0x87, 0x3a, 0xc8, 0xf3, 0xab, 0x50, 0x2f, 0x01, 0xaa, 0x96, 0x79, - 0xe9, 0x6d, 0xea, 0xcc, 0xd3, 0x99, 0x79, 0xea, 0x46, 0xe4, 0x5b, 0x40, 0xfb, 0x3c, 0x15, 0x3e, - 0x77, 0x50, 0xcb, 0x8c, 0x7f, 0x04, 0xde, 0xc1, 0xa5, 0x2a, 0x0b, 0x1c, 0xac, 0xfe, 0x8f, 0x03, - 0xd2, 0x9b, 0x83, 0x5c, 0xb1, 0x90, 0x0f, 0x97, 0x42, 0xba, 0xd2, 0x73, 0x94, 0xeb, 0x40, 0x2c, - 0x64, 0xdf, 0x2e, 0x82, 0xf7, 0x11, 0xf7, 0xe0, 0xd6, 0xdc, 0xad, 0x67, 0x7e, 0x0c, 0x6d, 0xb7, - 0x30, 0xbe, 0x2d, 0xa4, 0xce, 0xeb, 0x62, 0x3d, 0xab, 0x8f, 0xdb, 0xff, 0xbe, 0x0a, 0xd7, 0xac, - 0x12, 0xf9, 0x1a, 0x00, 0x54, 0x96, 0xc8, 0x56, 0x3d, 0x75, 0xe1, 0x86, 0x84, 0xdb, 0xcb, 0xc2, - 0x1c, 0x59, 0xfc, 0xf4, 0xd3, 0xcf, 0xbf, 0xdf, 0x56, 0x18, 0x79, 0xc4, 0x8c, 0x90, 0x47, 0xa2, - 0x18, 0x65, 0xd2, 0xb0, 0xe6, 0x75, 0x66, 0x1f, 0xca, 0x1d, 0xfb, 0x48, 0x3e, 0x07, 0x70, 0xb3, - 0x52, 0x3b, 0xc8, 0x9b, 0xb8, 0x9a, 0x96, 0xa4, 0x81, 0xab, 0x71, 0xca, 0xf1, 0xae, 0xe5, 0x7a, - 0x40, 0xe2, 0xe5, 0x5c, 0x44, 0x41, 0xdb, 0xf5, 0x90, 0x44, 0x57, 0xd4, 0xe7, 0xc6, 0x13, 0x76, - 0x16, 0xbe, 0xfb, 0xb2, 0x5b, 0xb6, 0x6c, 0x87, 0xdc, 0x5b, 0x50, 0xd6, 0x4d, 0xa7, 0xdb, 0x3d, - 0x9b, 0x44, 0xc1, 0xf9, 0x24, 0x0a, 0xfe, 0x4c, 0xa2, 0xe0, 0xcb, 0x34, 0x6a, 0x9d, 0x4f, 0xa3, - 0xd6, 0xaf, 0x69, 0xd4, 0x3a, 0xdc, 0x49, 0x33, 0x73, 0x3c, 0x1e, 0xd2, 0x04, 0x47, 0x97, 0x25, - 0xde, 0x97, 0x22, 0xe6, 0x54, 0x09, 0x3d, 0x6c, 0xdb, 0xef, 0xfc, 0xc9, 0xbf, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xe5, 0xb9, 0xfe, 0xaf, 0xc4, 0x04, 0x00, 0x00, + proto.RegisterType((*QueryParamsRequest)(nil), "network.reward.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "network.reward.v1.QueryParamsResponse") + proto.RegisterType((*QueryGetRewardPoolRequest)(nil), "network.reward.v1.QueryGetRewardPoolRequest") + proto.RegisterType((*QueryGetRewardPoolResponse)(nil), "network.reward.v1.QueryGetRewardPoolResponse") + proto.RegisterType((*QueryAllRewardPoolRequest)(nil), "network.reward.v1.QueryAllRewardPoolRequest") + proto.RegisterType((*QueryAllRewardPoolResponse)(nil), "network.reward.v1.QueryAllRewardPoolResponse") +} + +func init() { proto.RegisterFile("network/reward/v1/query.proto", fileDescriptor_2fd7d2f7ee599ea2) } + +var fileDescriptor_2fd7d2f7ee599ea2 = []byte{ + // 536 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x41, 0x6b, 0xd4, 0x40, + 0x14, 0xc7, 0x77, 0xda, 0xba, 0xe8, 0x88, 0x42, 0xc7, 0x1e, 0x6c, 0xb0, 0xb1, 0x8c, 0x5a, 0x97, + 0xc5, 0xce, 0xb0, 0x15, 0xf1, 0xe2, 0xc5, 0x55, 0x2c, 0x82, 0x87, 0x35, 0xde, 0xbc, 0xc8, 0x6c, + 0x1c, 0xd2, 0x60, 0x36, 0x2f, 0x4d, 0x66, 0xb7, 0x16, 0xf1, 0xa0, 0x9f, 0x40, 0xf0, 0xe4, 0xd9, + 0x8b, 0x78, 0xf2, 0x63, 0xf4, 0x22, 0x14, 0xbc, 0x78, 0x12, 0xd9, 0x15, 0xfc, 0x1a, 0xb2, 0x33, + 0x93, 0x36, 0xdb, 0x24, 0x6c, 0xf1, 0xb2, 0xcc, 0xce, 0xfb, 0xff, 0xdf, 0xfb, 0xbd, 0xbc, 0x97, + 0xe0, 0xb5, 0x58, 0xaa, 0x3d, 0x48, 0x5f, 0xf1, 0x54, 0xee, 0x89, 0xf4, 0x25, 0x1f, 0x75, 0xf8, + 0xee, 0x50, 0xa6, 0xfb, 0x2c, 0x49, 0x41, 0x01, 0x59, 0xb6, 0x61, 0x66, 0xc2, 0x6c, 0xd4, 0x71, + 0x96, 0xc5, 0x20, 0x8c, 0x81, 0xeb, 0x5f, 0xa3, 0x72, 0xda, 0x3e, 0x64, 0x03, 0xc8, 0x78, 0x5f, + 0x64, 0xd2, 0xd8, 0xf9, 0xa8, 0xd3, 0x97, 0x4a, 0x74, 0x78, 0x22, 0x82, 0x30, 0x16, 0x2a, 0x84, + 0xd8, 0x6a, 0xdd, 0xa2, 0x36, 0x57, 0xf9, 0x10, 0xe6, 0xf1, 0x95, 0x00, 0x02, 0xd0, 0x47, 0x3e, + 0x3d, 0xd9, 0xdb, 0x2b, 0x01, 0x40, 0x10, 0x49, 0x2e, 0x92, 0x90, 0x8b, 0x38, 0x06, 0xa5, 0x53, + 0x66, 0x79, 0xce, 0x72, 0x13, 0x89, 0x48, 0xc5, 0x20, 0x8f, 0x5f, 0x2b, 0xc7, 0xcd, 0xe9, 0x45, + 0x02, 0x10, 0x19, 0x11, 0x5d, 0xc1, 0xe4, 0xe9, 0x14, 0xbd, 0xa7, 0x9d, 0x9e, 0xdc, 0x1d, 0xca, + 0x4c, 0xd1, 0x67, 0xf8, 0xd2, 0xcc, 0x6d, 0x96, 0x40, 0x9c, 0x49, 0x72, 0x0f, 0x37, 0x4d, 0x85, + 0xcb, 0x68, 0x1d, 0xb5, 0xce, 0x6f, 0xad, 0xb2, 0xd2, 0x83, 0x62, 0xc6, 0xd2, 0x3d, 0x77, 0xf0, + 0xeb, 0x6a, 0xe3, 0xcb, 0xdf, 0x6f, 0x6d, 0xe4, 0x59, 0x0f, 0xbd, 0x8b, 0x57, 0x75, 0xd2, 0x6d, + 0xa9, 0x3c, 0x2d, 0xef, 0x01, 0x44, 0xb6, 0x22, 0x71, 0xf0, 0xd9, 0x48, 0x0c, 0x63, 0x7f, 0xe7, + 0xf1, 0x43, 0x9d, 0x7c, 0xc9, 0x3b, 0xfa, 0x4f, 0x05, 0x76, 0xaa, 0x8c, 0x16, 0xea, 0x01, 0xc6, + 0xe9, 0xd1, 0xad, 0x05, 0x5b, 0xab, 0x00, 0x3b, 0xb6, 0x76, 0x97, 0xa6, 0x70, 0x5e, 0xc1, 0x46, + 0x7d, 0xcb, 0x76, 0x3f, 0x8a, 0xca, 0x6c, 0x8f, 0x30, 0x3e, 0x1e, 0xa8, 0xad, 0xb0, 0xc1, 0xcc, + 0x44, 0xd9, 0x74, 0xa2, 0xcc, 0x2c, 0x8f, 0x9d, 0x2b, 0xeb, 0x89, 0x40, 0x5a, 0xaf, 0x57, 0x70, + 0xd2, 0xaf, 0xc8, 0x36, 0x72, 0xa2, 0x4a, 0x4d, 0x23, 0x8b, 0xff, 0xd1, 0x08, 0xd9, 0x9e, 0x61, + 0x5d, 0xd0, 0xac, 0x37, 0xe7, 0xb2, 0x1a, 0x82, 0x22, 0xec, 0xd6, 0xf7, 0x45, 0x7c, 0x46, 0xc3, + 0x92, 0x77, 0x08, 0x37, 0xcd, 0x54, 0xc9, 0x8d, 0x0a, 0x9c, 0xf2, 0xfa, 0x38, 0x1b, 0xf3, 0x64, + 0xa6, 0x1e, 0x6d, 0xbd, 0xff, 0xf1, 0xe7, 0xe3, 0x02, 0x25, 0xeb, 0x3c, 0x0c, 0xe2, 0x50, 0x49, + 0x5e, 0xb7, 0xd1, 0xe4, 0x33, 0xc2, 0x17, 0x66, 0xc6, 0x4f, 0x6e, 0xd5, 0xd5, 0xa8, 0x5a, 0x2f, + 0x67, 0xf3, 0x94, 0x6a, 0x0b, 0x76, 0x47, 0x83, 0x71, 0xb2, 0x59, 0x03, 0x56, 0x78, 0x8f, 0xf8, + 0x9b, 0x7c, 0x4f, 0xdf, 0x92, 0x4f, 0x08, 0x5f, 0x7c, 0x12, 0x66, 0xa7, 0xc2, 0xac, 0xda, 0xb4, + 0x7a, 0xcc, 0xca, 0x8d, 0xa1, 0x6d, 0x8d, 0x79, 0x9d, 0xd0, 0xf9, 0x98, 0xdd, 0xee, 0xc1, 0xd8, + 0x45, 0x87, 0x63, 0x17, 0xfd, 0x1e, 0xbb, 0xe8, 0xc3, 0xc4, 0x6d, 0x1c, 0x4e, 0xdc, 0xc6, 0xcf, + 0x89, 0xdb, 0x78, 0xde, 0x0a, 0x42, 0xb5, 0x33, 0xec, 0x33, 0x1f, 0x06, 0x27, 0xf3, 0xbc, 0xce, + 0x33, 0xa9, 0xfd, 0x44, 0x66, 0xfd, 0xa6, 0xfe, 0x66, 0xdc, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, + 0x9e, 0x88, 0x6d, 0xbd, 0x3f, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -356,12 +360,11 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { - // Queries a RewardPool by index. - RewardPool(ctx context.Context, in *QueryGetRewardPoolRequest, opts ...grpc.CallOption) (*QueryGetRewardPoolResponse, error) - // Queries a list of RewardPool items. - RewardPoolAll(ctx context.Context, in *QueryAllRewardPoolRequest, opts ...grpc.CallOption) (*QueryAllRewardPoolResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a list of RewardPool items. + GetRewardPool(ctx context.Context, in *QueryGetRewardPoolRequest, opts ...grpc.CallOption) (*QueryGetRewardPoolResponse, error) + ListRewardPool(ctx context.Context, in *QueryAllRewardPoolRequest, opts ...grpc.CallOption) (*QueryAllRewardPoolResponse, error) } type queryClient struct { @@ -372,27 +375,27 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) RewardPool(ctx context.Context, in *QueryGetRewardPoolRequest, opts ...grpc.CallOption) (*QueryGetRewardPoolResponse, error) { - out := new(QueryGetRewardPoolResponse) - err := c.cc.Invoke(ctx, "/spn.reward.Query/RewardPool", in, out, opts...) +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/network.reward.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) RewardPoolAll(ctx context.Context, in *QueryAllRewardPoolRequest, opts ...grpc.CallOption) (*QueryAllRewardPoolResponse, error) { - out := new(QueryAllRewardPoolResponse) - err := c.cc.Invoke(ctx, "/spn.reward.Query/RewardPoolAll", in, out, opts...) +func (c *queryClient) GetRewardPool(ctx context.Context, in *QueryGetRewardPoolRequest, opts ...grpc.CallOption) (*QueryGetRewardPoolResponse, error) { + out := new(QueryGetRewardPoolResponse) + err := c.cc.Invoke(ctx, "/network.reward.v1.Query/GetRewardPool", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/spn.reward.Query/Params", in, out, opts...) +func (c *queryClient) ListRewardPool(ctx context.Context, in *QueryAllRewardPoolRequest, opts ...grpc.CallOption) (*QueryAllRewardPoolResponse, error) { + out := new(QueryAllRewardPoolResponse) + err := c.cc.Invoke(ctx, "/network.reward.v1.Query/ListRewardPool", in, out, opts...) if err != nil { return nil, err } @@ -401,108 +404,107 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . // QueryServer is the server API for Query service. type QueryServer interface { - // Queries a RewardPool by index. - RewardPool(context.Context, *QueryGetRewardPoolRequest) (*QueryGetRewardPoolResponse, error) - // Queries a list of RewardPool items. - RewardPoolAll(context.Context, *QueryAllRewardPoolRequest) (*QueryAllRewardPoolResponse, error) - // Params queries the parameters of the module. + // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a list of RewardPool items. + GetRewardPool(context.Context, *QueryGetRewardPoolRequest) (*QueryGetRewardPoolResponse, error) + ListRewardPool(context.Context, *QueryAllRewardPoolRequest) (*QueryAllRewardPoolResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) RewardPool(ctx context.Context, req *QueryGetRewardPoolRequest) (*QueryGetRewardPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RewardPool not implemented") -} -func (*UnimplementedQueryServer) RewardPoolAll(ctx context.Context, req *QueryAllRewardPoolRequest) (*QueryAllRewardPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RewardPoolAll not implemented") -} func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } +func (*UnimplementedQueryServer) GetRewardPool(ctx context.Context, req *QueryGetRewardPoolRequest) (*QueryGetRewardPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRewardPool not implemented") +} +func (*UnimplementedQueryServer) ListRewardPool(ctx context.Context, req *QueryAllRewardPoolRequest) (*QueryAllRewardPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListRewardPool not implemented") +} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } -func _Query_RewardPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetRewardPoolRequest) +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).RewardPool(ctx, in) + return srv.(QueryServer).Params(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.reward.Query/RewardPool", + FullMethod: "/network.reward.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).RewardPool(ctx, req.(*QueryGetRewardPoolRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_RewardPoolAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllRewardPoolRequest) +func _Query_GetRewardPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetRewardPoolRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).RewardPoolAll(ctx, in) + return srv.(QueryServer).GetRewardPool(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.reward.Query/RewardPoolAll", + FullMethod: "/network.reward.v1.Query/GetRewardPool", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).RewardPoolAll(ctx, req.(*QueryAllRewardPoolRequest)) + return srv.(QueryServer).GetRewardPool(ctx, req.(*QueryGetRewardPoolRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) +func _Query_ListRewardPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllRewardPoolRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) + return srv.(QueryServer).ListRewardPool(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.reward.Query/Params", + FullMethod: "/network.reward.v1.Query/ListRewardPool", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).ListRewardPool(ctx, req.(*QueryAllRewardPoolRequest)) } return interceptor(ctx, in, info, handler) } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.reward.Query", + ServiceName: "network.reward.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "RewardPool", - Handler: _Query_RewardPool_Handler, + MethodName: "Params", + Handler: _Query_Params_Handler, }, { - MethodName: "RewardPoolAll", - Handler: _Query_RewardPoolAll_Handler, + MethodName: "GetRewardPool", + Handler: _Query_GetRewardPool_Handler, }, { - MethodName: "Params", - Handler: _Query_Params_Handler, + MethodName: "ListRewardPool", + Handler: _Query_ListRewardPool_Handler, }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/reward/query.proto", + Metadata: "network/reward/v1/query.proto", } -func (m *QueryGetRewardPoolRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -512,25 +514,20 @@ func (m *QueryGetRewardPoolRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetRewardPoolRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetRewardPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.LaunchID != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.LaunchID)) - i-- - dAtA[i] = 0x8 - } return len(dAtA) - i, nil } -func (m *QueryGetRewardPoolResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -540,18 +537,18 @@ func (m *QueryGetRewardPoolResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryGetRewardPoolResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryGetRewardPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.RewardPool.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -563,7 +560,7 @@ func (m *QueryGetRewardPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } -func (m *QueryAllRewardPoolRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryGetRewardPoolRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -573,32 +570,25 @@ func (m *QueryAllRewardPoolRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllRewardPoolRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetRewardPoolRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllRewardPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetRewardPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + if m.LaunchID != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.LaunchID)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryAllRewardPoolResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryGetRewardPoolResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -608,46 +598,30 @@ func (m *QueryAllRewardPoolResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllRewardPoolResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryGetRewardPoolResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllRewardPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryGetRewardPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.RewardPool) > 0 { - for iNdEx := len(m.RewardPool) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.RewardPool[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + { + size, err := m.RewardPool.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllRewardPoolRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -657,20 +631,32 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllRewardPoolRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllRewardPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } -func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllRewardPoolResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -680,26 +666,42 @@ func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllRewardPoolResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllRewardPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.RewardPool) > 0 { + for iNdEx := len(m.RewardPool) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.RewardPool[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -714,6 +716,26 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + func (m *QueryGetRewardPoolRequest) Size() (n int) { if m == nil { return 0 @@ -769,33 +791,13 @@ func (m *QueryAllRewardPoolResponse) Size() (n int) { return n } -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryGetRewardPoolRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -818,31 +820,12 @@ func (m *QueryGetRewardPoolRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetRewardPoolRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetRewardPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) - } - m.LaunchID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LaunchID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -864,7 +847,7 @@ func (m *QueryGetRewardPoolRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryGetRewardPoolResponse) Unmarshal(dAtA []byte) error { +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -887,15 +870,15 @@ func (m *QueryGetRewardPoolResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryGetRewardPoolResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryGetRewardPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RewardPool", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -922,7 +905,7 @@ func (m *QueryGetRewardPoolResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.RewardPool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -947,7 +930,7 @@ func (m *QueryGetRewardPoolResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllRewardPoolRequest) Unmarshal(dAtA []byte) error { +func (m *QueryGetRewardPoolRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -970,17 +953,17 @@ func (m *QueryAllRewardPoolRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllRewardPoolRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetRewardPoolRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllRewardPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetRewardPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LaunchID", wireType) } - var msglen int + m.LaunchID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -990,28 +973,11 @@ func (m *QueryAllRewardPoolRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.LaunchID |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1033,7 +999,7 @@ func (m *QueryAllRewardPoolRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllRewardPoolResponse) Unmarshal(dAtA []byte) error { +func (m *QueryGetRewardPoolResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1056,10 +1022,10 @@ func (m *QueryAllRewardPoolResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllRewardPoolResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryGetRewardPoolResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllRewardPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryGetRewardPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1091,44 +1057,7 @@ func (m *QueryAllRewardPoolResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RewardPool = append(m.RewardPool, RewardPool{}) - if err := m.RewardPool[len(m.RewardPool)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.RewardPool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1153,7 +1082,7 @@ func (m *QueryAllRewardPoolResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllRewardPoolRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1176,12 +1105,48 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllRewardPoolRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllRewardPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1203,7 +1168,7 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllRewardPoolResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1226,15 +1191,15 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllRewardPoolResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllRewardPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RewardPool", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1261,7 +1226,44 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.RewardPool = append(m.RewardPool, RewardPool{}) + if err := m.RewardPool[len(m.RewardPool)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/reward/types/query.pb.gw.go b/x/reward/types/query.pb.gw.go index ee6257ce..c1195705 100644 --- a/x/reward/types/query.pb.gw.go +++ b/x/reward/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: spn/reward/query.proto +// source: network/reward/v1/query.proto /* Package types is a reverse proxy. @@ -33,7 +33,25 @@ var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage var _ = metadata.Join -func request_Query_RewardPool_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_GetRewardPool_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetRewardPoolRequest var metadata runtime.ServerMetadata @@ -55,12 +73,12 @@ func request_Query_RewardPool_0(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := client.RewardPool(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetRewardPool(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_RewardPool_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_GetRewardPool_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetRewardPoolRequest var metadata runtime.ServerMetadata @@ -82,61 +100,43 @@ func local_request_Query_RewardPool_0(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "launchID", err) } - msg, err := server.RewardPool(ctx, &protoReq) + msg, err := server.GetRewardPool(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_RewardPoolAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_ListRewardPool_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_RewardPoolAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_ListRewardPool_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllRewardPoolRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_RewardPoolAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListRewardPool_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.RewardPoolAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListRewardPool(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_RewardPoolAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_ListRewardPool_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllRewardPoolRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_RewardPoolAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ListRewardPool_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.RewardPoolAll(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata - - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest - var metadata runtime.ServerMetadata - - msg, err := server.Params(ctx, &protoReq) + msg, err := server.ListRewardPool(ctx, &protoReq) return msg, metadata, err } @@ -147,7 +147,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - mux.Handle("GET", pattern_Query_RewardPool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -158,7 +158,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_RewardPool_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -166,11 +166,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_RewardPool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_RewardPoolAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetRewardPool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -181,7 +181,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_RewardPoolAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_GetRewardPool_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -189,11 +189,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_RewardPoolAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetRewardPool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListRewardPool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -204,7 +204,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ListRewardPool_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -212,7 +212,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListRewardPool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -257,7 +257,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - mux.Handle("GET", pattern_Query_RewardPool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -266,18 +266,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_RewardPool_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_RewardPool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_RewardPoolAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_GetRewardPool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -286,18 +286,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_RewardPoolAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_GetRewardPool_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_RewardPoolAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_GetRewardPool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ListRewardPool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -306,14 +306,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ListRewardPool_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ListRewardPool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -321,17 +321,17 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_RewardPool_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"tendermint", "spn", "reward", "reward_pool", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ignite", "network", "reward", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_RewardPoolAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "reward", "reward_pool"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetRewardPool_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"ignite", "network", "reward", "reward_pool", "launchID"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"tendermint", "spn", "reward", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListRewardPool_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ignite", "network", "reward", "reward_pool"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( - forward_Query_RewardPool_0 = runtime.ForwardResponseMessage + forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_RewardPoolAll_0 = runtime.ForwardResponseMessage + forward_Query_GetRewardPool_0 = runtime.ForwardResponseMessage - forward_Query_Params_0 = runtime.ForwardResponseMessage + forward_Query_ListRewardPool_0 = runtime.ForwardResponseMessage ) diff --git a/x/reward/types/reward_pool.go b/x/reward/types/reward_pool.go index 2403a99b..de1aa48d 100644 --- a/x/reward/types/reward_pool.go +++ b/x/reward/types/reward_pool.go @@ -3,8 +3,6 @@ package types import ( "errors" "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" ) // NewRewardPool returns a new RewardPool object @@ -54,9 +52,5 @@ func (m RewardPool) Validate() error { ) } - if _, err := sdk.AccAddressFromBech32(m.Provider); err != nil { - return fmt.Errorf("invalid provider address: %s", err) - } - return nil } diff --git a/x/reward/types/reward_pool.pb.go b/x/reward/types/reward_pool.pb.go index 4f572d8f..e67d021e 100644 --- a/x/reward/types/reward_pool.pb.go +++ b/x/reward/types/reward_pool.pb.go @@ -1,12 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/reward/reward_pool.proto +// source: network/reward/v1/reward_pool.proto package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -39,7 +41,7 @@ func (m *RewardPool) Reset() { *m = RewardPool{} } func (m *RewardPool) String() string { return proto.CompactTextString(m) } func (*RewardPool) ProtoMessage() {} func (*RewardPool) Descriptor() ([]byte, []int) { - return fileDescriptor_9b26030b17d54fe7, []int{0} + return fileDescriptor_ec0cc30cd2290ef1, []int{0} } func (m *RewardPool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -118,36 +120,42 @@ func (m *RewardPool) GetClosed() bool { } func init() { - proto.RegisterType((*RewardPool)(nil), "spn.reward.RewardPool") + proto.RegisterType((*RewardPool)(nil), "network.reward.v1.RewardPool") } -func init() { proto.RegisterFile("spn/reward/reward_pool.proto", fileDescriptor_9b26030b17d54fe7) } +func init() { + proto.RegisterFile("network/reward/v1/reward_pool.proto", fileDescriptor_ec0cc30cd2290ef1) +} -var fileDescriptor_9b26030b17d54fe7 = []byte{ - // 367 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x52, 0xbd, 0x4e, 0xeb, 0x30, - 0x14, 0x8e, 0x6f, 0x7a, 0x7b, 0x7b, 0x7d, 0xaf, 0x10, 0x0a, 0x08, 0x85, 0x0a, 0xa5, 0x11, 0x0b, - 0x11, 0x12, 0x31, 0x85, 0x37, 0x28, 0x0c, 0xb0, 0xa1, 0x8c, 0x30, 0xa0, 0xfc, 0x58, 0xa9, 0x45, - 0xe2, 0x13, 0xd9, 0x6e, 0x81, 0xb7, 0x60, 0x66, 0xe0, 0x01, 0x78, 0x92, 0x8e, 0x1d, 0x99, 0x0a, - 0x6a, 0x5f, 0x02, 0x31, 0xa1, 0xc4, 0xa1, 0xa2, 0xc0, 0xc0, 0xc6, 0x74, 0x7c, 0xce, 0xf7, 0xd9, - 0xdf, 0x77, 0xe4, 0x0f, 0x6f, 0xc8, 0x82, 0x13, 0x41, 0x2f, 0x43, 0x91, 0xd4, 0xe5, 0xbc, 0x00, - 0xc8, 0xfc, 0x42, 0x80, 0x02, 0x0b, 0xcb, 0x82, 0xfb, 0x7a, 0xdc, 0x5e, 0x4d, 0x21, 0x85, 0x6a, - 0x4c, 0xca, 0x93, 0x66, 0xb4, 0x9d, 0x18, 0x64, 0x0e, 0x92, 0x44, 0xa1, 0xa4, 0x64, 0xd8, 0x8d, - 0xa8, 0x0a, 0xbb, 0x24, 0x06, 0xc6, 0x35, 0xbe, 0xf9, 0x6c, 0x62, 0x1c, 0x54, 0x0f, 0x9c, 0x00, - 0x64, 0x56, 0x1b, 0xb7, 0xb2, 0x70, 0xc0, 0xe3, 0xfe, 0xf1, 0xa1, 0x8d, 0x5c, 0xe4, 0x35, 0x82, - 0x79, 0x5f, 0x62, 0x85, 0x80, 0x21, 0x4b, 0xa8, 0xb0, 0x7f, 0xb9, 0xc8, 0xfb, 0x1b, 0xcc, 0x7b, - 0xeb, 0x16, 0xe1, 0xff, 0x8c, 0x33, 0xc5, 0xc2, 0xec, 0x00, 0x18, 0x97, 0xb6, 0xe9, 0x9a, 0xde, - 0xbf, 0xbd, 0x75, 0x5f, 0xcb, 0xfb, 0xa5, 0xbc, 0x5f, 0xcb, 0xfb, 0x25, 0xa3, 0x77, 0x36, 0x9a, - 0x74, 0x8c, 0x97, 0x49, 0x67, 0x2b, 0x65, 0xaa, 0x3f, 0x88, 0xfc, 0x18, 0x72, 0x52, 0x7b, 0xd5, - 0x65, 0x47, 0x26, 0x17, 0x44, 0x5d, 0x17, 0x54, 0x56, 0x17, 0xee, 0x1f, 0x3b, 0xde, 0x37, 0xa9, - 0x32, 0x58, 0xf0, 0x62, 0xdd, 0x21, 0xbc, 0x24, 0x68, 0x1e, 0x32, 0xce, 0x78, 0xaa, 0xed, 0x35, - 0x7e, 0xd4, 0xde, 0x07, 0x37, 0xd6, 0x36, 0x5e, 0xce, 0x42, 0xa9, 0xf4, 0x3f, 0x1c, 0x51, 0x96, - 0xf6, 0x95, 0xfd, 0xdb, 0x45, 0x9e, 0x19, 0x7c, 0x9a, 0x5b, 0xbb, 0x78, 0x25, 0x1e, 0x08, 0x41, - 0xf9, 0x22, 0xbd, 0x59, 0xd1, 0xbf, 0x82, 0xac, 0x35, 0xdc, 0x8c, 0x33, 0x90, 0x34, 0xb1, 0xff, - 0xb8, 0xc8, 0x6b, 0x05, 0x75, 0xd7, 0xeb, 0x8d, 0xa6, 0x0e, 0x1a, 0x4f, 0x1d, 0xf4, 0x34, 0x75, - 0xd0, 0xcd, 0xcc, 0x31, 0xc6, 0x33, 0xc7, 0x78, 0x98, 0x39, 0xc6, 0xe9, 0xfb, 0x4d, 0x14, 0xe5, - 0x09, 0x15, 0x39, 0xe3, 0x8a, 0x94, 0x51, 0xbc, 0x7a, 0x0b, 0x63, 0xb5, 0x4f, 0xd4, 0xac, 0x52, - 0xb4, 0xff, 0x1a, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x02, 0xfd, 0xac, 0xa7, 0x02, 0x00, 0x00, +var fileDescriptor_ec0cc30cd2290ef1 = []byte{ + // 432 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x53, 0x31, 0x6f, 0xd3, 0x40, + 0x14, 0xce, 0x91, 0x10, 0xc2, 0x51, 0x21, 0x7a, 0x54, 0xc8, 0xcd, 0xe0, 0x58, 0x30, 0x60, 0x45, + 0xaa, 0x8f, 0x00, 0x7f, 0x80, 0xc0, 0x00, 0x1b, 0x32, 0x1b, 0x4b, 0x74, 0xb1, 0x4f, 0x97, 0x53, + 0xed, 0x7b, 0xe6, 0xee, 0xe2, 0xd2, 0x7f, 0xc1, 0xcc, 0x2f, 0x40, 0x4c, 0x19, 0x3a, 0x33, 0x77, + 0xac, 0x98, 0x98, 0x0a, 0x4a, 0x86, 0xfe, 0x07, 0x26, 0x64, 0xdf, 0xb5, 0xa2, 0xc0, 0xc0, 0xd8, + 0xc5, 0xbe, 0xef, 0x7d, 0xdf, 0xd3, 0xfb, 0x3e, 0xfb, 0x1e, 0x7e, 0xa0, 0xb8, 0x3d, 0x00, 0xbd, + 0x4f, 0x35, 0x3f, 0x60, 0x3a, 0xa7, 0xf5, 0xc4, 0x9f, 0x66, 0x15, 0x40, 0x91, 0x54, 0x1a, 0x2c, + 0x90, 0x6d, 0x2f, 0x4a, 0x1c, 0x95, 0xd4, 0x93, 0xe1, 0x36, 0x2b, 0xa5, 0x02, 0xda, 0x3e, 0x9d, + 0x6a, 0x18, 0x66, 0x60, 0x4a, 0x30, 0x74, 0xce, 0x0c, 0xa7, 0xf5, 0x64, 0xce, 0x2d, 0x9b, 0xd0, + 0x0c, 0xa4, 0xf2, 0xfc, 0xae, 0xe3, 0x67, 0x2d, 0xa2, 0x0e, 0x78, 0x6a, 0x47, 0x80, 0x00, 0x57, + 0x6f, 0x4e, 0xae, 0x7a, 0xff, 0x4b, 0x0f, 0xe3, 0xb4, 0x9d, 0xf8, 0x1a, 0xa0, 0x20, 0x43, 0x3c, + 0x28, 0xd8, 0x52, 0x65, 0x8b, 0x57, 0x2f, 0x02, 0x14, 0xa1, 0xb8, 0x97, 0x5e, 0x60, 0xf2, 0x14, + 0x0f, 0x2a, 0x0d, 0xb5, 0xcc, 0xb9, 0x0e, 0xae, 0x45, 0x28, 0xbe, 0x39, 0x0d, 0xbe, 0x1e, 0xed, + 0xed, 0xf8, 0x21, 0xcf, 0xf2, 0x5c, 0x73, 0x63, 0xde, 0x58, 0x2d, 0x95, 0x48, 0x2f, 0x94, 0x64, + 0x85, 0xf0, 0x96, 0x54, 0xd2, 0x4a, 0x56, 0x3c, 0x07, 0xa9, 0x4c, 0xd0, 0x8d, 0xba, 0xf1, 0xad, + 0xc7, 0xbb, 0x89, 0xef, 0x6b, 0x92, 0x24, 0x3e, 0x49, 0xd2, 0x28, 0xa6, 0xef, 0x8e, 0x4f, 0x47, + 0x9d, 0x9f, 0xa7, 0xa3, 0x87, 0x42, 0xda, 0xc5, 0x72, 0x9e, 0x64, 0x50, 0xfa, 0x24, 0xfe, 0xb5, + 0x67, 0xf2, 0x7d, 0x6a, 0x0f, 0x2b, 0x6e, 0xda, 0x86, 0xcf, 0xdf, 0x47, 0xf1, 0x7f, 0x4a, 0xcd, + 0xc7, 0xb3, 0xd5, 0x78, 0xab, 0xe0, 0x82, 0x65, 0x87, 0xb3, 0xe6, 0xb3, 0x99, 0x4f, 0x67, 0xab, + 0x31, 0x4a, 0x2f, 0x39, 0x24, 0x47, 0x08, 0xdf, 0xd6, 0xbc, 0x64, 0x52, 0x49, 0x25, 0x9c, 0xe9, + 0xde, 0x15, 0x34, 0xfd, 0x87, 0x47, 0x32, 0xc6, 0x77, 0x0a, 0x66, 0xac, 0xfb, 0x9b, 0x2f, 0xb9, + 0x14, 0x0b, 0x1b, 0x5c, 0x8f, 0x50, 0xdc, 0x4d, 0xff, 0xaa, 0x93, 0x47, 0xf8, 0x6e, 0xb6, 0xd4, + 0x9a, 0xab, 0xcb, 0xf2, 0x7e, 0x2b, 0xff, 0x17, 0x45, 0xee, 0xe1, 0x7e, 0x56, 0x80, 0xe1, 0x79, + 0x70, 0x23, 0x42, 0xf1, 0x20, 0xf5, 0x68, 0x3a, 0x3d, 0x5e, 0x87, 0xe8, 0x64, 0x1d, 0xa2, 0x1f, + 0xeb, 0x10, 0x7d, 0xd8, 0x84, 0x9d, 0x93, 0x4d, 0xd8, 0xf9, 0xb6, 0x09, 0x3b, 0x6f, 0x7f, 0xcf, + 0x27, 0x85, 0x92, 0x96, 0xd3, 0xf3, 0x45, 0x78, 0x7f, 0xbe, 0x0a, 0x6d, 0xca, 0x79, 0xbf, 0xbd, + 0x8b, 0x4f, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x88, 0xe1, 0xa1, 0x29, 0x03, 0x00, 0x00, } func (m *RewardPool) Marshal() (dAtA []byte, err error) { diff --git a/x/reward/types/reward_pool_test.go b/x/reward/types/reward_pool_test.go index 9228414c..6a47569a 100644 --- a/x/reward/types/reward_pool_test.go +++ b/x/reward/types/reward_pool_test.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/tendermint/spn/testutil/sample" - "github.com/tendermint/spn/x/reward/types" + "github.com/ignite/network/testutil/sample" + "github.com/ignite/network/x/reward/types" ) func TestRewardPool_Validate(t *testing.T) { diff --git a/x/reward/types/tx.pb.go b/x/reward/types/tx.pb.go index b7e74480..77d4cf49 100644 --- a/x/reward/types/tx.pb.go +++ b/x/reward/types/tx.pb.go @@ -1,13 +1,16 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: spn/reward/tx.proto +// source: network/reward/v1/tx.proto package types import ( context "context" fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -30,6 +33,99 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_3137090ae719fd02, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_3137090ae719fd02, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + type MsgSetRewards struct { Provider string `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` LaunchID uint64 `protobuf:"varint,2,opt,name=launchID,proto3" json:"launchID,omitempty"` @@ -41,7 +137,7 @@ func (m *MsgSetRewards) Reset() { *m = MsgSetRewards{} } func (m *MsgSetRewards) String() string { return proto.CompactTextString(m) } func (*MsgSetRewards) ProtoMessage() {} func (*MsgSetRewards) Descriptor() ([]byte, []int) { - return fileDescriptor_192686481304f833, []int{0} + return fileDescriptor_3137090ae719fd02, []int{2} } func (m *MsgSetRewards) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -109,7 +205,7 @@ func (m *MsgSetRewardsResponse) Reset() { *m = MsgSetRewardsResponse{} } func (m *MsgSetRewardsResponse) String() string { return proto.CompactTextString(m) } func (*MsgSetRewardsResponse) ProtoMessage() {} func (*MsgSetRewardsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_192686481304f833, []int{1} + return fileDescriptor_3137090ae719fd02, []int{3} } func (m *MsgSetRewardsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -167,40 +263,54 @@ func (m *MsgSetRewardsResponse) GetNewLastRewardHeight() int64 { } func init() { - proto.RegisterType((*MsgSetRewards)(nil), "spn.reward.MsgSetRewards") - proto.RegisterType((*MsgSetRewardsResponse)(nil), "spn.reward.MsgSetRewardsResponse") -} - -func init() { proto.RegisterFile("spn/reward/tx.proto", fileDescriptor_192686481304f833) } - -var fileDescriptor_192686481304f833 = []byte{ - // 412 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x53, 0xbd, 0xae, 0xd3, 0x30, - 0x18, 0x8d, 0x9b, 0x82, 0x8a, 0x51, 0x25, 0xe4, 0x82, 0x94, 0x66, 0x48, 0x43, 0x17, 0x22, 0x24, - 0x6c, 0x5a, 0x36, 0xc6, 0x96, 0x01, 0x50, 0x3b, 0x10, 0x36, 0x98, 0xf2, 0x63, 0xa5, 0x11, 0xad, - 0x1d, 0xe5, 0x73, 0x7f, 0x58, 0x99, 0x19, 0x10, 0x33, 0x4f, 0xc0, 0x1b, 0xf0, 0x06, 0x1d, 0x3b, - 0x32, 0x15, 0xd4, 0xbe, 0x05, 0x13, 0x4a, 0xd2, 0xe6, 0xb6, 0xf7, 0xb6, 0xd2, 0xdd, 0xee, 0x9d, - 0x62, 0x9f, 0xe3, 0x7c, 0x39, 0x27, 0xc7, 0x07, 0x37, 0x20, 0x11, 0x2c, 0xe5, 0x73, 0x2f, 0x0d, - 0x99, 0x5a, 0xd0, 0x24, 0x95, 0x4a, 0x12, 0x0c, 0x89, 0xa0, 0x05, 0x68, 0x5a, 0x81, 0x84, 0x89, - 0x04, 0xe6, 0x7b, 0xc0, 0xd9, 0xac, 0xe3, 0x73, 0xe5, 0x75, 0x58, 0x20, 0x63, 0x51, 0x9c, 0x35, - 0x1f, 0x46, 0x32, 0x92, 0xf9, 0x92, 0x65, 0xab, 0x02, 0x6d, 0x7f, 0xa9, 0xe0, 0xfa, 0x10, 0xa2, - 0xf7, 0x5c, 0xb9, 0xf9, 0x18, 0x20, 0x26, 0xae, 0x25, 0xa9, 0x9c, 0xc5, 0x21, 0x4f, 0x0d, 0x64, - 0x23, 0xe7, 0x9e, 0x5b, 0xee, 0x33, 0x6e, 0xec, 0x4d, 0x45, 0x30, 0x7a, 0xf3, 0xca, 0xa8, 0xd8, - 0xc8, 0xa9, 0xba, 0xe5, 0x9e, 0x7c, 0x45, 0xf8, 0x4e, 0xf6, 0x39, 0x30, 0x74, 0x5b, 0x77, 0xee, - 0x77, 0x9b, 0xb4, 0x10, 0x44, 0x33, 0x41, 0x74, 0x27, 0x88, 0xf6, 0x65, 0x2c, 0x7a, 0x1f, 0x97, - 0xeb, 0x96, 0xf6, 0x6f, 0xdd, 0x7a, 0x12, 0xc5, 0x6a, 0x34, 0xf5, 0x69, 0x20, 0x27, 0x6c, 0xa7, - 0xbe, 0x78, 0x3c, 0x83, 0xf0, 0x13, 0x53, 0x9f, 0x13, 0x0e, 0xf9, 0x0b, 0x3f, 0xff, 0xb4, 0x9c, - 0x6b, 0x1e, 0x05, 0xb7, 0x10, 0x41, 0x9e, 0xe2, 0x07, 0x63, 0x0f, 0x76, 0xae, 0x5e, 0xf3, 0x38, - 0x1a, 0x29, 0xa3, 0x6a, 0x23, 0x47, 0x77, 0xaf, 0xe0, 0xed, 0x5f, 0x3a, 0x7e, 0x74, 0xf4, 0x13, - 0x5c, 0x0e, 0x89, 0x14, 0xc0, 0xc9, 0x0f, 0x84, 0xeb, 0x49, 0xca, 0x67, 0xb1, 0x9c, 0x42, 0x3e, - 0xde, 0x40, 0x37, 0x6a, 0xee, 0x58, 0x0c, 0x79, 0x89, 0x8d, 0x3d, 0x30, 0xb8, 0x6c, 0xb6, 0x92, - 0x9b, 0x3d, 0xcb, 0x93, 0xef, 0x08, 0xd7, 0x04, 0x9f, 0xf7, 0x6f, 0x41, 0x64, 0xa5, 0x0e, 0xf2, - 0x1c, 0x37, 0x04, 0x9f, 0x0f, 0x4e, 0x07, 0x77, 0x8a, 0xea, 0xbe, 0xc3, 0xfa, 0x10, 0x22, 0xf2, - 0x16, 0xe3, 0x83, 0x3b, 0xdc, 0xa4, 0x17, 0xc5, 0xa0, 0x47, 0xc9, 0x9a, 0x8f, 0xcf, 0x52, 0xfb, - 0xd0, 0x7b, 0xbd, 0xe5, 0xc6, 0x42, 0xab, 0x8d, 0x85, 0xfe, 0x6e, 0x2c, 0xf4, 0x6d, 0x6b, 0x69, - 0xab, 0xad, 0xa5, 0xfd, 0xde, 0x5a, 0xda, 0x87, 0x43, 0x4b, 0x8a, 0x8b, 0x90, 0xa7, 0x93, 0x58, - 0x28, 0x96, 0x55, 0x73, 0x51, 0x96, 0x33, 0x33, 0xe6, 0xdf, 0xcd, 0xeb, 0xf5, 0xe2, 0x7f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x27, 0x82, 0x7c, 0x6e, 0xb7, 0x03, 0x00, 0x00, + proto.RegisterType((*MsgUpdateParams)(nil), "network.reward.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "network.reward.v1.MsgUpdateParamsResponse") + proto.RegisterType((*MsgSetRewards)(nil), "network.reward.v1.MsgSetRewards") + proto.RegisterType((*MsgSetRewardsResponse)(nil), "network.reward.v1.MsgSetRewardsResponse") +} + +func init() { proto.RegisterFile("network/reward/v1/tx.proto", fileDescriptor_3137090ae719fd02) } + +var fileDescriptor_3137090ae719fd02 = []byte{ + // 605 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0xbf, 0x6f, 0xd3, 0x4c, + 0x18, 0xce, 0x35, 0x6d, 0xd5, 0xde, 0xd7, 0xea, 0xa3, 0x47, 0x51, 0x1d, 0x0f, 0x8e, 0x95, 0x85, + 0xc8, 0x52, 0x6d, 0xd2, 0x22, 0x86, 0x88, 0x85, 0x94, 0x01, 0xa4, 0x46, 0x42, 0xae, 0x90, 0x10, + 0x03, 0x95, 0x13, 0x9f, 0x2e, 0x56, 0x63, 0x9f, 0xf1, 0x5d, 0x92, 0x66, 0x43, 0x8c, 0x4c, 0xcc, + 0x8c, 0x4c, 0x15, 0x53, 0x84, 0x18, 0x59, 0x58, 0x50, 0xc7, 0x8a, 0x89, 0xa9, 0xa0, 0x44, 0x28, + 0xff, 0x03, 0x13, 0xf2, 0xf9, 0x9c, 0x34, 0x3f, 0x50, 0x18, 0xbb, 0xd8, 0xbe, 0xf7, 0x79, 0xdf, + 0xf7, 0x9e, 0xf7, 0x79, 0x7c, 0x07, 0xd5, 0x00, 0xf3, 0x0e, 0x8d, 0x4e, 0xac, 0x08, 0x77, 0x9c, + 0xc8, 0xb5, 0xda, 0x25, 0x8b, 0x9f, 0x9a, 0x61, 0x44, 0x39, 0x45, 0x5b, 0x12, 0x33, 0x13, 0xcc, + 0x6c, 0x97, 0xd4, 0x2d, 0xc7, 0xf7, 0x02, 0x6a, 0x89, 0x67, 0x92, 0xa5, 0x6a, 0x75, 0xca, 0x7c, + 0xca, 0xac, 0x9a, 0xc3, 0xb0, 0xd5, 0x2e, 0xd5, 0x30, 0x77, 0x4a, 0x56, 0x9d, 0x7a, 0x81, 0xc4, + 0x77, 0x24, 0xee, 0x33, 0x12, 0x77, 0xf7, 0x19, 0x91, 0x40, 0x2e, 0x01, 0x8e, 0xc5, 0xca, 0x4a, + 0x16, 0x12, 0xda, 0x26, 0x94, 0xd0, 0x24, 0x1e, 0x7f, 0xa5, 0x3b, 0xcd, 0x72, 0x0d, 0x9d, 0xc8, + 0xf1, 0x65, 0x55, 0xe1, 0x33, 0x80, 0xff, 0x57, 0x19, 0x79, 0x1a, 0xba, 0x0e, 0xc7, 0x4f, 0x04, + 0x82, 0xee, 0xc1, 0x75, 0xa7, 0xc5, 0x1b, 0x34, 0xf2, 0x78, 0x57, 0x01, 0x3a, 0x28, 0xae, 0x57, + 0x94, 0x6f, 0x9f, 0x76, 0xb7, 0xe5, 0x76, 0x0f, 0x5c, 0x37, 0xc2, 0x8c, 0x1d, 0xf1, 0xc8, 0x0b, + 0x88, 0x3d, 0x4e, 0x45, 0xf7, 0xe1, 0x6a, 0xd2, 0x5b, 0x59, 0xd2, 0x41, 0xf1, 0xbf, 0xbd, 0x9c, + 0x39, 0x23, 0x86, 0x99, 0x6c, 0x51, 0x59, 0x3f, 0xbf, 0xcc, 0x67, 0xce, 0x86, 0x3d, 0x03, 0xd8, + 0xb2, 0xa6, 0xbc, 0xff, 0x7a, 0xd8, 0x33, 0xc6, 0xdd, 0xde, 0x0c, 0x7b, 0x86, 0x9e, 0x92, 0x3f, + 0x4d, 0xe9, 0x4f, 0x51, 0x2d, 0xe4, 0xe0, 0xce, 0x54, 0xc8, 0xc6, 0x2c, 0xa4, 0x01, 0xc3, 0x85, + 0x2f, 0x4b, 0x70, 0xb3, 0xca, 0xc8, 0x11, 0xe6, 0xb6, 0xa8, 0x65, 0xe8, 0x2e, 0x5c, 0x0b, 0x23, + 0xda, 0xf6, 0x5c, 0x1c, 0x2d, 0x1c, 0x6b, 0x94, 0x89, 0x54, 0xb8, 0xd6, 0x74, 0x5a, 0x41, 0xbd, + 0xf1, 0xf8, 0xa1, 0x98, 0x6b, 0xd9, 0x1e, 0xad, 0xd1, 0x7b, 0x00, 0x57, 0x62, 0xdb, 0x98, 0x92, + 0xd5, 0xb3, 0x62, 0x62, 0xd9, 0x2c, 0x36, 0xd6, 0x94, 0xc6, 0x9a, 0x07, 0xd4, 0x0b, 0x2a, 0x2f, + 0xe3, 0x89, 0x7f, 0x5f, 0xe6, 0x6f, 0x13, 0x8f, 0x37, 0x5a, 0x35, 0xb3, 0x4e, 0x7d, 0xe9, 0x9f, + 0x7c, 0xed, 0x32, 0xf7, 0xc4, 0xe2, 0xdd, 0x10, 0x33, 0x51, 0xf0, 0xe1, 0x47, 0xbe, 0xf8, 0x8f, + 0xa9, 0xec, 0xdd, 0xb0, 0x67, 0x6c, 0x34, 0x31, 0x71, 0xea, 0xdd, 0x63, 0x41, 0x27, 0x51, 0x36, + 0xa1, 0x86, 0x0c, 0x78, 0xa3, 0xe9, 0x30, 0xa9, 0xc2, 0x23, 0xec, 0x91, 0x06, 0x57, 0x96, 0x75, + 0x50, 0xcc, 0xda, 0x33, 0xf1, 0xf2, 0x66, 0x6c, 0xc2, 0x68, 0xf6, 0xc2, 0xaf, 0x2c, 0xbc, 0x35, + 0xa1, 0x61, 0xaa, 0x2e, 0xfa, 0x08, 0xe0, 0x66, 0x18, 0xe1, 0xb6, 0x47, 0x5b, 0x4c, 0x70, 0x50, + 0xc0, 0x35, 0x54, 0x60, 0x92, 0x22, 0x2a, 0x43, 0x25, 0x0d, 0x1c, 0x4e, 0x2b, 0xb2, 0x24, 0x14, + 0xf9, 0x2b, 0x8e, 0xce, 0x00, 0x5c, 0x0b, 0x70, 0xe7, 0xe0, 0xda, 0xba, 0x3d, 0x62, 0x87, 0xee, + 0xc0, 0x9b, 0x01, 0xee, 0x1c, 0xce, 0xf7, 0x7c, 0x1e, 0xb4, 0xf7, 0x15, 0xc0, 0x6c, 0x95, 0x11, + 0xf4, 0x02, 0x6e, 0x4c, 0xdc, 0x04, 0x85, 0x39, 0x27, 0x78, 0xea, 0xbc, 0xa9, 0xc6, 0xe2, 0x9c, + 0xd1, 0x5f, 0xf3, 0x0c, 0xc2, 0x2b, 0xe7, 0x51, 0x9f, 0x5f, 0x39, 0xce, 0x50, 0x8b, 0x8b, 0x32, + 0xd2, 0xce, 0xea, 0xca, 0xab, 0x58, 0x84, 0x4a, 0xe5, 0xbc, 0xaf, 0x81, 0x8b, 0xbe, 0x06, 0x7e, + 0xf6, 0x35, 0xf0, 0x76, 0xa0, 0x65, 0x2e, 0x06, 0x5a, 0xe6, 0xfb, 0x40, 0xcb, 0x3c, 0xbf, 0x2a, + 0xaf, 0x47, 0x02, 0x8f, 0x63, 0x6b, 0xe6, 0x76, 0x11, 0x22, 0xd7, 0x56, 0xc5, 0xcd, 0xb8, 0xff, + 0x27, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xf6, 0x57, 0x5a, 0xe7, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -215,6 +325,9 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) SetRewards(ctx context.Context, in *MsgSetRewards, opts ...grpc.CallOption) (*MsgSetRewardsResponse, error) } @@ -226,9 +339,18 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/network.reward.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) SetRewards(ctx context.Context, in *MsgSetRewards, opts ...grpc.CallOption) (*MsgSetRewardsResponse, error) { out := new(MsgSetRewardsResponse) - err := c.cc.Invoke(ctx, "/spn.reward.Msg/SetRewards", in, out, opts...) + err := c.cc.Invoke(ctx, "/network.reward.v1.Msg/SetRewards", in, out, opts...) if err != nil { return nil, err } @@ -237,6 +359,9 @@ func (c *msgClient) SetRewards(ctx context.Context, in *MsgSetRewards, opts ...g // MsgServer is the server API for Msg service. type MsgServer interface { + // UpdateParams defines a (governance) operation for updating the module + // parameters. The authority defaults to the x/gov module account. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) SetRewards(context.Context, *MsgSetRewards) (*MsgSetRewardsResponse, error) } @@ -244,6 +369,9 @@ type MsgServer interface { type UnimplementedMsgServer struct { } +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} func (*UnimplementedMsgServer) SetRewards(ctx context.Context, req *MsgSetRewards) (*MsgSetRewardsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetRewards not implemented") } @@ -252,6 +380,24 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/network.reward.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_SetRewards_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgSetRewards) if err := dec(in); err != nil { @@ -262,7 +408,7 @@ func _Msg_SetRewards_Handler(srv interface{}, ctx context.Context, dec func(inte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spn.reward.Msg/SetRewards", + FullMethod: "/network.reward.v1.Msg/SetRewards", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).SetRewards(ctx, req.(*MsgSetRewards)) @@ -271,16 +417,83 @@ func _Msg_SetRewards_Handler(srv interface{}, ctx context.Context, dec func(inte } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "spn.reward.Msg", + ServiceName: "network.reward.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, { MethodName: "SetRewards", Handler: _Msg_SetRewards_Handler, }, }, Streams: []grpc.StreamDesc{}, - Metadata: "spn/reward/tx.proto", + Metadata: "network/reward/v1/tx.proto", +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil } func (m *MsgSetRewards) Marshal() (dAtA []byte, err error) { @@ -409,6 +622,30 @@ func encodeVarintTx(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgSetRewards) Size() (n int) { if m == nil { return 0 @@ -467,6 +704,171 @@ func sovTx(x uint64) (n int) { func sozTx(x uint64) (n int) { return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgSetRewards) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0
  2. 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%0Dk=80muu}pdaWf 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¾nW-GAE|8WoDykpOs@w71vyJsw@)8nT5 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�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�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�xt8LmWLl21ZUME zWD+RnUj2dg%%)tlaHNyta%39>F9^6EY$$Sp90b{JcY~+d?j$x0r@{T;z{Pi&3#4@r z9qd>Irr(MOd3M4CLP5#_&~AKJTBAf9fY=5xPEJPNQ3!%^W}s-lB?Z|cjkza&289Qy zVIMy#9R@mfVEzxUDw|eGEVz>o*bIC7K%8-m!AngP#%@p|sfpcuf#%;D-*%2GEVk^+ z*B}M;Hg&pwXwSfrVOU>3Xqavs>yUP}Z^X;4bbwM9;+-Dubf9*UZaN+4sMwXYvn&vcifA)v@kd$7pB2KUa&D9{6{R=!^@OM9B zMMpM+LK%kzHR4rPelHua>o0@ZcnQ4j~=Esfd?ibG*^+gy5F z+JxsXcR4~!)!u)Wrp8oDxIFt^_9P70fAEm?Yg(5Xy%A|@7r`Q+J!(Vy{gUJNODm5V z-e82nq@lUa@Zs&u3V_L13tGu)lm?xD^aH4#Vm4LwL1DG#d{|Pdn%Fe}`opmo5)JkP zbj``1fC;#D1==!g%*%y(D-?J8t!s~b@w3h^UWHM?e$f8@4RBz4==^t?U(Eb5X;P^n z22VBHd-0VC1_&q?QLxcEW`sJt#HwIU%0Fm(co7HjO5;duEf%6MxjnF>b z%;E8cf&?|_rSVS~Dvr--W9N1Ud%={Q%_lz|)Sj{7)t#dKb;_y7#c&(;)1F!2XTya^ z=YDbr*Z^oP9c;GCJp=+sJO6_#KN2;cGXkz1RT&EX`1@eYMxevYxSPZP-!sCK3)D+t zn1>CeC6FeL*9#QOO#I_h_kjn3cH;-aAzJBlKzo?v0>|XVmFE!Gm#!`cOZ$%`WRfaD z_+~sT9T~N1dq9h2D4k_Pux;firbr9ui1v*0HECpJ+4rUT+rX1)9|Gz&^5h(B2Io0s zw;vohWM9T|k}Xz(3UQX0hasj#rPKcR=&=U^3d9C4j0fXLxGQMix`XsnLv4mG7#9(r z&bqR1FC7OYmV*_8@*=>rpPq_0LbD6c2M01hp`va$XLIG{GPMDf*wEb1JqGSmHg@T0 z=@QPJCNpyt1kmKj_!<+a5Hts>=7r;!S^xIn-Qd7D zXq|ovRz)@%dMaP6vL0G}Eiam;;z{T7qyUFjJlGK_7I>6s4HIU*y5Y~S{Q`m!y7}MR zXh@=~Q$cwkFAxh;#PJ`31Ir?ouKn2P5pECzTwV67-*J4L5Yt6R!lbBndW)%yNq6NK znDPv?;qd}yi%L4?koGI-=U*D4yL1fqv{y4~mF`QuQv)u>#VVG~eoz{SdBd7B7QD&q z%7{_Xgl>(NJs&>-yA-5Ss1s`R@`(rJC_jjcjCOI*Foy~(eswQ*#vHNC5K+ORgO`pf z&y;?pJk?6yP3Q;kctHCPIwVW2ja?__%JlXeG_l?YN<$#4i@+ElRX~|UnIOOc6eB8l zSy)!_+5nW2G><~ zK-4n^bh|{#?q6l>X(~-MBd^*}j%nRRDY22z-9Gcxsi(}){ z9x4|r2-wgwB+?l(o7Sg&Nsr{jxxrcst2?1-<-UBuIg+pK4D@TFn>RJIbZel6gfl#<{ z=z9cn*;ggA;mZB61ok4@_S;^&i^n*)gT-sR;0B)9A-&-FCa|xc*X^iOwOp9MIv9;D zv6vGbYV9-Qnb@5(Q9em=BMwPEC9n4@zYiL~?5P1+ib?&M?=sT# zC!p#Ww4OmWt881YgFX+Mv}{%M4NJ-ti*cgz*?!h?U?l zEhL+av*iqcs`zrFG$zOBT)n1mgVP3*^q%=Y{qPMjw5O$R#w{Ly9rnHhdEjm;>s7Yu zFH%L31ppZLr(?24+;=tiaMc5J`hcj35FrfXh8>q_1sC4111p1b{vLTOV*K#8{gu1WUM&UKt3 zz*?t$!cqP?v-2%sw2m?48#%U}IlUg*!((Hd)$tHsxf}Gr*@v}RL%aBN9aBfGK(!~J zLBJ~urmv`-XxuMaT1pu?fYWX>cdHy#%VvQYlOYEPPi6A$eEk_}yjp%xnae;2Xd!8U zSv|rCrBrBDe*`KMcoGyDq0)~@31k^XmS;z_sFsy#F=9IBL^5~@v0={@uNpj3mVCkDXceR0 z;i&*tf94bOo%7)iPzVCrM0C_ZW`cHpZ9T4ta{%IkIoFf-(g$3)_TgNl!(8q(c{*T# zmk_9Yuq_CLJ$C#~4l{kYa$G+EPiujmzya0s@^mWxpSqdj2Zd44w+pUcfJKCh-P_<^ zt&$p+_Pj|)))rTg4m=wMI-WWingVI{O&MPF+#@#yuFPS40IkQrTi4&q$eHMcoSmRHMD;~YRVEKIf40t`L(WSlq2&65&)4`r4fQ|Dj()}<>tFq!9VmBvztFuh-t^6ZOu zDF3N-t{-4IZJZ}Z@ojKKM_6JgqXaO*MO?scpxHCOn6yhavC?G3g1OKG0$Uai;KFk% z-ERC87Ng5y_9g85@a6Ciepm@z`!*uvvW@n^UT6Xrh6e~gwZ{Ov)R@aOoBr%6a9bC(K%n#Lhd}^O#C&cvi*2tGtmV`9(7<)k zy8sr?OZ>l|AAJ-8NELCD#uK;>fPMTR7!#-iw2%O%!!eXu2RP_WqI~s!X$~}&w_=d& zE`wnK&?B_ZN1LFTd3M3N`h^Nuu1+d(yg6r}ovTp5P+P(cBcyO6Gqp)N)n+cntwlEr z&4CAo*Z=VT=hQ1a1mG%9iWVK5J53H#9|+q3V`jK=g+wp- zE7QA`YmO-u&Fcho(8>tZL3`hr03ygSLT)j0HkQSU) zht^d^jmIC&X7Fsn1FV6L@qj-jM2D%ePnl3)YwZNqa&@-G$KWJ4g@~9>U z#)iqkN)|XeFbDwz=s(W_BiuIllkW^iZc5j!X>9c1{>Mvhf&2#KsN|X1xIR(AD|q(v zuU>y`{)=B)eYS*|qoZMxp5#(ep;u!JL(AYOSobbgk-=-v40keVF8@@`zTG_rW?eIw z_Ac>OL|#ilecSsRxf7JZww=S0B{v>71EWSWndFGo&yJXkPcT}vsU8N z_@r&Ll{-bk0kJw+Re;Lj5K)9PbrLow^d{|7v&?-CL@*8E!XV83_1<5GrD^X-!D8B5 zR?*^s!w91~vI`7gh0Vy@w`LU6fqtTIxh1d+Om7{y{%goQw|T}2=rJVO>}3~l;wK`# zMSxHH^6Ydk2WO2u-543`KmOP(9m!>P_SHskZn~T!u)8)*l!nrN4zCN83}UGIK!DBq zweJQ&#)qjDCe540sqVW)1>ZUCq9e~D;OndCBLm1DRIr}Goat9l8{YY2nf=)&PjK&4 zqxP4T_Lv0NH{BEY@rVWxFbwK17M;`a^BSy$n7BayMOA(Bxatd)LpZJSb+B4XWt5(% zY$hq7UH~nbC#+`LCQGhMHjI6oM76?|ge?=etAB zxh&tTlY*6{PW!GFmbrz)dZXErJT;N!XdWF1);mK)i|}0Dn+}x@iIt|rP+uqmb-Tpu zgNWQWtbMXUTC}e*K;74#GyuW$Fc+@Ouq@~{5sP|s1u2JvJlGQDZ zdhfjtCm|#dAOuKA0USaLflvYmauN=#Wx!ytvB4DEfLZ4xIXUHh&-<D`?x5A;e?txiBz|?zZJw>zU^bFBI{Bca}#$Xc~eK~4)Q@*hqm@ygAfqpwsp7!2o zxvL{noJR+P7^XanEg;cgcp(`Mf_a!{Unw}?L)&E(>))qitm#neL%VpQV^r^E#0h*L z>O>8;IVG?NT?ruT^fuETVB`U9rL3L4hQGc28gKsFAchw+JGP6=c51YM4$Yn%$^{L_ zv9K`M#w)iQICl)hoc7GnKDXzd(^YWsZnPT`9Kt6kedb)t-QA(N&w~jVL)@Cvf8O(K zbgSOYHTqq7OxiHXp8;hFC9-SX@S+^wJpNed*vlzh-|P4Ym=$A@SV0aJ%I7kD{CUe?xg z^rj{{wD0;uUifG2URb{=lPOX`j-Vz3uLJnC(0c;b0ZzJoKPQ>Fr({lthy*SXpk?Su z!GFK-AQZj`ptqR807Ds|M|E8OWt#&U3@RPWlLj)u7EgT~^3l>Du3krEO0eC$v~0q)eqXR;Ko#n(Xqz1?6LIi>)JcaRt#OG&O#;K z_~Sw`ggw)fiJt=cdlcC5y1+nLNkycxLh$i8!AZqbt)RM7;DzK;pkjMG1JU%E{Ab{tpsRQek_QkUwec#i>+EcV9J>VamW!jzlp0XPQrIjbuF#wHs z{6PEWVum2V4GVg`18rG^uABE6s*T!j-xvqcoX{siakmQ#+vgTk`srguZI|BcS>t@) zBI#6K8bXT(VzQ(w0}nZBk5TQv`l>p4Mp++*zqk)f#|qP#wL2SB!13|cjmr$T?CPqcNd`e%M+spGM+;y)T6n7!tf%OzuI$H%8m;$;l4cjg zZ2ssjX&$QdL`xkY{lY!Vm>WCCyP(%vlowQ>bJse$3>#I9g5{v3=$ysOU6vU}nvQU1 zU4^p2Q0)8qDeWnkP@6zp($T9n|N2^U0PO(OfFcGN{yI#7B_6lj-WeD`I9)LAqw+)l z1=0jAHL|KI6~Z#f*af;63Uo5h@7@3gtj>cm^#E_y9KZuaOMmhb*p2(>N>;9!&Jb5d z50j5aooB%DkENa|urd%Y)E-3l-fl`>GNn^38v4awXwL<{_6l^m$=L4f0Kroq(vkv$ zEwUKObOW7dd#_9TNg(trDetPZN6*c>m;mMs22T*XEoyUfYUAkA9tj6oat4e6!1YI3 z!B}?6?7#pznRfik?|*HgWsYMv&?nmFr}9CJjcBhgp^PUE*fGR=SmYg3=8bL~*1kR5 z2n9&G_{*6dH&iP+~1z=IrUbc;8MeHOVy)kEzLE%QuNd(o>AuNErG-KxPVUCWyt@HdJ&~X5YQAuFo z(LkuDXRsgSo;3eQUKft;X=|F}G;K~}TX-tKA%{Z_QPN_kyQnUHPNMYX>8=?)|#)h*@0H53fbDwG8RamIl z6cmj9$CFRB49-VHtA+D)*I#EO0VWaP4k_L15WLWy_Gk)*zPcW7$3W{i7~_SG9RN*( z0{2V7fjCg~vgpG9>z|+Ku%+4Q<3pc3iB_z`-jZzrOq)esX+@t{aw2iO=FG9*G{omq zyl6VJK4qM<8DOej$$%+mlD;u7PD*=T1lJFk(s&L!$L6iezuceew%JoA3fG=qrVOeM zXu(KIby$J+ILG3nUj?m0FOAQvW^n?zeco3}Q5I0-W_( zkg<9EBW1ig?GEg^od1Pr!b>5Xnf@~@cPt=+;pNsEXjPf(+Ecfb;T)`^=xlPc^VTOa zFo#oy!QCC1v?~eI=-J!`^E`T@zf8%o@>Nu~-L@}d5MV{+IswMeI}hcs zkOK9*%yD$1QStu0;Jl(qhPbVhtXW^4l@8&YD^Q!V1q`|wT+uQdl@gJg<2uIdIl18q zP8TmQ!^hscFO=&67&U5F z(gDu9q0Ph}{jy!9*ic`D%;Ei3yB}`wwgW_mgJsCO)*;%v)+1&YboK1z%LGJuSYugN`m)0 zfja~Pajb%F&hR;L`w3-Qjj91_-MqRo;Haaw_Ir}2@)ww0z@>jMGsp5rrFooZMtu01 ze_$_13Xgus=>3LoQkPyL;|?_R*o-v5txO_79nKI0xZD)_<}lkPXYYvdDJOsfM0%mgCVpXBt5CstAVxJ54xkxTT_?z zwxL>VGdlXFnLq$*6X3~U8C$6a=XFkwfYBxwf5Y2c1t?SdeijvwavL;&2ThiV&Wq`Y z%E_RK;~f}W%z6W$Vq12JS&pLgF6-!Z6q_Fly@pK z=;QZZ1KX#gQfVZB(Q@^t3#?}W*`RT##<-sQn4vIf0}l+Q)l7pO>c5LsTC0 zcA^0kGU7i!`b`b@lKqeG@I%ju2wRSu!ewgGEF>$4fZNU9DB|&e)pe(s*J##0lMAI! z`gOii&Xt(f{_RH(zjI$sY7etHRv%57GeW=lu=c3kQt2*oU}$w^fiXn2)6*Y*QDA_N z2<=saYp*nJ{h|`nshS&Md|4)FLzO(dx}YUdq{<}EmFcMoZq$bcQm$$AhwfF`6)#h7 zJh5x!ITv3j-+`)v0h$W& zhROJ~b`>*e?z^=Z0ov`rxZQVu1$F}T{*S;I4w@qqx9n?qehWxPxM;Pt>LS`#U+4mW zE7m?Yb@XML5?X%hjEr(+$6;t6wWOc+Pwzk{!)~o#Mi~?}>;PCM4?rs*Ul73f)nVdG z0+#z8Dru!$RB2r$xLVRX--XVSI_2i*;JMauIbgC_J zSx8Ymnf*zdqsLH0_7_TbYO54oJ;@WTI9d3U6`-z1$cT6b#>~8L! zNzClp2epD|J9~x%&}>#`x$sZ|n%uMwI)KGC++OeE5=%h(GbNyNDZnW+nA%l_bS>~` zc86d7c@BhU88dQu1Wdr7TNY={OOp~Ko4{oyNU?ee|{&|{pyLOHcX(~bD3%$YH> zjBq8^0x-Z2)ZYY_##BvrZU$dwRQ^38z0&Nek9TKWe-cfmiV8ev9U(HKyYkByK7LsF z(Tcw2+Km%gCqpw;LA`Q!rMt~U80Q>c+9yRB$;zem7&6Pb4?$mUU*aftP?-znMNe?O zK=pcQ!=>**X#>$>{vhR&Rj3R#?Yjw(vvjvRXbI$%TgS51-0{I{^i$kkivPE-LJC^D00_CT|9UND(}d&zkm8Ssu1{`HxK( z{`BXw52~b5M*H9mnO)2PZ!6`FnS;QR=f%e$ro+RH4CwbC2GgFVc=S_kr&8o&w5e7L zh6L|0=5j4V+>n5^=|svHP2(HD5EvO5lo8&VQbDJs={hGeF{cj-mz@3HD~a@bS3?Ns?kL$JYsI;l5BQ9<<0OK6(h7+ydJ zi^~M4J8qwsVD270{_ZnQ*abzYP>ES-Nbn^zeCrD|VU(>|aY`RN_#;I1Nhvs&by zav6s#<(o-N8K8@@tG2PZmFwW%09Wm2DkJ<=3XgQ;y2(J`d%vEb@c^!ks{rV8tEjxO z+HSMbcSeM86<)2$dMA%or)R{Mo10~5fSv&YRFGT4FTSn$$GU5W?%wwvwp9nTgW6>} zQ;KUlRSc%0prB!tvB?(!K+qSz421{)sp_>a17i@}hiclKBEx+>aN=Szn=Ib zJDx?QS1;y_-LB z?oOs??Z5o&2d8BQcxT$e>INj^^bGAct|eeTOVHuXAA%b}x4}sNEKN)ATHPh>i5O^o z`iNWi&J2{<&+a_qAuLUW$_>@Bkuj*mNPmxa!+=!3j}D-01*{DV(QO#J!yu*^~Qj> zh2x;v0cR1mimuM4Oulgj$ZGnIckVRDCG#<~-B4d)3_WU zXg4vBQCS1pkuF9Hz<>kj19cf_rbX7q?5+RzN8kI&Ts~hQU-%A~`?A^*@1NQy9w3>D zF+qFnJheT@pLskA(xH9FmMh9u<~{x8BXMZ{+e@zu%s|d`-grwUtHhGVjX#NGyzqiR zv}cnj;BLAGMePC_?aWm!@q$D96%`NyYXqca_1bSCR1kB$$MS+#G9-e<8B}OMU+Dez zj}U;#QYH%cjh~CUM&kfx5ygxdU;xBw;FMy&p#6dlt#r72e z1gH>zRxBOnFjeX#wxG|Dq0At zg8 @BJ`Pd#w(YHv@r-U#+eW)iV-ew7*cOfN08ckl@^_4p2Hy+An)B-}m(a!xxV@ zsJM!)at=_@ouK`Rul-HNo{{TJyxK)Nob}LO89I;+U>D>QncoLdaLDlCLGd79vr(k~ zO7$Q#KNW(BIY-~giFQIaBg%D5X1ZQ@9tus%4IcfZElY{^D?v5EEDrxaP*t6^k;$ZL z=kWtdrP0JN?LJ8t1=><>t@p~)bYc47r?1OA@UOqegkjVOK7K$~`=O0Gv#wDbY*0u%*Ae{Zm8Gx@HS5gWl+HS(X{#Gj#hQ?52u00&g^xm>v$4PH{^K$}J76HOSL z0wzf2ak&gnD`%?Q|CtUeHJT z0*T8mUZSbAGj%%`NC$Y%S1O~1^e!kW8e46F7T{NTe1i6!!UptooT8`A+85iJwb$k} zM9j+3$0yNfqlr5z8I+7@9gK?Gz#a46zeJz2rdX@NbkO{QY|e53rKq5oj$&nH58$>8 z#$*Lp%x_YmIYM^8fGQDv5S=E`r<`~_0V6UMbU-`IFve|h6@%85pTvO!hjz7v&8~lW z`)5|$99tmBoHWN_QNZ&%MLo)=;Ii~2^mOd$GfrCTSsIq4qd0gz8k(yI>0XpR=azrp9KEGIx6rC$ zRG(LNAgU^Xn+%w~S?Qy#xiBD__7SMUhsK_|+S2^uM$%`|sZ`8u-#z zub+g_9#IBarR+1>%1ouZLRpQDqnS%-@8l3oyx`+BTE+I4o$WJ4;X`bSF^YYDfx=H&$?(i1Gdg1b3iUiLWHNWUd(gjEIQmnnD%f{ zyk`a-Xshtv@veh%{9QCOZOO_S(;CfP=1*Sy8N?V!2g_drh^}coT$KJw5q~?&=@WCI z;2A3Xp>v(yT!%95b@)3C0UQ{sS}@?X!kqNz%Ens?wAh7em)_=chrgBaB91AU|~m zqDy;dia$H(R$%;e8N-uQt-Xw3&Lp3IjcMdv4F;qbc!Z!3;>LYoDv2&X2Az8YSf<87 z+=_tr2H-<_g}wAItq-V(P#x~6YAV_#eqao8?nF(a1uBcdoI&&yunF?4tgne@pm0o( z)dyLq_6;>cOXv+~%oMI4$N3v|V&vXWbwq7Ys!3sOztCIDoE7014=Ya*#@I zX#cmroNoQG?NV1cUig{jMI*HBQfV@#?N;k!>gdjvcCa0gp>=ncwX&O~r(mS(=7Zcl z3CL6t#FWr}flRuqoJE2UffiT&XsHnp%Y+3~)l;f0#R}8K3^B4JJI-m2p(iNXVc#if z#6d79D~Q_D9dzDe0GP@GlM!>Vh1i#Fa0|#CL?a7S zvDCg(8gEuLPF*lDmIrJxzcN9Du`&tspn8>-MA+LI_4TT9pxo4&Vv0?%B*StJZ~X+G-nAx5YW2{~Oe`nG;i>tTL1Kh<%xU z;ZHoH_KR6vJMaIACCubB%s%avAamGUqO5D7`S*Ca%;nNT$7(1xbD#kfdWg&^%~mPl zGAKR5mu|8^6&&x<^_9f+P#)B(_vnfv*F~RI`0IU4S%AgB3`#xS06yhJH%@|%gUQ0U z1tK$fhS2%icb|duHc79}=jNd@%pIkRdpzZTf^|8Ti7Kdcy!3}%s48$H^Z_ojRC_IV z^mesdQkqr!%#nIQ=f~g&Y$gcWZf#UoLq8Kr2Tffnt+o%@{rSsaULg9LFNv!>Rf2eS z`z50t4f=Z+joMGE?=RrU--i%VYbq*|GA+U@`R z`gMlq#rxiU1wsX^-KO?bQglRubg0p4_b%otuo4Wmds?3`nNCyi1)Z5zX24&3vF{s} zU+OBb=chcp(bE1W9|T2^t83*PWf%Y!y%$Pzq2mq&Z3gUt%0vaXr4<@qzOF9iU~`Q= z^ESoiq)qJ?D0!sXX!x~18IHa-%R5k+ai5VA2jU)e1lacva5ecVVW4_*{mOyb=c3Rw zXM=rmZ&=~#`Fm+N+nsiQU6qKSb8obM@gm(+0`dj%941Bs;GKLZitw)E4bcM){ZQ2A zrHc#61G$1|IU`rWcxWjEYi1$>?rD>>`nPvTlLxhPH%A|mRfQ8hX#<qKaSDTP@P9T@WlB#{YtqaOgrwSqIu@}MpO@Rt%>Sf!)WmNmU0UoA($Wh$_ zXin`@I2`YZ?4yJiB$UjELT6jD06TPd6_k#EDkk--95A{m3EohEL6CBKm zWDnE2x_Kjy8{g>wJFR`san#X?*P0v!OAWMRE?;{ZOppb!1me|`l^vm0HiDTz$HA52 z)ny!Og>gkjcsjMgbd?_HF)_+)0nhLdxGm~x*a73Ck0&?|Rx0fc0>*flRawV3(%G28 z-~$+*gP^bfz$r9Y=;GmeVl|XakdE4<$oA6a{@{-uLDx8IE-(-Ywiwsa?$4x*w@iR@ z2_5xdE>mE~!K>f;{~a0ig)oAmOxjZi+XtjOI|*`QZaa<^DOv{GDv}Wg#_nFi74@Gn9ps%?e*wxt zjSPF z`IbFEfLb>#N52}C&;9zdeNLA$SI=aFF;yvnau;jtNl_VGEJ6p)OR7FC4x*_t5?b^u zSh^j(%4`E7XaHbc1UPpGFe$ZvEd~_Z^CUX7C%qeu-0B&-X`V*Cm|U#2IU2pJGBoNW z=;CAB;DWsmpVM_wDplx7iz%n&ITawZpUV|Ei{M31fw*>B!laV(+~YY6nFCg9z}dqV zrP2fb(GyD%dV`S>IDG;k|5)(#whcjqZpXk)S zNLtF=WT3YMr`k(-V!^d1n1DKFJ)rX5MVBR*83Oj}wtE?xg67Un?P=W$$~HVZt3$qh zGC1w<(OY1^#aFWtQsDp%;J9H|bY6Pu7W<>4Y#;3U?`U4$ zPE?-r#F!rWaOKsnD$b_4ydhwlxsa^=CcTty2= z0hO$Xei#Zl3<`6V4n{_|o#^16_}x!hM^LBTkmmPz4bF+LF9g5x02nvQ?zj~Coq?xL z(gL*tZE4+TdoVT@ zY(Za%rjC>U^6OtHN9ujYl`6h~`1;P6`9;WWZpS6sahO&~1qm7cS^^pTu2s!Z+|5n%obxL z-Npz6ZpmlqT5!SNMCy#_xjkWIl5o=(cX1-^Wjz2Z*pYs4ldduU;;c=65VIid{ibk} z_V82sHqB7X9r4ZrWY~wTg|$QBmJd~Y(TYG8i0%itsQoKym(Ur30tTocT*S2>=sk&| znKJbrC@!ir+v=9~Mm4MAw9Hd(OE$VJp(7@{DvX&fu)Oys{lyyJm-Mmr`Gk;6-qW|8 zz_gz%^J0wh4ytTjm06fPcHw31M`r24zufzsFbExK-gQhSfDw8ev=LKCa9HNmT*G?Z zUrq!11$4}r`&|Qab{MzYMlffV0h@<=deDpn`SW_(CtD$blTBOTdPcS}Wj$p`d4K(1 z9(n~G!5~!^+n{zPm~$X(CP(A_do1Ap{)6v;3*_T{EYT`Dn!FMs56jP>qht~6#t#F) z+qd=^Ax+y?z6SwBivaKR;erH7W?QPFCmj@W;R*2e5t#r^^N*9b+*5WPBdnEbSfw*M z0F{ALtN;VOU{q>Az~3H!47^VJLL&1MC>8FWAG+3_pjK_Ec;RzjZW;1Rk8MFpKH9J*~29%$LgG#?S*4Gwj! z*;ikHM%ydPl+eIYph|Ou_St)=Oa)-!>N8x*mv2b(HXbydi=HeOuv1_ERt9OSPHv8i z2ljaz5-?zI1Cq#HEfOPY0&~gsp^ahf4a_C<*)gyxhrurXe81Bj5*QT`p%%>I!(0ZK zazo)Zy`RyGfcyn zRs35`(Fl*?RBNH0x#^q!gY+{R<1?aK?agDOw&OAqt*IGFlV zUhQTr><7{40coE~gsl178*f7F24;iX)BC_X_o`iPqM^bH8e3+X!Me(n2ma+ZKccfH zL9HNWF0J=}gR&}P4!C$W44fVXmN72tP%(R~YQPXm{ zgh3h9o(KUo&R|Ou4>LMG`>`<;;)AnbouESQ=}Z~eM?Xk#;2#p|^w6{)BKY@vo@TgJ zGbMFQyvO{hJkUG*p;@HG(D?Z0qUW;^2s%VCL>O5-r zU8sYd0DVX&)fjf9qZne+w{nXzX?V-iX^xTm!983*BVGqn(63c{$XoY?H;rA9GBWNG zU#NY@56$sp=~F(gUGrt)HW^&Cwyzddc+J#+Q|4C>qoGnmy5&K2Vage_ z2`$BttB&@Wr&(6&LE7a*CJ zydY3UtA~0oON)CO6jeCQsNcWzfdbK#eb6xFFP=Gosd$%Kx1FHVEPqDNJnBlD8_95#R?t~l%U3|IR zTP=h=K?8#yJ<6ie4TPcj%-HHJVue8BDMt8}&%|0oM$EL8h| z`AvogWv0b4Y=K(W0B{;r(4_kHj-{Rdy!(DztY}Y$*=E2U@Qea()hwzK(&#l^d|)&< zzL{0}YcI8SgRr{FJVKp?hQI$aG08EFun-|{-*PivF$^*}rIt!M> zgBU>5s`f#RvxRRfhj!;S!0kc{S0T7)-ss9fym{e)iN-K$l@57iUsAbWwk>qMg$k`r_+G& zlOnT4Eb>%7`wF(@j#lm%+Lrh z+Diw`<=s69zQ|w$v=?|xJAr|56#_c?Mxp%&|7@@Q{QC)gj;_@8>#8zcsM??24~0da z`|+c}ra?iViU#{JwgE1iiDL#C)k>%fcmNRZ#0_yj0F3~=f4>@(=KshI-oE4dK)tFA ztv8>Vh@X>g^W6G{2cgbR*eacjXzv#3$0pK6fcC0)@!A7(+&iNdSnn7F4|k*kD{rwk zI`+7wE_L^vyZI(sz~S7XDBvd0Bsju;s} zA~khUj8)5eumrr=9geVLp5W&;g zhtS`j{BCGay7!ov0E3=)2Y{DxZpr$uf4)!J!h15Z@|D(zy3 zk$3LrYJnyZ!i_y=pty2n8JTpKf9A)JN3FA}26BMLAkWOFfLhp*0_vT_b|wSy=GfRHO||e|Gp~b82a-MSOPeYg~((v4f5%j^GB%iXm z$jUtdD%uk&r3uar1DEaqV_{(-(!tI6XMkBhxT93>H9@04RcJvo@~DFSq@~lWD>}+* zpdQ`$GVQ9<(NwQlXA-*`!Wb=T!-G)6K|nS`w9#j$fK|7acingI0lN){LFEhRYNI!< z{06MFt%Q;43|d&HEe2}A1aoe~EE>$iZiCMpC$Ch3S*PT&iHkFymT5z)6o& zc5z`)0-R!uv;&ml3#9qD zBA%gT(}5wuvCSIoC&HmQF*q3^+`lOfERNfCpHYs4ZXDn^z->)>W~C)^2Ed}g@B`97 z9-@NZ;v6F{N*4wWZQF64pmVKTorca6aFu`)cdg2ZiIZyghg5}<3BtR1rwM4h@Dqq8 zWe%ugpc8?#F_&Eq63mG>fN-^#r7;EJmtQ&Na`Z#YK0K#eiHy?av{pSxt%bBXmCu4@8 zXg_!c$@De<_mA%Kgj}!#I}R>Y$I!N@=?*rFfAVZYv_1if_T&TmYC~xh8dDo!*0Rkr z$7gUuf+P{NtBM3@2hw@$g{O3Y^K1fV5!!z`xT#~`T<3Kwxn~AD1&cCX*-i+y9Z zk6)4Y^YKH*TEER%ba`r@`rWQ%;i((~(;n9fDL85A@`n~oLru(Olqm0`#j^qd*;M?4 zs=ygflORq~(FjctkO*lX&X{6Q?t)avK?CeTfeb{!2TyM_+3sLBo^fg~=bo&liAIP^ z_j|bAcp1O^n~nx=MZoYHcMojXi3Deo2+|;&xxHBCp2`kr9j&gPe2+Wi**69{_o5iq ztmQndodqmhWeY8|4g!iq{P{=E4M5{*k0bZS&(LfQYG#-~Y zL&j($)1-Y3tUF9PBXhb$0e1i~K*K>yF4|59x5AYPymBCyMfW}bQ@x*=0dTdz^?R*K z>!7W6Ks-%2h&G(g-vn>G`4qT`c|8cCCH@|{V;$r6F4C|6s;WNCq-)0&0~&OUMFp~q zS;ir?|7@69qyZD}YKx+W``!{yZPE)qc=c74rVY^<6X?hQrONOg1Ouc^*+(6<$m^=; zg~sZ<$0`VHef4`$zEqOMhtmT=>MYRSeF98S3=s)has#U_0IQ?BdO~=Y(y;IX zI0Y~E!P=9)9$5x+Bm5?L#r^-gMPA zh_>?2nF2rBY5(WH&O`G!cq#6`NAKLwH7I)-+zuxlq%`OFGb;T3;g_jh2WKX+rLdz`n9Prk1tn&T2Onl=#jKdSt(fSL3T~Dbk-(_ z4AFil#f?i^4zit92KSw`uSWKwwaRE*kZ$c61W<#GDvT%cWdOXTBxE?6S69}8W?3Jp z(q3mlUq~>H@X8ht?UC`#FPfP_Kq%MHF1q&hrs(h)=02x&f|&GlpPvn?_hgj5#XsRI^KN?jY$xX5@dJLA(qW|ABd{rK(;>eKPu*h zbI)Rc=1@i-uDtYpo^EgI%2R`Xd-!q2>cvM{6UQ0?;tjq~=-aYz%`uD?72?nsb^tFd zxaHR3ab}e}T;mQ}OZ#bpRhj0^EFH5C0B`%?Rq&;R2u7I&WCl4$2UI|~mOHjNG69oa zz#5Xk-aYGGvCF_qE#r(P&}2_37uXmDwrt-&#=K++@&N&3L0~bWgV%HhGGUmTKpN`^ zz>DzoIe~2qE!#F20t3u$*8>K+3L~Dr6a-v-Q>Bu!MF8C)py{?mEr+lb5#_y68FTEK zv8!h3VM+M(9@|VFWY0*pclYju0FJ&^k;Tn(rRDF)Z-GK(<{n3K=O*nbc<1f(i$By` zHEz0UuT?$0sg}mvc-~HkjPeLBzL&Y4o?l!U)f1a>t z{N<@GKX@CQK|*3y-iF|;g=pzwI;~gpQoM|+{Wa+_ z2>$sUx(X!)`hdlp{xI8| zgciV%x$r#i4UrsYO{N^}06S27PS?IpQ>)gB0l-@O!QDlW>U{QzA?~NpG>kA5kNtb1 zXwogSQI*tgZze~v%2`%NhQJsIXvzS~-I4}4Q%Hx}zsXB+CY%Z=r9a|(R#@=uV8}ZShF-Fx84dW+|FHvpt%AK#y$wTK`<5?p{#)R zdM?;kkH`p@B+vqIN#&Q`t1H$*bEV$6{18;_6F3YdFYSl0v}RzWK4(w+`0EMUL7mio zo_TlfdF^Yk#&)$IbN^=#$U){rNbSYW7;l&%+0re%${doz+kwhL_Z{W!Ub{>?baVBB zL5KiRX(C37!0lL(K~K}X?VigVpg%}}_5)OqH(woJsmtB!hpJr96$)&IGV6V!xI_g* zVRY>Oe zktU6>`0j6|p`5+!H6?A~t`Pi_j8!S<=Gh(#4+jdq{sDMQ!Gtu0$8;7kz*$@D!?};C zVX*hk)`vorfdFRTDs2ZG`?umE*8*^>+SB16t!m$+(D~Pc`*Z|2paMUOD-HYX#gAXC zvgPT5_EmuOQ$r;tnGC)o8eRL<&&YS$4x~%xlhC-=Kw39Vy7yUNY8;DbwP6-dfV<$P z1YuvlEy~rm=n#5Z)hC9X7gxYcXTZ}a0&e2{v!b__(qIke9;Ex3hCx0&i3_N!01Qxd zAj$sgXQaan(FmejO~$3G{f&0b29^{aX6EGuOS9KryYS!^>+v3lsjzoC&B0fz z5!@`#Z($V>M2nb7U=nUtUVTp5wis$jK+iO&Js71PM-*Y|Q3B&HLYH@1xNL^rl+(%CYq1r2u8uT87p3*Do_wPNaq9O@Hzm z8L#sk@(E>v*^&$mWp(zA4IivSeDDZZF6f&-717{=%>%|rth?UPb@`XW84XUXDFW-4 zFORS;_<+o+$}mj@&4%n;?b#&t<>;ta<3WrZpt%xE)#%)vG2`x#{A9uqGWw0{0!m7&TK=wrvCC1tzAsQo#H7RTB_I!>{QeECo5D;8d# z=7>s&vhXUS%V5XBD82fcQ&9+H#zN6SIzy9|O9lZaf*2~=KQGgujA&oGl_6!wDJN-y z4>Z%pfPEEx`sEL##XqGw`$Xr?01ngLsT@=Oa)2sGXD`42U1O41K+dyZ0CO@0G&I3r zE#k&M`LVGJ!VAQp%me|UAcmJ+@YGnMbZzfOL$PRIzFhC9OjOHN3&7CjUxG2#JwS|u zvX$kAmJy@!kgejFiwc&#>Q;I&#o0*r+lH2{Xnu7U*s)gYsz~h_8L=oPm zH%5+Lw4#S|;|yQC0g*2gc!tIS(K(t$gD|$#Y5kyb&N}F`XI5fjRD9Q>%~%F(`;|70 z_SHjRcJzVs@&R2s4+3&%BMU1DqXOuA=T1>PMSwFz0NP7ng>YXA(tg(s>PSSS(effy*|br_4R={go|XJJVYOt~4(7(RI=CDzARIt-C3q9{wNfURORV+a6T9gro$ zMZ|b_b@r!RRoo~;*6FZ-1sQM#8O@RN&7)9wF9`$*xVPijVlAe9fO^mzXg8>B3?lI6 ztKb1uZovnT>2u0hK4@q^S~T^=3w^mwH{U{gi#{7Jhy~xv18Zg+@l*zf)8L1oNRWyc z)q((mi?}!KWg8>O_P*F;nnCRo-AfiQph5nuI`=ko-o*o>S4w3>IIqThp1OA5M-L8{ z(OxR&q1iG44fi52prna$z6W~eSB=ueO6XVAuDxl*-OPRQ4EUZ?FwcJZ(JRk{L-x!E zvTzCN7&ibnSjxShf3sS8%6F%s1SB!hQ?tS1L3FJ4e?S@~-B#!N8Bf|@Jdl1z{|SbE z^I7fhe6;}vFHjOnKLg<+ZsViF=;&oJ1nNLmy4llU%~AO@!Em!MlxIMI33TlbqFW){ zKwi8iFUZLP?Vhc&F7~i)>M$V!19=1duqu(1H5#UeW~@` zGSUoTrp?q^+6~Z|Q&yf_`_morBq$UlP|O>AjWzUz$ZcGLA!ucGQe9L&=zmF`G)FBJu^Mngg*KepaJu>r?As{ z+>s!D5mNh2oH!`V8i3cS^L5Fya>cYdP&t?kuFghF^`$c>#$C0KO*XQWY7ZxYbej%k zn$>`~a8(JQHL5D(5Ke#4yo|CWu8mRA2m;PHYmX-~uR*6Tm^s{UtHT^Gue{GQ=a%tS z&QgE$;XWr5GiG3t8{{zq{hVjZWbb~p1N7#CfPi5zb7U2`J1=)YUor{t8${s1M*4&( z;H{#4^Clz%69_y2EAx~F_yXJNwZQ6sz3`8;L(T#dRt1zF<0i)V<-?Ywb9buTckAH7 zSnI+;`GY(MkXIE_E}C!)Hyi}YJ>ZLm?Gq}2F8s9p)3>=*o~1Je%n3BE{m2n(setve zkJhgB@*5ioEr90Io;+lrr8u8EwFGeV1v- z?E>Kmklg8U6b`q}J8g5DDs8g)yn&nfH|?u?ExpY)iSV9^&}VDWUYQ)^le zLyP%7w+aTtf%Zpt&p>Qnx~pUhlFK`e(7=mtvtN)BQ>rQy+O_jw^n#9TI=q*z&0Gcx zD~~#QdYeqKoyd|gC|%y#FA!b%gZ5+>OObaXx;KpsiD;guf46C#mtewoc65M$^Okom zZ5LU7g4YmO8yUO9!_fxi4Emksp10m&s56HRa)7e*dcnB|tn?*dtz6e0lp!tf1YHxw zHB$M6AtazNje8m3Tws)Rg4>LwcU?Mrs8Tf$eYR8h(kZHGt!rBhVK{p0hlQ7W`^pRU z-EZ!e-hy6zv>_9!i{YcE$9aoUw+3i|fqvWiBvE+x6R3UFp=I5aE^n3`fF@@J)}ihM zDSF2Nw5z|coy?Zip&0QWmWg)S3#*92X=!fFGlNcnI;8_VZBOMUBehknqgsZU%uF@F zBPk|olou8Bh!}!+=XKFP{~jc_&PCcwU%!Df1fRaV!rjqHyw_a*nX~k(8H^I{l3NF? zq!4Ul zBQaqy(BqeGyrxe&%v&EGFBz3K#j*cnNvG}VWxnVMP-1niBY zJ%T`04mIHGBW)`DbLTqGKOOFCoQllVZpDnxBoL63!9}oY0##mMZK8LJP>Xex7Wg2` z&!FCH=C;$66%tNJzlTZyX$5oD%Z%Ax=>U&c9`5ATELP6=@F#q6TfkFCwVOYEKrL_w zZJJ_QpUp$lK8^UbnELIbst^};Jb$TBnUb?`ot$g7z1u{z?gV4&@ z(ZOryMdW~6s%g|EeFRFR?@@hCb)>cVA|S@Md^4>a3fh8C6XP6KK_g`vES$X0=sOqem^ec$X1;@iJrv;|!n~_eQ39^g3vDo?D|Ai|C5& zC@#qj1gHi1H%JrwJiA!{)-S#W&XWKIpiAEYeI=jY&)Q_(9H%W=kn%y6CPVD{_yM%oY_NA< z1p}&BPIa8gzWIBJ#t{mdG~$4^&HXRScdzShLV z)&4U2_UVYNByJEG0Wow0p%sv<7>vx^cCd+78V#UlfG}>cs|n0!#*OX|DCgnINzk%d zz;qZwd|OW#TGQeg0SBOdkkOAm)G-szgk()*&TwnTKyCf6PyPsv8*dhZ2R0ng zv9&BtO(kFk5Iu0PAJtz23DAf^+K(DRx%$Vo#o%Ze5FRK()qFJa&%H2sg8O$F>T1u0 z^aUmJ;=FCrI39*9CK)hkUoQ$c*TC)o`&gA|oDb|B{r?L3SQVJHdftiNOtYsQl78bb0ePUykAgXR_1TSDc;j=SS?H3%POzMAHUlET zK7VAG>8ElOnw3q!Rx8cSK|rfaL#LrJd3a@-CPCnsyl!^vM(S>um@`+bVsmm{m(-wn+^P>&q{IjczgiyOZ-nERaC6;rc&8%t=dl zIfVB4{J^N-Sm?@^e$igaH+~J1tLU$1$!SqG=ENR<%OWGtH3kgeWs7Q^W1=AwSw+(? zv0L4dp>YC5S#7M!j$UOm+u~)4XVYF#4~tn%6L(oVl220rX>rX;5y4t8GRtrgl!{mk zQWszz2}(GX^&L=EfjM8+5o+>Fm2TnZzULO)PB&ftT}6&svdv&A>XtH|(1R(LUIWwq z(X;862~{l)nq%c|X&XI%*x>M-Ot|gw|>j$cgR$Zf<6cW81}%h z2xk$(xsA&&sTGt{e(*NB0I&6MWp-bNTn6LG%7d6Ry^A;g03ismgS>vW$1Kfi zh^Xsl!FlHc*pWA6-H2)BiGV>zk>IqXGB$%`imsz669T}1o(Y$r{OsgJs2*pob{j*RCehZ@VQ275`^};PpvEmZ60KgC;zNYYZygvS=EWn09N>1tq#x3$0#n8Cix# zrFojCF1-21_|cQ_(L9z1+&0jb9XLocyV5H;Dn7pYM<%o%h}i~kOF*6WMllpio^*iI zM#bec`O(`&GL!+K4ui%QO4^5K83oN;Fr(TjDvOaT=u_+N^rnplL1i2?%V@1*50uWP z6W&?L(o-HC#7Y14+c$a~e0U}LnCsHMj2EZ8a`kQWY%hHL9K@_ZSDqhgu_XLaB)<;B{ zg9sh6>b)L?qPj6H|Ml@FxYy%QWddCpMbbZXe3(JM*?INuc5Z^9Y+I&G+l44=s5@@5>X_(RmFxx9(?Tsq*%zyv}nn~2YM8-Y9 z%n)$9I&vfOp=U`uVH1*D<-yh)cY^0{?2}LID+|o93B-b$RhUBck4(?Xw!8KgR0j}V zrh%8O(_zYatA=2EI-UzRg9K{9LDI70c7a8STMk|kNiR+m+*GV0xuZ1vuImu2Iz0%Hz^fZ{mMR+}HMp!z1FW>}6-h6q?-o7t}ZJjhTz8KrfzzTK`802<+4%uxy zz zIasf!%QpeW3n1n~K1jFkYN&A_M}#o|9KB(-nk{LcPVnE-;mMB9iQnylMJG8Y3V4CM z_qh9j7{b*r35X6Jz*)w+f~9P8nUy+(x{oHGgv~p+Pe-%>qtIk9z$Ga6?fb5MgNfUv zZh_oKedvQZ)_07n1K8RG>hw_4=48yaTTR`)>dIqc>Ns}s+r6B5ik@x5^hZbk-_FtT zJ{~f&qYDK)+PGun9s^9HhkD<0#x2H<@1+yI?FcZ07D}f6~QPK z%%3|gBW47^3K;}3IjYWq2|^no!;c!J`cmMh57Pz&bGN25Cu7IXafw6BF#|KAt&Tv> zg6K77XW{aDcS0E8%@}ag{lKzpX_eU`2x7zY8pzP1jOpAA@+~Ct#ekg^{3A3KDR8lI{%+WwAU*THv6| z6em#5Oz<~lS3&?b5#YNz{Qq+29XkAFJO$6nUNXev7!|+*T6y*1&RKSQ-j)n>u@r#> z!*WbCk1)f+v!Bg1hMYQgst2)6#U8!ORkHEw-53M(?pMKrVcc04Y^j1GjslXHdlQRb zgCJHvV{1=PE}&)w8?B%9Nl@?erTS!J%$0;QCF4g~oBbdlg(^KTOn0#0>e_t6rXYb4 z9c?!)Xez-ETkDw z7kAhN0rU{B?dcEJ4oU|B1vW6ow2Bo2*!2N2Ix8Y`&il$^fvUaG9|GpS-q~y4gn_Q} z)q}~)4_09u;F7$0-uc6UnZvM#f&_J(JZ}pgk)docI-MqDEBME^M=@i9K|DVjSxaWR ze#yqYj~?5@bFR|K0G+QsJCg~eW8<9{nYz4zy5^(@xtnOs<37OoQFNWRE z?p-!EiP8gc{v0O)w9%o?xc=fs|8x;*ddSx^B^y8O~D;K$TAVxyrYfb?F_0L}{FzCd8!hj&15kFX3e4TN3!dPxR- z2;f6wb8(^yPj=ySBizCK^O*2fU41<+I~ZNRqy*GS{9h$P0S%&bvbI;(dbUAUFY0al#k8nOZ7KNHAqn->zpG zdot5`89=8VuOOIWUiO2sWn3!4({Uykw9A6_F8x;hx>EV}xGifx5nC*Fuu7gTX>Dh; z`Q6`jGq4jU+541j-&>Ut1!u_| zIF&?K@C*jzi!IF3o1jyYvE}l^POHzmR{F2gF(shL>XGnu$SSXLa3BPv9#UX~(vZPy z7eum$><*Iah$Oe=8Cy5bL7fEY)40%|DG^@1SANOM0M)$P#DSVX!>lHOdfJA`VlVB% zm_9rBfEDR+dXm`#FpwJz=^R_=|NZrkO&#Y?LaXJ9fcdsQmkv=`1sTH;@7&L>!{dN= z?iL9?2)cG(1o(9Zs|BQfkc@lkOv+B+;4jbpU%63_joa#Sfsc)y9H=aqp-?2s1Aj z+}V-DH4AEZh=5n_;%M>KY>+T z{~fr2yvPl9S}V)L_oF+-PKT&}!m3};#lSm2HWYW|LGkD6mRzE0Dj^3Z)eA_v#Cq5T z4y5XMByq}t%vDa!oUqLU0H*kvFwqw>D~F2m-KSKYMyxU?1s;Z$18s)ubVg^D!;)ym zmWGvhV>?rb&88jH2C~GgCF_RggJBRzP+@4!%J#PN2s-N#P#?{+B!-xHn7*3MOt-`M zh)R7JuMVgiuc&OwfcLw<7p3RaVoT$zzmb7E#E@f3V&rWn9~81=_S<;#yJhqwFsptB z2}%PfWk%n-=t>(1*aR_Ura>nixwA%3(4*&iM)YFpwtd;_0qulh8Ab5Y%eqFy1kUvK zY~EJ2E=FC4Gd{fcRPTTAJhKkql^j}%|I&MR7YCQq1Ig?}L%|CpvN_U{tsXARr02BH zF-a=)M!z}?7D#!oKYQxxx1kvr<4pBsk~py`FP6e5Pk^oe$L;FH7*qq+>CIa8iNN)c z6Jji*Om60D1Ovx*SX)4pA6Pl)y?gh^W_xIpj8TxG`)B$WF$MzQcp89~pm2I_*8VqYkKf9U?P zM(<3+n*G6D&}TvQ_J6(mSCH%l$I?s2Al5(wpbd~d)-~F~fB-#T z-oGju;{d$!>?t0|E;*5qMi)};G=oL$epJ_wSf*$KWva7J9I+uRyaA6*<2>30tg#hn}O~osJi_aMkri4Tdd&f zH(5Ubi+Hu(A_MSjLpyrD+LkLbk&ET#5TE6@pW-9{W@=Ph7C3uAJF^A|(S1fn>s}&- z??ZSmgC)>sjEP`MgiqEwl+S-_*rC{r0T)%>2Ufguz=EIe2IG~P6oN**Dkf!>m~>Vy zXeZJAUi-}50GDWRUBuAn^sxW@`GXKEpc?z?>8*Mw7eE5mH#gmcw{C&q7-)@iEi$td zcR_s#v))VvAU=Y3jA3pUaLO@kZ$P_<`dXj79;jD-0LFl*|LyCwxzI7{J&Tj-?Ndt^ z$DqvGDdyJtNPj@OSUvawy4Kv zLJc#%&do&vCXmjfAo@2I6rQdA)Ztw1J7B;Wb`csFc;}nV z!g=@XdDi!coZ`ou>cGlr2B3V2+Y6{YLwhTmy+gQYMBOvh=+RmVa06z(3F*K+Qy zTO%-H>aotEWDBd>8OM!5Nyxwa;X4>j?b7FOz691Z7Rw|IUhp1=03w+xL7>y1Q{fX~ zm5|}NVBFC7!Qsalo}dTEYMJ%WvyBb0y4rT>#JoMXbf% zEUwtga-c)+p5g6!R@WAj3{Vg65!K)U&}^V{AYM&pE;Kf7U6SEnEGt)^{ODmY4RGru+n9jUqDT65%0Z3k0n=#) z?Iu_k$~rqcb?)*u(t6VlQ_YM*c%_%lIsYu%=@wWnKLZxRa}P1_X16hL?GZdu7K8NG zx!I8tC`1${G=k``-M1 z<@w6B?5&(&uAQqo3u03g=v1^}l-286?arhFSa~M(gJjjv*d%J1?(`C+0iF;D2I(}3 zff|r_^)7o*oNTMfAI#ylbkJedY-Ub}ml(WZFWvOwWM3T#rpGRGTyW)U zIhE`}jC>2Dp=a;7z#`k;41=`d@V8Du7=ik7uz_^-p=7q3@zE6~4L~2>gc%v9jrnT- zVXUXNq+6gBCJSh26la2DW(w4&xLET*z;a52&S;GC)MHs1XXS8;v>8gg62?vCXRf)ouAmG`UbBQu6XxfAF>UVbZ z9g{sweQ#Da4>u>3syD5;7hrD)EflSd9S6u00e(_6mmQB$o{TxiG9T%yOMy5s1l9)n z{5i%(XXL@!G^MRsCG z`0Gz@kpa&s2q=Qw0KNYx`|*fg;CuJ8P0|i@ikLeA$(!>6C>f+hkr@c;#DXxKMo#XhA)U5B(L?kpzBl^)cS5KK`ToAq1co>&^9KgjF;7tzBRz zPlJW6fmNRY^Wx=AAOqph8q-djQZEd!tN~7~RaD{5KZwC11Y!!~Cm~of*Z&}<3r!+< zX+WP0nnxrUJqf5^Jc)K!Kfjn*X=UYv=NvB#9OG*At&zE&4FXJgF7N)BRd)Q%Z-CE& zR`cmez-1R?!}Jqxx4Qr~5U1pfBWZ3Pe(8D&5e?lUQ<0Zh1HlMS5l;_QJ}?+^)|RnQ22e%2G5 z)7OQz4D}3;5_FypfkIdF>N?ZubzSn-z>5mWn=_dqZNce0j) z`L~)}A$;bUchMo`!S%GjvgGB4+4I?RIFZ2fSExQ4F|yY;l;y{MLhsp*>}dNvtQpC!cvL zpfd&Q!AT?QI+q#AT>3|sxa`4z?D>iwOy6@QIXa^@22QZ-fN?io$Dg?f@Qwsr`6ZZ_ z=(`Y647nhx%5zS%+Bg3Ir8epK%%2}Q3yoC(1gW?67)&6HEe056Nw7c041i5G?t=q% z5e9b)Sc2})e)Re84XY>v>5Law#av}D4X}AkaH-77Po53;gUHpr{K_|&{_D+PfS$UI z^BrI@_h$Kno7l(&%o+jXWWdUcnz;%fI?}ZVV&m;Q)PJ+Y_~&0ij*H$kV`=s+gx&`# z*mhy72s`aQs_z2z7)I9U_(BIW z08S&<+7mJz#*F&>Hx2H^?4q;u^6~e+3*KG{7O3Y%VXbM7I}XXRW_i$grm|LMt80uI zJOTvp>H_-xq%qp(bS^yv#-bHWs;2{M@A&#`!`c9HWX(KAfxHsqrv8NA^Y6X%q8o>^ z>i6-O3LJT{H*gI>AooBpx9F%<{{LagoP!Y%CnDVx?s5)l#-g{WOiZ;RgqxVtT-Gp1 zeQ`&p{DPyPwy;V40cvvB%4%#JzxpzC`QN2sr@G;VpFEyNTto#0EN9L zm^m)s>X-t+iDY?dc)UM&Gd7v}YXUkpb-YZ|b{DYi4V;j?cf_{w< z(~x@D@Kn=46vm(ZF!!yO-ukg@0q+uRy|$@}r@H*8xoj!z*eiF6d0+czU4|nf^vf0* zFg1ZMZuenLy!AL(e$X&@F-Q<#Xs2t2=nfVVCpfa?rHj5gmH|$D?{09`O&P#a5G-lHIs3uij6-lECn<($Dd1Wbde z2O(OZgo8>sqcsq7q*}Y$LIcoyOyoZGb3GkA$bh|x)i0m}SOhjnU( z$HFY&RI~Hkb>Flab|{;=pS1q_lMk_K5{!*w(9SRxbbA_SH^1h6!?7>{*&=ihH!t2M zV=kK&dtQbe9>Gu&cnQYhTxG}dgq{zE)x22!&g7sQcSr>RMJpn~_n3oLeI+*)x8idr zU`x&(1m~oO8M6w{MsOgE_t>MaUFa#mQXO>k-EP^f31W0ubns&={B}@9l{Ru!^sJ5x zGyzwqPpboB+c>X22T;zK0plR1B0bih1=dzH;NJnsYK-N2O(4NESDlzJ>oJyDxuu@K z#BF6fD*foIfT<1p?gcQUe!^Ee051US2aMTM-n_M1M#9xc${4!+4<6xd04M@k-I97` zr0-2hG>T=P%LcaVM1q%y)@2yVL`w>Q557SfuEs4 zVaS$1E1*VZVrn^?4{$x-T>?^E(N8sv@XBA4Sq^@ zht7;)=HnCySfDSwMdvIzr1t`uH@+YyE6}Zea|OyKYj}Dz0bG0eTtWy2f(T|a(4WTC zr|Tlcz@_geH-tt*e)%cQIxdhqZYJT?l0dO`u@41dMb1xlq}4MXq9!|GhRhPh$ky@?HE7?ca* z1O#t>7qW>rI#ybwh3BUe1de#>qJmldGobXXe~$L6XyWn#&H-S+nQIL)R1dGxISdQ) zXH~YCsCxM@-+&1b>~a$m^R+VK-2h0}F_h7Ph@6WL_^_J;Y@TN=V4QO{2-xU9agxyl zSZ(xfROy(n$u2hgCwGr5(-{EQ*W0HHtafyu3S+LRxZ$He&CD_PYe00X0eg(7A@4uH zi;Q0S$tFZdIT#xYu=K@0^T-Vu^=xu_24-~whuflq=#)^dz7OtPtEWpT%MzrsjszF~#UT8u@|%$e3iJG`7$I+FO_Z z1lzzbFreLM<>UbM`<@3}g4MP!rc~yU-pv=P9Y5xGOg0JU-n#y| z?zr_ge^;*W3$g=4!fVsDTtI#yV|Vo_uy^kR16aA$Ao~m$_Y>?*IWm!F5cKhiz(ihq z;s9jM`Vx4Z`k=3DF}QABY?_Xf)z^MXnf1533RR&uk zbZlfGoSjj zQ;InJ@>?<*J@fgWF0^=HuzLNuafpURFdJyyW0$_40A*_*G&}v?=rP#+@hE9tXWvt= z+MRo|IuDuboFuRZx^z1jI}O0NcsHjXGJsw^3>W>@2jVnX!E}^v7N?;CJO=0yp|@ec zC;)a(db94MZ^&@nRU~^{IcT-U5k%R-MFPAqpw9x0a}wCQBI8V<(2oKOH9_Iz>2Qx6j zwX(@uH~OyK1L-H51{hLCG*x|P%PLl9enaV$b1hux^~Yma8C%xb z69k;4z`~RU=qZLmt?Kv`wA9*wGzg#$^d94&uX1ce>;^A^78n@G%mhsIW~1o58dn{h&R3>EpiB3k1?S9aT9#T9Af1sgEu%gr2G1y?weGr3i@b*3F@sI($V0;wUb+&;Q@d-Je zW^>GtHws|$-CF{!(!8}=X<&VezeVkOuA(TWMObdPcM7v zEE7;4H(tkU)5oI)6Rehq{pBGD11`|o!s(=OvE_!U*DK7>mh`rLF&f-uS%=bYnEoe) zfy!=`t@et*1J`^`^B98ygn97Fz^U~dPY8ODUR9sWNs6PxnG1=ulLXvze~u}>DhB%; ze~cD;X__x4-`) zGy_*|fqLb;G7e*iD@3O%VBG?7tUFirD5`9+(5T(~O(lAP!m? zC>a#e`RcDY^92yVi~}5Qk}-IsXt{cchFz3-=dsm!@Kv1|a>Fi%Fz~fI6D1Ec3<4N5 zMxLu+9_q9{2{mp={d2?h=(DKxE%~rs@a(dF{!$4vohzeIfx3iA@3lpjjrQ?MjIMo6 ztl*YwFHEgN_JQcXx9*t)Zvb`LzyS5Q@zL=w+4^_rFVmWANN4;6JO5~hOHT^t>5N>zf}}L-TE;rh8p0j~6g4{iS(81L#!X4G$>91T z<@5%?kh+4ngz;s%4(Je(31Ld|X60S|r?IgRu^OCxSWj z!xVIK+>@_B0G{R)CwO(}q}0!!8-v|Ikz-oCwgDE;SrFqY;ED{a@dCZZ@EkM- zfvIS#$pL4bt%3Bqc1xktb-)cizxYR37}Q7*4;0ivv~@;t-We&A2VCoHhsmA3Ii^!~*%D!J`bl5q zKOX!g2A&{G;J)l&cRzY=^Th}BHLzhDr2Bm^V`@O3hk~Ip0!IcFz@AokM`NutsrtU$hK;K>c-7F5%l zoD*PXaqAr7?#{USjEp{e*0Azy0``(&5a$PshyYjrA`If?1qqGXqw1^wu+^&XW2*n( zm>79Bhly(0*_oTuM=^{RQ-lbMhlbiE>sK;4|6`PA_&uw}UV6n!wU@65X5QQtfEmvc;Ot zPR&yZg1RB~yclUFW=x$<6WK+dGX*0$$WC`ziqBTcRy)MuL>ai=4_Z}+Y};-Zxe8Iw znF0(RZ;4F7d=Q}hnJXhNW*!p{2nG4^WU<|xn5_-WG?RCR2bPp(mqX|l^6_(LF#v4y zV3}61;{)C~#bN{>07V)jDC$Y@>U(E~wc2#xGR_{wK!?*SNjdv2W3I(p3n7cFMd0`= zzY-*5|MaK*5Q%PQSb4l{19~48F@q95PcEQycmQCX{1mj{gX>=x zLxy4Jxi$~ja)UwZpyoU<0jFnU!V2sVj*`bs}RYXTk_r4O5_2Hi?UOvO`7bY=dg9c8m1xg96aYBf2)BGKF%UWO)>#HHPx`7qO;LoWqo;6t6hu-~pd5mQnih*83 z`}irHv-wA#h+%^=a9A>J=*yj=wuoRR_9U9KjqQdKHLYW_Ag1#o%n;orU=tw>B^`A1 z_+F@-UtfJKJ1fB545*(qVmv|n&NsW=E!^ZxZAKWK;h&yM;uBao- zif1-Nf`D*V4xrbFA6Pmj2A30+)w!XLyoR+9q?e_>iaHw)Ll_$d@ZQ%MI|h0&wkTtZ z#)s~SsDfN>-u3U!(iucMt_m`V>hazaCYyFoedpz8VdY3Yd37`&TCQ8OdK;u1x|e!; zlox3=b%M{Tuj=|hn=d(`Ply3a7HF^c+uLV0_3DCfxRj|>&M7%^Vz2D-!!X!D0B;Q2 z%p@Q_{ER5W5S)@=XaD-+qH*PbMR$Fj)39hmG*mC$Q>cRaN0_+pKLiF8w(Rm+>TXmH zh5o4?(P;^N8DyZy18NwH6F4@o>nJmx7`XP7NbtO(uz5=yl;fZ>SFZNmpHza+xPl4l z`U{{Ow?(jM1lM);oa3$lvzR#)s>5%~4@UO& zQa{z9V_-dZj)~^pd2S}%vq?`JhR|l?sG$nxm;2m$#V#Zl02G1hJi!`g#1NWT(AeQ> z9ow;g^gI(okjf6T2O2Dm8tX`74FL9h9gtTab043MQXgZ7`7Fq@F?w_)8F9Bl(4QY= zQUmIv#CtvEP=n5aaXtp(pp`R{M_+b}gkH;j5?k`Y3;I3~*WUz#KzC&s*bTFxwCNte z#Voapd2SSvP6X6fUL8$P-wb6NC$kXC;2eSmuRkMZ;ZrqwHZ#S|sf&IUurg;>KfWJ4 zl}YXDeY_yZ9R@7~z@LV5%j}heD1YR~ntSYoX zw}7#R8G^7(Fko{^y?s;%wJmdQ7-EZ#ng!`Bfo55yztsH-QedhIf}$hOd+!*_RejAo zF|bPZq33jknY0)EndF(wF8ZN2SKm3`c^V@DeWNcu4mHq^{UE1mTK!@I=OL)r9p|7L z~u;|Ky^T? zsVn`{dzhX;;n8DmWe9Et4d~X(;+#HirQZc?O&9Or)_#w`RqmQ08+;NV%_i>YlMgo2 zx^N7FnLK;AUmpOOd*KU5GU?gC%uU)C3_}lyR^36$*%|~~i?wJb79#eQ-+(i#w1c4W zQUK>+FaM8Qz6WX9WR4__f-wxMpg4LMaC!~U#P9*E{hOo7MdxfyykmFE+5 zLg=>1ifV7-t)rkVX78hCPeMBjGN*t6ET6wV^J4!NuL^|wSXl)IE`7^iPhJ;yHUmBa ziUwuT$uVEtH^4h0UE^8HO$L}NfiiMY4?WGsAczN*gLDP^j=z1s>~lhd&NUX10o~kt ze8pn#fA2@fS-`G->c3YD5w69uh3(@MNS|CA-@6aW7N{HKQ=K#sI8JxP7O#Q-^|2?x zZJ<;TP@-D{qYLOW??GkF16(Rwu6jhTn0WZ2sNmHM4d8EBoR!tVvjcn@E5xw@jjJa1k=(V4$_6(ch!)z^#J?LWB!Ztc)z3LWssaLr)=>9``@4lcc< zbA~mt4+7>Uz+B$p&EMNtB25VR;6Okj)trT z*<2hq_Bht5_IIxRy`Rdi;9vYH+;y(mKIN*Lrh8xsR~cF2dU{1y%ZK;3>3B{Whc%U~ zGs^`h>iwXwH2|s}MBR;oWL^kH+GpraZSWQ&%loU)QJcpWT_W_20i7DgSd=(c+_;wv zMj;p-z+Z%L=6&?6CD6n$MCsOK)0ssd=;R=kK4!ghl45We0Q)#1{3~KkgPp-W3W7~jsMx3qzUg1A) z`-bel^Y;HT>ChS{utT%+pb~ar77)PXN&=06hC;^kAR0lw>PK~;9Q%*w?tw5+4(&gF z{xEob-_bsqoK=FJMu2H)jA;xozzw^V7YiJCrlqQ&4B>E;2WV~lucZh7c?DhX!tM)I2Eqvgy`T2C7jDUkMWE^4ahVp zx(y<*Np$e+a&-kZA0U38{$a}l0=CY^s-`Hz-YDKZ0Q$^D)ENk_*BKu^fRS#Xl}v#W z*=oz1I~LUkJvxqS0($&BMG?;F|NCv2>{2t2+aG7xaRe#=v%3 zBDlv1H>UpEx2um7bV3aSjSRQ=K%51&W-q!;{Nr1XTcHEKB810?82tP}*KS@X$KH9N zE^u$SnDuqO4Xkxrb`jpS1i3s9=6afOu^fn9xHYa+l&g<#XWMxo%V(*){pcqgFk&NR zIUKz9NIYZA$(r<>{4S{9iW&@uP0tqEO|Yb$GAwb>)CZ5Iyyjw9xWH@xSU?lEfcyd& z4F>P}T{Hxw?HITD)&mIE>|S_M4m zP!G=my#00ga2*RHDVjM4m~wXK@BMl3`cK|Y}Wyyao_a4yzAFl_2`b^20A!I3K& zK~{TY@%E1Fxd5S4kl7fZV;H*`S|K}tYhQf%Lw3(q!+f3P{cpej$;AhBKN-SU{fumq z?9&htzY8r+M#4D=Tm~Eb_(gEn^I&ud&@^}uTeZhDsc^Ju=Ebb~lE3Z}QM?QB1iD5@xWd) zm&&X9rO1Xhwt`epzFr_yJ3|&Y&+A!}qqt+>xxkSw$Ts!Tm%HopLIc`C%>~@?!l!q! z*8uPSycWEy_Jg}+e8VjSCf;H<-g*Rl0<;dQW}KJ@oVs_6`c6+Suf=ga$TjzkZ$qpz zuLKE4|IAb$k%rAY09K{r$tqgWfnfIX+(7LGog6X*XP4j%1Pnw#F&N_@h_T35FN{#6&;{sOtzR6CQj@I7|(i~yBe4kt;EDwaI@fs76Fqz!`Q@%q#xs1fw^KH zg?RJ(qF=iovP5))2SB60*sTS7`eJbydZ@>+LDALDWMR_^=W^-lDW5g>>|{4+=H@qU zfpF)13P4|l=c^BiF-yc`mB9d0(>yyN!aTy-o6X2*SIh}9`NzY7=Lmr z7(mYgAt3e!KzC?fCsHinOew!+Fy5|)SQhN_0#1Cb;p!7Q_vtM_y-`rF`i%>Q9!!CE0?ejZoyUxERK?iVGGx&L7{JuL^gW$wT{9Ssa>4Y*HV<>S1p|Th zF9!a0cW|BNJUgIXTsJ^@=O;7V3LL#yl#y_EMzCXhpNY$RiTa3JzK*W!0^ZpeO}{X+ z-~4@GrD2B>n-8W}%&OaF`Fm)8*`XU?-~ireflvMfW@CXcOst)okQ&SowTpF|2dhsJ zJMYCy3uYr2#SeK-;DQL@0}w5#%n?o>U~Y3_H0@N*$3Xy>@2)z2EK&W^%5e+_TF2O6 z(%4;73YiNV-fwZ5EEzZh_V+JNx;V5X6eU@$(=u-|1(rE^mU>WKG;!xCMKx9+k zB#W>bzrhj9o>xAGkJ%IiU{HcWeCb-+a!4tM@o3_6t{k*K&Ruy839jWv7(c zt=^RODL!BnBCPs6^8p)X-Z`vEHGyG}0`s;=pK2z2Z|iAhHNYn1V@d+oJBWGtl^3Bj zSZv^fW<7^E+4i@`ey?8p@F2ZLiXN?MY*!!*ei=dsq7R#Kkbn)?^Rn ziB(i4J-`r?!p3BL6tAcMDNqb_y!YQ<`Wh3mdu9%t1oX6s6kf1i9iPQK{r`tuw_@zI z2})=Mb4_{u#}J$*u=d(_&sa-sGGOZNfZlr2uZuCFE?_M&4Ne3Zrmbramts(10prO5 z<|y|{1r6#2*(=g&Xyb0`Usazx76~V~stJiO|k;b@}oIa6soStH26UU-Liup+nhY#Iyk=ME%x8ZI5Y?K|RklG{QV1 z71nbJK8{6V1aO~E9~C_^2a-)mz?$Op0LRZU^7Wk9Gz~xibO!G)H=&yy8#n|-rYvmGal9x!x!XU^94a}_ zGYRa)o0ZT;WfaJ3wSkIr!N#JQ*}!?;aP?)y5^y*+zoZYc@Swb9Fs8jL?-iXOD~Lv5 z8pNvrT!#Vm8I$wo)4g;+kYP5I_kYYN0`;80mgt%IVciv|Gzrw7fjgqV{p6O;8Q#gp z#mG}v)a;}{sK4UH%G-s`<|*!YM&}$)ULd=)h7E771{DRee)-Kp2=|1QK<=Kf9mOCsh9M0_ZSgVcF-H1G<|vRZ!kNd&AitOg zGNYWqyi1BVEER_KRVALT{hzSnHL~PyPuPnycHoUXVqYi0-su}wk4|S-nTfv`s(3ZUE3@0+y8R;(bhJX1_jR-4~DN^`sQDh?zA8 zm>CC=gW!SQ{$l0J4`2eMUBU3s$+a|3f$6jlg9`LiI3gex*8|9ErW2zPH!oK3Kfg2# zJ`%|z|K)qPg1>P$vmpNX%y9@{gN<3hBrOYmLyn!P^F-)obK5To||pN_$Fbz zm-?s{Obs`m5;njN$^<2V8r5S{S(kKV)@y$n^J2wSvq%O1_|3CWdWSEB`36FX$o`&WJNNx;m7Bv7+$6XWfthtJ)`>O5jfI$L;75P z2%G6BrkcM_1Gf_xG+36w1($vUxy5c<<{LIX-DGSKrBk0=MoXXZoLs$oChK{nu`S(Q zHogCH#k6BzI?X!N3C`Y=peukr1`z8W?-!yw~m<<&=CuvoS+@*@^2^Rvi9OJ<%~=$4N|PdNs1Qs3HxLC+SwNwxBt> zE$77s3@pF@2T`i7ep8f_BG|!t8Kso@*nP?wvCsL4)ItW}MXnWkj~g<;`nN|O_B3`9 zg_Tk+YJ>>J57=V3ffdlM`l&HTp#5RH^a2=<2ABxI;I*$0t2bLi)K^AM)w(Zt!|WBb z2L9*of-U8OO)Q>uG<~)?hC=;ea`nfYw$Ip|cN|^*I}% zmnIkn`nfVp$2edpc`u9?*Y=#yDedNHtr&YlQm7;8Yl6eru1 zk}V_u^*F|G_6r*FWt|MoLIX7!3a z(=dt>&9FIIf@gj-#_9(~YL4FB9xE%Eg)vqRn6PkCiwA62Y-x;Le?k)v11dqTG#M{4 z#eVfg$S@GA%Ld|(m0bBGs8lCR@W})!_)5jPWfrCF6VW@zdgi=-UJjUxG{Nuhm44och zO7V zKkA!hSuUU;kB+jYj4=3PqX@r*C^)$B!NDYjSu?Q735y~5|n8o>k{ z4tRoPF$u5!6GOGO(;Y--O?Ruuh(l}d2LtLSa`eS8xbjO~t?d3^MVgpqZN{d+4#_4iUl!Ox*JBhY5}vXjE)@wU3`qmHVgt7UG<=- zkws{_eJ!S6eMpC)ro}?XUA&+E=8PIx>%gTu!L;Mqb8KSP(Y<^ZhUdJ)m{PZbrc(Ng7pD70bxi5tZfnONL?q~J6j%*Npm$QAX@w=w zTI~i=4x$f$)i>@i)v+Z3esbV$w^}Af42Y~X#rejE}RV?8947vITG34}0S}}xU>o7*Oyf-!P zv!(=}e?w&Trg{oD7fcTUoxJY=ywW_gZetZJkbV=`4Q(~5ntQ32c!tqXc>CU=g8{l% zP}0i~*2};jqL`VsCu8PQB4{on0bIRrDI37|!oWsln6w_e>N3`%9+$!pGb_k$-a@RIBGLQ~c{WO?Z^V!nqD?sNDL!#?k>~@CS z%!+OXxq?)WutKUIH~B4p0O;3 zVTei)`>E?ce*Mkxd6$A|ciDCb!MPitSN{BHF{e1me#YEq!8zlYKixJKO9$1tv-dPI z5qRNrHb+4H(g5V}(G&HiFxZf7Lv%|7D3)zx4aBa(#>b1N_nibE0quYUI{$hxQr}l9 zdgZwp`VFXW6v@K@W`>~8to}jq@%@7fFw}CPxh^M%A(B9Bpup@P7_V;8+4=4R_A9^V zbpUOWfrYQw61CUZCb%GhUA<0Ydg{$$W`VNJtWU<#T>vx5KVSVnKR_(tXF;!h-xxv( z(y1mkc4>RC^LFUwI`zRaXpB*q`Uf5q2E;GNZ^XtX5AeQq6LvP$Zv(i&eDswc*&~A4 z!o~w=-^$>tycQ-pXNOU@%65wgE)iIXp<~r={?aGICNS3m+l2ZUV^oMf21cMFn?Wl- z-vOSgeh*db23P;uiP2|f$ygiW_ZUQAKlb2^u_F|Q8L&8V$JiQGL1TGn75G`!qBH#1 zy&^biz?SyKA4OZ`h|bihyU{InCa#xy?WWq^J5OL7yvmetbmGHK&!e_32Z0~`SfbXNdt@ z*KQSMiajS+^w+-L+{9`FxbhH|&!u}VsFuv|&g6ge0|=l@L_EZbsP2IyqR^j1+9Ov!tgfUZ^# z7$ZSh!(hJ57ocI!Gpv<~xK&wouo$+c`vIE~p#DW=nxxy*=ODkhqd+zYFPMfL$yEPT z?;O~~Kz;Dj*rg_*yr9w;IV+z%tGgo4P!Hk-)f2dK&pYoo$N6v@C!bnHZ@hJ<3L7+? zRnPzn<#asINnfd z7@$6HeDqXY*PO|7NrR?VFWF{rKSP7U3kbO4QC>!0s)%W>{`7zx1OcPECfEnL`GlB- zs|RI6Wez2>3IT8CB(K4}fwQ3aW+qAsBT}QDzXS!aEQ?GRp{s)>&YGF4*mdXCF8FWK zcjG)?CL6+;7_d)%#mJu1)yLFb>@VtOy8&h|h%`sArKs;>i2=MEWM+Z_86bL8eR^P; zxz@@9MnORNlzN|~K6DR*qhDTH%;j#3KuVhp9B5I$e>2>az^dB>G2CDNZflv7tEh2} zrh5R(VEuSz(_db?H?+7j(aLKl)-teER4ba0f$-q4My{S$(w>FJYzqLn`p<&{OvM}i zHtbpc@}3f2konOB`YLA2n4r5Lb2Lxy4QkOT5YSeRQ5T3I6fhuP#WB4q=PjF=CKfh+ zE6SXXa*H}eDO=S_;ZzNR_!q8njPwA#DV=) zkp|~k0QD4Wv*_3Uq&;}_Gt=~L;+$;MCzOE;gqfWRP>)7e-@FR*IfJqKNv1Kz5^xtG zTwkUdqXNCcOghjq#Tgrz8x1vdzLsI)UcNl!lw$OqkUs*hg`f{9tP#mdp?v+Ty~sdn4}*k8YjlABEZ#@LVD zxdC*LyY=aP>teT9my8`aA4l5Imj-B_U9z^(pZd^jpmfHO;tG>~MNam|&1#VcPc5&qOV~!0>W;>Kn|Ey=`>(0Z4G^IYWiQ zHI?`}TN-9D(l1}c9(P0Cx<{tdIXA&tu1^x<+v3O#kCIY)80ZNUIh35nu!ZV<4xx`P z%O+=TbsktS$l!VC0yZImZmt+i(5TA?T2~J*@qZq98GIK6sAsi`dJclr$xXeUS>T_1 z2TbtxBalHLW@^uZF0s917}bO3@n0l1nm{INR6p2FSTM#q^lf@|U0n%-0TKHt*v@vx z1-60Kc~)S)H2!d|g-v1Bmw6i+Ibo-nZG{(~2K~2~7wc4U1r#1X0*c_VT;xem4+yyS z+c@yi6FQ@<3keHjV+EDn7TN5jCxX$*vdQtH%(s68)rHq*odP<7pS&!?o4BrH8_etv zhxC#GrYu9vQ>g!AwWoaXyFLs!Y11m0!2ap;XN-yk#tH^<9chXb2*S=MJmFP6Q1*s=w!hSqOr zqBJb=bxS23BPbHV^Z@h~xo)dic%J~+IzPzBmg?y<#_@z%T`?ME@K+&^i8&t2lYp1KjWP9p?NQ3YF*W=&7px+a0#c?Vx zoe!O51F=^h!ZxPmly7gWp*g9gr_6HfXbA_wA*w_MQyJW*algMERyLv&kWpZEB zRSH`+%Y%1Hpbo@T2NEjXz(4#EuL`I}Xi|T=@6ngBoA3azStE z!|+&hs}IfLr@??6P)L;Mc8IyscyL#CAoW2*$cum2z4~iNAf6YjIX%?Q{BXap!vkIW zZQur2U-UbmngwK5H`wSK&w_9A>;Uh7Txb@qk;wi&mC zv4M>wo%)tf1Vo$q79SKYvD#Db>xTibIt_ODRyMFjvFOmYW2B2q>~wytjd9?OMqtt< ziqYv+!wQ9k$7vLUI0t5OtLdXZKnT9P3zEwVJ12%Ih}E5_#0D9H+k-vQBg z?d#wRO;kZZ$qd-8=xY$n^9W1dD=&-58sV*td7picy8>2F_$j8#RA5Z=yT5>PCUY1Z z@a>&v&_B8zY&4TOwh%*~hJt1`X4K;+QlJZTYMj#1aXYs;feq(DYZ2XX5b2yLFqpe} z5XZRaQgt6#Uan#{i5S^o$=Y4PK71@3T$h@cT`O!C(?)AnNC{cxASzVs$kq%JD&eB_d zx#cBhV0SGTaP;31s5;l7F{p7R$>6}Sh!}m>Vv2M20Q0I+RD*{Ynkc1*^pG>yOzDqp zPT7a?)UFSN3aHmuqS_$n0U!XxJmWpX6BN&G)71|K=$TK`J$}pqPMvNRShviKRm{{D zvvHYf;iVr#Y`y**_$=ts%d>6!GfY?k=Mpvs_U>)labmjiHC}sVmWyY*`tMp)s$M=l z4}8L^I(+*DF7Wji!0561Q7~RpmsJU8eUTGU&wMREfaWm`wlxKor&1Bh<$LR(S<}EQ6^sYZJ~C+Kl$dn%0kA~>u~-EIL6FSg z2E!B%ZG#TaXKpgH1!3w@Dzs&dbFBh46xM5H9hb=FXP|wuz|akaNotdk7mrAY1RF_D z2KO(m@tI??2V`$uf4G+mq`w)<3=mIdV+O`1f(=H*CrvHH^c;EUOOyd=@jivpugO6TSpdW@45%Z ztw8>&FSuKYn~#hc!VX@}0y>H*R5l>M5sp4FRCtL5_sX>`zwy(aA{I1o+>~_bJ3a|^ zmWCgf!`12{PWL-`^sGl10nQ&_p7Vy`sXjLX<>T7|=*JOFud<^6|9bn2;4^=I5W6?5Hzwre@n191~7j4`vf%NRK=)v!Tvm@zmh zTV|$2wu%7fg#|_Kkg1GZ#|+)N%HZUI1jiu8=rrK}zHk@I8yE#~3&8AJ6BWFWL26(S zSH(6dg4U@Vc7yJBelMo$zcMy4ce%-pVXS010;gYnjF}al*>#G`VEtTu3XB6r!3K&0 zC4mGwi7@c+J};(`2NMU66CLA$H{pocm`Liz)cJ$^DY8# zqJjvW&1?(Pt-fW=XFQ?tR*^im0$vCLT0mzb!D^TWp}}dN-36Ip9s~!tnbZECzHti;OVL!GgX5vJPmgi0d6rgC`=+icQ6^KpN{(Y zQ5m$^SepQ2Fd(WkU(8is+GBOagcuvnKyyE)Z1{_JV&;N*$+vC?ODi;+ zhSi6IS?Zafo3O3(NT*!WY6o_h_bh$$3CL{Od3VcgGFSaaY}aFYVgbezAic;NygDie z&}D$0W22wxP(AZmtP5TLcGqL9iEa?How2ro4vN48>Rlc?Tb4dYhOr3>JAyN~EJpi( zzx=ymZ%$7zETR+QjmN-jG6p{bDm$KbetaRS)i8>}NwF}1r6_j0mCk`J8MCXbeEPHu zIyq|t%uGSHE)f~|LeN3wWisxCIK||QZT`=n-72q-}GG;&x7M2?L_ZAq5oAX}0ZY{|BQ6&xkovbh$ONGedGM2Qk5acs}^jD07(`{ob4?>qaT8l-3L zT5s{&;q0oeI%lUUqPwek-WGrQAgP1L2BJmq@Oi9_OLs+z#j~?c6mYJY1r?!w=PYCQ z+OO&gJYp)0?NnZP^XAg| zLTIt{+I-*+=LB3nmlVNRGfuoSVT|anky3Vs>_-8^r4qnDlYw0SDuW)-IKvq(^|k+-lJ>! z3VXv@8Xx@uOegqX9=;0$17Tc}j|}x5>Kh-7Znw#WF4~&<2VGSw_K5mx8T-`tS-w+erP|uFld^80*>jFgrS&>gwo#EILVNtBsOt z?g9Z{JRp*}d+;$dv4FGUP0iiL*#0*^9=^r=`eT!)TXOi)_rD6}&s-<~v8DhWCy#mU zgjg|ij{#AIAKg*U$F8!+*Q9tM{j^$nnYpcQczu8kjg8?qYlMhn(Yd1ZS9)1ZEj`nw3qf>uq1Y2$fL|78Cdavq>=8@6A{k zh=i71stDg+=T<{?o*dYumzAT~ z69hF74xsn{;2XTbHF&Oqz4bFN>rK@S0}#-idKzL^M&LS;W!x@;ju+VD{go77L9(~F0}n&KLHDs~}eow~8qO$x(XV8xiR1DIH&dth-4mHO@hk98Pj8yM++ z*~8pmN&!CJpFY?G>FYAlR-NE79RZyge4ecu@N6yq;$?OE!8t{b6@}VJO@CO z2wo!r#*`-!ykTNfDUng=BBbtmlTdkff!D%}OOvUKs~a?oP;B#+-7(#P z(1y>7J>^Yxo7u+8-*M(2aN*~4hF}Qd?3-LtdXIWr1X}xMuWOiW1~+@W{|)UPvBhw~ z01K$#-@oy26tkSm`}q03o_WX#`vNiIYv<~~LK~Z}eic#&c$LBb>wV|CIa6*2%7RnD zeP)=l00UW($aqAk@2k@n@ov2A4Ej`7WFCPch!H`<)YWIXx=$X^IVf9tv`asE@vWDg zVB&Pcj)H~f^8eXPW%d7T^)**k(f@=K?3VO-$yllEGcm=Y%;r%6mP!Jz;|D*88MvK^ z(e6GNFjLy>)CpOlzW3rGMsS;X22 zVet3xb8T=GD|5;-@bDfBGMMO3DXl&ZodwJV9~1j1#NHa%5|_h1Gh|+59|0N|9P7yx z898vTdOGId`G{_@j^4fjX*HZ|EvS?w<21!cQ;P>3hIS`R&AjT=sJo`vknt)EIE`lK ztnx%i0gI?D$xE*(Kb*`0BSgmLo zWrqaxiOQj}rdDI>y&(cPp=8iH{m4vMVP~rc*}U~d1Ui>n#yz$`z;=hO7j~OQu?g4C z#Gpn!qE@WTnp#feW4_v+LnAy)DF|SbEGq^(>*``IV;q2!p*F3_*x-DjJp)(&^1$6N zoXI$Na?|9dqwJcUJTU_;^xfb1adkO4Vm?yUG{WUY-MACnD;sRyXOWo+#O1#G%5vy{ z(*$(K`nGWIu3LNE26(+;6+_n=MBNI?>wo`rXU*Oih6mqECIHKkO8v6$Ros zdg%h7Ktw0=|D9(TXaUoeA*ZXk=%HLTy!LBf17{cNZd1>MgmxHgra%p7ThwL|Y;BCD zph(2jr3Wg{{{lKQkO>S7g9hUnhg5A5yTLzvOjP<8hy-<2fThNXp|dNy3K|c|j_$%% z3|u||MmHo zG2o)#`uU|-8Rh;J`tLC4L6`MFh6#uik@3YJL}41S9<<|3P>c3HxD(>|D%j8&Fn#Tu zhk9y-Mv#D>f9+|XLFNui9bkvf%%tbtV_dU1C3eZVOt4;%V5voY`bh@WA~->P_24l! z!;Z}}J@`T(hTa3%J*Grun!kUS=-_nTX&G5W=+L+5`A+PL8Jq`gk&$CifGGZ3-q&8< zgHG=+cYFuaPIM8} zd+{fR8OlcPz~cY&n@8>yoAEzgro9I{x^+zb3g?c_IN2>2!Zz6y&F#ng^EPG~G=K$a z$y$ho`0!P*5s)Vc=+{n$x&vbH^~C2#S`+Fp{P2k;a3HiSk7;S({X5e|A6OE3@tkUA z>OG_RodhearJy>mChm|0(q6WH{$wai0hpmvNh|=@Rf`4U;%zzLeuw^`mNUStQ%|n^ zCYhNHN$-n-4g% z45$Dt?R@fc2<->Q>>v!h2fzdek9J@_*0q9-gNF2am>8@I1D!{q4ubyu&gTpxr!wn# zroIuf&9EL;;^+vyP!Gn4N#v0Wb|R2*6l8OaJZ0-v5u+~9+ubp8Qtt~x*#iwMvHRYF z5{yZLB02;JW;iaKlY#I|D`b-!*gN0m{Mjq?1lbn;`L5?_0hmXCLzqZ#F0%{7l6S%9 zVEPJ8mCRKG8BDCVbh5|KaX#(FMkq1d{IFs9yRTeZCyZ^ZB|tBUXUXQO!>--Qwgjw; z0OypLR|75Tt7y9O$Y$3xk$lk_`yjAX4t5-*=Kkb!9Xdl~tHGn7ef+B_R_0m5$d~Zt z3|Qi_&)ZMZh2~7K6@3(y-Kj7DAAe<46yZ!Tpk|)+XyBCkhT4)FXSy28Q?0Ymff*4@ z`XNz;*Bl-gI@@H1F;Z(&M{yL}JOq=^d1X{@Yu0I0$Yi&gL)@F*s!f zqjMcRIyQDvO=Ik2?!#a}6Fp(Cvo(z9^pYt~JEEND0uFBOWMuHY4DEhc>~50H77<&< z&NKhHo>Iv4@0Zta+yqQx57)UmxB-SoeHRr<;3Mc3wD~=hNyGuU47$6vJrfU?F^{uF-+baOjhlnZcZF< zF*ZX<(W&DSH_@0d=FE#=rPf&_>_4sf_I))K_x?)cI z7PCnih~V;Ccv^bK+66WU5;%%D0%4DQIYvx}WKbz+L){carDu{K*pu6kOJ(F3_o!_LFeQ1%uM zy%EiY@%Vlq=D?nw64WJ~0z3{+8(nQZ^rSUc`lk*Au)PUZ3=IlB$ypg-H*p7XsjGWz z&M`;1jD1kC`efa}bm|O~d2R-5yr>pD{lY(h19Wy2GoYA75(Q!nCwpD~M+kqAAURj$ zaR^2NXl`zg>Zley1tJf`Men=4{}e=1H+%Fk5HC~|rrf_h_9~PsFN>iixYHa_z{&;8 zA_5??8o<_>%j{NzAOYQV8pPZho}i}7DwvrCa2byFE`U*?YyhudVFLrYwU)LO({ZP_ z%(_lOF8w+?AcsZG(+l(_8RRmmxeWUM9Xdl~C(BVt_1|*!JIv|}tmf`G;|P1A>6`Uo zj6B@Zd=K8ybitT+)Lnmj{HqKx6RpIjXxl;)Nt8WWRU z$3UQHo$Arx@%m8Asvgi==!F;udF$BU)KOv2$n%vQTkSOmgFlles}$^? zzjYtmsM}r(cx?+CJMhOJJ@E1UknbP7t1aeFej23@!^CHD7zi?XB+aOIKTg3`9s(8| z;#A=>&a|)MuJ*o!0WcCF($W^hgEr*m%NU$>qeCG!)@YNc`IKA~Gq*}?;9HJjLOosp(aJIl4Y94p)*2X2Vn%O9U626GX<{DUVY5MT(D&7d(2hCwFg zt3K8qi*39;*S;?GKV}&HIbFcn+to~;&;#+HSrBJsppYfQ^aYr`buM8;bO=x+A_?M5 z-z4u7=0Q5oWLt8jjtk3}eF|WXaM6HzFCCK3X;N>QugM1c6mr@FuRRN6xOzh6Xs0Q~ zGTy|NDT4`q*4S>2i^Y%nX#_7#(g8|xc(3proDoA}yO^-3`R==K8$tXlD zRC{+ZY=ACu8T|2q@67NR%7!T=nLcJ6~1zxWF4=p?=W z&(A)a0%4^`X6WBg5D>=Xu_qS>OeyC58C?TVvmL-VePFc;EL?QDZep8j7Zf+?%&V7i z*Pwlyv6G`?46}mC0@Q+-eXJp$Y%rj<&fZcm3>e%4zxtwV3`^j=TxxVus&DeWes`v9 z1RoFT&xkWdeHNdn{8qkzMR4$owz8S-Hef1+TKpfc+zwHe2R6~4yg3f}*{^iJqbm*g zK;t~rQ>4XOTnRZ#*B%DP^JxLs9?&iuWoz;P@qDZuL3`*sKY=y?;$Z-u)fvQ_hriwb zO`Q^Xd?~=Ww~Gp{+a9zNVk?FyQBNcLKX=^qbFm5Ug5cFlaL{LERAtx?D?FAJbPS~T zn6xlK1nZ$$PFb>Ca5eNFGyAyj^r0+G3#$OIg0F zqBA}E!aw7I%Y2ylm(Q`{4x^o^Q*!qFy-XUqJJfb~^JIwyLmt{ch-oZv@N&{l)3*TU zzmE;>6+__LQD6sOyO!O-_1(vEH~j&uyH7?>i^|l}R*TEQ-x1kL8Nc)QfxU4*?E5vw@E29sA$&u(- zh;SK!dxA1Sd?643;?d0U3E)8oH#-CS7azeG@Jwan={VD^n@Sji&{5nO46)t-mI9j3 z4`JB?bbDVZBdrbT_Oy1BUBJ~dbs@cU3~Ze@wT9&C8$U4i^%8Aq2l6QBwI@IQ0|e{M zKv=uGp~qT9wQ(x?_(4op_9squJq@gZ-m7doQVap`cBG3l<_>*MW(P(cILV-vf_UbQ z&3=}>y08w{)E9g6RltWVR>A*z>RTrnsrI*ifzP97dq6$7Q{6evTrKA^0D7p(dnSBT zh6C)U-5_=+rYA7AE>d_cZyqxB9R$?$i8yeFuvU6*0%WZj-Dt9V#s1<@hdy1Y*h{c{ z<7p^mAZFT^4}kRzM1qfi9Hw2=E%+`k28^~~*0n#E>)|dyp?Yp2Q%5k-$ZD%G#>}xc zN4nHmY`qY}Ta_~4Vf7`%9=UWF&91To0|vx^x|;1RO02>g=sTU2g-+SJ3e5B}qelsx z4)=1`4#lVol%db)BRdGU=O&jBDMs(hkMpH({L z-MLPib+DAwt+hY^m5y7hzSFQuPA$<{>(A% zeM2ZFV7 z8Cyj0+Uqwg3<+RnCIjj-rI1bPA>d~iC4i~)_Cqt^ogH92-ZodI?ln(bcowRGE5CsH z**##*o>w1DVMv*~P8oD?r0&8{S(zRO&w^y84+ZQ^vBCuL?>~JOn)ScF_58DuP_}sX zzdrZk!qzqvSCD`WXa&UcSZ1P`8PnSTP(6mZXOMll7#Wy#?89e{Fyx_AK=f=}$;BTP zbm#!{#RV6hraytU4V_!inTxA!?d@X;vTYZlSX9nNPzrH$W>`IIA|V+A`cXY?*H=8#FH-r7MIT$$+kU9yPNFEVss6y<-Nog)V;cIWTV!aPS9hsOo{Y zki2a>3>RjWsSYfohGi6+BU`I#V)!f`^%y}|^r~cA1G67E?I99;LbQzZkx2_f6Ju-{ z6Kzd|Wx&_~C5-L3Q7rM%kilO06c(MusqxNq2oDIH|D8Us40&=Adr-yP$XhRYjn2Br zCgJP@4CdJjw{0dcr+ATX1I2;V^JF0z4BZa63pWcQ=o59qpPggB?r!Mb8HZ#Vu?xGfCK0%{q#!c3=gw%-2!U+((-<#SN$_A^{qR-qsRP0-H2 zBtsrJE@vgdRO^t%Jg7>|*n-gO<+XDJG`s@VketV0>+T0FsVzlU9|nFplDvFzPU$0o z>^=-7kZhz^=DkW}Ko`@2^jH^lrZoxRDXgFVU^|H!%CrO)EzG9gu=Re{ zN+M`Zmx&GfEm+0)kH5NWqCK=owoJQom61GYE$CGK;*e}u?kLF*V1Oivl%Yc$En~2|DSM2ToU<;VHR3U|2-e8AwyHpNu|#sI^-(a3&5ng za|292+u~phL{+)t8pJdxi($0VHG-Z}$h=`Umj$mI_c7&o@dN0^!}#nj*VGxdEFfao z8dFY30PM%{ZlmSl@w|uFG=UvF3}WXb2Df0{AzLggS59rhcO;H=%uFzFLVYd>!+g$m zPCcOwid!i&VB?MNg9A>WQ=6gh|BMw&H!^Q{Oy)X3XSss7bYNkb*TQ%ZC#hpdL4WaO zd^z*5+o8n7*8x`RnA?SW-SoO6OT`NA$=n3Sb$}T8zkToPyrj2H^nWwTxa22*0l-W6H956P55&jV+Z6!dddz9vSU>jc&rP8NcL zj14{jjTy#;(|7x4&kRRG0;}U|Jb31Z_k=@?fYjd{Qla#4#IRXF1}dO=ga&19c(NBA zeEB*}wlnRcc|5_E7vxxj+r@LWoF;JLwj3tDfkd7a;Ps3dEugR2-E`g$s4j8@hWcgM z!Ql4h*fWl=Lh2kH=OO`4Jf)IHGQb=<25JyX5CpT9B^}muR(%01hLbUH0-8&1;DD~Y zoM4Q3);+y9cc6ukUJ@|!CwcgA$3rFyQ~~`(u{03IBSXZCvbsiyZFG| zyAS8D=@fGsIFZ0sL*Ka_gh%$~IoUl0M~)b3C#{oxzU3YbH6c*7lQ~a81>1EsmqWMA zu+Eb~jNnM5PW@R7(qmX{IwA9N9WVfNzFvN0o>}t#uf+<^T(B>YainD=oq;sKSn)&y zVrgV+us0g3SiyBQW{M%2M-s3ZCQh-tC75~~0{ocVKm?~sSDHLn_yBu5*T{CM*Y4x0 z_l5~zL;!k2kmE!br*Q8TriwK&r=^M(9^<3mnZTLPK(z?^M$g$%EZ_-=q8?%M5sX1} zZE<2vCKeCJCT5bK6U%H71dPA^OYlBWYmqznQ4n*&Kq$R;;VX^wXlz+aSg*tTFIA>< zSKZR4Vzw&!718At>q* zA!|d>bQWyVeL(1IUk4vABI87K2_!+abhd&EbP4O*TwQMCp2IxK7Kqg%EPR3kMX~S-(kLcJAojnJiv@v#VC2xs zqr{4Bp9Ksw&1Zri4RA@zseqEd-RUM9gm>#Kl+oPbP0+8s0%pGu&@VZ%%fK=ur^cqj zkO8{btz3gZ*Y+91zzL?vs1Cvb#5gh~-?`(o${MJFAYh7)5&Y%O7rOIWS@KM6HVzzm^o zwJ*)lgPf@=C;S=q>Ek(S_f)m@w=U??I;DXM&`AjRe>*_ zE{U6l6wq!Um8lwU3=L%$+I(NVF`k4LsZ*Vq6bWi$ig0CTg4qxS0}$ox*g!&Y6EnSs zWdf9na1ApnNM=co;*62Z!}S4Ac+!iIFQayMu8pfGe8=gW>zP z7hix#c;_~Ksy-c47=fT`4<=RPn~7`CZ_3YRt~Hve&<7d;amukEpnO+-3{M8l>mqeE z>GdzOF{(#Q9LdA>S-oHjbdMH!!63u5e^ds%k~FfQa*l(w`iT{MBNU8NOA?aoEU*0ME3O}7MGK1x<_g@=~n{>gDlj-3(j)4H@ zab`DAHdY6Ix=DSfNK6L5DOC2Nx_Sp2mJgjYVC;KS-!iP3hQ?f^tM&|wD6NOboFEVp ztscu}>Rvnlc)R+OVi~L+PQJFzqV32S=!-3TA3U1QE&;F&oQZC6lacV|M#!A`)piJW zmku$5kAsdE7(-Fmw1F@Y%n2U5Za~Ht?$+&3S0VTI=^N(>J+hbvwGRDUUo>c~>fPT$ z2s$<)hvMJ78zK%gZ38=E;WGPm$AG%Q%c3CA1lf4`A@HU-W-ySI^x-{gIw@!e1<011 zWp*0Qwz34Qu!@ro0_lS2&O5?X2g+Id6(IIDpd@9r7h)FV0rKOfD_;Wx)VKfZ*fEyH z0N#_j+nS)h3auva4swAVz}`R_od+jtZ%%M}F7iEz;Y*WL^FVgvCBtScy3xPCWRMGq$ygXzm1 zO<7>K;PMY(IMbKKh7S0sKQO)h?X%F^2E+#L&P|{^dOGs(*MBfxr<=V&%o8gpFaoR& zBybjyD&qXzYyj$8(~V!KPt{=PWmy4dZUe57YrbPApj5HUnM593-0^Z&*(d)9Ch+8i zA|l^6|NUR7!!Z?r-WrjE%o;B1Ncm72!@&GdRO<-M0FMgzjL>W9Pv>H&P7=x777VfS zSB{V3y7W3jXxq_X3A`W_tb5Uufwox|wDjP-sA) zh-e6=L(H~U6vQwm!H&S=T9}ExJDzJy-S&+s=jpXcbB_a4*6iz@q#h#1RQ%sh+zFnR z3)XG&p6xV+`$aR}XT#_hL0niF`}ZE`*p`@d7G}r@oCkRGH()Hop%HMymSIAq*w5wGv{>70eUF|j2K&XPZ_FPLq~DXUX3w^!s%Xp0c@Y$3K#{&TYJC< z^b6S&1?s{5H=Zuabj&M-rI%}8JOLKHMdtxl_4Gw3>oNwH%SwnbhGNf+V;DuPU-&M> zAZQEp=Bv}3lv#VJJlz{3!1Ht%xOxz)7{Hk=0={JXZ_oUMUL0a2)I{CXADx*)%xr*# z1@tqT#d@!d0oJC09YYg^6JtCR|K&&D9ppR$j0YQHkXNqmz-2C-^$<~oin|LL*Ypwhvmpq3*Y-~tv8+l#L38mK&yJz#|x9Z?UvfFhvj7Boik zRlq5_VW5}oVZN3N7mv73VJy<4qB`%X!sL!O;4z!iZ5Zs3s0rh}(!^BMXS-f_RHOR>r zP@h@Ch_MAsU;nM`P17E-n*G!9~!4fk-A)Hj@i* zah`5tU1v2r7WV9W_K6joMjoi}&)@kmL`TL)=O6^F5bTukGOSY{Sni2*aGAPHhyw9qz%-QFE;SgSHBBB+4;sZ zZ$4?xi-8{A(bqOl-vX?1)*j=?qULqd0T$|<($YupeiW)?QP6JWLNPwCbmhN;)T>c>h4(iq1m-eNt^3}}iKb7y0A)gr@@ z+ezm$lljpR{FCj%cNkh=PlU_#>kp}KQRTM5Pz&m6mM!2}L7WkAq&11>e)9zxwuF^K z;lA?swS@mn70Vnk&=41#SR17wf&8bdw#=DQsHh4e{1Oe(3 zexfoXT+?Rg`&khE?+;@0S)8b2Uj#ULU?5o}c;berS6(zsPi8^~=pjo9dTJrnhq0NDgS21;kjjN|Q2 zvGM|;{#VflWe*gX%8q^{$gy<`cZ2)Tb;@?Rxb<&fcs7EQ^1b=?4Hl-r|L+?(yaxCm zZsBAjxGs;AT-4uw{vB`!du9*1VEo}jVDxh&3l}ia2`Sz;&ecV2RYP?KjZRDlLI7N> z6Ug4Rc)W5JUGEVvfLX1N1uf^&?M*Z46EoKy=3as(o?5UD(PU}>KMvaa@W)~n-u<_8 zKRG;xJ|$x>wiDMdM$eW#@~4+y5pxto>c{uW0Q{{dL_PG~Ko}xo{(RdXhM}lWi}PX( zFu~Nb5B4Lw9oCMslA=M*@nBXaHe<-{SkICNCiC`GvuI{^7|{7zFNRZmHE{jhMzWqc zM$CPk&pJoAb_03zi6xguGJ^_Od3)(#f<+&CFR8*o7co-}Sj@8O1TTl6;1ldLE1f1rR>1bS8hGVth_w!|AP}Qm#+5oxtbpfcE>%E;fGT)GhJAT$ zY0?$4&?%m;;Dwy4;<&UuD{4xUs2m6dhyks+vlqdFOf^7x7&5aSsJY61Zr^UTpy&>&Y_dp0rE#2n`U z@Yxgj(Ssj7{?UV-7{oI5fkwCLjXnm*wZp$`a2HA)*SG*W3QCHiM+}UHSWX)Qy^)DB|xq=M9w5v)p$`&jTtO$L62!y#oSJzcvKfn5z5UO1D1sI%jEsvjmu3 z1|mvDZEc5ac9a2I^^)f_xP>RT_jU{C!HP`_V7&ncADcKH#UjyrdPCil?RwYP1j_ox){(Gw!CC|*oopytA@l`M&7F5GP=7U<;qPpvS;~AbM z_TI%39vO(LWP$_g_pI1PO4UbC^TfKs+664VU@_X~P#F+_(E?cO0?R^X0Bcuo--8;w zx}m-WXza7Z_Ql4;4qBGy!D$OTAWU8vt!WGa+Z_+%=nx4G{P~GHwYI)ASmQhT)(^!l zJd-m7nn4WMiA;J+aF&a05&f-i>GT@F*rK;P*xVwm(Am=Lc`6$dMS#aefLWNIe9%Y!jYbD%B|P{+2O&Ls)-`I%z$5I~D|6a%BJXBjoR$GlWN<<`o$17i+t^i#Kt zz~e!KAa>7sVv^8++>;>|zEyHwz3MN;xR;BpBP3 zt`z5>%t4G=)l+PtgxcMR5wO61GsG6d0Vp6Btk$uFJMv)a8KkPuV&LMz-GQ50teC)C z@gQs&}fsT!H0ow1aPz{WWRs}Hv;sV{u zrkX>})(prN;iV$3pF0C(&cf(0BwUfro-RCsz=Mt%`r-*0?GCHwGjR4EVlgpowhDr| z1VArS2EsG4rYmRYDqyHAL>HQjC#TAWp?OC+mYPC2b-+OcFS`cj*+>ftnt7=d>~PD{L5$?Vhx^pcH&*g-V1gM=mSpNfISjgTL>Om zZ^TF9wSOkEKD*D@Ipe+if^u4WM{I}Qm0dkGDck!YJQ(6SoqTm?Z#;^jO?}|+CZ}++ z!G5~^+_WVHTL80&0TCO_-TV?TRx7|L0G=TFkZnK^1K|qdG5_rskAmwK&Li*u0&e!F zi+~}}CMdjc0X%IL3{NGf2xH#^c&XCOL=3hpR!mkAv!XkOr)Pc}J9VBa+p3;e|Cy@vXUv~<`?(E}IHV1JSt3z(wu$EJD)PX&yJSB_X(7WkO zI8m0la)j0E$?GIDrprB|;#j?2fljER5NrTq)F-w@?||TKAM@wa+ri=)o?ei{biO|$ z8pIU=7SLG`D{`PO@jA1t7zD6Z0mj9^4zy(T6G-NzVCZk&=j_I%at;NcIeF4+J=A~s z?K7@=Y8deXYsymZQA6_v0UtgZ7!A>rw>Ud17W`;QrD#_xr%POZaP&pHv#9)2!RmKkJ0fme@oT+AB0SvE~!vOdM$eIk6o6Um)Olv>p(;!eRNU$`>Nb<-AtgLEQ%8+4V;r{ihhr!o!Tfn)M zwvQhN19UPu`qVZyHj3#MZeP5GarLg{y%0-9XNt@85GQ3B1k*=@Hl>_7lvWP?FuACG zVRT`FES=CEVX`wH1+(^eWi)y4rgSO;7Zz=?nP^;5Y=WeCoSU_aGrD&1osePPAny>F_g@W7VOHPV-7 zBesVjMqG1JmtA#Q>@sD5wMmh}-+E*=YT>_GnQWz#Y@)I$u;utNbF}U%s!9FSoUNq} zLlWRxrfvmg0N!nAU;eNRI+vLR(g#;po$P&1oe6KiOSB6QLDCN`9$XfX%NH`|2S64O zUphL);|Ro?`;evy?&;Orv`Z61u)=~yLmET+VZqHS?|8WdjIPy_s9nD zGpu9vtq@2asWb=dKVLfMdFk8L<4{c=&J(dZVa-|Wn@Qzh&b!%M7F`H%{Qy(qq^R2e zH%0d3REPid=Z`Q20iJBm@3eof3=i{}Q&(TeaWE{G9=vpiF&M2f)HHg|BfOw|k10F+ zU%!0jaoMKpbZG92myDggQVQ36lI^*@%g75BM9>oe!%#;Cc+$TD^#{F7eRA6-{k%kH z0(68MYnfKV6&)Q{?+j+kVWzh=gB=3_ z8iq%UV_TVdkTxP`xuW(8KdhY{l1Z}aW zLZgnR)Li;~LC@Bj(|TqJjKIaOF^Q5`8G)}c>gLt-Z3y7AAA$9Q{&e@FVgX-or6=cf zyr6RS$5z06cslJh$9?Dkugn1RW+;1{;xKq;wXxc;kv#*YNf%zlK=uqClS)^Z5r^wK=#*Z1XQn-e4uJAD4`dL5IAg~E+GsjytafbR> z(277ApWU|$Q3|rofAkn*1FSAHn|Ff1PKZUg-7PX6fv_@zY%yRy%#GFzu+UzIG_DZn zSN~xQR=4BP7_*TBzGrF`!+7m*t%H39#w*n6Wt2Yj z-s7TeF_%>Pk=u)duh+`fYBMCA&G`$)*bD`nDsbU$k@kIZm-kD=1|D)={Stsj)}Ma* zGxe)U86K@+<_kZz2ZMFY3>S2zKu%r#wg=bR0P;u=I1LdBDx}M=zT7z<)CpzMxg5L; z)N_mzJ%1aIG7idLj9^!gX3_##wt4Wmv_wM6E}GVAm|4Gock3COKZ_w*#wS^@yt4vy z1}t9tDt*RQbM?jje9pmbUKd*`2EC&^=|LyjzE0E@-6znG!3blhWF>|4>SFyP<|4l)7{h~Ru3 zWK19GBCiaYz+lL%e#{}`-@fq#Mj=jF6^Tq&oq@Gb0Zt)Y7d_NI^+a6R1Rlw()GY{_ z`Y9O5%}KDsi0fFuP`d}(wHFU>g>DAzY z!w?Lzg%tw$iJ&tQtz*1`8923*7MhDu%ZJYn%|PCGOg8mHIEyNrWzh&?8UP&Pwsh8$ zu3VcL4&@6zcm)jTVT?GX>*v6j9`y|JdayV6jjyh$kHJ9|m@2`j^>9;ZQH$ zsk3CwTJhRLFgTCL$R5e2xr1BCMdLM4CW1SdLO!!PqoGgh=DL{BjuE2`w1JN3m~;eU zz+QA_ViA9Qg~E;Fz3RK{O!vyM>VRm-6GIGjvoE^}kX{2;3MyeT^?-mHX5!qK4945i zZ#A?JcEmJmTZSI^#u% zeQjh2EF&p5eA*2p=A9V5E-ZXO-mBbw>_wR6i}C{%j9x`T`j1Mp4L`2PbJA_Nd^*&VYcM@(bet z5OWvs?l{8^Pzss?vFX%o^bIo>Ngx4J4WJ8vOcCIGWx;?x312GUHB3FI!J}nQEOn!9 zPV?%%$Ipw-tP2I>3v}Kw8sig_b?)m)?$McSDnp}S4X@qCgg$>a*t-uFbEQQf!R7=# z1Xx8B7cNdSu^gs0YKAv3C+q4z_p))r7*|GBf7<8 zaJB-=E?7&r{S@vP_cG!uAZxzPHct!y&-i?BE(ZwC+1(l5P8x^m8x;Y5QtYe4W_$%8 zU@MvX*u5IMgR!%V&X|ZQj1miznE>kX{yBa+Z(snt)l(Zp7tVDL@YVS|u%Joz9~&dJ zs6N6=i^uurtXwkC@5P3|IUa@y178qd285b*9!tX3CiET7fRf<+r~`vFsFLsce3g4`S6E7 z=0WJVz$|85(zd;jyx7h@dx>Wf&<`KH`sb$}--j{@3eT__VN&&B*=i6zVz*6mggVq-U^7#ymSw3{ra@#al-|T4UwxpSiNea{DW_w=fHu&H zsRr=5#al08>Tl39^e`~brRKST9s9Q@UKAU6zjnG|h=g|37(rRSsX}2GiayTi0;U-- z)_*^!xvp=H7lIOtEeZnAOM#YD?&WasX!wtxk*x;jK>(KSG20@Owu_hS7CL!A`^TN$ zH zv2NL-jqs{7Cc5xj69v{3*`jA`4>@ZBU|{*b6&4^bKnB_?xktyl-((^J9_qbF|m|&npzW%`0vQRw$o^4Y<0yk{;HjH0< zXS7dVpgnCnz9VBcXFzWahpN-W+w5r`@8g^dbY1*T7zTxlHrAZLBBCC`%`iggX9z5= z_8mC{l{DG=$bJ_Lw;-I+82#k=J{AB&#_;OdK?By++iuK?(IKr6_P@KGgKdG+vVqid5+EBr)TM3D}jAJ#IJ!>s!T zv@j2_#Dg+B{0dzV(Yn6rK!A~o1ewPpvn*%14?EwQ#q+`=CVJ?kqr=E7WcC!873AeG zz2WZwC8?Yfril$5;8gX&x1r|y9{M0G#*DMhtc$-p#_$Vn{=eBNrbNqLy8C>*Y+i#H zqhke?B9b6HdCeVM5rbY1eao40d*+z#7+dOFwoGC5WD!Wf)x4ArQBL;>`pXQJ0dxeZ zA4ywqUFCWiWi$I2z?E}i2a?+_e;@2H(s_k0P#dYOY!W370w1EAGOKs^jExh9HoM77ivb(7rlXzUGfX@KTzObGs~_+k zX5fL2oU1=)UIWZVMuy=w>jGdeL-Iu=+#Rr0iH`!v=Mpm!f50zO) zkIng%dF*HNzhh_=tZDYUyTLqcuK_eooQ$)@|aAI)`4Ksl=W>)|PMR2nq zZg+D#c9rcr6;#=BhC4EMZ$YVy4}P77iN48*=yTt)H-?Med`TtPJ%H9p;T7 zd9b7r8Z(f@0s&${nWwqo%3aKl&~UyY*wYu^DDzdnKY`(YitIFxoZGOhZS0bFBqLcnyWmxnK(A2qX{d(DykS@2z4UmGXns7 z4U~#OxcV+tcEmhJpZz*IKEY&Py%|rt)gygHpW>`0t&#FlHxarNr@Sz1E}I44+6S9i zmCeGr3@*^04B!>}t)GJF(h{qU6{kM$+nhlE=(E$Cz_s6BejZ|brnX%S2B!-FUO!k0 z26ozOMls+-tzta5`F!mKjGff)J@E4P+QY*Q>-OyB3lj2@vkDsGBNzQpqy=UD6jmy4q9~i)H!<}56oy5@WAkx~-8USpex#~F>P{Ve(>tWav zTQBwPM_Wn{@4$Nl!1ek$QATuM@jdOpnqjE9Py;TVN1K=itZ`tNVdGA>z}(6fW@C2S zry%>#@7^oyX7Bt`2Rxc}CGcQv>aL}ea2S?WH}?`=92+LVv?mr1d5*nJ zfU_)uhjz0$abVXbQn)_p;0|9SV3KTC(JxF)f%*|eQ8{&8B#Zm2U%tBa`Q5OzG6$J{ zVIf)iZ-N*^ff7N7VeANFk_TAkts$XfTtM_zLnW92URcZi{KR)5T0F}2LcB3znjE~< zKL-8AQ-yRuC@2R6l(IIf(!#+R>?==J=|tjsfLitcc~`f{@?g$79#lPJ-sXJ};GdW? zE1K{)PMnchaZ2fCS7Z{{BEe4ESCfk&5G~?N#~D!!K3~kE?=gn}N3_VzOemdcVgT>p zxKxI^G;EQsY12a=JtRghMZi7xFZ_Z&TR!9O)e30>olNZSRkv8sIUgrqmPi?=p8#?$ zvVbpw1jiw^cweG>DLa8rUMF~6fAHi+vo;U7!XmJ-p8$D=WsKR&*w{T`W%Hql$N%^r zTj&x7mR@5%a1#G5tc;F>u_+%~3&{4t?cmArys9k~slOLG`JUvYGMB+JKt5bvg8GeN z^)W$jHedAvGZt1>)8cxCe(o>RakV&>F??=`T5}#A!CB z$aXID^21=~f194zcl9UG1hq~bqQn}eHd=Z)6K23nPa{6SO9iwF8VALJm`ngSao-&o z(p!Z~q7SHNM=aiW@!+S~cdVoNEE<4UczZKDg3%Ob$^`&jLwlm|$X1XqC{eq>1$uTW zodRsd%#K3X4~0QfYK?5H59OpinL)rlNUJGOH?uegUAt8a%k>xm^B{b?wh1C@1gsSF z`j4z7IY*%Y`Zfoe50_pQRRG?eo^FrNEDQ!1)m|B?07L!o8!XeJfb+LUMkPYy8^ex} z>Rl*EfJ^qUhz`yc#ikzY>91}=qosR#$qtOt_;Jw<&Wr*!dcbNpw-ak%mOZdjx*9+H z&NAH!crp0bUzr3C6H673y|H&pM!8+XpFRuqomavB_T1Cpu|DN7+L_I6y{|v98NeC^ z;#ESi8USaIwT1aV4&p=so}P)s7IyF+Z&k?$Soe8je4+C2RSnf0!+mxOuv=UIbGri#4pT_C&d;(?_pq?4XO0w>W zp?Cn&#_AO0h?s$3y6Bg&gkm`b(#jTC;)t#GKY#U0?$-ua+_t>TW?-2!`staY#V7H^!bmS??Lw z&YTUE9n>$mK;;oPm^4k?Ko_VFU_b&BSH35T!EIc%t}kfu#s;0G7&E#|3e)1j|M4-f z4buY31v#oGXWF0vp1WXL7mIK<5(689Tk1JlFhqre&87`pc?^=d1JGA<`6Jz>vF(du zIn8|CzWQvB)75jGiE$WQ`7v0nY|Vl&UHHBqg!Zi1>4FxQDsZ>k%&j@r8RYbdU}TUWo+SHRPGg8V@hAOor~%ZRfDDnVQg zt6gB_qJW#`Tm*yv2M@>=;s5pE?Z1Oo9~vR!I%8ubv^aJuJ$;+q@jL(d`xj-uuqcrX z;?)=DSmZ#%NietJ0Pv#aQTEQj9x(N|Pe{OJI){k_EFSd{1)S*_V*H0&Hzl67umx-h zRPAv7T&g{jayz+l0rMB=?#|0}nTQBg54x+fhMj^fzd&8tN1^Hq2_Lo3L;=F+q3SHqxBB%5p6Ad|zvfP;7Q zht_*^?}&~%e;YQir2#p-7$t*NWX$BWajlV4-eL(6(OdxO;Q(d^aS_a(+3h0cB~ZXT z^LIWWBjF`qkDlv&tb0?3;4EZ)q9YPX_Ab=_jFLR<4V}-=!?T>+QBI9 zwU-T>nh8b;Vrds)72&U|%Cp+-;LDEKK&P$-1zFUObR;CGU&T<38FsFBa?mZoe3D&E zaLT*a(9H)Aav!dCxv5I92V=Ggnv%VlAdgQ@41MT{vK$AV=@yI~9=l_Z2(n(j{jeFjz8Qmd`t*OEqbqB+z}Q@}GQk>|pg=x| znZy3#boD{--asaPMN0qNBFqw}+EVJ9Nqz;4rzXfH?uQ|@*FgT-7 zG4K?Eofya|b}As5PL2b4fYQ8Ezz=@qkI`Umx7z)Q(Je^Bn6u^*12<&jfBg3DjljH? zql4NFVg=_qHds1GKKqA#h)X}M+WEJi-PPm3EMr3ps06zO2Y<N=2BEXkbW;L_ z_*l@3ur*FS!(G=(Tr(_9AWnwSXMzr;(f8$=Sa86M!`sh`wy!>tJZtJoVjTkNQ+Byf z!uR+>^RSqO2k$I=@mr`FyF(GlJ6;D5(OB|fr3s1+jjIO|K%=7ih4^JTsUL`FG$r`j ziw0Y*Oq2oHO?aytr_XB~CF?smpq#4%m;r}AI9HHPFLmomVcQhYXF&_IG^{NxGcDM~ z!g|1Na%UwBOp?pbzyB&kI3vvV#|i_!_=!m2j3zVnf5Pz?ecnft9hh$UwMNmk>838yo0@ zz4x92-`bu8XL#nF@+$K_cG2*RUX;j?;tv39K{6yIU>Nd4_Lzj8h94wsUzEDX&I-<%3^9I@`3`agY?D9Lo80k z8}?~2g)R0lZgU@|sRL8FB`k6m0tj>#Sqov_vqiacsqLV){Hpx~w`gcSOf`Vr>qK4F z$9KrEp5a;IX#_lOO!E=-bGO;rOCvEh*%(%t0wtAA+`ZE!@U^ceLZc6uyRDU(8xVkH z=QMXIW{8?RvaUT4!jl5bBb_->Q1wxvz43D}R)sqgf|nt8&e^TJADr&_+;jN@1t3ujpl@fiMnli)pz?>r8nK0ya*KRAnE zh<#bJ=jS=AMdP){!WamEi;p4m zOPFB7a1H?TWTI?(2!e~v>EyAQ*al{xajt-sHSGz?!%Cl0f3joFIe>K9K?AIGGQjzU zn?(oDRbRc1a|A+%5K1ak!GvV{h??Xm=z7C}4AK*6!{T~Sz|hvDQgPnQ8a zIKaDx{}%N1YroImEM zIOxrLKmYwnc8iny|Mcr0vJS#R^3_Kn>Y-PFn!Ie_JOEI~nX*Uh$=KkYbUUlxfM;g) z7?Zz*p#`qK*xN_PvQhUA4T01B%=?(snE;6BX)Zj6c>?5>gYm39`xg(!bm$7~r1>E5l6dZgG(y-G3Ju>QEi!sb}&Jeqld-*BwD__mafbjX?N!1ykatFX%sD9j@ znYhTA02d!-j=uRYJtnv*O6(AvnMH3ewKs&t2%CNO*S|KVt0hW~qL+;U4*|5>>x>@K zX(ijhnS9y>bSc2PI{VhE;2Zi7Q_R)6X-;2|L!UD#+1Z#COilwFB!GN!b9k(r=BR^R z-oDe=DT9S#Kz)G^BNj?J$VO*aK!AEglc;p3`hX-PTMg?pGau~YIYz+&bPFtnFa&#o z4RXt~zy6O0Um9iOYT^(*j4J?wW_q25L}d<67WjiZiNWB>uC9iz{*)hCVef%lqo7Rv zNYC7n!F?I)l`h}3;$7KR>}|ZP)P96Q+lpa^G9ZIl5zX1Yqqbtvdm(PTWaUJic@;9C z*Mjj%Ni?0g4XR=t0;3`rcA9}Ao?Ey0DyaJ915BzeYg@{RGAIJQC=8B)A_m#424xc` zSWr*^?o{5ucBei;c#5ZIvNQEqvVtxV#dWxigX%IJ%?<`I>~B7q5C#z{mh6My+cD>t z*Xe5^wsfl3L18MWw*!JpFTDi4j$s)GdCfcV!R-VGk`;Ui-GJvTGL!DxvYiHL(4F@qy%e7!fKtMKV*b{6~ubs=`b}oXaw}J%h$pF_AUZTzA?qW3f zJ3lp4C?y9UkC;{8i`xux->+I=zg3U3g`5Djo&O1VCOvCls?NLd+MWHI^oW6$^}(}@ zwF8KG#cRU`$UrYN?JeEpU~rbr$01f35@1OLIOj6tr|VJZkAwB-6G7!9EzMxJKqm&QHc*zXqf+QmvS&C`%zzJrHJmb%tEXjb zxJ6;O0+~a=t{<2V&VZOgR(vwqivZ^QYv1av_dQ+UmCB^F73Inn;Y@j;tEeEjmgOVJ zTQt;LltPTTu}JKW#^%_A5``rV6zQ5F+j5gcS{XRIi~8v@f!#$D7!fnjx|9q5f9|!?W)$&rs=y<&&XM18= zf9FwA=;v9!_3R!w|bT2n?a%Teb^Jkcp0(~N5EK15ulPT{O8-_fhV4H58 zVgUntAPdMB#IiL|&)9Vu!^4VtdJzn7euI}K0V8+u`(4IZeZ6i?h7FO1`NFTEvY$4$ zj@bQ!aUngswKEdSjD72yQO^C*SFaLjheTR2k)w%DeOCv4yE{#UL*(z4=qu#64 ztuiWBm({H;7ZMRK z89TXet>0Jnx6hoj_t(y7G=*E|W6r8IZ%tz`0}4M;4KC=YKMO@=A1{0|*GaX+D|gZR zn{i;Qx}#ssaDwiL$@hQ3B4ip@f*8tRc^xuE6=w%bIgK9RbPmA$cZAa}M!XI%S+`85 zM1z_^+(65;dO$A*#US-e4w^vShh$*g7ReknF-BFOA?Nr253kSY#$gcPlK|$-G~(s< zLCZ;C%+Yy}j>|7^LJ#QS@&%V~XU9wHs11A7&)WdKf08o+PVRg@Iw%O~HK0XUb!x;sIN_7*sJp5((M== z-M{CwH$1_>Jox7qUID*y4oscf26Z~$#z6hoi|6i!0GPJ+(CxhY3yhaO|AtH^Eb%hc z1~B8a)2JAQd+-{-7N}iRmWd>v*)YaqtlZe{HWFmgzK>B3)pAPI28j0Ean)?n+3codMmRUi z)-h7J2Cn^hL?bht#T>N+23R}5ii^sXw^}i3C}J9To<0Nz(o`JpZ=XaqHdmQ zbG@n|g*$(B+W?&vBS&vQB!SFawDz@0o-#puHJFvz35FR#KFbT>;G-fe_EL>hxznH+8yub+P3=sAMdVT9!aeEw~vKra&0G1X=;dg~z*xH-34MUQKEon34f zWCM+BuN^alg01Y;jJz+t#Y+vU>uGPv_F@5*6>6Udlq2nTxoPuXy`!5cS!_S6Eg9o{ zkR^lprqUl;8wi*OWs54@xIYTz>dQ+ie+HbU^OrVx=hj}sx$(Wk)T^(a=2hq)ZiIDG z6#EJQ|?uyl-)&Whe?IvHtEYN=Wfmajki0F=}$fiGU0sBR` z*sLPB6oA>dm|d=g_mdxU69CVeWCA-SW8q9|V4Ag*)bBD5(Z>xY^W^m)V9^U~A^pQ& zLa39;1o#^-ZhKck4mlO6_sa)r!j>0!z116kFlUWG zaRUK^Gi+VJkcctwnW|)U!PpYse$8<_lvU{GEyuW?hCIoZVFDHYpYPuFyp#6-0b>yj ztSWo;T)zXu$x?d&P21|G4!iOM8w+s#HIb?;Ro(Kw446T&pgyJpz@%pz(EbN#znn}C z<+J=}L3|kiVoiHVl&fP%zPu-HklkNkP?bf``$T>44K<__nu5yg8JzR+-7qof&D;Sa zEvVWVW=5aw%)4?gBx91f$riD&5#-p7lZJy~RNLa!yy(M83z*>Yw;)w4E#cbRtzodr zBsVOuKLF!H5Fc{sd27e1ZFSH#3_;r2pa@u~_9fT!avwn47}!|j#oPQU2E+pH3kuB) z0r(p^5~>ubvra+ zP$vg~7qYW({aw5_0n3a)$Fgb`Z{3HHJ9i718qA;F!)#;+)V?MBs~@RO;022rWCQ8o znN-5Fr2u8&#XOR!X0xcNIho=b0Z-|btz{+k2)tXZYSH= zIS&DF$3fbc->SkEbD{`yaat>D#>P$ApPkC2@Y0nUQL6l{?V{zaiyRbD#(e^8w}$n| zY%W4a#b+-kM9QeiUi)eKJd`F-aG{#ylZPOXy42~;w;sf({<9~1wC^VSzYqR_@#j%C zUe6JH7@(qO^M#&bces8e1K+^}1zcM?MLEWbqyw1R_I1kSvWRv0mN^v)yF2N5X4!Z- z*x8H=zZf53hZW4HpFDayJ3Ea!6*N|vHO<}Ndh)PM4jnyMkA`;bC9uQNtm3@ZdT0zF z5Skz|>X212Ap_b$&7gp5FONfT9i$x)E*DHy&1r0n>no(GMbXg&b(QGzj z8s3A6P8IOEcB6AJ?;1L|edj>q(buTCYrmHZTdW)r55bgW_pfqg7Gyhv<$|==7H9{! zXIB+3vGj>>QfOl@Qe>V~Sp$R5Vjt9(ZLQ{~-r7`TAOLJgU#p8frE>4qYXUF#S-zu7tP zsHx%z2tgf7s>DSdwu>N+i|37%o zR?9gsLAQ*V!K*>nU-|NRh)gbjHWCc*2&pXNBLF&MSXGV~didw{_ zZ(>Y;_&JSff3QIHpegvBdzc=AL)8hQbjw_js0|Qo0l$uv_t1*m+B&Pt4lwx#Y^j;ive!yGPCwn{=F~AUfQKH8fO8Alw}rdJ%#>aHxy)Ysy-4r_R-&K|;{4dQD z@Q{qPZ`Tg&EAmo%Q|3hd=vx#zJtH)7-_g7vgMcs9^)U3!E(K4#_)T@bqd(gjSbAt4 z#N?ZwpJ)0rB?O`L6ZguvF}clLJ)mmyirR-6rftxd=VY1>DHhd{k8F)3<<01pP-x9# zwN1J~S4vOqh)zFnmD$(7p)M(Qb|WA}gmBh3cfqO=xaKf6FSyfvZ64sHiB_uH$`f1lJ|~C&|3Gk z$20m^G>eRPc|j{U!1EWD(+}GHAYa8!Cczgz{^fhWgIojc{PRPqPep)Z`0 zlHRx{(ABFoE;^B^Ay7|6dFgE3C`t{t?Zfn&5CfAbutjumi?{YK^G&EK9da7Hd5cWq zTIm*ba(2eQM$Im4Ou{U#b3+b@U_dOO;%%#XGzJV8(B|atjXj9?%lDxL%;osjO2CIVa4sl85BBgchmB ztezlLMpPYO=AT~ut{X&hZm*M^B76@rG#1RW(xol3c_RTTog0`0mdi_D_!(GZ1YKeS z^?)2f8!+o=gT7Hvp*Fi&P@#6T6RfTpDhC@5b4B5ibTM76z3r#OuM6sN5U}vo4|C_$ zDXu;WgUyo0M#!>oL^lS^h0UST9Tutbx%Or9avZY&I1RD|gB3Ch&p)1$Rk2IB^RvOQjcZL6ksSxj^upYFxARqriEu@33wRPD9m zjuLhlK2h|~^qCxlbV)t`&6-2EfHf{Fr;sHrXwWq%yDShLtI+6YfO+Bzs&M%9JBGD} z190ut|L*n^Q2i?={7N8KxND#dL}vi>57!JZOwG(mUl zlEpm<*gsU#bZh-bd_G63*x57BFsR46L7&F~;*0mj+em?Ur_dUL= z@)*O6Rj>B(Q%=Dn=@{@LfZ7cg7B3d?Y?Jop9%#)i!R)p`g$R4rP#ZbX#znfG1hceS znL2}K>UVq?b--Lx1kPo%DJ}aYY`w+ji-MFm$auDKUR-qoXbck*w8DbVtH`i2r{L2BJN4ejB`RLV{iO*h<$2NvWL;2T-e}DcN9%T6F zky3A&+4aw0f#}eFH(ejq@|F<69MaL~+#q^1`?`-41I9BXGahLmIyR$>T)7xpwP}%= z#a7z{5`;2XmZmV>perpii9Q3qT^O^59KjM{Y5;unEf~W%EE}vtCU`wT0t9zXR|9